@parhelia/core 0.3.12824 → 0.3.12827

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 (33) hide show
  1. package/dist/editor/ContentTree.js +18 -54
  2. package/dist/editor/ContentTree.js.map +1 -1
  3. package/dist/editor/ai-image-editor/AiImageEditorDialog.js +29 -4
  4. package/dist/editor/ai-image-editor/AiImageEditorDialog.js.map +1 -1
  5. package/dist/editor/client/hooks/useQuota.d.ts +37 -5
  6. package/dist/editor/client/hooks/useQuota.js +81 -47
  7. package/dist/editor/client/hooks/useQuota.js.map +1 -1
  8. package/dist/editor/reviews/DiffView.d.ts +1 -0
  9. package/dist/editor/reviews/DiffView.js +9 -4
  10. package/dist/editor/reviews/DiffView.js.map +1 -1
  11. package/dist/editor/services/aiService.d.ts +9 -3
  12. package/dist/editor/services/aiService.js.map +1 -1
  13. package/dist/editor/settings/QuotaInfo.js +34 -114
  14. package/dist/editor/settings/QuotaInfo.js.map +1 -1
  15. package/dist/editor/settings/panels/ProviderConfigPanel.d.ts +3 -1
  16. package/dist/editor/settings/panels/ProviderConfigPanel.js +2 -2
  17. package/dist/editor/settings/panels/ProviderConfigPanel.js.map +1 -1
  18. package/dist/editor/settings/panels/ProvidersPanel.js +144 -9
  19. package/dist/editor/settings/panels/ProvidersPanel.js.map +1 -1
  20. package/dist/editor/sidebar/ComponentTree.js +23 -2
  21. package/dist/editor/sidebar/ComponentTree.js.map +1 -1
  22. package/dist/editor/ui/PublishDialog.d.ts +5 -3
  23. package/dist/editor/ui/PublishDialog.js +30 -9
  24. package/dist/editor/ui/PublishDialog.js.map +1 -1
  25. package/dist/lib/nativeDragActivation.d.ts +19 -0
  26. package/dist/lib/nativeDragActivation.js +69 -0
  27. package/dist/lib/nativeDragActivation.js.map +1 -0
  28. package/dist/revision.d.ts +2 -2
  29. package/dist/revision.js +2 -2
  30. package/dist/setup/services/setupWizardService.d.ts +42 -0
  31. package/dist/setup/services/setupWizardService.js +28 -0
  32. package/dist/setup/services/setupWizardService.js.map +1 -1
  33. package/package.json +1 -1
@@ -1,24 +1,85 @@
1
- import { useCallback, useEffect, useState } from "react";
1
+ import { useCallback, useEffect, useMemo, useState } from "react";
2
2
  const DEFAULT_USAGE = {
3
3
  totalTokens: 0,
4
- totalImages: 0,
5
4
  dailyTokens: 0,
5
+ monthlyTokens: 0,
6
+ totalImages: 0,
6
7
  dailyImages: 0,
8
+ monthlyImages: 0,
7
9
  totalCost: 0,
8
10
  dailyCost: 0,
11
+ monthlyCost: 0,
9
12
  };
10
13
  const DEFAULT_LIMITS = {
11
- totalTokens: -1,
12
- dailyTokens: -1,
13
- monthlyTokens: -1,
14
+ totalCost: -1,
15
+ dailyCost: -1,
16
+ monthlyCost: -1,
14
17
  totalImages: -1,
15
18
  dailyImages: -1,
16
19
  monthlyImages: -1,
17
20
  };
21
+ const DIMENSIONS = [
22
+ { key: "dailyCost", label: "Daily cost", unit: "cost" },
23
+ { key: "monthlyCost", label: "Monthly cost", unit: "cost" },
24
+ { key: "totalCost", label: "Cost", unit: "cost" },
25
+ { key: "dailyImages", label: "Daily image", unit: "images" },
26
+ { key: "monthlyImages", label: "Monthly image", unit: "images" },
27
+ { key: "totalImages", label: "Image", unit: "images" },
28
+ ];
29
+ export function formatQuotaValue(unit, value) {
30
+ return unit === "cost" ? `$${value.toFixed(2)}` : value.toLocaleString();
31
+ }
18
32
  function toNumber(value, fallback) {
19
33
  return typeof value === "number" && Number.isFinite(value) ? value : fallback;
20
34
  }
21
- function normalizeQuotaInfo(value) {
35
+ function toStatus(percentage) {
36
+ if (percentage >= 100)
37
+ return "exceeded";
38
+ if (percentage >= 90)
39
+ return "warning";
40
+ if (percentage >= 75)
41
+ return "caution";
42
+ return "ok";
43
+ }
44
+ /**
45
+ * Evaluates every quota dimension against its limit. Mirrors the backend rule: a limit
46
+ * of -1 (or 0 / NaN) is unlimited, and usage at or above a positive limit is exceeded.
47
+ */
48
+ export function evaluateQuota(info) {
49
+ if (!info)
50
+ return { dimensions: [], exceeded: false, warningMessage: null };
51
+ const dimensions = DIMENSIONS.map(({ key, label, unit }) => {
52
+ const limit = toNumber(info.limits[key], -1);
53
+ const used = toNumber(info.usage[key], 0);
54
+ const unlimited = !(limit > 0);
55
+ const percentage = unlimited ? 0 : (used / limit) * 100;
56
+ return {
57
+ key,
58
+ label,
59
+ unit,
60
+ used,
61
+ limit,
62
+ unlimited,
63
+ percentage,
64
+ status: unlimited ? "unlimited" : toStatus(percentage),
65
+ };
66
+ });
67
+ const warnings = [];
68
+ for (const dimension of dimensions) {
69
+ const usedText = formatQuotaValue(dimension.unit, dimension.used);
70
+ const limitText = formatQuotaValue(dimension.unit, dimension.limit);
71
+ if (dimension.status === "exceeded")
72
+ warnings.push(`${dimension.label} limit exceeded (${usedText}/${limitText})`);
73
+ else if (dimension.status === "warning")
74
+ warnings.push(`${dimension.label} usage high: ${Math.round(dimension.percentage)}% (${usedText}/${limitText})`);
75
+ }
76
+ return {
77
+ dimensions,
78
+ exceeded: dimensions.some((d) => d.status === "exceeded"),
79
+ warningMessage: warnings.length > 0 ? warnings.join(", ") : null,
80
+ };
81
+ }
82
+ export function normalizeQuotaInfo(value) {
22
83
  if (!value || typeof value !== "object")
23
84
  return null;
24
85
  const payload = value;
@@ -28,19 +89,22 @@ function normalizeQuotaInfo(value) {
28
89
  return {
29
90
  usage: {
30
91
  totalTokens: toNumber(rawUsage.totalTokens, DEFAULT_USAGE.totalTokens),
31
- totalImages: toNumber(rawUsage.totalImages, DEFAULT_USAGE.totalImages),
32
92
  dailyTokens: toNumber(rawUsage.dailyTokens, DEFAULT_USAGE.dailyTokens),
93
+ monthlyTokens: toNumber(rawUsage.monthlyTokens, DEFAULT_USAGE.monthlyTokens),
94
+ totalImages: toNumber(rawUsage.totalImages, DEFAULT_USAGE.totalImages),
33
95
  dailyImages: toNumber(rawUsage.dailyImages, DEFAULT_USAGE.dailyImages),
96
+ monthlyImages: toNumber(rawUsage.monthlyImages, DEFAULT_USAGE.monthlyImages),
34
97
  totalCost: toNumber(rawUsage.totalCost, DEFAULT_USAGE.totalCost),
35
98
  dailyCost: toNumber(rawUsage.dailyCost, DEFAULT_USAGE.dailyCost),
99
+ monthlyCost: toNumber(rawUsage.monthlyCost, DEFAULT_USAGE.monthlyCost),
36
100
  dailyHistory: Array.isArray(rawUsage.dailyHistory)
37
101
  ? rawUsage.dailyHistory
38
102
  : undefined,
39
103
  },
40
104
  limits: {
41
- totalTokens: toNumber(rawLimits.totalTokens, DEFAULT_LIMITS.totalTokens),
42
- dailyTokens: toNumber(rawLimits.dailyTokens, DEFAULT_LIMITS.dailyTokens),
43
- monthlyTokens: toNumber(rawLimits.monthlyTokens, DEFAULT_LIMITS.monthlyTokens),
105
+ totalCost: toNumber(rawLimits.totalCost, DEFAULT_LIMITS.totalCost),
106
+ dailyCost: toNumber(rawLimits.dailyCost, DEFAULT_LIMITS.dailyCost),
107
+ monthlyCost: toNumber(rawLimits.monthlyCost, DEFAULT_LIMITS.monthlyCost),
44
108
  totalImages: toNumber(rawLimits.totalImages, DEFAULT_LIMITS.totalImages),
45
109
  dailyImages: toNumber(rawLimits.dailyImages, DEFAULT_LIMITS.dailyImages),
46
110
  monthlyImages: toNumber(rawLimits.monthlyImages, DEFAULT_LIMITS.monthlyImages),
@@ -53,47 +117,17 @@ export function useQuota(params) {
53
117
  const updateQuotaInfo = useCallback((value) => {
54
118
  setQuotaInfo(normalizeQuotaInfo(value));
55
119
  }, []);
56
- const isQuotaExceeded = useCallback(() => {
57
- if (!quotaInfo)
58
- return false;
59
- const { usage, limits } = quotaInfo;
60
- if (limits.totalTokens > 0 && usage.totalTokens >= limits.totalTokens)
61
- return true;
62
- if (limits.totalImages > 0 && usage.totalImages >= limits.totalImages)
63
- return true;
64
- return false;
65
- }, [quotaInfo]);
66
- const getQuotaWarningMessage = useCallback(() => {
67
- if (!quotaInfo)
68
- return null;
69
- const { usage, limits } = quotaInfo;
70
- const warnings = [];
71
- if (limits.totalTokens > 0) {
72
- const tokenPercentage = (usage.totalTokens / limits.totalTokens) * 100;
73
- if (tokenPercentage >= 100)
74
- warnings.push(`Token limit exceeded (${usage.totalTokens}/${limits.totalTokens})`);
75
- else if (tokenPercentage >= 90)
76
- warnings.push(`Token usage high: ${Math.round(tokenPercentage)}% (${usage.totalTokens}/${limits.totalTokens})`);
77
- }
78
- if (limits.totalImages > 0) {
79
- const imagePercentage = (usage.totalImages / limits.totalImages) * 100;
80
- if (imagePercentage >= 100)
81
- warnings.push(`Image limit exceeded (${usage.totalImages}/${limits.totalImages})`);
82
- else if (imagePercentage >= 90)
83
- warnings.push(`Image usage high: ${Math.round(imagePercentage)}% (${usage.totalImages}/${limits.totalImages})`);
84
- }
85
- return warnings.length > 0 ? warnings.join(", ") : null;
86
- }, [quotaInfo]);
120
+ const evaluation = useMemo(() => evaluateQuota(quotaInfo), [quotaInfo]);
121
+ const isQuotaExceeded = useCallback(() => evaluation.exceeded, [evaluation.exceeded]);
122
+ const getQuotaWarningMessage = useCallback(() => evaluation.warningMessage, [evaluation.warningMessage]);
87
123
  useEffect(() => {
88
- const warningMessage = getQuotaWarningMessage();
89
- if (warningMessage) {
90
- const exceeded = isQuotaExceeded();
124
+ if (evaluation.warningMessage) {
91
125
  showError({
92
- summary: exceeded ? "AI Quota Exceeded" : "AI Quota Warning",
93
- details: warningMessage,
126
+ summary: evaluation.exceeded ? "AI Quota Exceeded" : "AI Quota Warning",
127
+ details: evaluation.warningMessage,
94
128
  });
95
129
  }
96
- }, [quotaInfo, getQuotaWarningMessage, isQuotaExceeded, showError]);
130
+ }, [evaluation, showError]);
97
131
  return {
98
132
  quotaInfo,
99
133
  setQuotaInfo: updateQuotaInfo,
@@ -1 +1 @@
1
- {"version":3,"file":"useQuota.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useQuota.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useQuota.js","sourceRoot":"","sources":["../../../../src/editor/client/hooks/useQuota.ts"],"names":[],"mappings":"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"}
@@ -13,5 +13,6 @@ interface DiffViewProps {
13
13
  /** How many characters to show at the start and end of a clipped segment */
14
14
  clipContext?: number;
15
15
  }
16
+ export declare function stripHtml(html: string): string;
16
17
  export declare const DiffView: React.FC<DiffViewProps>;
17
18
  export {};
@@ -1,9 +1,14 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { diffWords, diffChars } from "diff";
3
- function stripHtml(html) {
4
- const temp = document.createElement("div");
5
- temp.innerHTML = html;
6
- return temp.textContent || temp.innerText || "";
3
+ export function stripHtml(html) {
4
+ // DOMParser creates an inert document. Avoid assigning reviewer-controlled
5
+ // markup to a live element: SVG/event-handler payloads must never enter the
6
+ // active authoring document, even briefly.
7
+ const parsed = new DOMParser().parseFromString(html, "text/html");
8
+ parsed
9
+ .querySelectorAll("script, style, template, noscript")
10
+ .forEach((element) => element.remove());
11
+ return parsed.body.textContent || "";
7
12
  }
8
13
  /**
9
14
  * Clips a long string by preserving the first and last `contextChars` characters,
@@ -1 +1 @@
1
- {"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../../src/editor/reviews/DiffView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DiffView.js","sourceRoot":"","sources":["../../../src/editor/reviews/DiffView.tsx"],"names":[],"mappings":"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"}
@@ -174,11 +174,14 @@ export type RequestQuotaOptions = {
174
174
  export type QuotaResponsePayload = {
175
175
  usage: {
176
176
  totalTokens: number;
177
- totalImages: number;
178
177
  dailyTokens: number;
178
+ monthlyTokens: number;
179
+ totalImages: number;
179
180
  dailyImages: number;
181
+ monthlyImages: number;
180
182
  totalCost: number;
181
183
  dailyCost: number;
184
+ monthlyCost: number;
182
185
  dailyHistory?: Array<{
183
186
  date: string;
184
187
  tokens: number;
@@ -187,11 +190,14 @@ export type QuotaResponsePayload = {
187
190
  imageCost: number;
188
191
  }>;
189
192
  };
193
+ /** USD for cost limits, counts for images; -1 means unlimited. */
190
194
  limits: {
191
- totalTokens: number;
192
- dailyTokens: number;
195
+ totalCost: number;
196
+ dailyCost: number;
197
+ monthlyCost: number;
193
198
  totalImages: number;
194
199
  dailyImages: number;
200
+ monthlyImages: number;
195
201
  };
196
202
  scope?: QuotaScope;
197
203
  userName?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"aiService.js","sourceRoot":"","sources":["../../../src/editor/services/aiService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"aiService.js","sourceRoot":"","sources":["../../../src/editor/services/aiService.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useCallback, useEffect, useMemo, useState } from "react";
3
3
  import { Users, Coins, Image as ImageIcon, BarChart3, DollarSign, CheckCircle2, } from "lucide-react";
4
4
  import { useEditContext } from "../client/editContext";
5
+ import { evaluateQuota, formatQuotaValue, normalizeQuotaInfo, } from "../client/hooks/useQuota";
5
6
  import { requestQuota } from "../services/aiService";
6
7
  import { QuotaUserPicker } from "./QuotaUserPicker";
7
8
  import { UsageLeaderboard } from "./UsageLeaderboard";
@@ -45,6 +46,28 @@ function DailyUsageBarChart(props) {
45
46
  return (_jsx("span", { className: "text-center", children: shouldShowLabel ? point.day : "" }, point.day));
46
47
  }) }), !hasValues && (_jsx("p", { className: "text-neutral-grey-50 mt-2 text-xs", children: "No usage recorded for this period." }))] }));
47
48
  }
49
+ const PERIOD_TITLES = {
50
+ dailyCost: "Today",
51
+ monthlyCost: "This month",
52
+ totalCost: "All time",
53
+ dailyImages: "Today",
54
+ monthlyImages: "This month",
55
+ totalImages: "All time",
56
+ };
57
+ const STATUS_BAR_CLASS = {
58
+ unlimited: "bg-feedback-green",
59
+ ok: "bg-feedback-green",
60
+ caution: "bg-feedback-orange",
61
+ warning: "bg-component-shared",
62
+ exceeded: "bg-feedback-red",
63
+ };
64
+ function QuotaMeter({ dimension }) {
65
+ const { key, unit, used, limit, unlimited, percentage, status } = dimension;
66
+ return (_jsxs("div", { "data-testid": `quota-meter-${key}`, "data-status": status, children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: PERIOD_TITLES[key] }), _jsxs("span", { className: "text-neutral-grey-50 text-sm", children: [formatQuotaValue(unit, used), " /", " ", unlimited ? "∞" : formatQuotaValue(unit, limit)] })] }), !unlimited && (_jsx("div", { className: "bg-neutral-grey-10 h-2 w-full rounded-full", children: _jsx("div", { className: `h-2 rounded-full ${STATUS_BAR_CLASS[status]}`, style: { width: `${Math.min(100, percentage)}%` } }) })), _jsx("p", { className: "text-neutral-grey-50 mt-1 text-xs", children: unlimited ? "No limit" : `${Math.round(percentage)}% used` })] }));
67
+ }
68
+ function QuotaBox(props) {
69
+ return (_jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": props.testId, children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [props.icon, _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: props.title })] }) }), _jsx("div", { className: "space-y-4 p-4", children: props.children })] }));
70
+ }
48
71
  export function QuotaInfo() {
49
72
  const editContext = useEditContext();
50
73
  const liveQuotaInfo = editContext?.quotaInfo ?? null;
@@ -53,7 +76,6 @@ export function QuotaInfo() {
53
76
  const [selectedMonth, setSelectedMonth] = useState(today.getMonth());
54
77
  const [selectedYear, setSelectedYear] = useState(currentYear);
55
78
  const isAdministrator = editContext?.user?.isAdministrator === true;
56
- const currentUserName = editContext?.user?.name ?? "";
57
79
  const [selectedScope, setSelectedScope] = useState("me");
58
80
  const [selectedUserName, setSelectedUserName] = useState("");
59
81
  const [selectedUserDisplayName, setSelectedUserDisplayName] = useState("");
@@ -82,26 +104,7 @@ export function QuotaInfo() {
82
104
  userName: selectedScope === "user" ? selectedUserName : undefined,
83
105
  });
84
106
  if (response.type === "success" && response.data) {
85
- const payload = response.data;
86
- setScopedQuotaInfo({
87
- usage: {
88
- totalTokens: payload.usage.totalTokens,
89
- totalImages: payload.usage.totalImages,
90
- dailyTokens: payload.usage.dailyTokens,
91
- dailyImages: payload.usage.dailyImages,
92
- totalCost: payload.usage.totalCost,
93
- dailyCost: payload.usage.dailyCost,
94
- dailyHistory: payload.usage.dailyHistory ?? [],
95
- },
96
- limits: {
97
- totalTokens: payload.limits.totalTokens,
98
- dailyTokens: payload.limits.dailyTokens,
99
- monthlyTokens: -1,
100
- totalImages: payload.limits.totalImages,
101
- dailyImages: payload.limits.dailyImages,
102
- monthlyImages: -1,
103
- },
104
- });
107
+ setScopedQuotaInfo(normalizeQuotaInfo(response.data));
105
108
  setScopeError(null);
106
109
  }
107
110
  else {
@@ -115,6 +118,9 @@ export function QuotaInfo() {
115
118
  return;
116
119
  void loadScopedQuotaInfo();
117
120
  }, [isAdministrator, loadScopedQuotaInfo]);
121
+ const evaluation = useMemo(() => evaluateQuota(quotaInfo), [quotaInfo]);
122
+ const costDimensions = evaluation.dimensions.filter((d) => d.unit === "cost");
123
+ const imageDimensions = evaluation.dimensions.filter((d) => d.unit === "images");
118
124
  const dailyHistory = useMemo(() => quotaInfo?.usage.dailyHistory ?? [], [quotaInfo?.usage.dailyHistory]);
119
125
  const availableYears = useMemo(() => {
120
126
  const years = new Set([currentYear]);
@@ -169,42 +175,6 @@ export function QuotaInfo() {
169
175
  acc.imageCost += point.imageCost;
170
176
  return acc;
171
177
  }, { tokens: 0, images: 0, tokenCost: 0, imageCost: 0 }), [dailyChartPoints]);
172
- const formatQuotaPercentage = (used, limit) => {
173
- if (!limit || limit === 0 || limit === -1)
174
- return "No limit";
175
- if (!used && used !== 0)
176
- return "0%";
177
- if (isNaN(used) || isNaN(limit))
178
- return "0%";
179
- const percentage = Math.round((used / limit) * 100);
180
- return `${percentage}%`;
181
- };
182
- const getQuotaStatus = (used, limit) => {
183
- if (!limit || limit === 0 || limit === -1)
184
- return "unlimited";
185
- if (!used && used !== 0)
186
- return "ok";
187
- if (isNaN(used) || isNaN(limit))
188
- return "ok";
189
- const percentage = (used / limit) * 100;
190
- if (percentage >= 100)
191
- return "exceeded";
192
- if (percentage >= 90)
193
- return "warning";
194
- if (percentage >= 75)
195
- return "caution";
196
- return "ok";
197
- };
198
- const getProgressWidth = (used, limit) => {
199
- if (!limit ||
200
- limit === 0 ||
201
- limit === -1 ||
202
- !used ||
203
- isNaN(used) ||
204
- isNaN(limit))
205
- return 0;
206
- return Math.min(100, (used / limit) * 100);
207
- };
208
178
  const adminScopePanel = isAdministrator ? (_jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": "quota-admin-scope-panel", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Users, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Usage scope" })] }) }), _jsxs("div", { className: "p-4", children: [_jsxs("div", { className: "grid gap-4 md:grid-cols-2", children: [_jsxs("div", { className: "space-y-1.5", children: [_jsx("label", { htmlFor: "quota-scope-select", className: "text-neutral-grey-50 block text-xs font-medium", children: "View" }), _jsx(Select, { id: "quota-scope-select", value: selectedScope, onValueChange: (value) => setSelectedScope(value), options: [
209
179
  { value: "me", label: "Me" },
210
180
  { value: "all", label: "All users" },
@@ -218,59 +188,12 @@ export function QuotaInfo() {
218
188
  ? "Loading quota information..."
219
189
  : "No quota information available" }) }), isAdministrator && _jsx(UsageLeaderboard, {})] }));
220
190
  }
221
- return (_jsxs("div", { className: "space-y-10 px-10 pt-0 pb-10", "data-testid": "quota-info-section", children: [adminScopePanel, _jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [_jsxs("div", { className: "overflow-hidden rounded-lg bg-white", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(Coins, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Token usage" })] }) }), _jsxs("div", { className: "space-y-4 p-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: "Total Usage" }), _jsxs("span", { className: "text-neutral-grey-50 text-sm", children: [quotaInfo.usage.totalTokens.toLocaleString(), " /", " ", quotaInfo.limits.totalTokens &&
222
- quotaInfo.limits.totalTokens > 0
223
- ? quotaInfo.limits.totalTokens.toLocaleString()
224
- : ""] })] }), quotaInfo.limits.totalTokens &&
225
- quotaInfo.limits.totalTokens > 0 && (_jsx("div", { className: "bg-neutral-grey-10 h-2 w-full rounded-full", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "exceeded"
226
- ? "bg-feedback-red"
227
- : getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "warning"
228
- ? "bg-component-shared"
229
- : getQuotaStatus(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens) === "caution"
230
- ? "bg-feedback-orange"
231
- : "bg-feedback-green"}`, style: {
232
- width: `${getProgressWidth(quotaInfo.usage.totalTokens, quotaInfo.limits.totalTokens)}%`,
233
- } }) })), _jsxs("p", { className: "text-neutral-grey-50 mt-1 text-xs", 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-neutral-grey-50 text-sm font-medium", children: "Daily Usage" }), _jsxs("span", { className: "text-neutral-grey-50 text-sm", children: [quotaInfo.usage.dailyTokens.toLocaleString(), " /", " ", quotaInfo.limits.dailyTokens &&
234
- quotaInfo.limits.dailyTokens > 0
235
- ? quotaInfo.limits.dailyTokens.toLocaleString()
236
- : "∞"] })] }), quotaInfo.limits.dailyTokens &&
237
- quotaInfo.limits.dailyTokens > 0 && (_jsx("div", { className: "bg-neutral-grey-10 h-2 w-full rounded-full", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "exceeded"
238
- ? "bg-feedback-red"
239
- : getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "warning"
240
- ? "bg-component-shared"
241
- : getQuotaStatus(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens) === "caution"
242
- ? "bg-feedback-orange"
243
- : "bg-feedback-green"}`, style: {
244
- width: `${getProgressWidth(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens)}%`,
245
- } }) })), _jsx("p", { className: "text-neutral-grey-50 mt-1 text-xs", children: quotaInfo.limits.dailyTokens === -1
246
- ? "No daily limit"
247
- : `${formatQuotaPercentage(quotaInfo.usage.dailyTokens, quotaInfo.limits.dailyTokens)} used today` })] })] })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(ImageIcon, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Image usage" })] }) }), _jsxs("div", { className: "space-y-4 p-4", children: [_jsxs("div", { children: [_jsxs("div", { className: "mb-2 flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: "Total Usage" }), _jsxs("span", { className: "text-neutral-grey-50 text-sm", children: [quotaInfo.usage.totalImages.toLocaleString(), " /", " ", quotaInfo.limits.totalImages &&
248
- quotaInfo.limits.totalImages > 0
249
- ? quotaInfo.limits.totalImages.toLocaleString()
250
- : "∞"] })] }), quotaInfo.limits.totalImages &&
251
- quotaInfo.limits.totalImages > 0 && (_jsx("div", { className: "bg-neutral-grey-10 h-2 w-full rounded-full", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "exceeded"
252
- ? "bg-feedback-red"
253
- : getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "warning"
254
- ? "bg-component-shared"
255
- : getQuotaStatus(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages) === "caution"
256
- ? "bg-feedback-orange"
257
- : "bg-feedback-green"}`, style: {
258
- width: `${getProgressWidth(quotaInfo.usage.totalImages, quotaInfo.limits.totalImages)}%`,
259
- } }) })), _jsxs("p", { className: "text-neutral-grey-50 mt-1 text-xs", 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-neutral-grey-50 text-sm font-medium", children: "Daily Usage" }), _jsxs("span", { className: "text-neutral-grey-50 text-sm", children: [quotaInfo.usage.dailyImages.toLocaleString(), " /", " ", quotaInfo.limits.dailyImages &&
260
- quotaInfo.limits.dailyImages > 0
261
- ? quotaInfo.limits.dailyImages.toLocaleString()
262
- : "∞"] })] }), quotaInfo.limits.dailyImages &&
263
- quotaInfo.limits.dailyImages > 0 && (_jsx("div", { className: "bg-neutral-grey-10 h-2 w-full rounded-full", children: _jsx("div", { className: `h-2 rounded-full ${getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "exceeded"
264
- ? "bg-feedback-red"
265
- : getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "warning"
266
- ? "bg-component-shared"
267
- : getQuotaStatus(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages) === "caution"
268
- ? "bg-feedback-orange"
269
- : "bg-feedback-green"}`, style: {
270
- width: `${getProgressWidth(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)}%`,
271
- } }) })), _jsx("p", { className: "text-neutral-grey-50 mt-1 text-xs", children: quotaInfo.limits.dailyImages === -1
272
- ? "No daily limit"
273
- : `${formatQuotaPercentage(quotaInfo.usage.dailyImages, quotaInfo.limits.dailyImages)} used today` })] })] })] })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": "quota-daily-usage-chart", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(BarChart3, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsxs("div", { children: [_jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Daily usage chart" }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Month/year switchable daily usage across tokens, images, and cost." })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("label", { className: "sr-only", htmlFor: "quota-usage-month", children: "Select month" }), _jsx(Select, { id: "quota-usage-month", value: String(selectedMonth), onValueChange: (value) => setSelectedMonth(Number(value)), options: MONTH_NAMES.map((monthName, index) => ({
191
+ const tokenRows = [
192
+ { label: "Today", value: quotaInfo.usage.dailyTokens },
193
+ { label: "This month", value: quotaInfo.usage.monthlyTokens },
194
+ { label: "All time", value: quotaInfo.usage.totalTokens },
195
+ ];
196
+ return (_jsxs("div", { className: "space-y-10 px-10 pt-0 pb-10", "data-testid": "quota-info-section", children: [adminScopePanel, _jsxs("div", { className: "grid gap-6 md:grid-cols-2", children: [_jsx(QuotaBox, { title: "Cost budget", testId: "quota-cost-budget", icon: _jsx(DollarSign, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), children: costDimensions.map((dimension) => (_jsx(QuotaMeter, { dimension: dimension }, dimension.key))) }), _jsx(QuotaBox, { title: "Image usage", testId: "quota-image-usage", icon: _jsx(ImageIcon, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), children: imageDimensions.map((dimension) => (_jsx(QuotaMeter, { dimension: dimension }, dimension.key))) })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": "quota-daily-usage-chart", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsx(BarChart3, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsxs("div", { children: [_jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Daily usage chart" }), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Month/year switchable daily usage across tokens, images, and cost." })] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsx("label", { className: "sr-only", htmlFor: "quota-usage-month", children: "Select month" }), _jsx(Select, { id: "quota-usage-month", value: String(selectedMonth), onValueChange: (value) => setSelectedMonth(Number(value)), options: MONTH_NAMES.map((monthName, index) => ({
274
197
  value: String(index),
275
198
  label: monthName,
276
199
  })), className: "w-36", "data-testid": "quota-usage-month-select" }), _jsx("label", { className: "sr-only", htmlFor: "quota-usage-year", children: "Select year" }), _jsx(Select, { id: "quota-usage-year", value: String(selectedYear), onValueChange: (value) => setSelectedYear(Number(value)), options: availableYears.map((year) => ({
@@ -291,9 +214,6 @@ export function QuotaInfo() {
291
214
  })) }), _jsx(DailyUsageBarChart, { title: "Total Cost / day", unit: "USD", colorClass: "bg-feedback-orange", valueFormatter: (value) => value.toFixed(2), points: dailyChartPoints.map((point) => ({
292
215
  day: point.day,
293
216
  value: point.tokenCost + point.imageCost,
294
- })) })] }), dailyHistory.length === 0 && (_jsx("p", { className: "text-neutral-grey-50 mt-3 text-xs", children: "No historical usage payload received yet. The chart will populate as daily usage data is sent from the server." }))] })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(DollarSign, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Cost summary" })] }) }), _jsxs("div", { className: "space-y-4 p-4", children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: "Total (All Time)" }), _jsxs("span", { className: "text-neutral-grey-100 text-base font-medium", children: ["$", (quotaInfo.usage.totalCost ?? 0).toFixed(2)] })] }), _jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: "Today" }), _jsxs("span", { className: "text-neutral-grey-100 text-base font-medium", children: ["$", (quotaInfo.usage.dailyCost ?? 0).toFixed(2)] })] })] })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": "quota-status-summary", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(CheckCircle2, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Quota status" })] }) }), _jsxs("div", { className: "space-y-1 p-4 text-sm", children: [editContext?.isQuotaExceeded && (_jsx("p", { className: "text-feedback-red font-medium", "data-testid": "quota-exceeded-message", children: "\u26A0\uFE0F Quota limits have been exceeded" })), editContext?.getQuotaWarningMessage &&
295
- editContext.getQuotaWarningMessage() &&
296
- !editContext.isQuotaExceeded && (_jsxs("p", { className: "text-component-shared", children: ["\u26A0\uFE0F ", editContext.getQuotaWarningMessage()] })), !editContext?.isQuotaExceeded &&
297
- !editContext?.getQuotaWarningMessage?.() && (_jsx("p", { className: "text-feedback-green", children: "\u2705 All quotas are within limits" }))] })] }), isAdministrator && _jsx(UsageLeaderboard, {})] }));
217
+ })) })] }), dailyHistory.length === 0 && (_jsx("p", { className: "text-neutral-grey-50 mt-3 text-xs", children: "No historical usage payload received yet. The chart will populate as daily usage data is sent from the server." }))] })] }), _jsxs(QuotaBox, { title: "Token usage", testId: "quota-token-usage", icon: _jsx(Coins, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), children: [tokenRows.map((row) => (_jsxs("div", { className: "flex items-center justify-between", children: [_jsx("label", { className: "text-neutral-grey-50 text-sm font-medium", children: row.label }), _jsx("span", { className: "text-neutral-grey-100 text-base font-medium", children: row.value.toLocaleString() })] }, row.label))), _jsx("p", { className: "text-neutral-grey-50 text-xs", children: "Token counts are informational. Quotas are enforced on cost and image counts." })] }), _jsxs("div", { className: "overflow-hidden rounded-lg bg-white", "data-testid": "quota-status-summary", children: [_jsx("div", { className: "border-border-default border-b px-4 py-3", children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(CheckCircle2, { className: "text-neutral-grey-50 h-4 w-4", strokeWidth: 1 }), _jsx("h3", { className: "text-neutral-grey-100 text-sm font-medium", children: "Quota status" })] }) }), _jsxs("div", { className: "space-y-1 p-4 text-sm", children: [evaluation.exceeded && (_jsx("p", { className: "text-feedback-red font-medium", "data-testid": "quota-exceeded-message", children: "\u26A0\uFE0F Quota limits have been exceeded" })), evaluation.warningMessage && !evaluation.exceeded && (_jsxs("p", { className: "text-component-shared", children: ["\u26A0\uFE0F ", evaluation.warningMessage] })), !evaluation.exceeded && !evaluation.warningMessage && (_jsx("p", { className: "text-feedback-green", children: "\u2705 All quotas are within limits" }))] })] }), isAdministrator && _jsx(UsageLeaderboard, {})] }));
298
218
  }
299
219
  //# sourceMappingURL=QuotaInfo.js.map