@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.
Files changed (224) hide show
  1. package/dist/agents-view/AgentsInbox.d.ts +2 -1
  2. package/dist/agents-view/AgentsInbox.js +2 -2
  3. package/dist/agents-view/AgentsInbox.js.map +1 -1
  4. package/dist/agents-view/AgentsView.js +30 -1
  5. package/dist/agents-view/AgentsView.js.map +1 -1
  6. package/dist/components/ui/card.d.ts +1 -1
  7. package/dist/components/ui/card.js +1 -1
  8. package/dist/components/ui/card.js.map +1 -1
  9. package/dist/components/ui/paste-button.d.ts +1 -1
  10. package/dist/components/ui/paste-button.js +79 -22
  11. package/dist/components/ui/paste-button.js.map +1 -1
  12. package/dist/config/config.js +83 -51
  13. package/dist/config/config.js.map +1 -1
  14. package/dist/config/types.d.ts +29 -4
  15. package/dist/editor/ContentTree.js +92 -22
  16. package/dist/editor/ContentTree.js.map +1 -1
  17. package/dist/editor/FieldActionsOverlay.d.ts +1 -0
  18. package/dist/editor/FieldActionsOverlay.js +17 -1
  19. package/dist/editor/FieldActionsOverlay.js.map +1 -1
  20. package/dist/editor/FieldListField.js +1 -1
  21. package/dist/editor/FieldListField.js.map +1 -1
  22. package/dist/editor/LinkEditorDialog.js +33 -24
  23. package/dist/editor/LinkEditorDialog.js.map +1 -1
  24. package/dist/editor/MainLayout.js +2 -2
  25. package/dist/editor/MainLayout.js.map +1 -1
  26. package/dist/editor/PictureEditor.js +1 -1
  27. package/dist/editor/PictureEditor.js.map +1 -1
  28. package/dist/editor/ai/AgentTerminal.js +63 -26
  29. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  30. package/dist/editor/ai/Agents.js +7 -2
  31. package/dist/editor/ai/Agents.js.map +1 -1
  32. package/dist/editor/client/EditorShell.js +178 -79
  33. package/dist/editor/client/EditorShell.js.map +1 -1
  34. package/dist/editor/client/OperationDialogContent.d.ts +13 -0
  35. package/dist/editor/client/OperationDialogContent.js +13 -0
  36. package/dist/editor/client/OperationDialogContent.js.map +1 -0
  37. package/dist/editor/client/editContext.d.ts +2 -0
  38. package/dist/editor/client/editContext.js.map +1 -1
  39. package/dist/editor/client/hooks/useGlobalEditorKeyDown.js +5 -2
  40. package/dist/editor/client/hooks/useGlobalEditorKeyDown.js.map +1 -1
  41. package/dist/editor/client/hooks/useQuota.d.ts +4 -0
  42. package/dist/editor/client/hooks/useQuota.js.map +1 -1
  43. package/dist/editor/client/hooks/useSocketMessageHandler.d.ts +2 -2
  44. package/dist/editor/client/hooks/useSocketMessageHandler.js +5 -7
  45. package/dist/editor/client/hooks/useSocketMessageHandler.js.map +1 -1
  46. package/dist/editor/client/operations.d.ts +1 -0
  47. package/dist/editor/client/operations.js +332 -8
  48. package/dist/editor/client/operations.js.map +1 -1
  49. package/dist/editor/client/ui/EditorChrome.js +1 -1
  50. package/dist/editor/client/ui/EditorChrome.js.map +1 -1
  51. package/dist/editor/commands/itemCommands.d.ts +0 -1
  52. package/dist/editor/commands/itemCommands.js +1 -16
  53. package/dist/editor/commands/itemCommands.js.map +1 -1
  54. package/dist/editor/commands/undo.js +6 -2
  55. package/dist/editor/commands/undo.js.map +1 -1
  56. package/dist/editor/menubar/toolbar-sections/ViewportControls.js +1 -1
  57. package/dist/editor/menubar/toolbar-sections/ViewportControls.js.map +1 -1
  58. package/dist/editor/page-editor-chrome/FieldActionIndicator.js +56 -2
  59. package/dist/editor/page-editor-chrome/FieldActionIndicator.js.map +1 -1
  60. package/dist/editor/page-editor-chrome/FrameMenu.js +5 -4
  61. package/dist/editor/page-editor-chrome/FrameMenu.js.map +1 -1
  62. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js +5 -1
  63. package/dist/editor/page-editor-chrome/PlaceholderDropZones.js.map +1 -1
  64. package/dist/editor/page-viewer/PageViewerFrame.js +118 -13
  65. package/dist/editor/page-viewer/PageViewerFrame.js.map +1 -1
  66. package/dist/editor/reviews/CreateReviewDialog.js +1 -1
  67. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  68. package/dist/editor/reviews/DecisionsMatrix.js +1 -1
  69. package/dist/editor/reviews/DecisionsMatrix.js.map +1 -1
  70. package/dist/editor/reviews/ReviewsList.js +1 -1
  71. package/dist/editor/reviews/ReviewsList.js.map +1 -1
  72. package/dist/editor/services/editService.d.ts +20 -3
  73. package/dist/editor/services/editService.js +17 -17
  74. package/dist/editor/services/editService.js.map +1 -1
  75. package/dist/editor/services/indexService.d.ts +4 -1
  76. package/dist/editor/services/indexService.js +12 -0
  77. package/dist/editor/services/indexService.js.map +1 -1
  78. package/dist/editor/services/serviceHelper.js +1 -0
  79. package/dist/editor/services/serviceHelper.js.map +1 -1
  80. package/dist/editor/settings/About.d.ts +1 -0
  81. package/dist/editor/settings/About.js +9 -0
  82. package/dist/editor/settings/About.js.map +1 -0
  83. package/dist/editor/settings/AllAgentsPanel.d.ts +5 -0
  84. package/dist/editor/settings/AllAgentsPanel.js +126 -0
  85. package/dist/editor/settings/AllAgentsPanel.js.map +1 -0
  86. package/dist/editor/settings/IndexOverview.d.ts +1 -0
  87. package/dist/editor/settings/IndexOverview.js +471 -0
  88. package/dist/editor/settings/IndexOverview.js.map +1 -0
  89. package/dist/editor/settings/Info.d.ts +1 -0
  90. package/dist/editor/settings/Info.js +11 -0
  91. package/dist/editor/settings/Info.js.map +1 -0
  92. package/dist/editor/settings/LatestFeedback.d.ts +1 -0
  93. package/dist/editor/settings/LatestFeedback.js +136 -0
  94. package/dist/editor/settings/LatestFeedback.js.map +1 -0
  95. package/dist/editor/settings/QuotaInfo.d.ts +1 -0
  96. package/dist/editor/settings/QuotaInfo.js +102 -0
  97. package/dist/editor/settings/QuotaInfo.js.map +1 -0
  98. package/dist/editor/settings/SettingsMenu.d.ts +1 -0
  99. package/dist/editor/settings/SettingsMenu.js +74 -0
  100. package/dist/editor/settings/SettingsMenu.js.map +1 -0
  101. package/dist/editor/settings/SettingsView.d.ts +1 -0
  102. package/dist/editor/settings/SettingsView.js +85 -0
  103. package/dist/editor/settings/SettingsView.js.map +1 -0
  104. package/dist/editor/settings/Setup.d.ts +1 -0
  105. package/dist/editor/settings/Setup.js +211 -0
  106. package/dist/editor/settings/Setup.js.map +1 -0
  107. package/dist/editor/settings/Status.d.ts +1 -0
  108. package/dist/editor/settings/Status.js +85 -0
  109. package/dist/editor/settings/Status.js.map +1 -0
  110. package/dist/editor/settings/WebSocketMessages.d.ts +1 -0
  111. package/dist/editor/settings/WebSocketMessages.js +71 -0
  112. package/dist/editor/settings/WebSocketMessages.js.map +1 -0
  113. package/dist/editor/settings/panels/AgentsPanel.d.ts +6 -0
  114. package/dist/editor/settings/panels/AgentsPanel.js +186 -0
  115. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -0
  116. package/dist/editor/settings/panels/DatabasePanel.d.ts +6 -0
  117. package/dist/editor/settings/panels/DatabasePanel.js +50 -0
  118. package/dist/editor/settings/panels/DatabasePanel.js.map +1 -0
  119. package/dist/editor/settings/panels/ItemConfigPanel.d.ts +13 -0
  120. package/dist/editor/settings/panels/ItemConfigPanel.js +52 -0
  121. package/dist/editor/settings/panels/ItemConfigPanel.js.map +1 -0
  122. package/dist/editor/settings/panels/ModelsPanel.d.ts +6 -0
  123. package/dist/editor/settings/panels/ModelsPanel.js +269 -0
  124. package/dist/editor/settings/panels/ModelsPanel.js.map +1 -0
  125. package/dist/editor/settings/panels/ProvidersPanel.d.ts +6 -0
  126. package/dist/editor/settings/panels/ProvidersPanel.js +206 -0
  127. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -0
  128. package/dist/editor/settings/panels/SearchConfigPanel.d.ts +6 -0
  129. package/dist/editor/settings/panels/SearchConfigPanel.js +134 -0
  130. package/dist/editor/settings/panels/SearchConfigPanel.js.map +1 -0
  131. package/dist/editor/settings/panels/SettingsPanel.d.ts +6 -0
  132. package/dist/editor/settings/panels/SettingsPanel.js +39 -0
  133. package/dist/editor/settings/panels/SettingsPanel.js.map +1 -0
  134. package/dist/editor/settings/panels/StatusPanel.d.ts +6 -0
  135. package/dist/editor/settings/panels/StatusPanel.js +141 -0
  136. package/dist/editor/settings/panels/StatusPanel.js.map +1 -0
  137. package/dist/editor/settings/panels/ToolsPanel.d.ts +6 -0
  138. package/dist/editor/settings/panels/ToolsPanel.js +192 -0
  139. package/dist/editor/settings/panels/ToolsPanel.js.map +1 -0
  140. package/dist/editor/settings/panels/index.d.ts +14 -0
  141. package/dist/editor/settings/panels/index.js +15 -0
  142. package/dist/editor/settings/panels/index.js.map +1 -0
  143. package/dist/editor/settings/panels/useSidebarEditor.d.ts +15 -0
  144. package/dist/editor/settings/panels/useSidebarEditor.js +24 -0
  145. package/dist/editor/settings/panels/useSidebarEditor.js.map +1 -0
  146. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.d.ts +2 -0
  147. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js +195 -0
  148. package/dist/editor/settings/setup-steps/AiSetupStep/EmbeddingsModelSection.js.map +1 -0
  149. package/dist/editor/settings/setup-steps/AiSetupStep/index.d.ts +2 -0
  150. package/dist/editor/settings/setup-steps/AiSetupStep/index.js +22 -0
  151. package/dist/editor/settings/setup-steps/AiSetupStep/index.js.map +1 -0
  152. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.d.ts +1 -0
  153. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js +233 -0
  154. package/dist/editor/settings/setup-steps/AiSetupStep/provider/ProviderSection.js.map +1 -0
  155. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.d.ts +15 -0
  156. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js +14 -0
  157. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersList.js.map +1 -0
  158. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.d.ts +1 -0
  159. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js +94 -0
  160. package/dist/editor/settings/setup-steps/AiSetupStep/required-containers/RequiredContainersSection.js.map +1 -0
  161. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.d.ts +1 -0
  162. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js +367 -0
  163. package/dist/editor/settings/setup-steps/AiSetupStep/tools/GenerateToolsSection.js.map +1 -0
  164. package/dist/editor/settings/setup-steps/AiSetupStep/types.d.ts +1 -0
  165. package/dist/editor/settings/setup-steps/AiSetupStep/types.js +2 -0
  166. package/dist/editor/settings/setup-steps/AiSetupStep/types.js.map +1 -0
  167. package/dist/editor/settings/setup-steps/AiSetupStep/utils.d.ts +5 -0
  168. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js +44 -0
  169. package/dist/editor/settings/setup-steps/AiSetupStep/utils.js.map +1 -0
  170. package/dist/editor/settings/setup-steps/IndexSetupStep.d.ts +2 -0
  171. package/dist/editor/settings/setup-steps/IndexSetupStep.js +36 -0
  172. package/dist/editor/settings/setup-steps/IndexSetupStep.js.map +1 -0
  173. package/dist/editor/settings/setup-steps/SettingsSetupStep.d.ts +2 -0
  174. package/dist/editor/settings/setup-steps/SettingsSetupStep.js +111 -0
  175. package/dist/editor/settings/setup-steps/SettingsSetupStep.js.map +1 -0
  176. package/dist/editor/settings/setup-steps/SetupOverview.d.ts +14 -0
  177. package/dist/editor/settings/setup-steps/SetupOverview.js +38 -0
  178. package/dist/editor/settings/setup-steps/SetupOverview.js.map +1 -0
  179. package/dist/editor/settings/status/coreStatusChecks.d.ts +25 -0
  180. package/dist/editor/settings/status/coreStatusChecks.js +231 -0
  181. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -0
  182. package/dist/editor/settings/status/index.d.ts +3 -0
  183. package/dist/editor/settings/status/index.js +3 -0
  184. package/dist/editor/settings/status/index.js.map +1 -0
  185. package/dist/editor/settings/status/useStartupChecks.d.ts +17 -0
  186. package/dist/editor/settings/status/useStartupChecks.js +54 -0
  187. package/dist/editor/settings/status/useStartupChecks.js.map +1 -0
  188. package/dist/editor/sidebar/EditHistory.js +18 -14
  189. package/dist/editor/sidebar/EditHistory.js.map +1 -1
  190. package/dist/editor/sidebar/MainContentTree.js +0 -1
  191. package/dist/editor/sidebar/MainContentTree.js.map +1 -1
  192. package/dist/editor/sidebar/OperationItem.js +4 -3
  193. package/dist/editor/sidebar/OperationItem.js.map +1 -1
  194. package/dist/editor/ui/PerfectTree.js +1 -1
  195. package/dist/editor/ui/PerfectTree.js.map +1 -1
  196. package/dist/editor/ui/Section.js +3 -3
  197. package/dist/editor/ui/Section.js.map +1 -1
  198. package/dist/editor/ui/SimpleMenu.js +13 -4
  199. package/dist/editor/ui/SimpleMenu.js.map +1 -1
  200. package/dist/editor/ui/SimpleToolbar.js +1 -1
  201. package/dist/editor/ui/SimpleToolbar.js.map +1 -1
  202. package/dist/editor/utils/keyboardNavigation.js +89 -27
  203. package/dist/editor/utils/keyboardNavigation.js.map +1 -1
  204. package/dist/revision.d.ts +2 -2
  205. package/dist/revision.js +2 -2
  206. package/dist/setup/SetupWizardPage.js +2 -2
  207. package/dist/setup/SetupWizardPage.js.map +1 -1
  208. package/dist/setup/services/setupWizardService.d.ts +132 -12
  209. package/dist/setup/services/setupWizardService.js +82 -6
  210. package/dist/setup/services/setupWizardService.js.map +1 -1
  211. package/dist/setup/wizard/index.d.ts +5 -4
  212. package/dist/setup/wizard/index.js +6 -4
  213. package/dist/setup/wizard/index.js.map +1 -1
  214. package/dist/setup/wizard/steps/AddModelDialog.d.ts +10 -0
  215. package/dist/setup/wizard/steps/AddModelDialog.js +119 -0
  216. package/dist/setup/wizard/steps/AddModelDialog.js.map +1 -0
  217. package/dist/setup/wizard/steps/ImportModelDialog.d.ts +10 -0
  218. package/dist/setup/wizard/steps/ImportModelDialog.js +351 -0
  219. package/dist/setup/wizard/steps/ImportModelDialog.js.map +1 -0
  220. package/dist/splash-screen/ModernSplashScreen.js +1 -1
  221. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  222. package/dist/styles.css +183 -10
  223. package/dist/types.d.ts +36 -1
  224. package/package.json +4 -4
@@ -0,0 +1,206 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useState, useEffect, useMemo, useRef } from "react";
3
+ import { Button } from "../../../components/ui/button";
4
+ import { Input } from "../../../components/ui/input";
5
+ import { Select } from "../../../components/ui/select";
6
+ import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "../../../components/ui/dialog";
7
+ import { setupWizardService, } from "../../../setup/services/setupWizardService";
8
+ import { CheckCircle, AlertCircle, RefreshCw, Plus, Settings, Trash2 } from "lucide-react";
9
+ import { useEditContext } from "../../client/editContext";
10
+ import { Splitter } from "../../ui/Splitter";
11
+ import { ItemConfigPanel } from "./ItemConfigPanel";
12
+ /**
13
+ * Settings panel for AI Providers configuration.
14
+ * Configure AI providers (OpenAI, Azure OpenAI, OpenRouter).
15
+ */
16
+ export function ProvidersPanel() {
17
+ const editContext = useEditContext();
18
+ const [state, setState] = useState("loading");
19
+ const [providers, setProviders] = useState([]);
20
+ const [providerTypes, setProviderTypes] = useState([]);
21
+ const [error, setError] = useState(null);
22
+ const [showForm, setShowForm] = useState(false);
23
+ const [creating, setCreating] = useState(false);
24
+ const [deleting, setDeleting] = useState(null);
25
+ const [formData, setFormData] = useState({
26
+ type: "",
27
+ name: "",
28
+ apiKey: "",
29
+ baseUrl: "",
30
+ });
31
+ const prevShowFormRef = useRef(false);
32
+ // Sidebar editor state
33
+ const [selectedProvider, setSelectedProvider] = useState(null);
34
+ const handleOpenConfig = useCallback((provider) => {
35
+ setSelectedProvider(provider);
36
+ }, []);
37
+ const handleCloseConfig = useCallback(() => {
38
+ setSelectedProvider(null);
39
+ }, []);
40
+ // Get the selected provider type's default base URL
41
+ const selectedProviderType = useMemo(() => providerTypes.find((p) => p.providerId === formData.type), [providerTypes, formData.type]);
42
+ const loadData = useCallback(async () => {
43
+ try {
44
+ setState("loading");
45
+ setError(null);
46
+ const [providersData, providerTypesData] = await Promise.all([
47
+ setupWizardService.getProviders(),
48
+ setupWizardService.getProviderTypes(),
49
+ ]);
50
+ setProviders(providersData);
51
+ setProviderTypes(providerTypesData);
52
+ // Set default form type to first provider type
53
+ const firstProviderType = providerTypesData[0];
54
+ if (firstProviderType && !formData.type) {
55
+ setFormData((prev) => ({
56
+ ...prev,
57
+ type: firstProviderType.providerId,
58
+ name: firstProviderType.displayName,
59
+ }));
60
+ }
61
+ setState("success");
62
+ }
63
+ catch (e) {
64
+ setState("error");
65
+ setError(e?.message || "Failed to load data");
66
+ }
67
+ }, [formData.type]);
68
+ const handleCreate = useCallback(async () => {
69
+ if (!formData.name || !formData.apiKey) {
70
+ setError("Name and API Key are required");
71
+ return;
72
+ }
73
+ try {
74
+ setCreating(true);
75
+ setError(null);
76
+ const baseUrl = formData.baseUrl || selectedProviderType?.defaultBaseUrl || "";
77
+ await setupWizardService.createProvider({
78
+ ...formData,
79
+ baseUrl,
80
+ });
81
+ // Reset form to first provider type
82
+ const firstProviderType = providerTypes[0];
83
+ setFormData({
84
+ type: firstProviderType?.providerId || "",
85
+ name: firstProviderType?.displayName || "",
86
+ apiKey: "",
87
+ baseUrl: "",
88
+ });
89
+ setShowForm(false);
90
+ await loadData();
91
+ }
92
+ catch (e) {
93
+ setError(e?.message || "Failed to create provider");
94
+ }
95
+ finally {
96
+ setCreating(false);
97
+ }
98
+ }, [formData, selectedProviderType, providerTypes, loadData]);
99
+ // Reset form when dialog opens (only when transitioning from closed to open)
100
+ useEffect(() => {
101
+ const wasClosed = !prevShowFormRef.current;
102
+ const isOpen = showForm;
103
+ if (isOpen && wasClosed && providerTypes.length > 0) {
104
+ const firstProviderType = providerTypes[0];
105
+ setFormData({
106
+ type: firstProviderType?.providerId || "",
107
+ name: firstProviderType?.displayName || "",
108
+ apiKey: "",
109
+ baseUrl: "",
110
+ });
111
+ setError(null);
112
+ }
113
+ prevShowFormRef.current = showForm;
114
+ }, [showForm, providerTypes]);
115
+ const handleDelete = useCallback((providerId) => {
116
+ editContext?.confirm({
117
+ header: "Delete Provider",
118
+ message: "Are you sure you want to delete this provider? This action cannot be undone.",
119
+ acceptLabel: "Delete",
120
+ showCancel: true,
121
+ accept: async () => {
122
+ try {
123
+ setDeleting(providerId);
124
+ setError(null);
125
+ await setupWizardService.deleteProvider(providerId);
126
+ await loadData();
127
+ }
128
+ catch (e) {
129
+ setError(e?.message || "Failed to delete provider");
130
+ }
131
+ finally {
132
+ setDeleting(null);
133
+ }
134
+ },
135
+ });
136
+ }, [editContext, loadData]);
137
+ useEffect(() => {
138
+ loadData();
139
+ }, [loadData]);
140
+ const statusIcon = (currentState) => {
141
+ if (currentState === "success")
142
+ return _jsx(CheckCircle, { className: "h-4 w-4 text-green-600", strokeWidth: 1 });
143
+ if (currentState === "error")
144
+ return _jsx(AlertCircle, { className: "h-4 w-4 text-red-600", strokeWidth: 1 });
145
+ return (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin text-amber-600", strokeWidth: 1 }));
146
+ };
147
+ // Build provider type options
148
+ const providerTypeOptions = useMemo(() => providerTypes.map((p) => ({
149
+ value: p.providerId,
150
+ label: p.displayName,
151
+ })), [providerTypes]);
152
+ // Build the providers list content
153
+ const providersListContent = (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsx("div", { className: "mx-auto", children: _jsx("div", { className: "rounded-lg bg-white p-4 md:p-6", children: _jsxs("div", { className: "space-y-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2", children: [statusIcon(state), _jsxs("span", { className: "text-sm text-gray-700", children: [providers.length, " provider", providers.length !== 1 ? "s" : "", " configured"] })] }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => setShowForm(true), disabled: providerTypes.length === 0, children: [_jsx(Plus, { strokeWidth: 1, className: "h-4 w-4" }), "Add Provider"] })] }), providerTypes.length === 0 && state === "success" && (_jsx("div", { className: "rounded border border-yellow-200 bg-yellow-50 p-3 text-sm text-yellow-800", children: "No provider types are available. Please check the server configuration." })), _jsx(Dialog, { open: showForm, onOpenChange: setShowForm, children: _jsxs(DialogContent, { className: "max-w-xl", children: [_jsx(DialogHeader, { children: _jsx(DialogTitle, { children: "Add Provider" }) }), _jsxs("div", { className: "flex flex-col gap-6 p-8", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "provider-type", className: "text-sm font-medium text-gray-700 block mb-1", children: "Provider Type" }), _jsx(Select, { id: "provider-type", value: formData.type, onValueChange: (value) => {
154
+ const providerType = providerTypes.find((p) => p.providerId === value);
155
+ setFormData({
156
+ ...formData,
157
+ type: value,
158
+ name: providerType?.displayName || value,
159
+ });
160
+ }, options: providerTypeOptions, placeholder: "Select provider type" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "provider-name", className: "text-sm font-medium text-gray-700 block mb-1", children: "Name" }), _jsx(Input, { id: "provider-name", value: formData.name, onChange: (e) => setFormData({ ...formData, name: e.target.value }), placeholder: "My Provider" })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "provider-apikey", className: "text-sm font-medium text-gray-700 block mb-1", children: "API Key" }), _jsx(Input, { id: "provider-apikey", type: "password", value: formData.apiKey, onChange: (e) => setFormData({ ...formData, apiKey: e.target.value }), placeholder: "sk-..." })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "provider-baseurl", className: "text-sm font-medium text-gray-700 block mb-1", children: "Base URL (optional)" }), _jsx(Input, { id: "provider-baseurl", value: formData.baseUrl, onChange: (e) => setFormData({ ...formData, baseUrl: e.target.value }), placeholder: selectedProviderType?.defaultBaseUrl || "" })] }), error && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-3 text-sm text-red-700", children: error }))] }), _jsxs(DialogFooter, { className: "px-6 pb-6", children: [_jsx(Button, { variant: "outline", onClick: () => {
161
+ setShowForm(false);
162
+ const firstProviderType = providerTypes[0];
163
+ setFormData({
164
+ type: firstProviderType?.providerId || "",
165
+ name: "",
166
+ apiKey: "",
167
+ baseUrl: "",
168
+ });
169
+ setError(null);
170
+ }, children: "Cancel" }), _jsx(Button, { onClick: handleCreate, disabled: creating || !formData.name || !formData.apiKey || !formData.type, children: creating ? (_jsxs(_Fragment, { children: [_jsx(RefreshCw, { strokeWidth: 1, className: "mr-2 h-4 w-4 animate-spin" }), "Creating..."] })) : (_jsxs(_Fragment, { children: [_jsx(CheckCircle, { strokeWidth: 1, className: "mr-2 h-4 w-4" }), "Create"] })) })] })] }) }), providers.length > 0 && (_jsx("div", { className: "space-y-1", children: providers.map((provider) => {
171
+ // Look up display name from provider types
172
+ const providerType = providerTypes.find((p) => p.providerId === provider.type);
173
+ const providerTypeDisplayName = providerType?.displayName || provider.type || "Unknown";
174
+ const isSelected = selectedProvider?.id === provider.id;
175
+ return (_jsxs("div", { className: `flex items-center justify-between rounded border p-2 text-sm transition-shadow hover:shadow-sm ${isSelected
176
+ ? "border-blue-400 bg-blue-50"
177
+ : "border-gray-200 bg-white"}`, children: [_jsxs("div", { className: "flex-1", children: [_jsx("span", { className: "font-medium", children: provider.name }), _jsxs("span", { className: "ml-2 text-gray-500", children: ["(", providerTypeDisplayName, ")"] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("span", { className: "text-xs text-gray-400", children: provider.baseUrl }), _jsxs(Button, { size: "sm", variant: isSelected ? "default" : "ghost", onClick: () => handleOpenConfig(provider), className: "shrink-0", children: [_jsx(Settings, { className: "h-4 w-4", strokeWidth: 1.5 }), "Configure"] }), _jsx("button", { onClick: () => handleDelete(provider.id), disabled: deleting === provider.id, className: "text-gray-500 hover:text-red-600 disabled:opacity-50 disabled:cursor-not-allowed", title: "Delete provider", children: deleting === provider.id ? (_jsx(RefreshCw, { className: "h-4 w-4 animate-spin", strokeWidth: 1 })) : (_jsx(Trash2, { className: "h-4 w-4", strokeWidth: 1 })) })] })] }, provider.id));
178
+ }) })), error && !showForm && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-2 text-xs whitespace-pre-wrap text-red-700", children: error }))] }) }) }) }));
179
+ // Build splitter panels - only show config panel when a provider is selected
180
+ const panels = selectedProvider?.id
181
+ ? [
182
+ {
183
+ name: "providers-list",
184
+ defaultSize: "auto",
185
+ content: providersListContent,
186
+ className: "overflow-hidden",
187
+ },
188
+ {
189
+ name: "provider-config",
190
+ defaultSize: 400,
191
+ content: (_jsx(ItemConfigPanel, { itemId: selectedProvider.id, title: `Configure: ${selectedProvider.name || "Provider"}`, onClose: handleCloseConfig }, selectedProvider.id)),
192
+ className: "overflow-hidden",
193
+ },
194
+ ]
195
+ : [
196
+ {
197
+ name: "providers-list",
198
+ defaultSize: "auto",
199
+ content: providersListContent,
200
+ className: "overflow-hidden",
201
+ },
202
+ ];
203
+ return (_jsx(Splitter, { panels: panels, localStorageKey: "providers-panel-splitter", direction: "horizontal", className: "h-full" }));
204
+ }
205
+ export default ProvidersPanel;
206
+ //# sourceMappingURL=ProvidersPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvidersPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/ProvidersPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel for Search configuration.
3
+ * Configure search index and embeddings models.
4
+ */
5
+ export declare function SearchConfigPanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default SearchConfigPanel;
@@ -0,0 +1,134 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useState, useEffect, useRef } from "react";
3
+ import { Select } from "../../../components/ui/select";
4
+ import { setupWizardService, } from "../../../setup/services/setupWizardService";
5
+ import { AlertCircle, RefreshCw, ArrowRight } from "lucide-react";
6
+ import { Button } from "../../../components/ui/button";
7
+ import { useEditContext } from "../../client/editContext";
8
+ /**
9
+ * Settings panel for Search configuration.
10
+ * Configure search index and embeddings models.
11
+ */
12
+ export function SearchConfigPanel() {
13
+ const editContext = useEditContext();
14
+ const [state, setState] = useState("loading");
15
+ const [embeddingsModels, setEmbeddingsModels] = useState([]);
16
+ const [error, setError] = useState(null);
17
+ const [selectedModelId, setSelectedModelId] = useState("");
18
+ const [saving, setSaving] = useState(false);
19
+ const previousModelId = useRef("");
20
+ const hasLoaded = useRef(false);
21
+ const loadData = useCallback(async () => {
22
+ try {
23
+ setState("loading");
24
+ setError(null);
25
+ // Load models and current config in parallel
26
+ const [models, config] = await Promise.all([
27
+ setupWizardService.getEmbeddingsModels(),
28
+ setupWizardService.getEmbeddingsConfig(),
29
+ ]);
30
+ // #region agent log
31
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:38', message: 'Loaded models and config', data: { modelsCount: models.length, modelIds: models.map(m => m.id), configModelId: config.modelId }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'D' }) }).catch(() => { });
32
+ // #endregion
33
+ setEmbeddingsModels(models);
34
+ // Pre-select the currently configured model
35
+ if (config.modelId) {
36
+ // Normalize GUID format: remove braces and convert to lowercase for comparison
37
+ const normalizeGuid = (guid) => guid.replace(/[{}]/g, '').toLowerCase();
38
+ const normalizedConfigId = normalizeGuid(config.modelId);
39
+ // #region agent log
40
+ const foundModel = models.find((m) => normalizeGuid(m.id) === normalizedConfigId);
41
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:42', message: 'Matching config modelId to models', data: { configModelId: config.modelId, normalizedConfigId, foundModel: foundModel ? { id: foundModel.id, name: foundModel.name } : null, allModelIds: models.map(m => m.id) }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'D' }) }).catch(() => { });
42
+ // #endregion
43
+ // Use the original model ID from the models array (not the config ID) to ensure consistency
44
+ if (foundModel) {
45
+ setSelectedModelId(foundModel.id);
46
+ previousModelId.current = foundModel.id;
47
+ }
48
+ else {
49
+ // Fallback: use normalized config ID if model not found
50
+ setSelectedModelId(normalizedConfigId);
51
+ previousModelId.current = normalizedConfigId;
52
+ }
53
+ }
54
+ else {
55
+ setSelectedModelId("");
56
+ previousModelId.current = "";
57
+ }
58
+ setState("success");
59
+ hasLoaded.current = true;
60
+ }
61
+ catch (e) {
62
+ setState("error");
63
+ setError(e?.message || "Failed to load embeddings configuration");
64
+ hasLoaded.current = true;
65
+ }
66
+ }, []);
67
+ const handleSave = useCallback(async (modelId) => {
68
+ // #region agent log
69
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:58', message: 'handleSave entry', data: { modelId, embeddingsModelsCount: embeddingsModels.length }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'B,D' }) }).catch(() => { });
70
+ // #endregion
71
+ if (!modelId) {
72
+ return;
73
+ }
74
+ const selectedModel = embeddingsModels.find((m) => m.id === modelId);
75
+ // #region agent log
76
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:64', message: 'Found selected model', data: { modelId, selectedModel: selectedModel ? { id: selectedModel.id, name: selectedModel.name, providerId: selectedModel.providerId } : null }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'D' }) }).catch(() => { });
77
+ // #endregion
78
+ if (!selectedModel) {
79
+ return;
80
+ }
81
+ try {
82
+ setSaving(true);
83
+ setError(null);
84
+ // #region agent log
85
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:72', message: 'Calling setEmbeddingsConfig', data: { modelId, providerId: selectedModel.providerId }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'B' }) }).catch(() => { });
86
+ // #endregion
87
+ await setupWizardService.setEmbeddingsConfig({
88
+ modelId: modelId,
89
+ providerId: selectedModel.providerId,
90
+ });
91
+ // #region agent log
92
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:76', message: 'setEmbeddingsConfig succeeded', data: {}, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'C' }) }).catch(() => { });
93
+ // #endregion
94
+ setState("success");
95
+ }
96
+ catch (e) {
97
+ setState("error");
98
+ setError(e?.message || "Failed to save embeddings configuration");
99
+ // #region agent log
100
+ fetch('http://127.0.0.1:7242/ingest/b6a83b57-9765-43da-85c5-ac18e7ff4259', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ location: 'SearchConfigPanel.tsx:79', message: 'setEmbeddingsConfig error', data: { error: e?.message }, timestamp: Date.now(), sessionId: 'debug-session', runId: 'run1', hypothesisId: 'C' }) }).catch(() => { });
101
+ // #endregion
102
+ }
103
+ finally {
104
+ setSaving(false);
105
+ }
106
+ }, [embeddingsModels]);
107
+ useEffect(() => {
108
+ loadData();
109
+ }, [loadData]);
110
+ // Auto-save when model is selected (but not on initial load)
111
+ useEffect(() => {
112
+ if (hasLoaded.current &&
113
+ selectedModelId !== previousModelId.current &&
114
+ embeddingsModels.length > 0 &&
115
+ state === "success") {
116
+ previousModelId.current = selectedModelId;
117
+ // Only save if a model is actually selected (not empty)
118
+ if (selectedModelId) {
119
+ handleSave(selectedModelId);
120
+ }
121
+ }
122
+ }, [selectedModelId, embeddingsModels, state, handleSave]);
123
+ return (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsxs("div", { className: "mx-auto space-y-4", children: [embeddingsModels.length === 0 && (_jsx("div", { className: "rounded border border-yellow-200 bg-yellow-50 p-4", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(AlertCircle, { className: "mt-0.5 h-5 w-5 shrink-0 text-yellow-600" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "mb-1 text-sm font-medium text-yellow-800", children: "No embeddings models found" }), _jsx("p", { className: "mb-3 text-xs text-yellow-700", children: "Please install embeddings models in the model settings page." }), _jsxs(Button, { size: "sm", variant: "outline", onClick: () => {
124
+ editContext?.updateUrl({ view: "settings", ccpanel: "ai-models" });
125
+ }, className: "text-xs", children: ["Go to Model Settings", _jsx(ArrowRight, { className: "ml-1 h-3 w-3" })] })] })] }) })), embeddingsModels.length > 0 && (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { htmlFor: "embeddings-model", className: "mb-1 block text-sm font-medium text-gray-700", children: "Embeddings Model" }), _jsx(Select, { id: "embeddings-model", value: selectedModelId, onValueChange: setSelectedModelId, options: [
126
+ { value: "", label: "Select..." },
127
+ ...embeddingsModels.map((model) => ({
128
+ value: model.id,
129
+ label: `${model.name}${model.providerName ? ` (${model.providerName})` : ""}`,
130
+ })),
131
+ ], placeholder: "Select embeddings model", disabled: saving }), saving && (_jsxs("div", { className: "flex items-center gap-2 text-xs text-gray-500", children: [_jsx(RefreshCw, { className: "h-3 w-3 animate-spin" }), "Saving..."] }))] })), error && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-2 text-xs whitespace-pre-wrap text-red-700", children: error }))] }) }));
132
+ }
133
+ export default SearchConfigPanel;
134
+ //# sourceMappingURL=SearchConfigPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchConfigPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/SearchConfigPanel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel for Parhelia System Settings.
3
+ * Provides a link to open the settings item in the content editor.
4
+ */
5
+ export declare function SettingsPanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default SettingsPanel;
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useState } from "react";
3
+ import { useEditContext } from "../../client/editContext";
4
+ import { Card } from "../../../components/ui/card";
5
+ import { Button } from "../../../components/ui/button";
6
+ import { Settings, ExternalLink, RefreshCw } from "lucide-react";
7
+ /**
8
+ * Settings panel for Parhelia System Settings.
9
+ * Provides a link to open the settings item in the content editor.
10
+ */
11
+ export function SettingsPanel() {
12
+ const editContext = useEditContext();
13
+ const [loading, setLoading] = useState(false);
14
+ const [error, setError] = useState(null);
15
+ const handleOpenSettings = useCallback(async () => {
16
+ if (!editContext)
17
+ return;
18
+ try {
19
+ setLoading(true);
20
+ setError(null);
21
+ const item = await editContext.loadItem("/sitecore/system/Parhelia/Settings");
22
+ if (item) {
23
+ editContext.switchView("content-tree");
24
+ }
25
+ else {
26
+ setError("Failed to load Parhelia settings item: item not found");
27
+ }
28
+ }
29
+ catch (err) {
30
+ setError(err?.message || "Failed to load Parhelia settings item");
31
+ }
32
+ finally {
33
+ setLoading(false);
34
+ }
35
+ }, [editContext]);
36
+ return (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsx("div", { className: "mx-auto", children: _jsx(Card, { icon: _jsx(Settings, { strokeWidth: 1, className: "h-5 w-5" }), title: "Parhelia System Settings", description: "Open and edit the Parhelia system settings item.", children: _jsxs("div", { className: "space-y-4", children: [_jsx("p", { className: "text-sm text-gray-600", children: "The Parhelia Settings item contains system-wide configuration options such as default languages, security settings, and integration options." }), _jsxs(Button, { onClick: handleOpenSettings, disabled: loading, className: "w-full", children: [loading ? (_jsx(RefreshCw, { strokeWidth: 1, className: "mr-2 h-4 w-4 animate-spin" })) : (_jsx(ExternalLink, { strokeWidth: 1, className: "mr-2 h-4 w-4" })), "Open Settings Item"] }), error && (_jsx("div", { className: "rounded border border-red-200 bg-red-50 p-2 text-xs whitespace-pre-wrap text-red-700", children: error }))] }) }) }) }));
37
+ }
38
+ export default SettingsPanel;
39
+ //# sourceMappingURL=SettingsPanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SettingsPanel.js","sourceRoot":"","sources":["../../../../src/editor/settings/panels/SettingsPanel.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEjE;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAExD,MAAM,kBAAkB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAChD,IAAI,CAAC,WAAW;YAAE,OAAO;QAEzB,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,QAAQ,CACrC,oCAAoC,CACrC,CAAC;YACF,IAAI,IAAI,EAAE,CAAC;gBACT,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,uDAAuD,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,QAAQ,CAAC,GAAG,EAAE,OAAO,IAAI,uCAAuC,CAAC,CAAC;QACpE,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;IAElB,OAAO,CACL,cAAK,SAAS,EAAC,0BAA0B,YACvC,cAAK,SAAS,EAAC,SAAS,YACtB,KAAC,IAAI,IACH,IAAI,EAAE,KAAC,QAAQ,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,SAAS,GAAG,EACtD,KAAK,EAAC,0BAA0B,EAChC,WAAW,EAAC,kDAAkD,YAE9D,eAAK,SAAS,EAAC,WAAW,aACxB,YAAG,SAAS,EAAC,uBAAuB,6JAIhC,EAEJ,MAAC,MAAM,IACL,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAC,QAAQ,aAEjB,OAAO,CAAC,CAAC,CAAC,CACT,KAAC,SAAS,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,2BAA2B,GAAG,CACpE,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IAAC,WAAW,EAAE,CAAC,EAAE,SAAS,EAAC,cAAc,GAAG,CAC1D,0BAEM,EAER,KAAK,IAAI,CACR,cAAK,SAAS,EAAC,sFAAsF,YAClG,KAAK,GACF,CACP,IACG,GACD,GACH,GACF,CACP,CAAC;AACJ,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Settings panel that displays system status and configuration issues.
3
+ * Runs all registered status checks and displays actionable items.
4
+ */
5
+ export declare function StatusPanel(): import("react/jsx-runtime").JSX.Element;
6
+ export default StatusPanel;
@@ -0,0 +1,141 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useState, useEffect, useMemo } from "react";
3
+ import { Button } from "../../../components/ui/button";
4
+ import { useEditContext } from "../../client/editContext";
5
+ import { CheckCircle, AlertCircle, AlertTriangle, Info, RefreshCw, ArrowRight, ShieldAlert, Play, } from "lucide-react";
6
+ /**
7
+ * Settings panel that displays system status and configuration issues.
8
+ * Runs all registered status checks and displays actionable items.
9
+ */
10
+ export function StatusPanel() {
11
+ const editContext = useEditContext();
12
+ const [checkStatuses, setCheckStatuses] = useState([]);
13
+ const [overallState, setOverallState] = useState("idle");
14
+ const statusChecks = editContext?.configuration?.statusChecks || [];
15
+ // Initialize check statuses when checks change
16
+ useEffect(() => {
17
+ if (statusChecks.length > 0) {
18
+ setCheckStatuses(statusChecks.map((check) => ({
19
+ id: check.id,
20
+ name: check.name,
21
+ state: "idle",
22
+ results: [],
23
+ isBlocking: check.isBlocking ?? false,
24
+ })));
25
+ }
26
+ }, [statusChecks]);
27
+ const runAllChecks = useCallback(async () => {
28
+ if (statusChecks.length === 0) {
29
+ setOverallState("success");
30
+ return;
31
+ }
32
+ setOverallState("loading");
33
+ // Initialize all checks as loading
34
+ setCheckStatuses(statusChecks.map((check) => ({
35
+ id: check.id,
36
+ name: check.name,
37
+ state: "loading",
38
+ results: [],
39
+ isBlocking: check.isBlocking ?? false,
40
+ })));
41
+ // Run all checks in parallel
42
+ const checkPromises = statusChecks.map(async (check) => {
43
+ try {
44
+ const results = await check.check();
45
+ return {
46
+ id: check.id,
47
+ name: check.name,
48
+ state: "success",
49
+ results,
50
+ isBlocking: check.isBlocking ?? false,
51
+ };
52
+ }
53
+ catch (e) {
54
+ return {
55
+ id: check.id,
56
+ name: check.name,
57
+ state: "error",
58
+ results: [
59
+ {
60
+ id: `${check.id}-error`,
61
+ title: `${check.name} Check Failed`,
62
+ description: e?.message || "An error occurred during the check",
63
+ severity: "error",
64
+ },
65
+ ],
66
+ isBlocking: check.isBlocking ?? false,
67
+ };
68
+ }
69
+ });
70
+ const results = await Promise.all(checkPromises);
71
+ setCheckStatuses(results);
72
+ setOverallState("success");
73
+ }, [statusChecks]);
74
+ // Run checks on mount
75
+ useEffect(() => {
76
+ runAllChecks();
77
+ }, [runAllChecks]);
78
+ // Aggregate all issues from all checks
79
+ const allIssues = useMemo(() => {
80
+ return checkStatuses.flatMap((status) => status.results);
81
+ }, [checkStatuses]);
82
+ // Group issues by severity
83
+ const issuesBySeverity = useMemo(() => {
84
+ const errors = allIssues.filter((issue) => issue.severity === "error");
85
+ const warnings = allIssues.filter((issue) => issue.severity === "warning");
86
+ const infos = allIssues.filter((issue) => issue.severity === "info");
87
+ return { errors, warnings, infos };
88
+ }, [allIssues]);
89
+ // Check if there are any blocking issues (from blocking checks that have issues)
90
+ const hasBlockingIssues = useMemo(() => {
91
+ return checkStatuses.some((status) => status.isBlocking && status.results.length > 0);
92
+ }, [checkStatuses]);
93
+ // Handle continue to default view
94
+ const handleContinue = useCallback(() => {
95
+ // Navigate to the splash screen or default view
96
+ editContext?.openSplashScreen();
97
+ }, [editContext]);
98
+ const handleNavigate = useCallback((issue) => {
99
+ if (!issue.targetPanel)
100
+ return;
101
+ // Navigate to the target panel
102
+ editContext?.updateUrl({ view: "settings", ccpanel: issue.targetPanel });
103
+ // If there's a hash, set it after a small delay
104
+ if (issue.targetHash && typeof window !== "undefined") {
105
+ setTimeout(() => {
106
+ window.location.hash = issue.targetHash;
107
+ }, 50);
108
+ }
109
+ }, [editContext]);
110
+ const getSeverityIcon = (severity) => {
111
+ switch (severity) {
112
+ case "error":
113
+ return _jsx(AlertCircle, { className: "h-5 w-5 text-red-500", strokeWidth: 1.5 });
114
+ case "warning":
115
+ return (_jsx(AlertTriangle, { className: "h-5 w-5 text-amber-500", strokeWidth: 1.5 }));
116
+ case "info":
117
+ return _jsx(Info, { className: "h-5 w-5 text-blue-500", strokeWidth: 1.5 });
118
+ }
119
+ };
120
+ const getSeverityBorder = (severity) => {
121
+ switch (severity) {
122
+ case "error":
123
+ return "border-red-200 bg-red-50";
124
+ case "warning":
125
+ return "border-amber-200 bg-amber-50";
126
+ case "info":
127
+ return "border-blue-200 bg-blue-50";
128
+ }
129
+ };
130
+ const isLoading = overallState === "loading";
131
+ const hasIssues = allIssues.length > 0;
132
+ return (_jsx("div", { className: "h-full overflow-auto p-4", children: _jsxs("div", { className: "mx-auto max-w-3xl", children: [!isLoading && hasBlockingIssues && (_jsx("div", { className: "mb-6 rounded-lg border border-red-300 bg-red-50 p-4", children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx(ShieldAlert, { className: "mt-0.5 h-6 w-6 flex-shrink-0 text-red-600", strokeWidth: 1.5 }), _jsxs("div", { className: "flex-1", children: [_jsx("h3", { className: "text-base font-semibold text-red-800", children: "Critical Issues Detected" }), _jsx("p", { className: "mt-1 text-sm text-red-700", children: "There are critical configuration issues that must be resolved before you can continue using Parhelia. Please fix the issues listed below." })] })] }) })), _jsxs("div", { className: "mb-6 flex items-center justify-between", children: [_jsx("div", { className: "flex items-center gap-3", children: isLoading ? (_jsxs(_Fragment, { children: [_jsx(RefreshCw, { className: "h-5 w-5 animate-spin text-amber-600", strokeWidth: 1.5 }), _jsx("span", { className: "text-sm text-gray-600", children: "Running status checks..." })] })) : hasIssues ? (_jsxs(_Fragment, { children: [_jsx(AlertTriangle, { className: "h-5 w-5 text-amber-500", strokeWidth: 1.5 }), _jsxs("span", { className: "text-sm text-gray-600", children: [allIssues.length, " issue", allIssues.length !== 1 ? "s" : "", " found", issuesBySeverity.errors.length > 0 && (_jsxs("span", { className: "ml-1 text-red-600", children: ["(", issuesBySeverity.errors.length, " error", issuesBySeverity.errors.length !== 1 ? "s" : "", ")"] }))] })] })) : (_jsxs(_Fragment, { children: [_jsx(CheckCircle, { className: "h-5 w-5 text-green-500", strokeWidth: 1.5 }), _jsx("span", { className: "text-sm text-gray-600", children: "All systems operational" })] })) }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { size: "sm", variant: "outline", onClick: runAllChecks, disabled: isLoading, children: [_jsx(RefreshCw, { className: `mr-1 h-4 w-4 ${isLoading ? "animate-spin" : ""}`, strokeWidth: 1.5 }), "Refresh"] }), !isLoading && !hasBlockingIssues && (_jsxs(Button, { size: "sm", onClick: handleContinue, children: [_jsx(Play, { className: "mr-1 h-4 w-4", strokeWidth: 1.5 }), "Continue"] }))] })] }), isLoading && (_jsxs("div", { className: "mb-6 space-y-2 rounded-lg border border-gray-200 bg-gray-50 p-4", children: [_jsx("div", { className: "text-sm font-medium text-gray-700", children: "Running checks:" }), _jsx("div", { className: "space-y-1", children: checkStatuses.map((status) => (_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [status.state === "loading" ? (_jsx(RefreshCw, { className: "h-3 w-3 animate-spin text-amber-500" })) : status.state === "success" ? (_jsx(CheckCircle, { className: "h-3 w-3 text-green-500" })) : (_jsx(AlertCircle, { className: "h-3 w-3 text-red-500" })), _jsx("span", { className: "text-gray-600", children: status.name })] }, status.id))) })] })), !isLoading && !hasIssues && (_jsxs("div", { className: "rounded-lg border border-green-200 bg-green-50 p-6 text-center", children: [_jsx(CheckCircle, { className: "mx-auto mb-3 h-12 w-12 text-green-500", strokeWidth: 1 }), _jsx("h3", { className: "mb-1 text-lg font-medium text-green-800", children: "All Systems Operational" }), _jsx("p", { className: "mb-4 text-sm text-green-700", children: "No configuration issues detected. Your Parhelia installation is properly configured." }), _jsxs(Button, { onClick: handleContinue, children: [_jsx(Play, { className: "mr-2 h-4 w-4", strokeWidth: 1.5 }), "Continue to Parhelia"] })] })), !isLoading && hasIssues && (_jsxs("div", { className: "space-y-3", children: [issuesBySeverity.errors.map((issue) => (_jsx(IssueCard, { issue: issue, icon: getSeverityIcon(issue.severity), borderClass: getSeverityBorder(issue.severity), onNavigate: handleNavigate }, issue.id))), issuesBySeverity.warnings.map((issue) => (_jsx(IssueCard, { issue: issue, icon: getSeverityIcon(issue.severity), borderClass: getSeverityBorder(issue.severity), onNavigate: handleNavigate }, issue.id))), issuesBySeverity.infos.map((issue) => (_jsx(IssueCard, { issue: issue, icon: getSeverityIcon(issue.severity), borderClass: getSeverityBorder(issue.severity), onNavigate: handleNavigate }, issue.id)))] }))] }) }));
133
+ }
134
+ /**
135
+ * Individual issue card component
136
+ */
137
+ function IssueCard({ issue, icon, borderClass, onNavigate, }) {
138
+ return (_jsx("div", { className: `rounded-lg border p-4 ${borderClass}`, children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "mt-0.5 flex-shrink-0", children: icon }), _jsxs("div", { className: "flex-1 min-w-0", children: [_jsx("h4", { className: "font-medium text-gray-900", children: issue.title }), _jsx("p", { className: "mt-1 text-sm text-gray-600 whitespace-pre-wrap", children: issue.description })] }), issue.targetPanel && (_jsxs(Button, { size: "sm", variant: "outline", onClick: () => onNavigate(issue), className: "flex-shrink-0", children: [issue.actionLabel || "Fix", _jsx(ArrowRight, { className: "ml-1 h-3 w-3" })] }))] }) }));
139
+ }
140
+ export default StatusPanel;
141
+ //# sourceMappingURL=StatusPanel.js.map