@carlonicora/nextjs-jsonapi 3.28.1 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BlockNoteEditor-ATZVHS6X.js → BlockNoteEditor-BXMTGKDV.js} +21 -20
- package/dist/BlockNoteEditor-BXMTGKDV.js.map +1 -0
- package/dist/{BlockNoteEditor-CWW2D3SG.mjs → BlockNoteEditor-FGVQP35E.mjs} +9 -8
- package/dist/{BlockNoteEditor-CWW2D3SG.mjs.map → BlockNoteEditor-FGVQP35E.mjs.map} +1 -1
- package/dist/{BlockNoteViewer-KRTAFTUX.mjs → BlockNoteViewer-DQYT6IJW.mjs} +3 -3
- package/dist/{BlockNoteViewer-7BFNTN4E.js → BlockNoteViewer-YH7G66PS.js} +4 -4
- package/dist/{BlockNoteViewer-7BFNTN4E.js.map → BlockNoteViewer-YH7G66PS.js.map} +1 -1
- package/dist/{HandbookSectionInterface-DgYH--Ik.d.mts → HandbookSectionInterface-BYsmnPEz.d.mts} +1 -1
- package/dist/{HandbookSectionInterface-Ck1wZJ81.d.ts → HandbookSectionInterface-OePKPbqN.d.ts} +1 -1
- package/dist/{JsonApiRequest-UHOWNI3O.mjs → JsonApiRequest-MEP6AXDT.mjs} +2 -2
- package/dist/JsonApiRequest-OB6WL4LA.js +26 -0
- package/dist/{JsonApiRequest-TE5WD3WS.js.map → JsonApiRequest-OB6WL4LA.js.map} +1 -1
- package/dist/ServerSession-DFNNNkg7.d.ts +29 -0
- package/dist/ServerSession-DK1z0_Ql.d.mts +29 -0
- package/dist/{analytics.modules-CfczU12P.d.ts → analytics.modules-Bsacu6ik.d.ts} +1 -1
- package/dist/{analytics.modules-pzGwMASI.d.mts → analytics.modules-txdCLNG-.d.mts} +1 -1
- package/dist/billing/index.js +404 -402
- package/dist/billing/index.js.map +1 -1
- package/dist/billing/index.mjs +10 -8
- package/dist/billing/index.mjs.map +1 -1
- package/dist/{chunk-7B4E42R5.mjs → chunk-3CZ2GK5R.mjs} +33 -9
- package/dist/chunk-3CZ2GK5R.mjs.map +1 -0
- package/dist/{chunk-4Z45NYPR.js → chunk-5W5MN7JP.js} +14 -83
- package/dist/chunk-5W5MN7JP.js.map +1 -0
- package/dist/{chunk-CAKOFJZD.js → chunk-6OFANJTE.js} +195 -142
- package/dist/chunk-6OFANJTE.js.map +1 -0
- package/dist/{chunk-5TRFNKJS.js → chunk-6TUB7Y6T.js} +23 -25
- package/dist/chunk-6TUB7Y6T.js.map +1 -0
- package/dist/{chunk-37DMFVLN.mjs → chunk-7SCREMTX.mjs} +4 -3
- package/dist/{chunk-37DMFVLN.mjs.map → chunk-7SCREMTX.mjs.map} +1 -1
- package/dist/{chunk-Q6J2ICKO.mjs → chunk-ADZSH3MG.mjs} +3 -72
- package/dist/chunk-ADZSH3MG.mjs.map +1 -0
- package/dist/{chunk-E3I4MT53.mjs → chunk-AQZ3T4BR.mjs} +71 -18
- package/dist/chunk-AQZ3T4BR.mjs.map +1 -0
- package/dist/{chunk-SJLXPHK5.mjs → chunk-E2LENTUH.mjs} +22 -24
- package/dist/chunk-E2LENTUH.mjs.map +1 -0
- package/dist/chunk-EBEXWN3I.mjs +17 -0
- package/dist/chunk-EBEXWN3I.mjs.map +1 -0
- package/dist/chunk-G4JR3SFV.js +28 -0
- package/dist/chunk-G4JR3SFV.js.map +1 -0
- package/dist/chunk-IK65TDQH.js +15 -0
- package/dist/chunk-IK65TDQH.js.map +1 -0
- package/dist/{chunk-GHFMKH3M.js → chunk-JEQ34Z5E.js} +62 -38
- package/dist/chunk-JEQ34Z5E.js.map +1 -0
- package/dist/{chunk-YDPDJIJF.js → chunk-NFCXUAE6.js} +1330 -1184
- package/dist/chunk-NFCXUAE6.js.map +1 -0
- package/dist/chunk-OEOK6A3P.js +17 -0
- package/dist/chunk-OEOK6A3P.js.map +1 -0
- package/dist/chunk-PW42LRSL.mjs +28 -0
- package/dist/chunk-PW42LRSL.mjs.map +1 -0
- package/dist/{chunk-U65JPKO3.mjs → chunk-R6ZYB4VN.mjs} +2 -2
- package/dist/chunk-T7SAW3UW.mjs +15 -0
- package/dist/chunk-T7SAW3UW.mjs.map +1 -0
- package/dist/{chunk-GKDHYB2R.js → chunk-TWBZ2GSX.js} +3 -3
- package/dist/{chunk-GKDHYB2R.js.map → chunk-TWBZ2GSX.js.map} +1 -1
- package/dist/{chunk-26MQIJNB.js → chunk-WGVNJXZO.js} +4 -3
- package/dist/chunk-WGVNJXZO.js.map +1 -0
- package/dist/{chunk-2IMQ5IKA.mjs → chunk-WJC4SYRL.mjs} +2133 -1987
- package/dist/chunk-WJC4SYRL.mjs.map +1 -0
- package/dist/client/index.d.mts +3 -3
- package/dist/client/index.d.ts +3 -3
- package/dist/client/index.js +6 -5
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +13 -12
- package/dist/components/index.d.mts +16 -6
- package/dist/components/index.d.ts +16 -6
- package/dist/components/index.js +8 -5
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +9 -6
- package/dist/{config-3N1LSrcC.d.ts → config-B6UB7j69.d.ts} +1 -1
- package/dist/{config-BmufyEj6.d.mts → config-CEAq4Ozy.d.mts} +10 -1
- package/dist/{config-AVtuvfM1.d.ts → config-DydDHCfb.d.ts} +10 -1
- package/dist/{config-BSKTYDoh.d.mts → config-n-ZpPmOL.d.mts} +1 -1
- package/dist/contexts/index.d.mts +28 -4
- package/dist/contexts/index.d.ts +28 -4
- package/dist/contexts/index.js +10 -5
- package/dist/contexts/index.js.map +1 -1
- package/dist/contexts/index.mjs +9 -4
- package/dist/core/index.d.mts +6 -6
- package/dist/core/index.d.ts +6 -6
- package/dist/core/index.js +5 -5
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +4 -4
- package/dist/features/analytics/index.d.mts +2 -2
- package/dist/features/analytics/index.d.ts +2 -2
- package/dist/features/analytics/index.js +124 -123
- package/dist/features/analytics/index.js.map +1 -1
- package/dist/features/analytics/index.mjs +6 -5
- package/dist/features/analytics/index.mjs.map +1 -1
- package/dist/features/analytics/server.d.mts +10 -2
- package/dist/features/analytics/server.d.ts +10 -2
- package/dist/features/analytics/server.js +8 -6
- package/dist/features/analytics/server.js.map +1 -1
- package/dist/features/analytics/server.mjs +6 -4
- package/dist/features/analytics/server.mjs.map +1 -1
- package/dist/features/help/index.d.mts +2 -2
- package/dist/features/help/index.d.ts +2 -2
- package/dist/features/help/index.js +39 -38
- package/dist/features/help/index.js.map +1 -1
- package/dist/features/help/index.mjs +5 -4
- package/dist/features/help/index.mjs.map +1 -1
- package/dist/features/tokenusage/index.d.mts +2 -2
- package/dist/features/tokenusage/index.d.ts +2 -2
- package/dist/features/tokenusage/index.js +127 -126
- package/dist/features/tokenusage/index.js.map +1 -1
- package/dist/features/tokenusage/index.mjs +6 -5
- package/dist/features/tokenusage/index.mjs.map +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +8 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +11 -9
- package/dist/next-config/index.d.mts +43 -0
- package/dist/next-config/index.d.ts +43 -0
- package/dist/next-config/index.js +230 -0
- package/dist/next-config/index.js.map +1 -0
- package/dist/next-config/index.mjs +230 -0
- package/dist/next-config/index.mjs.map +1 -0
- package/dist/{request-FXF63NSQ.mjs → request-3IUMNVOS.mjs} +2 -2
- package/dist/request-LZBAOT3Y.js +8 -0
- package/dist/request-LZBAOT3Y.js.map +1 -0
- package/dist/server/cachedGet.d.mts +28 -0
- package/dist/server/cachedGet.d.ts +28 -0
- package/dist/server/cachedGet.js +60 -0
- package/dist/server/cachedGet.js.map +1 -0
- package/dist/server/cachedGet.mjs +60 -0
- package/dist/server/cachedGet.mjs.map +1 -0
- package/dist/server/cachedGet.stub.d.mts +7 -0
- package/dist/server/cachedGet.stub.d.ts +7 -0
- package/dist/server/cachedGet.stub.js +17 -0
- package/dist/server/cachedGet.stub.js.map +1 -0
- package/dist/server/cachedGet.stub.mjs +17 -0
- package/dist/server/cachedGet.stub.mjs.map +1 -0
- package/dist/server/index.d.mts +27 -25
- package/dist/server/index.d.ts +27 -25
- package/dist/server/index.js +13 -6
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +15 -8
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/index.mjs.map +1 -1
- package/dist/{types-D0uLYV2P.d.mts → types-Bq_UA8Lg.d.mts} +1 -1
- package/dist/{types-Cn153-mH.d.ts → types-bsm8Fp55.d.ts} +1 -1
- package/dist/{usePageUrlGenerator-B-3FRKBD.d.ts → usePageUrlGenerator-J_ECv-oQ.d.ts} +1 -1
- package/dist/{usePageUrlGenerator-CCJ_cdQy.d.mts → usePageUrlGenerator-uKBjAKqC.d.mts} +1 -1
- package/package.json +12 -1
- package/src/components/forms/__tests__/EditorSheet.test.tsx +25 -1
- package/src/components/forms/__tests__/useEditorDialog.test.ts +164 -1
- package/src/components/forms/useEditorDialog.ts +69 -2
- package/src/contexts/SessionContext.tsx +20 -0
- package/src/contexts/SocketContext.tsx +30 -3
- package/src/contexts/ViewportContext.tsx +17 -2
- package/src/contexts/__tests__/SessionContext.test.tsx +58 -0
- package/src/contexts/__tests__/SocketContext.session.test.tsx +77 -0
- package/src/contexts/index.ts +1 -0
- package/src/core/abstracts/AbstractService.ts +4 -6
- package/src/core/abstracts/__tests__/AbstractService.locale.test.ts +64 -0
- package/src/features/analytics/components/server/AnalyticsAdminPage.tsx +5 -1
- package/src/features/analytics/components/server/AnalyticsJourneyPage.tsx +5 -1
- package/src/features/company/hooks/useSubscriptionStatus.ts +6 -1
- package/src/features/notification/contexts/NotificationContext.tsx +5 -2
- package/src/features/notification/contexts/__tests__/NotificationContext.spec.tsx +22 -0
- package/src/features/user/contexts/CurrentUserContext.tsx +7 -5
- package/src/features/user/contexts/__tests__/CurrentUserContext.spec.tsx +63 -3
- package/src/hooks/__tests__/useSocket.render.test.ts +22 -0
- package/src/hooks/useSocket.ts +0 -1
- package/src/i18n/__tests__/config.test.ts +27 -0
- package/src/i18n/config.ts +17 -0
- package/src/i18n/index.ts +2 -0
- package/src/next-config/__tests__/createNextConfig.test.ts +268 -0
- package/src/next-config/csp.ts +128 -0
- package/src/next-config/headers.ts +61 -0
- package/src/next-config/index.ts +114 -0
- package/src/server/JsonApiServer.ts +3 -1
- package/src/server/ServerSession.ts +29 -1
- package/src/server/__tests__/JsonApiServer.test.ts +41 -0
- package/src/server/__tests__/ServerSession.read.test.ts +67 -0
- package/src/server/__tests__/cache.test.ts +48 -0
- package/src/server/__tests__/cachedGet.test.ts +125 -0
- package/src/server/__tests__/request.test.ts +96 -1
- package/src/server/cache.ts +21 -4
- package/src/server/cacheDigest.ts +10 -0
- package/src/server/cacheProfiles.ts +15 -0
- package/src/server/cachedGet.stub.ts +15 -0
- package/src/server/cachedGet.ts +80 -0
- package/src/server/request.ts +33 -32
- package/src/shadcnui/ui/__tests__/sidebar.menu-skeleton.test.tsx +50 -0
- package/src/shadcnui/ui/__tests__/sidebar.session.test.tsx +133 -0
- package/src/shadcnui/ui/sidebar.tsx +121 -18
- package/src/testing/matchers/jsonApiMatchers.ts +1 -0
- package/src/unified/JsonApiRequest.ts +4 -1
- package/src/unified/__tests__/JsonApiGet.cache.test.ts +51 -0
- package/src/utils/__tests__/map-thenable.test.ts +29 -0
- package/src/utils/__tests__/use-mobile.test.tsx +102 -1
- package/src/utils/map-thenable.ts +15 -0
- package/src/utils/use-mobile.tsx +13 -4
- package/dist/BlockNoteEditor-ATZVHS6X.js.map +0 -1
- package/dist/JsonApiRequest-TE5WD3WS.js +0 -26
- package/dist/chunk-26MQIJNB.js.map +0 -1
- package/dist/chunk-2IMQ5IKA.mjs.map +0 -1
- package/dist/chunk-4Z45NYPR.js.map +0 -1
- package/dist/chunk-5TRFNKJS.js.map +0 -1
- package/dist/chunk-7B4E42R5.mjs.map +0 -1
- package/dist/chunk-CAKOFJZD.js.map +0 -1
- package/dist/chunk-E3I4MT53.mjs.map +0 -1
- package/dist/chunk-GHFMKH3M.js.map +0 -1
- package/dist/chunk-Q6J2ICKO.mjs.map +0 -1
- package/dist/chunk-SJLXPHK5.mjs.map +0 -1
- package/dist/chunk-YDPDJIJF.js.map +0 -1
- package/dist/request-ZTX6I63X.js +0 -8
- package/dist/request-ZTX6I63X.js.map +0 -1
- /package/dist/{BlockNoteViewer-KRTAFTUX.mjs.map → BlockNoteViewer-DQYT6IJW.mjs.map} +0 -0
- /package/dist/{JsonApiRequest-UHOWNI3O.mjs.map → JsonApiRequest-MEP6AXDT.mjs.map} +0 -0
- /package/dist/{chunk-U65JPKO3.mjs.map → chunk-R6ZYB4VN.mjs.map} +0 -0
- /package/dist/{request-FXF63NSQ.mjs.map → request-3IUMNVOS.mjs.map} +0 -0
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
var
|
|
12
|
+
var _chunkTWBZ2GSXjs = require('../../chunk-TWBZ2GSX.js');
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
|
|
@@ -37,8 +37,9 @@ var _chunkGKDHYB2Rjs = require('../../chunk-GKDHYB2R.js');
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
var
|
|
41
|
-
require('../../chunk-
|
|
40
|
+
var _chunkNFCXUAE6js = require('../../chunk-NFCXUAE6.js');
|
|
41
|
+
require('../../chunk-5W5MN7JP.js');
|
|
42
|
+
require('../../chunk-G4JR3SFV.js');
|
|
42
43
|
|
|
43
44
|
|
|
44
45
|
|
|
@@ -56,10 +57,10 @@ require('../../chunk-4Z45NYPR.js');
|
|
|
56
57
|
|
|
57
58
|
|
|
58
59
|
|
|
59
|
-
var
|
|
60
|
-
require('../../chunk-26MQIJNB.js');
|
|
60
|
+
var _chunk6OFANJTEjs = require('../../chunk-6OFANJTE.js');
|
|
61
61
|
require('../../chunk-LXKSUWAV.js');
|
|
62
62
|
require('../../chunk-JTPRJNT2.js');
|
|
63
|
+
require('../../chunk-WGVNJXZO.js');
|
|
63
64
|
require('../../chunk-3EPNHTMH.js');
|
|
64
65
|
|
|
65
66
|
|
|
@@ -81,7 +82,7 @@ function TokenUsageAdminFilterBar({ granularity, companyId, metric, companies, o
|
|
|
81
82
|
};
|
|
82
83
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex flex-wrap items-center gap-2", children: [
|
|
83
84
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "max-md:w-full max-md:[&_#date]:w-full", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
84
|
-
|
|
85
|
+
_chunkNFCXUAE6js.DateRangeSelector,
|
|
85
86
|
{
|
|
86
87
|
onDateChange: (range) => {
|
|
87
88
|
if (!_optionalChain([range, 'optionalAccess', _ => _.from]) || !_optionalChain([range, 'optionalAccess', _2 => _2.to])) return;
|
|
@@ -116,16 +117,16 @@ function TokenUsageAdminFilterBar({ granularity, companyId, metric, companies, o
|
|
|
116
117
|
}
|
|
117
118
|
),
|
|
118
119
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
119
|
-
|
|
120
|
+
_chunkNFCXUAE6js.Select,
|
|
120
121
|
{
|
|
121
122
|
items: companyItems,
|
|
122
123
|
value: _nullishCoalesce(companyId, () => ( ALL_COMPANIES)),
|
|
123
124
|
onValueChange: (value) => onChange({ companyId: !value || value === ALL_COMPANIES ? void 0 : value }),
|
|
124
125
|
children: [
|
|
125
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
126
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
127
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
128
|
-
companies.map((company) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
126
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectTrigger, { className: "w-56", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectValue, { placeholder: t("token_usage.admin.all_companies") }) }),
|
|
127
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.SelectContent, { children: [
|
|
128
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectItem, { value: ALL_COMPANIES, children: t("token_usage.admin.all_companies") }),
|
|
129
|
+
companies.map((company) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectItem, { value: company.id, children: company.label }, company.id))
|
|
129
130
|
] })
|
|
130
131
|
]
|
|
131
132
|
}
|
|
@@ -148,13 +149,13 @@ function Segmented({
|
|
|
148
149
|
children: options.map((option) => {
|
|
149
150
|
const selected = option.value === value;
|
|
150
151
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
151
|
-
|
|
152
|
+
_chunkNFCXUAE6js.Button,
|
|
152
153
|
{
|
|
153
154
|
type: "button",
|
|
154
155
|
size: "sm",
|
|
155
156
|
variant: selected ? "default" : "ghost",
|
|
156
157
|
"aria-pressed": selected,
|
|
157
|
-
className:
|
|
158
|
+
className: _chunk6OFANJTEjs.cn.call(void 0, !selected && "text-muted-foreground"),
|
|
158
159
|
onClick: () => onSelect(option.value),
|
|
159
160
|
children: option.label
|
|
160
161
|
},
|
|
@@ -174,36 +175,36 @@ function withFilters(endpoint, filters) {
|
|
|
174
175
|
return endpoint;
|
|
175
176
|
}
|
|
176
177
|
_chunk7QVYU63Ejs.__name.call(void 0, withFilters, "withFilters");
|
|
177
|
-
var TokenUsageAdminService = class extends
|
|
178
|
+
var TokenUsageAdminService = class extends _chunk6OFANJTEjs.AbstractService {
|
|
178
179
|
static {
|
|
179
180
|
_chunk7QVYU63Ejs.__name.call(void 0, this, "TokenUsageAdminService");
|
|
180
181
|
}
|
|
181
182
|
/** Six rows: {customer, platform, total} × {current, previous}. */
|
|
182
183
|
static async getSummary(filters) {
|
|
183
|
-
const endpoint = withFilters(new (0,
|
|
184
|
+
const endpoint = withFilters(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageAdminSummary }), filters);
|
|
184
185
|
return this.callApi({
|
|
185
|
-
type:
|
|
186
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageAdminSummary,
|
|
186
187
|
method: "GET" /* GET */,
|
|
187
188
|
endpoint: endpoint.generate()
|
|
188
189
|
});
|
|
189
190
|
}
|
|
190
191
|
static async getTimeline(params) {
|
|
191
|
-
const endpoint = withFilters(new (0,
|
|
192
|
+
const endpoint = withFilters(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageAdminTimeline }), params);
|
|
192
193
|
endpoint.addAdditionalParam("granularity", params.granularity);
|
|
193
194
|
endpoint.addAdditionalParam("stackBy", params.stackBy);
|
|
194
195
|
return this.callApi({
|
|
195
|
-
type:
|
|
196
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageAdminTimeline,
|
|
196
197
|
method: "GET" /* GET */,
|
|
197
198
|
endpoint: endpoint.generate()
|
|
198
199
|
});
|
|
199
200
|
}
|
|
200
201
|
static async getBreakdown(params) {
|
|
201
|
-
const endpoint = withFilters(new (0,
|
|
202
|
+
const endpoint = withFilters(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageAdminBreakdown }), params);
|
|
202
203
|
endpoint.addAdditionalParam("dimension", params.dimension);
|
|
203
204
|
endpoint.addAdditionalParam("scope", params.scope);
|
|
204
205
|
if (params.limit !== void 0) endpoint.addAdditionalParam("limit", String(params.limit));
|
|
205
206
|
return this.callApi({
|
|
206
|
-
type:
|
|
207
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageAdminBreakdown,
|
|
207
208
|
method: "GET" /* GET */,
|
|
208
209
|
endpoint: endpoint.generate()
|
|
209
210
|
});
|
|
@@ -230,7 +231,7 @@ var TokenUsageAdminProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void
|
|
|
230
231
|
pageUrl = TOKEN_USAGE_ADMIN_PAGE_URL
|
|
231
232
|
}) => {
|
|
232
233
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
233
|
-
const generateUrl =
|
|
234
|
+
const generateUrl = _chunkNFCXUAE6js.usePageUrlGenerator.call(void 0, );
|
|
234
235
|
const [filters, setFilterState] = _react.useState.call(void 0, () => {
|
|
235
236
|
const range = defaultRange();
|
|
236
237
|
return {
|
|
@@ -348,7 +349,7 @@ var TokenUsageAdminProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void
|
|
|
348
349
|
error
|
|
349
350
|
]
|
|
350
351
|
);
|
|
351
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
352
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageAdminContext.Provider, { value: contextValue, children }) });
|
|
352
353
|
}, "TokenUsageAdminProvider");
|
|
353
354
|
var useTokenUsageAdmin = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
354
355
|
const ctx = _react.useContext.call(void 0, TokenUsageAdminContext);
|
|
@@ -369,7 +370,7 @@ var _lucidereact = require('lucide-react');
|
|
|
369
370
|
var ZERO = { cost: 0, credits: 0, tokensIn: 0, tokensOut: 0, cached: 0, calls: 0 };
|
|
370
371
|
function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }) {
|
|
371
372
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
372
|
-
const { decimal, metricValue: formatValue, currency, percent } =
|
|
373
|
+
const { decimal, metricValue: formatValue, currency, percent } = _chunkTWBZ2GSXjs.useUsageFormatters.call(void 0, );
|
|
373
374
|
const rowFor = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (scope, window) => _nullishCoalesce(summary.find((r) => r.scope === scope && r.window === window), () => ( ZERO)), "rowFor");
|
|
374
375
|
const customerCurrent = rowFor("customer", "current");
|
|
375
376
|
const customerPrevious = rowFor("customer", "previous");
|
|
@@ -378,16 +379,16 @@ function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }) {
|
|
|
378
379
|
const totalCurrent = rowFor("total", "current");
|
|
379
380
|
const totalPrevious = rowFor("total", "previous");
|
|
380
381
|
const averagePerCall = totalCurrent.calls ? totalCurrent.cost / totalCurrent.calls : 0;
|
|
381
|
-
const cacheHit =
|
|
382
|
+
const cacheHit = _chunkTWBZ2GSXjs.cacheHitPercentage.call(void 0, totalCurrent.cached, totalCurrent.tokensIn);
|
|
382
383
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid gap-3", children: [
|
|
383
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className:
|
|
384
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk6OFANJTEjs.cn.call(void 0, "grid gap-3", singleCustomerMode ? "sm:grid-cols-1" : "sm:grid-cols-2"), children: [
|
|
384
385
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
385
386
|
LeadTile,
|
|
386
387
|
{
|
|
387
388
|
testId: "tile-customer",
|
|
388
389
|
label: t("token_usage.admin.customer_spend"),
|
|
389
|
-
value: formatValue(
|
|
390
|
-
delta:
|
|
390
|
+
value: formatValue(_chunkTWBZ2GSXjs.metricValue.call(void 0, customerCurrent, metric), metric),
|
|
391
|
+
delta: _chunkTWBZ2GSXjs.percentageDelta.call(void 0, _chunkTWBZ2GSXjs.metricValue.call(void 0, customerCurrent, metric), _chunkTWBZ2GSXjs.metricValue.call(void 0, customerPrevious, metric)),
|
|
391
392
|
previousLabel: t("token_usage.admin.vs_previous"),
|
|
392
393
|
decimal
|
|
393
394
|
}
|
|
@@ -397,8 +398,8 @@ function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }) {
|
|
|
397
398
|
{
|
|
398
399
|
testId: "tile-platform",
|
|
399
400
|
label: t("token_usage.admin.platform_spend"),
|
|
400
|
-
value: formatValue(
|
|
401
|
-
delta:
|
|
401
|
+
value: formatValue(_chunkTWBZ2GSXjs.metricValue.call(void 0, platformCurrent, metric), metric),
|
|
402
|
+
delta: _chunkTWBZ2GSXjs.percentageDelta.call(void 0, _chunkTWBZ2GSXjs.metricValue.call(void 0, platformCurrent, metric), _chunkTWBZ2GSXjs.metricValue.call(void 0, platformPrevious, metric)),
|
|
402
403
|
previousLabel: t("token_usage.admin.vs_previous"),
|
|
403
404
|
decimal
|
|
404
405
|
}
|
|
@@ -410,8 +411,8 @@ function TokenUsageAdminTiles({ summary, metric, singleCustomerMode }) {
|
|
|
410
411
|
{
|
|
411
412
|
testId: "tile-total",
|
|
412
413
|
label: t("token_usage.admin.total_cost"),
|
|
413
|
-
value: formatValue(
|
|
414
|
-
delta:
|
|
414
|
+
value: formatValue(_chunkTWBZ2GSXjs.metricValue.call(void 0, totalCurrent, metric), metric),
|
|
415
|
+
delta: _chunkTWBZ2GSXjs.percentageDelta.call(void 0, _chunkTWBZ2GSXjs.metricValue.call(void 0, totalCurrent, metric), _chunkTWBZ2GSXjs.metricValue.call(void 0, totalPrevious, metric)),
|
|
415
416
|
decimal
|
|
416
417
|
}
|
|
417
418
|
),
|
|
@@ -445,7 +446,7 @@ function LeadTile({
|
|
|
445
446
|
previousLabel,
|
|
446
447
|
decimal
|
|
447
448
|
}) {
|
|
448
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
449
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": testId, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
449
450
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: label }),
|
|
450
451
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-primary text-xl font-semibold tabular-nums", children: value }),
|
|
451
452
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-1", children: [
|
|
@@ -462,7 +463,7 @@ function SupportingTile({
|
|
|
462
463
|
delta,
|
|
463
464
|
decimal
|
|
464
465
|
}) {
|
|
465
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
466
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": testId, size: "sm", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
466
467
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: label }),
|
|
467
468
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-2", children: [
|
|
468
469
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium tabular-nums", children: value }),
|
|
@@ -485,7 +486,7 @@ function Delta({
|
|
|
485
486
|
"span",
|
|
486
487
|
{
|
|
487
488
|
"data-testid": testId,
|
|
488
|
-
className:
|
|
489
|
+
className: _chunk6OFANJTEjs.cn.call(void 0,
|
|
489
490
|
"inline-flex items-center gap-0.5 text-xs tabular-nums",
|
|
490
491
|
increased ? "text-success" : "text-destructive"
|
|
491
492
|
),
|
|
@@ -506,10 +507,10 @@ _chunk7QVYU63Ejs.__name.call(void 0, Delta, "Delta");
|
|
|
506
507
|
|
|
507
508
|
function TokenUsageBreakdownTable({ rows, metric }) {
|
|
508
509
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
509
|
-
const { decimal, metricValue: formatValue, percent, compare } =
|
|
510
|
+
const { decimal, metricValue: formatValue, percent, compare } = _chunkTWBZ2GSXjs.useUsageFormatters.call(void 0, );
|
|
510
511
|
const [sort, setSort] = _react.useState.call(void 0, void 0);
|
|
511
512
|
const showActiveUsers = rows.some((row) => row.activeUsers !== void 0);
|
|
512
|
-
const total = _react.useMemo.call(void 0, () => rows.reduce((sum, row) => sum +
|
|
513
|
+
const total = _react.useMemo.call(void 0, () => rows.reduce((sum, row) => sum + _chunkTWBZ2GSXjs.metricValue.call(void 0, row, metric), 0), [rows, metric]);
|
|
513
514
|
const sortValue = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (row, key) => {
|
|
514
515
|
switch (key) {
|
|
515
516
|
case "label":
|
|
@@ -519,9 +520,9 @@ function TokenUsageBreakdownTable({ rows, metric }) {
|
|
|
519
520
|
case "activeUsers":
|
|
520
521
|
return _nullishCoalesce(row.activeUsers, () => ( 0));
|
|
521
522
|
case "cacheHit":
|
|
522
|
-
return
|
|
523
|
+
return _chunkTWBZ2GSXjs.cacheHitPercentage.call(void 0, row.cached, row.tokensIn);
|
|
523
524
|
case "share":
|
|
524
|
-
return
|
|
525
|
+
return _chunkTWBZ2GSXjs.metricValue.call(void 0, row, metric);
|
|
525
526
|
default:
|
|
526
527
|
return row[key];
|
|
527
528
|
}
|
|
@@ -559,13 +560,13 @@ function TokenUsageBreakdownTable({ rows, metric }) {
|
|
|
559
560
|
// The package's <Table> wraps itself in an `overflow-x-clip` container, which
|
|
560
561
|
// would swallow the overflow before this scroller ever saw it — hence the
|
|
561
562
|
// child override. Wide metric tables must scroll, never widen the page.
|
|
562
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-x-auto [&_[data-slot=table-container]]:overflow-x-visible", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
563
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
563
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "overflow-x-auto [&_[data-slot=table-container]]:overflow-x-visible", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Table, { children: [
|
|
564
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableRow, { children: columns.map((column) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableHead, { className: _chunk6OFANJTEjs.cn.call(void 0, column.numeric && "text-end"), children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
564
565
|
"button",
|
|
565
566
|
{
|
|
566
567
|
type: "button",
|
|
567
568
|
onClick: () => toggleSort(column.key),
|
|
568
|
-
className:
|
|
569
|
+
className: _chunk6OFANJTEjs.cn.call(void 0,
|
|
569
570
|
"hover:text-primary inline-flex items-center gap-1 text-xs font-medium",
|
|
570
571
|
column.numeric && "flex-row-reverse"
|
|
571
572
|
),
|
|
@@ -575,20 +576,20 @@ function TokenUsageBreakdownTable({ rows, metric }) {
|
|
|
575
576
|
]
|
|
576
577
|
}
|
|
577
578
|
) }, column.key)) }) }),
|
|
578
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
579
|
-
const value =
|
|
579
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableBody, { children: sortedRows.map((row) => {
|
|
580
|
+
const value = _chunkTWBZ2GSXjs.metricValue.call(void 0, row, metric);
|
|
580
581
|
const share = total > 0 ? value / total * 100 : 0;
|
|
581
|
-
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
582
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
583
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
584
|
-
showActiveUsers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
585
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
586
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
587
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
588
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
589
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
590
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
591
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
582
|
+
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.TableRow, { "data-testid": `breakdown-row-${row.id}`, children: [
|
|
583
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-xs", children: row.id === "other" ? t("token_usage.admin.other") : row.label }),
|
|
584
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-muted-foreground text-xs", children: _nullishCoalesce(row.sublabel, () => ( "")) }),
|
|
585
|
+
showActiveUsers && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: row.activeUsers === void 0 ? "" : decimal(row.activeUsers, 0) }),
|
|
586
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: decimal(row.calls, 0) }),
|
|
587
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: decimal(row.tokensIn, 0) }),
|
|
588
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: decimal(row.tokensOut, 0) }),
|
|
589
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: percent(_chunkTWBZ2GSXjs.cacheHitPercentage.call(void 0, row.cached, row.tokensIn)) }),
|
|
590
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: formatValue(row.cost, "cost") }),
|
|
591
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: formatValue(row.credits, "credits") }),
|
|
592
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.TableCell, { className: "text-end text-xs tabular-nums", children: percent(share) })
|
|
592
593
|
] }, row.id);
|
|
593
594
|
}) })
|
|
594
595
|
] }) })
|
|
@@ -617,7 +618,7 @@ var operationLabel = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (type,
|
|
|
617
618
|
|
|
618
619
|
function TokenUsageRankedBar({ rows, metric, emptyLabel, labelsAreOperationTypes = false }) {
|
|
619
620
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
620
|
-
const { metricValue: formatValue, percent } =
|
|
621
|
+
const { metricValue: formatValue, percent } = _chunkTWBZ2GSXjs.useUsageFormatters.call(void 0, );
|
|
621
622
|
const renderLabel = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (row) => {
|
|
622
623
|
if (row.id === "other") return t("token_usage.admin.other");
|
|
623
624
|
if (!labelsAreOperationTypes) return row.label;
|
|
@@ -630,13 +631,13 @@ function TokenUsageRankedBar({ rows, metric, emptyLabel, labelsAreOperationTypes
|
|
|
630
631
|
if (rows.length === 0) {
|
|
631
632
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-muted-foreground py-6 text-center text-sm", children: emptyLabel });
|
|
632
633
|
}
|
|
633
|
-
const values = rows.map((row) =>
|
|
634
|
+
const values = rows.map((row) => _chunkTWBZ2GSXjs.metricValue.call(void 0, row, metric));
|
|
634
635
|
const total = values.reduce((sum, value) => sum + value, 0);
|
|
635
636
|
const max = Math.max(...values, 0);
|
|
636
637
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "grid gap-0.5", children: rows.map((row, index) => {
|
|
637
638
|
const value = values[index];
|
|
638
639
|
const isOther = row.id === "other";
|
|
639
|
-
const step = isOther ?
|
|
640
|
+
const step = isOther ? _chunkTWBZ2GSXjs.SEQUENTIAL_RAMP.length - 1 : Math.min(index, _chunkTWBZ2GSXjs.SEQUENTIAL_RAMP.length - 1);
|
|
640
641
|
const width = max > 0 ? value / max * 100 : 0;
|
|
641
642
|
const share = total > 0 ? value / total * 100 : 0;
|
|
642
643
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid grid-cols-[minmax(0,1fr)_auto_auto] items-center gap-x-3 gap-y-0.5 py-0.5", children: [
|
|
@@ -648,7 +649,7 @@ function TokenUsageRankedBar({ rows, metric, emptyLabel, labelsAreOperationTypes
|
|
|
648
649
|
"data-testid": `ranked-fill-${row.id}`,
|
|
649
650
|
"data-ramp-step": String(step),
|
|
650
651
|
className: "h-full rounded-r-[4px]",
|
|
651
|
-
style: { width: `${width}%`, backgroundColor:
|
|
652
|
+
style: { width: `${width}%`, backgroundColor: _chunkTWBZ2GSXjs.SEQUENTIAL_RAMP[step] }
|
|
652
653
|
}
|
|
653
654
|
) })
|
|
654
655
|
] }),
|
|
@@ -698,7 +699,7 @@ var inferGranularity = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (buc
|
|
|
698
699
|
}, "inferGranularity");
|
|
699
700
|
function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
700
701
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
701
|
-
const { compact, bucketDate, metricValue: formatValue } =
|
|
702
|
+
const { compact, bucketDate, metricValue: formatValue } = _chunkTWBZ2GSXjs.useUsageFormatters.call(void 0, );
|
|
702
703
|
const { resolvedTheme } = _nextthemes.useTheme.call(void 0, );
|
|
703
704
|
const mode = resolvedTheme === "dark" ? "dark" : "light";
|
|
704
705
|
const { chartData, seriesKeys } = _react.useMemo.call(void 0, () => {
|
|
@@ -706,8 +707,8 @@ function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
|
706
707
|
const totals = /* @__PURE__ */ new Map();
|
|
707
708
|
for (const row of rows) totals.set(row.series, (_nullishCoalesce(totals.get(row.series), () => ( 0))) + metricValue2(row, metric));
|
|
708
709
|
const ranked = [...totals.entries()].sort((a, b) => b[1] - a[1]).map(([series]) => series);
|
|
709
|
-
const named = ranked.slice(0,
|
|
710
|
-
const folded = new Set(ranked.slice(
|
|
710
|
+
const named = ranked.slice(0, _chunkTWBZ2GSXjs.CATEGORICAL_CEILING);
|
|
711
|
+
const folded = new Set(ranked.slice(_chunkTWBZ2GSXjs.CATEGORICAL_CEILING));
|
|
711
712
|
const keys = folded.size > 0 ? [...named, OTHER_SERIES] : named;
|
|
712
713
|
const byBucket = /* @__PURE__ */ new Map();
|
|
713
714
|
for (const row of rows) {
|
|
@@ -747,7 +748,7 @@ function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
|
747
748
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: className ? `text-muted-foreground text-sm ${className}` : "text-muted-foreground text-sm", children: t.has(key) ? t(key) : "No data in the selected period" });
|
|
748
749
|
}
|
|
749
750
|
const granularity = inferGranularity(chartData.map((entry) => entry.bucket));
|
|
750
|
-
const seriesColorFor = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (series, index) => series === OTHER_SERIES ?
|
|
751
|
+
const seriesColorFor = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (series, index) => series === OTHER_SERIES ? _chunkTWBZ2GSXjs.OTHER_COLOR : _chunkTWBZ2GSXjs.seriesColor.call(void 0, index, mode), "seriesColorFor");
|
|
751
752
|
return (
|
|
752
753
|
// The chart is a coordinate system, not prose: recharts lays the axes and the
|
|
753
754
|
// stacked bars out left-to-right, so the whole chart stays an LTR island even
|
|
@@ -756,7 +757,7 @@ function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
|
756
757
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className, dir: "ltr", children: [
|
|
757
758
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "sr-only", "data-testid": "timeline-data", children: JSON.stringify(chartData) }),
|
|
758
759
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "sr-only", "data-testid": "timeline-series", children: JSON.stringify(seriesKeys) }),
|
|
759
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
760
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.ChartContainer, { config: chartConfig, className: "aspect-auto h-72 w-full", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _recharts.BarChart, { accessibilityLayer: true, data: chartData, margin: { top: 8, right: 8, bottom: 0, left: 0 }, children: [
|
|
760
761
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _recharts.CartesianGrid, { vertical: false }),
|
|
761
762
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
762
763
|
_recharts.XAxis,
|
|
@@ -780,10 +781,10 @@ function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
|
780
781
|
}
|
|
781
782
|
),
|
|
782
783
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
783
|
-
|
|
784
|
+
_chunkNFCXUAE6js.ChartTooltip,
|
|
784
785
|
{
|
|
785
786
|
content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
786
|
-
|
|
787
|
+
_chunkNFCXUAE6js.ChartTooltipContent,
|
|
787
788
|
{
|
|
788
789
|
labelFormatter: (value) => bucketDate(String(value), granularity),
|
|
789
790
|
valueFormatter: (value) => formatValue(Number(value), metric),
|
|
@@ -792,7 +793,7 @@ function TokenUsageTimelineChart({ rows, metric, stackBy, className }) {
|
|
|
792
793
|
)
|
|
793
794
|
}
|
|
794
795
|
),
|
|
795
|
-
seriesKeys.length >= 2 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
796
|
+
seriesKeys.length >= 2 ? /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.ChartLegend, { content: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.ChartLegendContent, {}) }) : null,
|
|
796
797
|
seriesKeys.map((series, index) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
797
798
|
_recharts.Bar,
|
|
798
799
|
{
|
|
@@ -844,19 +845,19 @@ function TokenUsageAdminContainer() {
|
|
|
844
845
|
[t]
|
|
845
846
|
);
|
|
846
847
|
if (error) {
|
|
847
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
848
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) }) }) }) });
|
|
848
849
|
}
|
|
849
|
-
if (isLoading) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
850
|
+
if (isLoading) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true });
|
|
850
851
|
const emptyLabel = t("token_usage.admin.no_data");
|
|
851
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
852
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-4 p-4", children: [
|
|
852
853
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageAdminTiles, { summary, metric: filters.metric, singleCustomerMode: hidePlatform }),
|
|
853
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
854
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
855
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
856
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
854
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
855
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: [
|
|
856
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.usage_over_time") }),
|
|
857
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardAction, { children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex items-center gap-2", children: [
|
|
857
858
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("token_usage.admin.stack_by") }),
|
|
858
859
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
859
|
-
|
|
860
|
+
_chunkNFCXUAE6js.Select,
|
|
860
861
|
{
|
|
861
862
|
items: stackByItems,
|
|
862
863
|
value: filters.stackBy,
|
|
@@ -864,29 +865,29 @@ function TokenUsageAdminContainer() {
|
|
|
864
865
|
if (value) setFilters({ stackBy: value });
|
|
865
866
|
},
|
|
866
867
|
children: [
|
|
867
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
868
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
868
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectTrigger, { size: "sm", className: "w-36", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectValue, {}) }),
|
|
869
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectContent, { children: STACK_BY_VALUES.map((value) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SelectItem, { value, children: stackByItems[value] }, value)) })
|
|
869
870
|
]
|
|
870
871
|
}
|
|
871
872
|
)
|
|
872
873
|
] }) })
|
|
873
874
|
] }),
|
|
874
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
875
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageTimelineChart, { rows: timeline, metric: filters.metric, stackBy: filters.stackBy }) })
|
|
875
876
|
] }),
|
|
876
877
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid gap-4 md:grid-cols-2", children: [
|
|
877
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
878
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
879
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
878
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
879
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.by_company") }) }),
|
|
880
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageRankedBar, { rows: byCompany, metric: filters.metric, emptyLabel }) })
|
|
880
881
|
] }),
|
|
881
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
882
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
883
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
882
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
883
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.by_user") }) }),
|
|
884
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageRankedBar, { rows: byUser, metric: filters.metric, emptyLabel }) })
|
|
884
885
|
] })
|
|
885
886
|
] }),
|
|
886
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className:
|
|
887
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
888
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
889
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
887
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk6OFANJTEjs.cn.call(void 0, "grid gap-4", !hidePlatform && "md:grid-cols-2"), children: [
|
|
888
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
889
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.customer_by_operation") }) }),
|
|
890
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
890
891
|
TokenUsageRankedBar,
|
|
891
892
|
{
|
|
892
893
|
rows: byCustomerOperation,
|
|
@@ -896,9 +897,9 @@ function TokenUsageAdminContainer() {
|
|
|
896
897
|
}
|
|
897
898
|
) })
|
|
898
899
|
] }),
|
|
899
|
-
!hidePlatform && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
900
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
901
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
900
|
+
!hidePlatform && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
901
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.platform_by_operation") }) }),
|
|
902
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
902
903
|
TokenUsageRankedBar,
|
|
903
904
|
{
|
|
904
905
|
rows: byOperation,
|
|
@@ -909,9 +910,9 @@ function TokenUsageAdminContainer() {
|
|
|
909
910
|
) })
|
|
910
911
|
] })
|
|
911
912
|
] }),
|
|
912
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
913
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
914
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
913
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
914
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.admin.detail") }) }),
|
|
915
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageBreakdownTable, { rows: byCompany, metric: filters.metric }) })
|
|
915
916
|
] })
|
|
916
917
|
] }) });
|
|
917
918
|
}
|
|
@@ -924,36 +925,36 @@ function withFilters2(endpoint, filters) {
|
|
|
924
925
|
return endpoint;
|
|
925
926
|
}
|
|
926
927
|
_chunk7QVYU63Ejs.__name.call(void 0, withFilters2, "withFilters");
|
|
927
|
-
var TokenUsageReportService = class extends
|
|
928
|
+
var TokenUsageReportService = class extends _chunk6OFANJTEjs.AbstractService {
|
|
928
929
|
static {
|
|
929
930
|
_chunk7QVYU63Ejs.__name.call(void 0, this, "TokenUsageReportService");
|
|
930
931
|
}
|
|
931
932
|
/** Two rows: window "current" and "previous". */
|
|
932
933
|
static async getSummary(filters) {
|
|
933
|
-
const endpoint = withFilters2(new (0,
|
|
934
|
+
const endpoint = withFilters2(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageReportSummary }), filters);
|
|
934
935
|
return this.callApi({
|
|
935
|
-
type:
|
|
936
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageReportSummary,
|
|
936
937
|
method: "GET" /* GET */,
|
|
937
938
|
endpoint: endpoint.generate()
|
|
938
939
|
});
|
|
939
940
|
}
|
|
940
941
|
static async getTimeline(params) {
|
|
941
|
-
const endpoint = withFilters2(new (0,
|
|
942
|
+
const endpoint = withFilters2(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageReportTimeline }), params);
|
|
942
943
|
endpoint.addAdditionalParam("granularity", params.granularity);
|
|
943
944
|
return this.callApi({
|
|
944
|
-
type:
|
|
945
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageReportTimeline,
|
|
945
946
|
method: "GET" /* GET */,
|
|
946
947
|
endpoint: endpoint.generate()
|
|
947
948
|
});
|
|
948
949
|
}
|
|
949
950
|
static async getBreakdown(params) {
|
|
950
|
-
const endpoint = withFilters2(new (0,
|
|
951
|
+
const endpoint = withFilters2(new (0, _chunk6OFANJTEjs.EndpointCreator)({ endpoint: _chunk6OFANJTEjs.Modules.TokenUsageReportBreakdown }), params);
|
|
951
952
|
endpoint.addAdditionalParam("dimension", params.dimension);
|
|
952
953
|
if (params.targetLabel) endpoint.addAdditionalParam("targetLabel", params.targetLabel);
|
|
953
954
|
endpoint.addAdditionalParam("metric", params.metric);
|
|
954
955
|
if (params.limit !== void 0) endpoint.addAdditionalParam("limit", String(params.limit));
|
|
955
956
|
return this.callApi({
|
|
956
|
-
type:
|
|
957
|
+
type: _chunk6OFANJTEjs.Modules.TokenUsageReportBreakdown,
|
|
957
958
|
method: "GET" /* GET */,
|
|
958
959
|
endpoint: endpoint.generate()
|
|
959
960
|
});
|
|
@@ -1032,7 +1033,7 @@ var TOKEN_USAGE_REPORT_I18N_KEYS = [
|
|
|
1032
1033
|
|
|
1033
1034
|
function TokenUsageReportFilterBar({ onChange }) {
|
|
1034
1035
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { "data-help": "tokenusage.filters", className: "flex flex-wrap items-center gap-2", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1035
|
-
|
|
1036
|
+
_chunkNFCXUAE6js.DateRangeSelector,
|
|
1036
1037
|
{
|
|
1037
1038
|
onDateChange: (range) => {
|
|
1038
1039
|
if (!_optionalChain([range, 'optionalAccess', _5 => _5.from]) || !_optionalChain([range, 'optionalAccess', _6 => _6.to])) return;
|
|
@@ -1065,7 +1066,7 @@ var TokenUsageReportProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void
|
|
|
1065
1066
|
pageUrl = TOKEN_USAGE_REPORT_PAGE_URL
|
|
1066
1067
|
}) => {
|
|
1067
1068
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1068
|
-
const generateUrl =
|
|
1069
|
+
const generateUrl = _chunkNFCXUAE6js.usePageUrlGenerator.call(void 0, );
|
|
1069
1070
|
const [filters, setFilterState] = _react.useState.call(void 0, () => {
|
|
1070
1071
|
const range = defaultRange2();
|
|
1071
1072
|
return { from: _nullishCoalesce(initialFrom, () => ( range.from)), to: _nullishCoalesce(initialTo, () => ( range.to)) };
|
|
@@ -1129,7 +1130,7 @@ var TokenUsageReportProvider = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void
|
|
|
1129
1130
|
() => ({ summary, timeline, byOperation, byTarget, targetPanelTitleKey, filters, setFilters, isLoading, error }),
|
|
1130
1131
|
[summary, timeline, byOperation, byTarget, targetPanelTitleKey, filters, setFilters, isLoading, error]
|
|
1131
1132
|
);
|
|
1132
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1133
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.SharedProvider, { value: { breadcrumbs: breadcrumb(), title: title() }, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageReportContext.Provider, { value: contextValue, children }) });
|
|
1133
1134
|
}, "TokenUsageReportProvider");
|
|
1134
1135
|
var useTokenUsageReport = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, () => {
|
|
1135
1136
|
const ctx = _react.useContext.call(void 0, TokenUsageReportContext);
|
|
@@ -1149,7 +1150,7 @@ var useTokenUsageReport = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (
|
|
|
1149
1150
|
var ZERO2 = { cost: 0, credits: 0, tokensIn: 0, tokensOut: 0, cached: 0, calls: 0 };
|
|
1150
1151
|
function TokenUsageReportTiles({ summary, metric, balances }) {
|
|
1151
1152
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1152
|
-
const { decimal, metricValue: formatValue } =
|
|
1153
|
+
const { decimal, metricValue: formatValue } = _chunkTWBZ2GSXjs.useUsageFormatters.call(void 0, );
|
|
1153
1154
|
const rowFor = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (window) => _nullishCoalesce(summary.find((row) => row.window === window), () => ( ZERO2)), "rowFor");
|
|
1154
1155
|
const current = rowFor("current");
|
|
1155
1156
|
const previous = rowFor("previous");
|
|
@@ -1157,15 +1158,15 @@ function TokenUsageReportTiles({ summary, metric, balances }) {
|
|
|
1157
1158
|
const monthlyColor = monthlyPercentage > 75 ? "text-success" : monthlyPercentage >= 5 ? "text-warning" : "text-destructive";
|
|
1158
1159
|
const whole = /* @__PURE__ */ _chunk7QVYU63Ejs.__name.call(void 0, (value) => decimal(Math.max(0, Math.floor(value)), 0), "whole");
|
|
1159
1160
|
return /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid gap-3", children: [
|
|
1160
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1161
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": "tile-used", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
1161
1162
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("token_usage.report.used_in_period") }),
|
|
1162
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-primary text-xl font-semibold tabular-nums", children: formatValue(
|
|
1163
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-primary text-xl font-semibold tabular-nums", children: formatValue(_chunkTWBZ2GSXjs.metricValue.call(void 0, current, metric), metric) }),
|
|
1163
1164
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-center gap-1", children: [
|
|
1164
1165
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1165
1166
|
Delta2,
|
|
1166
1167
|
{
|
|
1167
1168
|
testId: "tile-used-delta",
|
|
1168
|
-
delta:
|
|
1169
|
+
delta: _chunkTWBZ2GSXjs.percentageDelta.call(void 0, _chunkTWBZ2GSXjs.metricValue.call(void 0, current, metric), _chunkTWBZ2GSXjs.metricValue.call(void 0, previous, metric)),
|
|
1169
1170
|
decimal
|
|
1170
1171
|
}
|
|
1171
1172
|
),
|
|
@@ -1173,21 +1174,21 @@ function TokenUsageReportTiles({ summary, metric, balances }) {
|
|
|
1173
1174
|
] })
|
|
1174
1175
|
] }) }),
|
|
1175
1176
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "grid gap-3 sm:grid-cols-3", children: [
|
|
1176
|
-
balances && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1177
|
+
balances && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": "tile-monthly", size: "sm", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
1177
1178
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("token_usage.report.monthly_left") }),
|
|
1178
1179
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "flex items-baseline gap-1", children: [
|
|
1179
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "data-testid": "tile-monthly-value", className:
|
|
1180
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { "data-testid": "tile-monthly-value", className: _chunk6OFANJTEjs.cn.call(void 0, "text-sm font-medium tabular-nums", monthlyColor), children: whole(balances.availableMonthlyCredits) }),
|
|
1180
1181
|
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "span", { className: "text-muted-foreground text-xs tabular-nums", children: [
|
|
1181
1182
|
"/ ",
|
|
1182
1183
|
whole(balances.monthlyCredits)
|
|
1183
1184
|
] })
|
|
1184
1185
|
] })
|
|
1185
1186
|
] }) }),
|
|
1186
|
-
balances && /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1187
|
+
balances && /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": "tile-extra", size: "sm", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
1187
1188
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("token_usage.report.extra_credits") }),
|
|
1188
1189
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium tabular-nums", children: whole(balances.availableExtraCredits) })
|
|
1189
1190
|
] }) }),
|
|
1190
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1191
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { "data-testid": "tile-calls", size: "sm", children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.CardContent, { className: "grid gap-1", children: [
|
|
1191
1192
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-muted-foreground text-xs", children: t("token_usage.report.calls") }),
|
|
1192
1193
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, "span", { className: "text-sm font-medium tabular-nums", children: decimal(current.calls, 0) })
|
|
1193
1194
|
] }) })
|
|
@@ -1209,7 +1210,7 @@ function Delta2({
|
|
|
1209
1210
|
"span",
|
|
1210
1211
|
{
|
|
1211
1212
|
"data-testid": testId,
|
|
1212
|
-
className:
|
|
1213
|
+
className: _chunk6OFANJTEjs.cn.call(void 0,
|
|
1213
1214
|
"inline-flex items-center gap-0.5 text-xs tabular-nums",
|
|
1214
1215
|
increased ? "text-warning" : "text-success"
|
|
1215
1216
|
),
|
|
@@ -1229,21 +1230,21 @@ function TokenUsageReportContainer({ balances = null }) {
|
|
|
1229
1230
|
const t = _nextintl.useTranslations.call(void 0, );
|
|
1230
1231
|
const { summary, timeline, byOperation, byTarget, isLoading, error, targetPanelTitleKey } = useTokenUsageReport();
|
|
1231
1232
|
if (error) {
|
|
1232
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1233
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true, children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "p-4", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.Card, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "p", { className: "text-destructive text-xs/relaxed", children: error }) }) }) }) });
|
|
1233
1234
|
}
|
|
1234
|
-
if (isLoading) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1235
|
+
if (isLoading) return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true });
|
|
1235
1236
|
const emptyLabel = t("token_usage.report.no_data");
|
|
1236
1237
|
const targetTitle = targetPanelTitleKey && byTarget.length > 0 ? t(targetPanelTitleKey) : void 0;
|
|
1237
|
-
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1238
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.RoundPageContainer, { fullWidth: true, forceHeader: true, children: /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: "flex w-full flex-col gap-4 p-4", children: [
|
|
1238
1239
|
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageReportTiles, { summary, metric: "credits", balances }),
|
|
1239
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1240
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1241
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1240
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
1241
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.report.usage_over_time") }) }),
|
|
1242
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageTimelineChart, { rows: timeline, metric: "credits", stackBy: "type" }) })
|
|
1242
1243
|
] }),
|
|
1243
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className:
|
|
1244
|
-
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1245
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1246
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1244
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, "div", { className: _chunk6OFANJTEjs.cn.call(void 0, "grid gap-4", targetTitle && "md:grid-cols-2"), children: [
|
|
1245
|
+
/* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
1246
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: t("token_usage.report.by_operation") }) }),
|
|
1247
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1247
1248
|
TokenUsageRankedBar,
|
|
1248
1249
|
{
|
|
1249
1250
|
rows: byOperation,
|
|
@@ -1253,9 +1254,9 @@ function TokenUsageReportContainer({ balances = null }) {
|
|
|
1253
1254
|
}
|
|
1254
1255
|
) })
|
|
1255
1256
|
] }),
|
|
1256
|
-
targetTitle && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0,
|
|
1257
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1258
|
-
/* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1257
|
+
targetTitle && /* @__PURE__ */ _jsxruntime.jsxs.call(void 0, _chunkNFCXUAE6js.Card, { children: [
|
|
1258
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardHeader, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardTitle, { children: targetTitle }) }),
|
|
1259
|
+
/* @__PURE__ */ _jsxruntime.jsx.call(void 0, _chunkNFCXUAE6js.CardContent, { children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0, TokenUsageRankedBar, { rows: byTarget, metric: "credits", emptyLabel }) })
|
|
1259
1260
|
] })
|
|
1260
1261
|
] })
|
|
1261
1262
|
] }) });
|
|
@@ -1293,5 +1294,5 @@ _chunk7QVYU63Ejs.__name.call(void 0, TokenUsageReportContainer, "TokenUsageRepor
|
|
|
1293
1294
|
|
|
1294
1295
|
|
|
1295
1296
|
|
|
1296
|
-
exports.TOKEN_USAGE_ADMIN_I18N_KEYS = TOKEN_USAGE_ADMIN_I18N_KEYS; exports.TOKEN_USAGE_REPORT_I18N_KEYS = TOKEN_USAGE_REPORT_I18N_KEYS; exports.TokenUsageAdminBreakdown =
|
|
1297
|
+
exports.TOKEN_USAGE_ADMIN_I18N_KEYS = TOKEN_USAGE_ADMIN_I18N_KEYS; exports.TOKEN_USAGE_REPORT_I18N_KEYS = TOKEN_USAGE_REPORT_I18N_KEYS; exports.TokenUsageAdminBreakdown = _chunk6OFANJTEjs.TokenUsageAdminBreakdown; exports.TokenUsageAdminBreakdownModule = _chunk6OFANJTEjs.TokenUsageAdminBreakdownModule; exports.TokenUsageAdminContainer = TokenUsageAdminContainer; exports.TokenUsageAdminFilterBar = TokenUsageAdminFilterBar; exports.TokenUsageAdminProvider = TokenUsageAdminProvider; exports.TokenUsageAdminService = TokenUsageAdminService; exports.TokenUsageAdminSummary = _chunk6OFANJTEjs.TokenUsageAdminSummary; exports.TokenUsageAdminSummaryModule = _chunk6OFANJTEjs.TokenUsageAdminSummaryModule; exports.TokenUsageAdminTiles = TokenUsageAdminTiles; exports.TokenUsageAdminTimeline = _chunk6OFANJTEjs.TokenUsageAdminTimeline; exports.TokenUsageAdminTimelineModule = _chunk6OFANJTEjs.TokenUsageAdminTimelineModule; exports.TokenUsageBreakdownTable = TokenUsageBreakdownTable; exports.TokenUsageRankedBar = TokenUsageRankedBar; exports.TokenUsageReportBreakdown = _chunk6OFANJTEjs.TokenUsageReportBreakdown; exports.TokenUsageReportContainer = TokenUsageReportContainer; exports.TokenUsageReportFilterBar = TokenUsageReportFilterBar; exports.TokenUsageReportProvider = TokenUsageReportProvider; exports.TokenUsageReportService = TokenUsageReportService; exports.TokenUsageReportSummary = _chunk6OFANJTEjs.TokenUsageReportSummary; exports.TokenUsageReportTiles = TokenUsageReportTiles; exports.TokenUsageReportTimeline = _chunk6OFANJTEjs.TokenUsageReportTimeline; exports.TokenUsageTimelineChart = TokenUsageTimelineChart; exports.configureTokenUsage = _chunk6OFANJTEjs.configureTokenUsage; exports.createUsageFormatters = _chunkTWBZ2GSXjs.createUsageFormatters; exports.getTokenUsageCurrency = _chunk6OFANJTEjs.getTokenUsageCurrency; exports.tokenUsageModules = _chunk6OFANJTEjs.tokenUsageModules; exports.useTokenUsageAdmin = useTokenUsageAdmin; exports.useTokenUsageReport = useTokenUsageReport; exports.useUsageFormatters = _chunkTWBZ2GSXjs.useUsageFormatters;
|
|
1297
1298
|
//# sourceMappingURL=index.js.map
|