@parhelia/core 0.1.11151 → 0.1.11180
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/dist/agents-view/AgentsInbox.d.ts +2 -1
- package/dist/agents-view/AgentsInbox.js +2 -2
- package/dist/agents-view/AgentsInbox.js.map +1 -1
- package/dist/agents-view/AgentsView.js +30 -1
- package/dist/agents-view/AgentsView.js.map +1 -1
- package/dist/components/ui/card.d.ts +1 -1
- package/dist/components/ui/card.js +1 -1
- package/dist/components/ui/card.js.map +1 -1
- package/dist/components/ui/paste-button.d.ts +1 -1
- package/dist/components/ui/paste-button.js +79 -22
- package/dist/components/ui/paste-button.js.map +1 -1
- package/dist/config/config.js +83 -51
- package/dist/config/config.js.map +1 -1
- package/dist/config/types.d.ts +29 -4
- package/dist/editor/ContentTree.js +92 -22
- package/dist/editor/ContentTree.js.map +1 -1
- package/dist/editor/FieldActionsOverlay.d.ts +1 -0
- package/dist/editor/FieldActionsOverlay.js +17 -1
- package/dist/editor/FieldActionsOverlay.js.map +1 -1
- package/dist/editor/FieldListField.js +1 -1
- package/dist/editor/FieldListField.js.map +1 -1
- package/dist/editor/LinkEditorDialog.js +33 -24
- package/dist/editor/LinkEditorDialog.js.map +1 -1
- package/dist/editor/MainLayout.js +2 -2
- package/dist/editor/MainLayout.js.map +1 -1
- package/dist/editor/PictureEditor.js +1 -1
- package/dist/editor/PictureEditor.js.map +1 -1
- package/dist/editor/ai/AgentTerminal.js +63 -26
- package/dist/editor/ai/AgentTerminal.js.map +1 -1
- package/dist/editor/ai/Agents.js +7 -2
- package/dist/editor/ai/Agents.js.map +1 -1
- package/dist/editor/client/EditorShell.js +178 -79
- package/dist/editor/client/EditorShell.js.map +1 -1
- package/dist/editor/client/OperationDialogContent.d.ts +13 -0
- package/dist/editor/client/OperationDialogContent.js +13 -0
- package/dist/editor/client/OperationDialogContent.js.map +1 -0
- package/dist/editor/client/editContext.d.ts +2 -0
- package/dist/editor/client/editContext.js.map +1 -1
- package/dist/editor/client/hooks/useGlobalEditorKeyDown.js +5 -2
- package/dist/editor/client/hooks/useGlobalEditorKeyDown.js.map +1 -1
- package/dist/editor/client/hooks/useQuota.d.ts +4 -0
- package/dist/editor/client/hooks/useQuota.js.map +1 -1
- package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +2 -2
- package/dist/editor/client/hooks/useSocketMessageHandler.js +5 -7
- package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
- package/dist/editor/client/operations.d.ts +1 -0
- package/dist/editor/client/operations.js +332 -8
- package/dist/editor/client/operations.js.map +1 -1
- package/dist/editor/client/ui/EditorChrome.js +1 -1
- package/dist/editor/client/ui/EditorChrome.js.map +1 -1
- package/dist/editor/commands/itemCommands.d.ts +0 -1
- package/dist/editor/commands/itemCommands.js +1 -16
- package/dist/editor/commands/itemCommands.js.map +1 -1
- package/dist/editor/commands/undo.js +6 -2
- package/dist/editor/commands/undo.js.map +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
- package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js +56 -2
- package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
- package/dist/editor/page-editor-chrome/FrameMenu.js +5 -4
- package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +5 -1
- package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
- package/dist/editor/page-viewer/PageViewerFrame.js +118 -13
- package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js +1 -1
- package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js +1 -1
- package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
- package/dist/editor/reviews/ReviewsList.js +1 -1
- package/dist/editor/reviews/ReviewsList.js.map +1 -1
- package/dist/editor/services/editService.d.ts +20 -3
- package/dist/editor/services/editService.js +17 -17
- package/dist/editor/services/editService.js.map +1 -1
- package/dist/editor/services/indexService.d.ts +4 -1
- package/dist/editor/services/indexService.js +12 -0
- package/dist/editor/services/indexService.js.map +1 -1
- package/dist/editor/services/serviceHelper.js +1 -0
- package/dist/editor/services/serviceHelper.js.map +1 -1
- package/dist/editor/settings/About.d.ts +1 -0
- package/dist/editor/settings/About.js +9 -0
- package/dist/editor/settings/About.js.map +1 -0
- package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
- package/dist/editor/settings/AllAgentsPanel.js +126 -0
- package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
- package/dist/editor/settings/IndexOverview.d.ts +1 -0
- package/dist/editor/settings/IndexOverview.js +471 -0
- package/dist/editor/settings/IndexOverview.js.map +1 -0
- package/dist/editor/settings/Info.d.ts +1 -0
- package/dist/editor/settings/Info.js +11 -0
- package/dist/editor/settings/Info.js.map +1 -0
- package/dist/editor/settings/LatestFeedback.d.ts +1 -0
- package/dist/editor/settings/LatestFeedback.js +136 -0
- package/dist/editor/settings/LatestFeedback.js.map +1 -0
- package/dist/editor/settings/QuotaInfo.d.ts +1 -0
- package/dist/editor/settings/QuotaInfo.js +102 -0
- package/dist/editor/settings/QuotaInfo.js.map +1 -0
- package/dist/editor/settings/SettingsMenu.d.ts +1 -0
- package/dist/editor/settings/SettingsMenu.js +74 -0
- package/dist/editor/settings/SettingsMenu.js.map +1 -0
- package/dist/editor/settings/SettingsView.d.ts +1 -0
- package/dist/editor/settings/SettingsView.js +85 -0
- package/dist/editor/settings/SettingsView.js.map +1 -0
- package/dist/editor/settings/Setup.d.ts +1 -0
- package/dist/editor/settings/Setup.js +211 -0
- package/dist/editor/settings/Setup.js.map +1 -0
- package/dist/editor/settings/Status.d.ts +1 -0
- package/dist/editor/settings/Status.js +85 -0
- package/dist/editor/settings/Status.js.map +1 -0
- package/dist/editor/settings/WebSocketMessages.d.ts +1 -0
- package/dist/editor/settings/WebSocketMessages.js +71 -0
- package/dist/editor/settings/WebSocketMessages.js.map +1 -0
- package/dist/editor/settings/panels/AgentsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/AgentsPanel.js +186 -0
- package/dist/editor/settings/panels/AgentsPanel.js.map +1 -0
- package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
- package/dist/editor/settings/panels/DatabasePanel.js +50 -0
- package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
- package/dist/editor/settings/panels/ItemConfigPanel.d.ts +13 -0
- package/dist/editor/settings/panels/ItemConfigPanel.js +52 -0
- package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/ModelsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ModelsPanel.js +269 -0
- package/dist/editor/settings/panels/ModelsPanel.js.map +1 -0
- package/dist/editor/settings/panels/ProvidersPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ProvidersPanel.js +206 -0
- package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -0
- package/dist/editor/settings/panels/SearchConfigPanel.d.ts +6 -0
- package/dist/editor/settings/panels/SearchConfigPanel.js +134 -0
- package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -0
- package/dist/editor/settings/panels/SettingsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/SettingsPanel.js +39 -0
- package/dist/editor/settings/panels/SettingsPanel.js.map +1 -0
- package/dist/editor/settings/panels/StatusPanel.d.ts +6 -0
- package/dist/editor/settings/panels/StatusPanel.js +141 -0
- package/dist/editor/settings/panels/StatusPanel.js.map +1 -0
- package/dist/editor/settings/panels/ToolsPanel.d.ts +6 -0
- package/dist/editor/settings/panels/ToolsPanel.js +192 -0
- package/dist/editor/settings/panels/ToolsPanel.js.map +1 -0
- package/dist/editor/settings/panels/index.d.ts +14 -0
- package/dist/editor/settings/panels/index.js +15 -0
- package/dist/editor/settings/panels/index.js.map +1 -0
- package/dist/editor/settings/panels/useSidebarEditor.d.ts +15 -0
- package/dist/editor/settings/panels/useSidebarEditor.js +24 -0
- package/dist/editor/settings/panels/useSidebarEditor.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js +22 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +367 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
- package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
- package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
- package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
- package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
- package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
- package/dist/editor/settings/status/coreStatusChecks.d.ts +25 -0
- package/dist/editor/settings/status/coreStatusChecks.js +231 -0
- package/dist/editor/settings/status/coreStatusChecks.js.map +1 -0
- package/dist/editor/settings/status/index.d.ts +3 -0
- package/dist/editor/settings/status/index.js +3 -0
- package/dist/editor/settings/status/index.js.map +1 -0
- package/dist/editor/settings/status/useStartupChecks.d.ts +17 -0
- package/dist/editor/settings/status/useStartupChecks.js +54 -0
- package/dist/editor/settings/status/useStartupChecks.js.map +1 -0
- package/dist/editor/sidebar/EditHistory.js +18 -14
- package/dist/editor/sidebar/EditHistory.js.map +1 -1
- package/dist/editor/sidebar/MainContentTree.js +0 -1
- package/dist/editor/sidebar/MainContentTree.js.map +1 -1
- package/dist/editor/sidebar/OperationItem.js +4 -3
- package/dist/editor/sidebar/OperationItem.js.map +1 -1
- package/dist/editor/ui/PerfectTree.js +1 -1
- package/dist/editor/ui/PerfectTree.js.map +1 -1
- package/dist/editor/ui/Section.js +3 -3
- package/dist/editor/ui/Section.js.map +1 -1
- package/dist/editor/ui/SimpleMenu.js +13 -4
- package/dist/editor/ui/SimpleMenu.js.map +1 -1
- package/dist/editor/ui/SimpleToolbar.js +1 -1
- package/dist/editor/ui/SimpleToolbar.js.map +1 -1
- package/dist/editor/utils/keyboardNavigation.js +89 -27
- package/dist/editor/utils/keyboardNavigation.js.map +1 -1
- package/dist/revision.d.ts +2 -2
- package/dist/revision.js +2 -2
- package/dist/setup/SetupWizardPage.js +2 -2
- package/dist/setup/SetupWizardPage.js.map +1 -1
- package/dist/setup/services/setupWizardService.d.ts +132 -12
- package/dist/setup/services/setupWizardService.js +82 -6
- package/dist/setup/services/setupWizardService.js.map +1 -1
- package/dist/setup/wizard/index.d.ts +5 -4
- package/dist/setup/wizard/index.js +6 -4
- package/dist/setup/wizard/index.js.map +1 -1
- package/dist/setup/wizard/steps/AddModelDialog.d.ts +10 -0
- package/dist/setup/wizard/steps/AddModelDialog.js +119 -0
- package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -0
- package/dist/setup/wizard/steps/ImportModelDialog.d.ts +10 -0
- package/dist/setup/wizard/steps/ImportModelDialog.js +351 -0
- package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -0
- package/dist/splash-screen/ModernSplashScreen.js +1 -1
- package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
- package/dist/styles.css +183 -10
- package/dist/types.d.ts +36 -1
- package/package.json +4 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useState } from "react";
|
|
3
|
+
import { useEditContext } from "../client/editContext";
|
|
4
|
+
import { getLatestComments } from "../services/reviewsService";
|
|
5
|
+
import { getLatestSuggestedEdits } from "../services/suggestedEditsService";
|
|
6
|
+
import { Lightbulb, MessageSquare } from "lucide-react";
|
|
7
|
+
import { LanguageSelector } from "../../components/ui/LanguageSelector";
|
|
8
|
+
export function LatestFeedback() {
|
|
9
|
+
const editContext = useEditContext();
|
|
10
|
+
const [items, setItems] = useState([]);
|
|
11
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
12
|
+
const [error, setError] = useState(null);
|
|
13
|
+
const [selectedLanguage, setSelectedLanguage] = useState(undefined);
|
|
14
|
+
// Cutoff is now computed server-side. Keep memo in case we later want client hints.
|
|
15
|
+
const sinceIso = null;
|
|
16
|
+
const load = useCallback(async () => {
|
|
17
|
+
let cancelled = false;
|
|
18
|
+
setIsLoading(true);
|
|
19
|
+
setError(null);
|
|
20
|
+
try {
|
|
21
|
+
const take = 50;
|
|
22
|
+
const [cRes, sRes] = await Promise.all([
|
|
23
|
+
getLatestComments(take, selectedLanguage),
|
|
24
|
+
getLatestSuggestedEdits(take, selectedLanguage),
|
|
25
|
+
]);
|
|
26
|
+
const comments = (cRes.data || []).map((c) => ({
|
|
27
|
+
...c,
|
|
28
|
+
kind: "comment",
|
|
29
|
+
}));
|
|
30
|
+
const suggestions = (sRes.data || []).map((s) => ({
|
|
31
|
+
...s,
|
|
32
|
+
kind: "suggestion",
|
|
33
|
+
}));
|
|
34
|
+
const merged = [...comments, ...suggestions].sort((a, b) => {
|
|
35
|
+
const ad = new Date(a.created || 0).getTime();
|
|
36
|
+
const bd = new Date(b.created || 0).getTime();
|
|
37
|
+
return bd - ad;
|
|
38
|
+
});
|
|
39
|
+
const latest = merged.slice(0, 50);
|
|
40
|
+
if (!cancelled)
|
|
41
|
+
setItems(latest);
|
|
42
|
+
}
|
|
43
|
+
catch (e) {
|
|
44
|
+
if (!cancelled)
|
|
45
|
+
setError(e?.message || "Failed to load latest items");
|
|
46
|
+
}
|
|
47
|
+
finally {
|
|
48
|
+
if (!cancelled)
|
|
49
|
+
setIsLoading(false);
|
|
50
|
+
}
|
|
51
|
+
return () => {
|
|
52
|
+
cancelled = true;
|
|
53
|
+
};
|
|
54
|
+
}, [sinceIso, selectedLanguage]);
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
let disposed;
|
|
57
|
+
(async () => {
|
|
58
|
+
disposed = await load();
|
|
59
|
+
})();
|
|
60
|
+
return () => {
|
|
61
|
+
try {
|
|
62
|
+
disposed?.();
|
|
63
|
+
}
|
|
64
|
+
catch { }
|
|
65
|
+
};
|
|
66
|
+
}, [load]);
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
const typesToRefresh = new Set([
|
|
69
|
+
"comment-updated",
|
|
70
|
+
"comment-deleted",
|
|
71
|
+
"suggested-edit-updated",
|
|
72
|
+
"suggested-edit-deleted",
|
|
73
|
+
]);
|
|
74
|
+
const dispose = editContext?.addSocketMessageListener?.((message) => {
|
|
75
|
+
try {
|
|
76
|
+
if (typesToRefresh.has(message?.type)) {
|
|
77
|
+
void load();
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
catch { }
|
|
81
|
+
});
|
|
82
|
+
return () => {
|
|
83
|
+
try {
|
|
84
|
+
dispose?.();
|
|
85
|
+
}
|
|
86
|
+
catch { }
|
|
87
|
+
};
|
|
88
|
+
}, [editContext?.addSocketMessageListener, load]);
|
|
89
|
+
// Items are server-side filtered by language when selected
|
|
90
|
+
const onOpenItem = async (item) => {
|
|
91
|
+
try {
|
|
92
|
+
const mainId = item.kind === "comment" ? item.mainItemId : item.mainItemId;
|
|
93
|
+
const lang = item.kind === "comment" ? item.language : item.mainItemLanguage;
|
|
94
|
+
const ver = item.kind === "comment" ? item.version : item.mainItemVersion;
|
|
95
|
+
await editContext?.loadItem({ id: mainId, language: lang, version: ver });
|
|
96
|
+
editContext?.setSelectedComment(item.kind === "comment" ? item : undefined);
|
|
97
|
+
if (item.kind === "comment") {
|
|
98
|
+
editContext?.setScrollIntoView(item.itemId);
|
|
99
|
+
}
|
|
100
|
+
editContext?.switchView("comments");
|
|
101
|
+
}
|
|
102
|
+
catch { }
|
|
103
|
+
};
|
|
104
|
+
const Row = ({ item }) => {
|
|
105
|
+
const isComment = item.kind === "comment";
|
|
106
|
+
const created = item.created
|
|
107
|
+
? new Date(item.created)
|
|
108
|
+
: undefined;
|
|
109
|
+
const dateText = created
|
|
110
|
+
? `${created.toLocaleDateString()} ${created.toLocaleTimeString()}`
|
|
111
|
+
: "";
|
|
112
|
+
const comment = isComment ? item : undefined;
|
|
113
|
+
const pageName = isComment
|
|
114
|
+
? comment?.mainItemName ||
|
|
115
|
+
(comment?.relatedItems || []).find((ri) => ri.itemId === comment?.mainItemId)?.itemName
|
|
116
|
+
: item.mainItemName;
|
|
117
|
+
const componentName = isComment
|
|
118
|
+
? comment?.itemName
|
|
119
|
+
: item.itemName;
|
|
120
|
+
const fieldName = isComment ? comment?.fieldName : undefined;
|
|
121
|
+
const user = item.authorDisplayName || item.author || "";
|
|
122
|
+
const label = isComment ? "Comment" : "Suggestion";
|
|
123
|
+
return (_jsx("button", { className: "w-full cursor-pointer rounded p-1 text-left hover:bg-gray-100", onClick: () => onOpenItem(item), children: _jsxs("div", { className: "flex items-center justify-between gap-2 text-xs", children: [_jsxs("div", { className: "flex items-center gap-2 truncate", children: [_jsx("span", { className: "inline-flex items-center justify-center rounded py-0.5 text-gray-700", "aria-label": label, title: label, children: isComment ? (_jsx(MessageSquare, { className: "h-3.5 w-3.5", strokeWidth: 1 })) : (_jsx(Lightbulb, { className: "h-3.5 w-3.5", strokeWidth: 1 })) }), _jsx("div", { className: "flex items-center", children: [
|
|
124
|
+
pageName,
|
|
125
|
+
componentName,
|
|
126
|
+
fieldName ||
|
|
127
|
+
(item.kind === "suggestion" ? item.fieldId : undefined),
|
|
128
|
+
]
|
|
129
|
+
.filter((x) => !!x && x.length > 0)
|
|
130
|
+
.map((seg, idx, arr) => (_jsxs("span", { className: "truncate", children: [idx > 0 && (_jsx("span", { className: "mx-1 text-gray-400", children: ">" })), _jsx("span", { className: idx === 0
|
|
131
|
+
? "font-medium text-gray-900"
|
|
132
|
+
: "text-gray-500", children: seg })] }, idx))) }), user && _jsxs("span", { className: "text-gray-500", children: [" \u00B7 ", user] })] }), _jsx("div", { className: "shrink-0 text-[10px] text-gray-500", children: dateText })] }) }));
|
|
133
|
+
};
|
|
134
|
+
return (_jsxs("div", { className: "h-full overflow-auto p-2", children: [_jsxs("div", { className: "mb-2 flex items-center gap-2", children: [_jsx(LanguageSelector, { selectedLanguage: selectedLanguage, onLanguageSelected: (language) => setSelectedLanguage(language.languageCode), showAllLanguages: true }), selectedLanguage && (_jsx("button", { className: "text-xs text-gray-600 hover:underline", onClick: () => setSelectedLanguage(undefined), children: "Clear" }))] }), isLoading && _jsx("div", { className: "p-2 text-xs text-gray-500", children: "Loading\u2026" }), error && _jsx("div", { className: "p-2 text-xs text-red-600", children: error }), !isLoading && !error && items.length === 0 && (_jsx("div", { className: "p-2 text-xs text-gray-500", children: "No recent activity" })), _jsx("div", { className: "divide-y", children: items.map((it) => (_jsx(Row, { item: it }, `${it.kind}-${it.id}`))) })] }));
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=LatestFeedback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LatestFeedback.js","sourceRoot":"","sources":["../../../src/editor/settings/LatestFeedback.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function QuotaInfo(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEditContext } from "../client/editContext";
|
|
3
|
+
export function QuotaInfo() {
|
|
4
|
+
const editContext = useEditContext();
|
|
5
|
+
const quotaInfo = editContext?.quotaInfo;
|
|
6
|
+
const formatQuotaPercentage = (used, limit) => {
|
|
7
|
+
if (!limit || limit === 0 || limit === -1)
|
|
8
|
+
return "No limit";
|
|
9
|
+
if (!used && used !== 0)
|
|
10
|
+
return "0%";
|
|
11
|
+
if (isNaN(used) || isNaN(limit))
|
|
12
|
+
return "0%";
|
|
13
|
+
const percentage = Math.round((used / limit) * 100);
|
|
14
|
+
return `${percentage}%`;
|
|
15
|
+
};
|
|
16
|
+
const getQuotaStatus = (used, limit) => {
|
|
17
|
+
if (!limit || limit === 0 || limit === -1)
|
|
18
|
+
return "unlimited";
|
|
19
|
+
if (!used && used !== 0)
|
|
20
|
+
return "ok";
|
|
21
|
+
if (isNaN(used) || isNaN(limit))
|
|
22
|
+
return "ok";
|
|
23
|
+
const percentage = (used / limit) * 100;
|
|
24
|
+
if (percentage >= 100)
|
|
25
|
+
return "exceeded";
|
|
26
|
+
if (percentage >= 90)
|
|
27
|
+
return "warning";
|
|
28
|
+
if (percentage >= 75)
|
|
29
|
+
return "caution";
|
|
30
|
+
return "ok";
|
|
31
|
+
};
|
|
32
|
+
const getProgressWidth = (used, limit) => {
|
|
33
|
+
if (!limit ||
|
|
34
|
+
limit === 0 ||
|
|
35
|
+
limit === -1 ||
|
|
36
|
+
!used ||
|
|
37
|
+
isNaN(used) ||
|
|
38
|
+
isNaN(limit))
|
|
39
|
+
return 0;
|
|
40
|
+
return Math.min(100, (used / limit) * 100);
|
|
41
|
+
};
|
|
42
|
+
if (!quotaInfo) {
|
|
43
|
+
return (_jsx("div", { className: "space-y-6 p-4", children: _jsx("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: _jsx("p", { className: "text-gray-600", children: "No quota information available" }) }) }));
|
|
44
|
+
}
|
|
45
|
+
return (_jsxs("div", { className: "space-y-6 p-4", children: [_jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Token Usage" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total Usage" }), _jsxs("span", { className: "text-sm text-gray-600", children: [quotaInfo.usage.totalTokens.toLocaleString(), " /", " ", quotaInfo.limits.totalTokens &&
|
|
46
|
+
quotaInfo.limits.totalTokens > 0
|
|
47
|
+
? quotaInfo.limits.totalTokens.toLocaleString()
|
|
48
|
+
: "∞"] })] }), quotaInfo.limits.totalTokens &&
|
|
49
|
+
quotaInfo.limits.totalTokens > 0 && (_jsx("div", { className: "h-2 w-full rounded-full bg-gray-200", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "exceeded"
|
|
50
|
+
? "bg-red-500"
|
|
51
|
+
: getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "warning"
|
|
52
|
+
? "bg-orange-500"
|
|
53
|
+
: getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "caution"
|
|
54
|
+
? "bg-yellow-500"
|
|
55
|
+
: "bg-green-500"}`, style: {
|
|
56
|
+
width: `${getProgressWidth(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens)}%`,
|
|
57
|
+
} }) })), _jsxs("p", { className: "mt-1 text-xs text-gray-500", children: [formatQuotaPercentage(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens), " ", "used"] })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Daily Usage" }), _jsxs("span", { className: "text-sm text-gray-600", children: [quotaInfo.usage.dailyTokens.toLocaleString(), " /", " ", quotaInfo.limits.dailyTokens &&
|
|
58
|
+
quotaInfo.limits.dailyTokens > 0
|
|
59
|
+
? quotaInfo.limits.dailyTokens.toLocaleString()
|
|
60
|
+
: "∞"] })] }), quotaInfo.limits.dailyTokens &&
|
|
61
|
+
quotaInfo.limits.dailyTokens > 0 && (_jsx("div", { className: "h-2 w-full rounded-full bg-gray-200", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "exceeded"
|
|
62
|
+
? "bg-red-500"
|
|
63
|
+
: getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "warning"
|
|
64
|
+
? "bg-orange-500"
|
|
65
|
+
: getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "caution"
|
|
66
|
+
? "bg-yellow-500"
|
|
67
|
+
: "bg-green-500"}`, style: {
|
|
68
|
+
width: `${getProgressWidth(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens)}%`,
|
|
69
|
+
} }) })), _jsx("p", { className: "mt-1 text-xs text-gray-500", children: quotaInfo.limits.dailyTokens === -1
|
|
70
|
+
? "No daily limit"
|
|
71
|
+
: `${formatQuotaPercentage(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens)} used today` })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Image Usage" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total Usage" }), _jsxs("span", { className: "text-sm text-gray-600", children: [quotaInfo.usage.totalImages.toLocaleString(), " /", " ", quotaInfo.limits.totalImages &&
|
|
72
|
+
quotaInfo.limits.totalImages > 0
|
|
73
|
+
? quotaInfo.limits.totalImages.toLocaleString()
|
|
74
|
+
: "∞"] })] }), quotaInfo.limits.totalImages &&
|
|
75
|
+
quotaInfo.limits.totalImages > 0 && (_jsx("div", { className: "h-2 w-full rounded-full bg-gray-200", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "exceeded"
|
|
76
|
+
? "bg-red-500"
|
|
77
|
+
: getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "warning"
|
|
78
|
+
? "bg-orange-500"
|
|
79
|
+
: getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "caution"
|
|
80
|
+
? "bg-yellow-500"
|
|
81
|
+
: "bg-green-500"}`, style: {
|
|
82
|
+
width: `${getProgressWidth(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages)}%`,
|
|
83
|
+
} }) })), _jsxs("p", { className: "mt-1 text-xs text-gray-500", children: [formatQuotaPercentage(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages), " ", "used"] })] }), _jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Daily Usage" }), _jsxs("span", { className: "text-sm text-gray-600", children: [quotaInfo.usage.dailyImages.toLocaleString(), " /", " ", quotaInfo.limits.dailyImages &&
|
|
84
|
+
quotaInfo.limits.dailyImages > 0
|
|
85
|
+
? quotaInfo.limits.dailyImages.toLocaleString()
|
|
86
|
+
: "∞"] })] }), quotaInfo.limits.dailyImages &&
|
|
87
|
+
quotaInfo.limits.dailyImages > 0 && (_jsx("div", { className: "h-2 w-full rounded-full bg-gray-200", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "exceeded"
|
|
88
|
+
? "bg-red-500"
|
|
89
|
+
: getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "warning"
|
|
90
|
+
? "bg-orange-500"
|
|
91
|
+
: getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "caution"
|
|
92
|
+
? "bg-yellow-500"
|
|
93
|
+
: "bg-green-500"}`, style: {
|
|
94
|
+
width: `${getProgressWidth(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)}%`,
|
|
95
|
+
} }) })), _jsx("p", { className: "mt-1 text-xs text-gray-500", children: quotaInfo.limits.dailyImages === -1
|
|
96
|
+
? "No daily limit"
|
|
97
|
+
: `${formatQuotaPercentage(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)} used today` })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h3", { className: "mb-3 text-lg font-semibold text-gray-800", children: "Cost Summary" }), _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Total (All Time)" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.totalCost ?? 0).toFixed(2)] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-sm font-medium text-gray-500", children: "Today" }), _jsxs("span", { className: "text-lg font-semibold text-gray-800", children: ["$", (quotaInfo.usage.dailyCost ?? 0).toFixed(2)] })] })] })] }), _jsxs("div", { className: "rounded-lg border border-gray-200 bg-white p-4", children: [_jsx("h4", { className: "mb-2 text-sm font-medium text-gray-700", children: "Quota Status" }), _jsxs("div", { className: "space-y-1 text-sm", children: [editContext?.isQuotaExceeded && (_jsx("p", { className: "font-medium text-red-600", children: "\u26A0\uFE0F Quota limits have been exceeded" })), editContext?.getQuotaWarningMessage &&
|
|
98
|
+
editContext.getQuotaWarningMessage() &&
|
|
99
|
+
!editContext.isQuotaExceeded && (_jsxs("p", { className: "text-orange-600", children: ["\u26A0\uFE0F ", editContext.getQuotaWarningMessage()] })), !editContext?.isQuotaExceeded &&
|
|
100
|
+
!editContext?.getQuotaWarningMessage?.() && (_jsx("p", { className: "text-green-600", children: "\u2705 All quotas are within limits" }))] })] })] }));
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=QuotaInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuotaInfo.js","sourceRoot":"","sources":["../../../src/editor/settings/QuotaInfo.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function SettingsMenu(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useRouter } from "next/navigation";
|
|
3
|
+
import { usePathname, useSearchParams } from "next/navigation";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { SimpleMenu } from "../ui/SimpleMenu";
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
export function SettingsMenu() {
|
|
8
|
+
const editContext = useEditContext();
|
|
9
|
+
const config = editContext?.configuration;
|
|
10
|
+
const searchParams = useSearchParams();
|
|
11
|
+
const urlActiveItemKey = searchParams.get("ccpanel");
|
|
12
|
+
const [activeItemKey, setActiveItemKey] = useState(urlActiveItemKey);
|
|
13
|
+
const router = useRouter();
|
|
14
|
+
const pathname = usePathname();
|
|
15
|
+
const updateUrl = (key) => {
|
|
16
|
+
if (urlActiveItemKey === key)
|
|
17
|
+
return;
|
|
18
|
+
const current = new URLSearchParams(Array.from(searchParams.entries()));
|
|
19
|
+
if (key) {
|
|
20
|
+
current.set("ccpanel", key);
|
|
21
|
+
// Ensure view=settings is set when navigating within Settings
|
|
22
|
+
if (!current.has("view")) {
|
|
23
|
+
current.set("view", "settings");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
current.delete("ccpanel");
|
|
28
|
+
}
|
|
29
|
+
// Use window.history.pushState directly to avoid page reloads in static export mode
|
|
30
|
+
// This matches the pattern used in EditorShell.tsx
|
|
31
|
+
const newUrl = `${pathname}?${current.toString()}`;
|
|
32
|
+
window.history.pushState(null, "", newUrl);
|
|
33
|
+
};
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
updateUrl(activeItemKey);
|
|
36
|
+
}, [activeItemKey]);
|
|
37
|
+
// Sync active menu selection with URL changes (e.g., when set programmatically)
|
|
38
|
+
useEffect(() => {
|
|
39
|
+
if (urlActiveItemKey !== activeItemKey) {
|
|
40
|
+
setActiveItemKey(urlActiveItemKey);
|
|
41
|
+
}
|
|
42
|
+
}, [urlActiveItemKey]);
|
|
43
|
+
const items = config?.settings.groups.map((group) => {
|
|
44
|
+
return {
|
|
45
|
+
id: group.title,
|
|
46
|
+
label: group.title,
|
|
47
|
+
icon: group.icon,
|
|
48
|
+
items: group.panels.map((panel) => ({
|
|
49
|
+
id: panel.id,
|
|
50
|
+
label: panel.title,
|
|
51
|
+
icon: panel.icon,
|
|
52
|
+
})) || [],
|
|
53
|
+
};
|
|
54
|
+
});
|
|
55
|
+
useEffect(() => {
|
|
56
|
+
const groups = config?.settings.groups;
|
|
57
|
+
const item = groups
|
|
58
|
+
?.flatMap((x) => x.panels)
|
|
59
|
+
?.find((item) => item.id === activeItemKey);
|
|
60
|
+
if (!item) {
|
|
61
|
+
setActiveItemKey(groups?.[0]?.panels?.[0]?.id || null);
|
|
62
|
+
}
|
|
63
|
+
if (item) {
|
|
64
|
+
editContext?.setCenterPanelView(item.content);
|
|
65
|
+
}
|
|
66
|
+
}, [activeItemKey]);
|
|
67
|
+
if (!items) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
return (_jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, onItemClick: (item) => {
|
|
71
|
+
setActiveItemKey(item.id);
|
|
72
|
+
} }));
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=SettingsMenu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsMenu.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsMenu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function SettingsView(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { usePathname, useSearchParams } from "next/navigation";
|
|
4
|
+
import { useEditContext } from "../client/editContext";
|
|
5
|
+
import { SimpleMenu } from "../ui/SimpleMenu";
|
|
6
|
+
import { Splitter } from "../ui/Splitter";
|
|
7
|
+
import { Info } from "lucide-react";
|
|
8
|
+
export function SettingsView() {
|
|
9
|
+
const editContext = useEditContext();
|
|
10
|
+
const config = editContext?.configuration;
|
|
11
|
+
const searchParams = useSearchParams();
|
|
12
|
+
const urlActiveItemKey = searchParams.get("ccpanel");
|
|
13
|
+
// Get the first available panel as default
|
|
14
|
+
const defaultActiveItemKey = config?.settings.groups?.flatMap((x) => x.panels)?.[0]?.id;
|
|
15
|
+
const [activeItemKey, setActiveItemKey] = useState(urlActiveItemKey || defaultActiveItemKey || null);
|
|
16
|
+
const pathname = usePathname();
|
|
17
|
+
const updateUrl = (key) => {
|
|
18
|
+
if (urlActiveItemKey === key)
|
|
19
|
+
return;
|
|
20
|
+
const current = new URLSearchParams(Array.from(searchParams.entries()));
|
|
21
|
+
if (key) {
|
|
22
|
+
current.set("ccpanel", key);
|
|
23
|
+
// Ensure view=settings is set when navigating within Settings
|
|
24
|
+
if (!current.has("view")) {
|
|
25
|
+
current.set("view", "settings");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
current.delete("ccpanel");
|
|
30
|
+
}
|
|
31
|
+
// Use window.history.pushState directly to avoid page reloads in static export mode
|
|
32
|
+
// This matches the pattern used in EditorShell.tsx
|
|
33
|
+
const newUrl = `${pathname}?${current.toString()}`;
|
|
34
|
+
window.history.pushState(null, "", newUrl);
|
|
35
|
+
};
|
|
36
|
+
// Keep active item in sync with URL param changes (e.g., programmatic navigation)
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
if (urlActiveItemKey && urlActiveItemKey !== activeItemKey) {
|
|
39
|
+
setActiveItemKey(urlActiveItemKey);
|
|
40
|
+
}
|
|
41
|
+
}, [urlActiveItemKey]);
|
|
42
|
+
// Set default active item when config loads and no active item is set
|
|
43
|
+
useEffect(() => {
|
|
44
|
+
if (!activeItemKey && defaultActiveItemKey) {
|
|
45
|
+
setActiveItemKey(defaultActiveItemKey);
|
|
46
|
+
}
|
|
47
|
+
}, [defaultActiveItemKey, activeItemKey]);
|
|
48
|
+
const items = config?.settings.groups.map((group) => {
|
|
49
|
+
return {
|
|
50
|
+
id: group.title,
|
|
51
|
+
label: group.title,
|
|
52
|
+
icon: group.icon,
|
|
53
|
+
items: group.panels.map((panel) => ({
|
|
54
|
+
id: panel.id,
|
|
55
|
+
label: panel.title,
|
|
56
|
+
icon: panel.icon,
|
|
57
|
+
})) || [],
|
|
58
|
+
};
|
|
59
|
+
});
|
|
60
|
+
// Find the currently selected panel content
|
|
61
|
+
const selectedPanel = config?.settings.groups
|
|
62
|
+
?.flatMap((x) => x.panels)
|
|
63
|
+
?.find((item) => item.id === activeItemKey);
|
|
64
|
+
if (!items) {
|
|
65
|
+
return (_jsx("div", { className: "flex h-full flex-col items-center justify-center", children: "Loading..." }));
|
|
66
|
+
}
|
|
67
|
+
const panels = [
|
|
68
|
+
{
|
|
69
|
+
name: "menu",
|
|
70
|
+
defaultSize: 300,
|
|
71
|
+
content: (_jsx("div", { className: "h-full border-r border-gray-200", children: _jsx(SimpleMenu, { items: items, activeItemKey: activeItemKey, onItemClick: (item) => {
|
|
72
|
+
setActiveItemKey(item.id);
|
|
73
|
+
// Only update URL when user explicitly clicks on an item
|
|
74
|
+
updateUrl(item.id);
|
|
75
|
+
} }) })),
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
name: "content",
|
|
79
|
+
defaultSize: "auto",
|
|
80
|
+
content: (_jsx("div", { className: "absolute inset-0 flex flex-col bg-white select-text", children: selectedPanel ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-col gap-3 border-b border-gray-200 bg-white px-6 py-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [selectedPanel.icon ? (_jsx("span", { className: "text-gray-500 [&_svg]:h-5 [&_svg]:w-5", children: selectedPanel.icon })) : null, _jsx("h2", { className: "text-2xl font-semibold text-gray-900", children: selectedPanel.title })] }), selectedPanel.subtitle && (_jsx("p", { className: "text-sm text-gray-500", children: selectedPanel.subtitle }))] }), _jsx("div", { className: "flex-1 overflow-auto", children: selectedPanel.content })] })) : (_jsxs("div", { className: "flex h-full flex-col items-center justify-center text-gray-500", children: [_jsx(Info, { className: "mb-4 h-10 w-10" }), _jsx("p", { children: "Select a panel from the menu to view its content" })] })) })),
|
|
81
|
+
},
|
|
82
|
+
];
|
|
83
|
+
return (_jsx("div", { className: "h-full", children: _jsx(Splitter, { panels: panels, localStorageKey: "settings-splitter" }) }));
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=SettingsView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SettingsView.js","sourceRoot":"","sources":["../../../src/editor/settings/SettingsView.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function Setup(): import("react/jsx-runtime").JSX.Element;
|