@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,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":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,MAAM,UAAU,SAAS;IACvB,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,WAAW,EAAE,SAAS,CAAC;IAEzC,MAAM,qBAAqB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QAC5D,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC;QAC7D,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;QACpD,OAAO,GAAG,UAAU,GAAG,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QACrD,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,WAAW,CAAC;QAC9D,IAAI,CAAC,IAAI,IAAI,IAAI,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,MAAM,UAAU,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;QACxC,IAAI,UAAU,IAAI,GAAG;YAAE,OAAO,UAAU,CAAC;QACzC,IAAI,UAAU,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC;QACvC,IAAI,UAAU,IAAI,EAAE;YAAE,OAAO,SAAS,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QACvD,IACE,CAAC,KAAK;YACN,KAAK,KAAK,CAAC;YACX,KAAK,KAAK,CAAC,CAAC;YACZ,CAAC,IAAI;YACL,KAAK,CAAC,IAAI,CAAC;YACX,KAAK,CAAC,KAAK,CAAC;YAEZ,OAAO,CAAC,CAAC;QACX,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;IAC7C,CAAC,CAAC;IAEF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,cAAK,SAAS,EAAC,eAAe,YAC5B,cAAK,SAAS,EAAC,gDAAgD,YAC7D,YAAG,SAAS,EAAC,eAAe,+CAAmC,GAC3D,GACF,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,eAAK,SAAS,EAAC,eAAe,aAE5B,eAAK,SAAS,EAAC,gDAAgD,aAC7D,aAAI,SAAS,EAAC,0CAA0C,4BAEnD,EACL,eAAK,SAAS,EAAC,WAAW,aAExB,0BACE,eAAK,SAAS,EAAC,wCAAwC,aACrD,gBAAO,SAAS,EAAC,mCAAmC,4BAE5C,EACR,gBAAM,SAAS,EAAC,uBAAuB,aACpC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,QAAI,GAAG,EACnD,SAAS,CAAC,MAAM,CAAC,WAAW;wDAC7B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;wDAC9B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE;wDAC/C,CAAC,CAAC,GAAG,IACF,IACH,EACL,SAAS,CAAC,MAAM,CAAC,WAAW;wCAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAClC,cAAK,SAAS,EAAC,qCAAqC,YAClD,cACE,SAAS,EAAE,oBACT,cAAc,CACZ,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,UAAU;gDACd,CAAC,CAAC,YAAY;gDACd,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;oDACjB,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;wDACjB,CAAC,CAAC,eAAe;wDACjB,CAAC,CAAC,cACV,EAAE,EACF,KAAK,EAAE;gDACL,KAAK,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;6CACzF,GACI,GACH,CACP,EACH,aAAG,SAAS,EAAC,4BAA4B,aACtC,qBAAqB,CACpB,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,EAAE,GAAG,YAEJ,IACA,EAGN,0BACE,eAAK,SAAS,EAAC,wCAAwC,aACrD,gBAAO,SAAS,EAAC,mCAAmC,4BAE5C,EACR,gBAAM,SAAS,EAAC,uBAAuB,aACpC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,QAAI,GAAG,EACnD,SAAS,CAAC,MAAM,CAAC,WAAW;wDAC7B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;wDAC9B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE;wDAC/C,CAAC,CAAC,GAAG,IACF,IACH,EACL,SAAS,CAAC,MAAM,CAAC,WAAW;wCAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAClC,cAAK,SAAS,EAAC,qCAAqC,YAClD,cACE,SAAS,EAAE,oBACT,cAAc,CACZ,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,UAAU;gDACd,CAAC,CAAC,YAAY;gDACd,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;oDACjB,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;wDACjB,CAAC,CAAC,eAAe;wDACjB,CAAC,CAAC,cACV,EAAE,EACF,KAAK,EAAE;gDACL,KAAK,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;6CACzF,GACI,GACH,CACP,EACH,YAAG,SAAS,EAAC,4BAA4B,YACtC,SAAS,CAAC,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC;4CAClC,CAAC,CAAC,gBAAgB;4CAClB,CAAC,CAAC,GAAG,qBAAqB,CACtB,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,aAAa,GAChB,IACA,IACF,IACF,EAGN,eAAK,SAAS,EAAC,gDAAgD,aAC7D,aAAI,SAAS,EAAC,0CAA0C,4BAEnD,EACL,eAAK,SAAS,EAAC,WAAW,aAExB,0BACE,eAAK,SAAS,EAAC,wCAAwC,aACrD,gBAAO,SAAS,EAAC,mCAAmC,4BAE5C,EACR,gBAAM,SAAS,EAAC,uBAAuB,aACpC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,QAAI,GAAG,EACnD,SAAS,CAAC,MAAM,CAAC,WAAW;wDAC7B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;wDAC9B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE;wDAC/C,CAAC,CAAC,GAAG,IACF,IACH,EACL,SAAS,CAAC,MAAM,CAAC,WAAW;wCAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAClC,cAAK,SAAS,EAAC,qCAAqC,YAClD,cACE,SAAS,EAAE,oBACT,cAAc,CACZ,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,UAAU;gDACd,CAAC,CAAC,YAAY;gDACd,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;oDACjB,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;wDACjB,CAAC,CAAC,eAAe;wDACjB,CAAC,CAAC,cACV,EAAE,EACF,KAAK,EAAE;gDACL,KAAK,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;6CACzF,GACI,GACH,CACP,EACH,aAAG,SAAS,EAAC,4BAA4B,aACtC,qBAAqB,CACpB,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,EAAE,GAAG,YAEJ,IACA,EAGN,0BACE,eAAK,SAAS,EAAC,wCAAwC,aACrD,gBAAO,SAAS,EAAC,mCAAmC,4BAE5C,EACR,gBAAM,SAAS,EAAC,uBAAuB,aACpC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE,QAAI,GAAG,EACnD,SAAS,CAAC,MAAM,CAAC,WAAW;wDAC7B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC;wDAC9B,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE;wDAC/C,CAAC,CAAC,GAAG,IACF,IACH,EACL,SAAS,CAAC,MAAM,CAAC,WAAW;wCAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,CAClC,cAAK,SAAS,EAAC,qCAAqC,YAClD,cACE,SAAS,EAAE,oBACT,cAAc,CACZ,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,UAAU;gDACd,CAAC,CAAC,YAAY;gDACd,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;oDACjB,CAAC,CAAC,eAAe;oDACjB,CAAC,CAAC,cAAc,CACV,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,KAAK,SAAS;wDACjB,CAAC,CAAC,eAAe;wDACjB,CAAC,CAAC,cACV,EAAE,EACF,KAAK,EAAE;gDACL,KAAK,EAAE,GAAG,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG;6CACzF,GACI,GACH,CACP,EACH,YAAG,SAAS,EAAC,4BAA4B,YACtC,SAAS,CAAC,MAAM,CAAC,WAAW,KAAK,CAAC,CAAC;4CAClC,CAAC,CAAC,gBAAgB;4CAClB,CAAC,CAAC,GAAG,qBAAqB,CACtB,SAAS,CAAC,KAAK,CAAC,WAAW,EAC3B,SAAS,CAAC,MAAM,CAAC,WAAW,CAC7B,aAAa,GAChB,IACA,IACF,IACF,EAGN,eAAK,SAAS,EAAC,gDAAgD,aAC7D,aAAI,SAAS,EAAC,0CAA0C,6BAEnD,EACL,eAAK,SAAS,EAAC,WAAW,aAExB,eAAK,SAAS,EAAC,mCAAmC,aAChD,gBAAO,SAAS,EAAC,mCAAmC,iCAE5C,EACR,gBAAM,SAAS,EAAC,qCAAqC,kBACjD,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IACxC,IACH,EAGN,eAAK,SAAS,EAAC,mCAAmC,aAChD,gBAAO,SAAS,EAAC,mCAAmC,sBAE5C,EACR,gBAAM,SAAS,EAAC,qCAAqC,kBACjD,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IACxC,IACH,IACF,IACF,EAGN,eAAK,SAAS,EAAC,gDAAgD,aAC7D,aAAI,SAAS,EAAC,wCAAwC,6BAAkB,EACxE,eAAK,SAAS,EAAC,mBAAmB,aAC/B,WAAW,EAAE,eAAe,IAAI,CAC/B,YAAG,SAAS,EAAC,0BAA0B,6DAEnC,CACL,EACA,WAAW,EAAE,sBAAsB;gCAClC,WAAW,CAAC,sBAAsB,EAAE;gCACpC,CAAC,WAAW,CAAC,eAAe,IAAI,CAC9B,aAAG,SAAS,EAAC,iBAAiB,8BACxB,WAAW,CAAC,sBAAsB,EAAE,IACtC,CACL,EACF,CAAC,WAAW,EAAE,eAAe;gCAC5B,CAAC,WAAW,EAAE,sBAAsB,EAAE,EAAE,IAAI,CAC1C,YAAG,SAAS,EAAC,gBAAgB,oDAAmC,CACjE,IACC,IACF,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -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;