@mastra/playground-ui 58.0.0 → 58.1.0-alpha.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/{Badge-TD55_qZJ.js → Badge-Bzn8Z-_I.js} +2 -2
- package/dist/Badge-Bzn8Z-_I.js.map +1 -0
- package/dist/{Badge-BEeYtjmv.cjs → Badge-DFNxcz-r.cjs} +2 -2
- package/dist/Badge-DFNxcz-r.cjs.map +1 -0
- package/dist/{ask-user-jDUt7hgT.js → ask-user-DtF4a9Vr.js} +2 -2
- package/dist/{ask-user-jDUt7hgT.js.map → ask-user-DtF4a9Vr.js.map} +1 -1
- package/dist/{ask-user-BPpgiE7k.cjs → ask-user-pPTuoPKI.cjs} +2 -2
- package/dist/{ask-user-BPpgiE7k.cjs.map → ask-user-pPTuoPKI.cjs.map} +1 -1
- package/dist/{chat-notification-CmdRGO_D.js → chat-notification-C4P2InUX.js} +2 -2
- package/dist/{chat-notification-CmdRGO_D.js.map → chat-notification-C4P2InUX.js.map} +1 -1
- package/dist/{chat-notification-DJykWtoj.cjs → chat-notification-HP18KxlS.cjs} +2 -2
- package/dist/{chat-notification-DJykWtoj.cjs.map → chat-notification-HP18KxlS.cjs.map} +1 -1
- package/dist/{chat-signal-xs3FkPts.cjs → chat-signal-BP9RN6Rh.cjs} +2 -2
- package/dist/{chat-signal-xs3FkPts.cjs.map → chat-signal-BP9RN6Rh.cjs.map} +1 -1
- package/dist/{chat-signal-Vg8pGXwH.js → chat-signal-CQnmFp3V.js} +2 -2
- package/dist/{chat-signal-Vg8pGXwH.js.map → chat-signal-CQnmFp3V.js.map} +1 -1
- package/dist/components/Badge.cjs.js +1 -1
- package/dist/components/Badge.es.js +1 -1
- package/dist/components/DataList.cjs.js +1 -1
- package/dist/components/DataList.es.js +1 -1
- package/dist/components/ItemList.cjs.js +1 -1
- package/dist/components/ItemList.es.js +1 -1
- package/dist/components/LogsDataList.cjs.js +1 -1
- package/dist/components/LogsDataList.es.js +1 -1
- package/dist/components/MetricsCard.cjs.js +1 -1
- package/dist/components/MetricsCard.es.js +1 -1
- package/dist/components/MetricsCardGroup.cjs.js +2 -11
- package/dist/components/MetricsCardGroup.cjs.js.map +1 -1
- package/dist/components/MetricsCardGroup.es.js +2 -11
- package/dist/components/MetricsCardGroup.es.js.map +1 -1
- package/dist/components/MetricsKpiCard.cjs.js +1 -1
- package/dist/components/MetricsKpiCard.es.js +1 -1
- package/dist/components/MetricsLineChart.cjs.js +2 -1
- package/dist/components/MetricsLineChart.cjs.js.map +1 -1
- package/dist/components/MetricsLineChart.es.js +1 -1
- package/dist/components/PageHeader.cjs.js +1 -1
- package/dist/components/PageHeader.es.js +1 -1
- package/dist/components/Workflow.cjs.js +1 -1
- package/dist/components/Workflow.es.js +1 -1
- package/dist/components/ai/ask-user.cjs.js +1 -1
- package/dist/components/ai/ask-user.es.js +1 -1
- package/dist/components/ai/chat-event.cjs.js +2 -2
- package/dist/components/ai/chat-event.es.js +3 -3
- package/dist/components/ai/plan.cjs.js +1 -1
- package/dist/components/ai/plan.es.js +1 -1
- package/dist/components/ai/task-list.cjs.js +370 -55
- package/dist/components/ai/task-list.cjs.js.map +1 -1
- package/dist/components/ai/task-list.es.js +374 -58
- package/dist/components/ai/task-list.es.js.map +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/notification-signal-notice.es.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.cjs.js +1 -1
- package/dist/domains/chat/messages/renderers/message-text.es.js +1 -1
- package/dist/domains/chat/messages/signal-badge.cjs.js +1 -1
- package/dist/domains/chat/messages/signal-badge.es.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.cjs.js +1 -1
- package/dist/domains/chat/messages/tripwire-notice.es.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/ask-user-badge.es.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.cjs.js +1 -1
- package/dist/domains/chat/tools/badges/observation-marker-badge.es.js +1 -1
- package/dist/domains/logs/components/logs-list-view.cjs.js +1 -1
- package/dist/domains/logs/components/logs-list-view.es.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/kpi-card-view.es.js +1 -1
- package/dist/domains/metrics/components/latency-card-view.cjs.js +33 -24
- package/dist/domains/metrics/components/latency-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/latency-card-view.es.js +34 -25
- package/dist/domains/metrics/components/latency-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/memory-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/memory-card-view.es.js +3 -3
- package/dist/domains/metrics/components/memory-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.cjs.js +1 -1
- package/dist/domains/metrics/components/model-usage-cost-card-view.es.js +1 -1
- package/dist/domains/metrics/components/scores-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/scores-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/scores-card-view.es.js +4 -4
- package/dist/domains/metrics/components/scores-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js +3 -3
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js +3 -3
- package/dist/domains/metrics/components/token-usage-by-agent-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js +10 -9
- package/dist/domains/metrics/components/token-usage-timeline-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js +10 -9
- package/dist/domains/metrics/components/token-usage-timeline-card-view.es.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.cjs.js.map +1 -1
- package/dist/domains/metrics/components/traces-volume-card-view.es.js +4 -4
- package/dist/domains/metrics/components/traces-volume-card-view.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js +11 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js +12 -11
- package/dist/domains/metrics/hooks/use-latency-metrics.es.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js +4 -12
- package/dist/domains/metrics/hooks/use-token-usage-timeseries.es.js.map +1 -1
- package/dist/domains/metrics/hooks.cjs.js +3 -0
- package/dist/domains/metrics/hooks.cjs.js.map +1 -1
- package/dist/domains/metrics/hooks.es.js +1 -0
- package/dist/domains/metrics/hooks.es.js.map +1 -1
- package/dist/domains/metrics/metrics-interval.cjs.js +18 -0
- package/dist/domains/metrics/metrics-interval.cjs.js.map +1 -0
- package/dist/domains/metrics/metrics-interval.d.ts +2 -0
- package/dist/domains/metrics/metrics-interval.es.js +13 -0
- package/dist/domains/metrics/metrics-interval.es.js.map +1 -0
- package/dist/domains/metrics.cjs.js +3 -0
- package/dist/domains/metrics.cjs.js.map +1 -1
- package/dist/domains/metrics.es.js +1 -0
- package/dist/domains/metrics.es.js.map +1 -1
- package/dist/domains/traces/components/span-type-legend.cjs.js +1 -1
- package/dist/domains/traces/components/span-type-legend.es.js +1 -1
- package/dist/domains/traces/components/traces-list-view.cjs.js +1 -1
- package/dist/domains/traces/components/traces-list-view.es.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-compact-grid.es.js +1 -1
- package/dist/ee/signals/components/entity-index-list.cjs.js +1 -1
- package/dist/ee/signals/components/entity-index-list.es.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.cjs.js +1 -1
- package/dist/ee/signals/settings/trace-signal-settings.es.js +1 -1
- package/dist/{logs-data-list-YL9yLKF3.cjs → logs-data-list-BHvJOeec.cjs} +2 -2
- package/dist/{logs-data-list-YL9yLKF3.cjs.map → logs-data-list-BHvJOeec.cjs.map} +1 -1
- package/dist/{logs-data-list-5BAeLU57.js → logs-data-list-CgDcNIvS.js} +2 -2
- package/dist/{logs-data-list-5BAeLU57.js.map → logs-data-list-CgDcNIvS.js.map} +1 -1
- package/dist/{metrics-card-Bzm6m1dy.js → metrics-card-C2RTi5Ew.js} +7 -7
- package/dist/metrics-card-C2RTi5Ew.js.map +1 -0
- package/dist/{metrics-card-DCCHIG-z.cjs → metrics-card-DzcVJTAN.cjs} +7 -7
- package/dist/metrics-card-DzcVJTAN.cjs.map +1 -0
- package/dist/{metrics-kpi-card-BrnFhFQm.js → metrics-kpi-card-BVCuXeDa.js} +21 -10
- package/dist/metrics-kpi-card-BVCuXeDa.js.map +1 -0
- package/dist/{metrics-kpi-card-Bhb4R4z0.cjs → metrics-kpi-card-DoIeHfv6.cjs} +21 -10
- package/dist/metrics-kpi-card-DoIeHfv6.cjs.map +1 -0
- package/dist/{metrics-line-chart-0FR3SYSt.cjs → metrics-line-chart-BNNRRxM8.cjs} +61 -25
- package/dist/metrics-line-chart-BNNRRxM8.cjs.map +1 -0
- package/dist/{metrics-line-chart-knlgw8bV.js → metrics-line-chart-CT_pqJtC.js} +62 -27
- package/dist/metrics-line-chart-CT_pqJtC.js.map +1 -0
- package/dist/new/layout/page-header.cjs.js +1 -1
- package/dist/new/layout/page-header.es.js +1 -1
- package/dist/{page-header-CyXAezlZ.js → page-header-BGyZw13s.js} +2 -2
- package/dist/page-header-BGyZw13s.js.map +1 -0
- package/dist/{page-header-Dk3s3XtC.cjs → page-header-CqvBk1wE.cjs} +2 -2
- package/dist/page-header-CqvBk1wE.cjs.map +1 -0
- package/dist/src/domains/metrics/components/latency-card-view.d.ts +4 -1
- package/dist/src/domains/metrics/hooks/index.d.ts +1 -0
- package/dist/src/domains/metrics/hooks/use-latency-metrics.d.ts +2 -2
- package/dist/src/domains/metrics/hooks/use-token-usage-timeseries.d.ts +2 -1
- package/dist/src/domains/metrics/metrics-interval.d.ts +7 -0
- package/dist/src/ds/components/MetricsCardGroup/metrics-card-group.d.ts +3 -8
- package/dist/src/ds/components/MetricsLineChart/index.d.ts +1 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart-legend.d.ts +6 -0
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.d.ts +6 -4
- package/dist/src/ds/components/MetricsLineChart/metrics-line-chart.stories.d.ts +1 -0
- package/dist/src/ds/components/ai/task-list/task-graph-node.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-graph.d.ts +8 -0
- package/dist/src/ds/components/ai/task-list/task-list.d.ts +4 -8
- package/dist/src/ds/components/ai/task-list/task-list.stories.d.ts +1 -1
- package/dist/src/ds/components/ai/task-list/use-focused-row-scroll.d.ts +12 -0
- package/dist/src/ds/new/layout/page-header/page-header.stories.d.ts +1 -0
- package/dist/style.css +304 -14
- package/dist/{traces-data-list-Dvi0s56v.js → traces-data-list-B5MkMMBi.js} +2 -2
- package/dist/{traces-data-list-Dvi0s56v.js.map → traces-data-list-B5MkMMBi.js.map} +1 -1
- package/dist/{traces-data-list-Dam8-XW-.cjs → traces-data-list-D3k50j4n.cjs} +2 -2
- package/dist/{traces-data-list-Dam8-XW-.cjs.map → traces-data-list-D3k50j4n.cjs.map} +1 -1
- package/package.json +7 -7
- package/dist/Badge-BEeYtjmv.cjs.map +0 -1
- package/dist/Badge-TD55_qZJ.js.map +0 -1
- package/dist/metrics-card-Bzm6m1dy.js.map +0 -1
- package/dist/metrics-card-DCCHIG-z.cjs.map +0 -1
- package/dist/metrics-kpi-card-Bhb4R4z0.cjs.map +0 -1
- package/dist/metrics-kpi-card-BrnFhFQm.js.map +0 -1
- package/dist/metrics-line-chart-0FR3SYSt.cjs.map +0 -1
- package/dist/metrics-line-chart-knlgw8bV.js.map +0 -1
- package/dist/page-header-CyXAezlZ.js.map +0 -1
- package/dist/page-header-Dk3s3XtC.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-interval.cjs.js","sources":["../../../src/domains/metrics/metrics-interval.ts"],"sourcesContent":["export type MetricsInterval = '1h' | '1d';\n\nconst HOURLY_MAX_RANGE_MS = 48 * 60 * 60 * 1000;\n\n/** Hourly buckets up to 48h, daily buckets beyond, so long ranges stay readable. */\nexport function chooseMetricsInterval({ start, end }: { start: Date; end: Date }): MetricsInterval {\n return end.getTime() - start.getTime() <= HOURLY_MAX_RANGE_MS ? '1h' : '1d';\n}\n\nexport function formatMetricsBucketLabel(ts: Date, interval: MetricsInterval): string {\n if (interval === '1h') {\n return ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n return ts.toLocaleDateString('en-US', { month: 'short', day: '2-digit' });\n}\n"],"names":[],"mappings":";;;;AAEA,MAAM,mBAAA,GAAsB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAGpC,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAO,GAAA,EAAI,EAAgD;AACjG,EAAA,OAAO,IAAI,OAAA,EAAQ,GAAI,MAAM,OAAA,EAAQ,IAAK,sBAAsB,IAAA,GAAO,IAAA;AACzE;AAEO,SAAS,wBAAA,CAAyB,IAAU,QAAA,EAAmC;AACpF,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,EAAA,CAAG,kBAAA,CAAmB,OAAA,EAAS,EAAE,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,EAC7F;AACA,EAAA,OAAO,EAAA,CAAG,mBAAmB,OAAA,EAAS,EAAE,OAAO,OAAA,EAAS,GAAA,EAAK,WAAW,CAAA;AAC1E;;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const HOURLY_MAX_RANGE_MS = 48 * 60 * 60 * 1e3;
|
|
2
|
+
function chooseMetricsInterval({ start, end }) {
|
|
3
|
+
return end.getTime() - start.getTime() <= HOURLY_MAX_RANGE_MS ? "1h" : "1d";
|
|
4
|
+
}
|
|
5
|
+
function formatMetricsBucketLabel(ts, interval) {
|
|
6
|
+
if (interval === "1h") {
|
|
7
|
+
return ts.toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit", hour12: false });
|
|
8
|
+
}
|
|
9
|
+
return ts.toLocaleDateString("en-US", { month: "short", day: "2-digit" });
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export { chooseMetricsInterval, formatMetricsBucketLabel };
|
|
13
|
+
//# sourceMappingURL=metrics-interval.es.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-interval.es.js","sources":["../../../src/domains/metrics/metrics-interval.ts"],"sourcesContent":["export type MetricsInterval = '1h' | '1d';\n\nconst HOURLY_MAX_RANGE_MS = 48 * 60 * 60 * 1000;\n\n/** Hourly buckets up to 48h, daily buckets beyond, so long ranges stay readable. */\nexport function chooseMetricsInterval({ start, end }: { start: Date; end: Date }): MetricsInterval {\n return end.getTime() - start.getTime() <= HOURLY_MAX_RANGE_MS ? '1h' : '1d';\n}\n\nexport function formatMetricsBucketLabel(ts: Date, interval: MetricsInterval): string {\n if (interval === '1h') {\n return ts.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false });\n }\n return ts.toLocaleDateString('en-US', { month: 'short', day: '2-digit' });\n}\n"],"names":[],"mappings":"AAEA,MAAM,mBAAA,GAAsB,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,GAAA;AAGpC,SAAS,qBAAA,CAAsB,EAAE,KAAA,EAAO,GAAA,EAAI,EAAgD;AACjG,EAAA,OAAO,IAAI,OAAA,EAAQ,GAAI,MAAM,OAAA,EAAQ,IAAK,sBAAsB,IAAA,GAAO,IAAA;AACzE;AAEO,SAAS,wBAAA,CAAyB,IAAU,QAAA,EAAmC;AACpF,EAAA,IAAI,aAAa,IAAA,EAAM;AACrB,IAAA,OAAO,EAAA,CAAG,kBAAA,CAAmB,OAAA,EAAS,EAAE,IAAA,EAAM,WAAW,MAAA,EAAQ,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,CAAA;AAAA,EAC7F;AACA,EAAA,OAAO,EAAA,CAAG,mBAAmB,OAAA,EAAS,EAAE,OAAO,OAAA,EAAS,GAAA,EAAK,WAAW,CAAA;AAC1E;;;;"}
|
|
@@ -31,6 +31,7 @@ const domains_metrics_hooks_useTopActiveThreadsMetrics = require('./metrics/hook
|
|
|
31
31
|
const domains_metrics_hooks_useTopResourcesByThreadsMetrics = require('./metrics/hooks/use-top-resources-by-threads-metrics.cjs.js');
|
|
32
32
|
const domains_metrics_hooks_useDrilldown = require('./metrics/hooks/use-drilldown.cjs.js');
|
|
33
33
|
const domains_metrics_drilldown = require('./metrics/drilldown.cjs.js');
|
|
34
|
+
const domains_metrics_metricsInterval = require('./metrics/metrics-interval.cjs.js');
|
|
34
35
|
const domains_metrics_metricsFilters = require('./metrics/metrics-filters.cjs.js');
|
|
35
36
|
|
|
36
37
|
|
|
@@ -73,6 +74,8 @@ exports.useDrilldown = domains_metrics_hooks_useDrilldown.useDrilldown;
|
|
|
73
74
|
exports.buildLogsDrilldownUrl = domains_metrics_drilldown.buildLogsDrilldownUrl;
|
|
74
75
|
exports.buildTracesDrilldownUrl = domains_metrics_drilldown.buildTracesDrilldownUrl;
|
|
75
76
|
exports.narrowWindowToBucket = domains_metrics_drilldown.narrowWindowToBucket;
|
|
77
|
+
exports.chooseMetricsInterval = domains_metrics_metricsInterval.chooseMetricsInterval;
|
|
78
|
+
exports.formatMetricsBucketLabel = domains_metrics_metricsInterval.formatMetricsBucketLabel;
|
|
76
79
|
exports.applyMetricsPropertyFilterTokens = domains_metrics_metricsFilters.applyMetricsPropertyFilterTokens;
|
|
77
80
|
exports.buildMetricsDimensionalFilter = domains_metrics_metricsFilters.buildMetricsDimensionalFilter;
|
|
78
81
|
exports.clearSavedMetricsFilters = domains_metrics_metricsFilters.clearSavedMetricsFilters;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -27,5 +27,6 @@ export { useTopActiveThreadsMetrics } from './metrics/hooks/use-top-active-threa
|
|
|
27
27
|
export { useTopResourcesByThreadsMetrics } from './metrics/hooks/use-top-resources-by-threads-metrics.es.js';
|
|
28
28
|
export { useDrilldown } from './metrics/hooks/use-drilldown.es.js';
|
|
29
29
|
export { buildLogsDrilldownUrl, buildTracesDrilldownUrl, narrowWindowToBucket } from './metrics/drilldown.es.js';
|
|
30
|
+
export { chooseMetricsInterval, formatMetricsBucketLabel } from './metrics/metrics-interval.es.js';
|
|
30
31
|
export { applyMetricsPropertyFilterTokens, buildMetricsDimensionalFilter, clearSavedMetricsFilters, createMetricsPropertyFilterFields, getMetricsPropertyFilterTokens, hasAnyMetricsFilterParams, loadMetricsFiltersFromStorage, saveMetricsFiltersToStorage } from './metrics/metrics-filters.es.js';
|
|
31
32
|
//# sourceMappingURL=metrics.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const domains_traces_components_shared = require('./shared.cjs.js');
|
|
8
|
-
const Badge = require('../../../Badge-
|
|
8
|
+
const Badge = require('../../../Badge-DFNxcz-r.cjs');
|
|
9
9
|
|
|
10
10
|
function useUsedSpanTypes(spans) {
|
|
11
11
|
return React.useMemo(() => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { getSpanTypeUi, spanTypePrefixes } from './shared.es.js';
|
|
4
|
-
import { B as Badge } from '../../../Badge-
|
|
4
|
+
import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
|
|
5
5
|
|
|
6
6
|
function useUsedSpanTypes(spans) {
|
|
7
7
|
return useMemo(() => {
|
|
@@ -11,7 +11,7 @@ const domains_traces_utils_spanUtils = require('../utils/span-utils.cjs.js');
|
|
|
11
11
|
const domains_metrics_components_metricsUtils = require('../../metrics/components/metrics-utils.cjs.js');
|
|
12
12
|
const dataList = require('../../../data-list-PwFpP_mo.cjs');
|
|
13
13
|
const dataListSkeleton = require('../../../data-list-skeleton-CjwR0o3w.cjs');
|
|
14
|
-
const tracesDataList = require('../../../traces-data-list-
|
|
14
|
+
const tracesDataList = require('../../../traces-data-list-D3k50j4n.cjs');
|
|
15
15
|
const useDataListKeyboard = require('../../../use-data-list-keyboard-DF3tLe10.cjs');
|
|
16
16
|
const dropdownMenu = require('../../../dropdown-menu-j2y37TL5.cjs');
|
|
17
17
|
const utils_cn = require('../../../cn-DG0X1KEP.cjs');
|
|
@@ -7,7 +7,7 @@ import { getInputPreview, formatSpanDuration } from '../utils/span-utils.es.js';
|
|
|
7
7
|
import { formatCompact, formatCost } from '../../metrics/components/metrics-utils.es.js';
|
|
8
8
|
import { D as DataList } from '../../../data-list-DisTjDHP.js';
|
|
9
9
|
import { D as DataListSkeleton } from '../../../data-list-skeleton-DAfM8AjW.js';
|
|
10
|
-
import { T as TracesDataList } from '../../../traces-data-list-
|
|
10
|
+
import { T as TracesDataList } from '../../../traces-data-list-B5MkMMBi.js';
|
|
11
11
|
import { u as useDataListKeyboard } from '../../../use-data-list-keyboard-DFQr4t38.js';
|
|
12
12
|
import { D as DropdownMenu } from '../../../dropdown-menu-DpEn6HwK.js';
|
|
13
13
|
import { c as cn } from '../../../cn-65Adrsfj.js';
|
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const React = require('react');
|
|
7
7
|
const ee_signals_components_entityIndexModel = require('./entity-index-model.cjs.js');
|
|
8
|
-
const Badge = require('../../../Badge-
|
|
8
|
+
const Badge = require('../../../Badge-DFNxcz-r.cjs');
|
|
9
9
|
const Card = require('../../../Card-BbwF20OW.cjs');
|
|
10
10
|
const scrollArea = require('../../../scroll-area-BzOyuS8Y.cjs');
|
|
11
11
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { useId } from 'react';
|
|
3
3
|
import { entityIndexMetadata, entityStatusLabel } from './entity-index-model.es.js';
|
|
4
|
-
import { B as Badge } from '../../../Badge-
|
|
4
|
+
import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
|
|
5
5
|
import { e as CardLink, a as CardContent, f as CardTitle, b as CardDescription } from '../../../Card-DmT57Pve.js';
|
|
6
6
|
import { S as ScrollArea } from '../../../scroll-area-DyTZoISq.js';
|
|
7
7
|
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
const ee_signals_components_entityIndexModel = require('./entity-index-model.cjs.js');
|
|
7
|
-
const Badge = require('../../../Badge-
|
|
7
|
+
const Badge = require('../../../Badge-DFNxcz-r.cjs');
|
|
8
8
|
const dataList = require('../../../data-list-PwFpP_mo.cjs');
|
|
9
9
|
require('react');
|
|
10
10
|
require('../../../keyboard/keyboard-shortcuts-context.cjs.js');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
2
|
import { entityIndexMetadata, entityStatusLabel } from './entity-index-model.es.js';
|
|
3
|
-
import { B as Badge } from '../../../Badge-
|
|
3
|
+
import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
|
|
4
4
|
import { D as DataList } from '../../../data-list-DisTjDHP.js';
|
|
5
5
|
import 'react';
|
|
6
6
|
import '../../../keyboard/keyboard-shortcuts-context.es.js';
|
|
@@ -8,7 +8,7 @@ const React = require('react');
|
|
|
8
8
|
const ee_signals_useTraceIntelligence = require('../use-trace-intelligence.cjs.js');
|
|
9
9
|
const ee_signals_settings_signalDefinitionFormDialog = require('./signal-definition-form-dialog.cjs.js');
|
|
10
10
|
const ee_signals_settings_useSignalManagement = require('./use-signal-management.cjs.js');
|
|
11
|
-
const Badge = require('../../../Badge-
|
|
11
|
+
const Badge = require('../../../Badge-DFNxcz-r.cjs');
|
|
12
12
|
const Button = require('../../../Button-BAMnPqos.cjs');
|
|
13
13
|
const components_DataDetailsPanel = require('../../../components/DataDetailsPanel.cjs.js');
|
|
14
14
|
const Notice = require('../../../Notice-AUNd8fqT.cjs');
|
|
@@ -4,7 +4,7 @@ import { useState } from 'react';
|
|
|
4
4
|
import { useTraceIntelligence } from '../use-trace-intelligence.es.js';
|
|
5
5
|
import { SignalDefinitionFormDialog } from './signal-definition-form-dialog.es.js';
|
|
6
6
|
import { useSignalManagementList, useSignalManagementMutations } from './use-signal-management.es.js';
|
|
7
|
-
import { B as Badge } from '../../../Badge-
|
|
7
|
+
import { B as Badge } from '../../../Badge-Bzn8Z-_I.js';
|
|
8
8
|
import { B as Button } from '../../../Button-B8nF87ai.js';
|
|
9
9
|
import { DataDetailsPanel } from '../../../components/DataDetailsPanel.es.js';
|
|
10
10
|
import { N as Notice } from '../../../Notice-WT8G4OA6.js';
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const dataListTop = require('./data-list-top-WGUY167p.cjs');
|
|
4
4
|
const dataListSpacer = require('./data-list-spacer-DEcgVGFM.cjs');
|
|
5
5
|
const jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
const Badge = require('./Badge-
|
|
6
|
+
const Badge = require('./Badge-DFNxcz-r.cjs');
|
|
7
7
|
const icons_AgentIcon = require('./icons/AgentIcon.cjs.js');
|
|
8
8
|
const icons_ToolsIcon = require('./icons/ToolsIcon.cjs.js');
|
|
9
9
|
const icons_WorkflowIcon = require('./icons/WorkflowIcon.cjs.js');
|
|
@@ -80,4 +80,4 @@ const LogsDataList = Object.assign(dataListTop.DataListRoot, {
|
|
|
80
80
|
});
|
|
81
81
|
|
|
82
82
|
exports.LogsDataList = LogsDataList;
|
|
83
|
-
//# sourceMappingURL=logs-data-list-
|
|
83
|
+
//# sourceMappingURL=logs-data-list-BHvJOeec.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-data-list-
|
|
1
|
+
{"version":3,"file":"logs-data-list-BHvJOeec.cjs","sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'blue',\n warn: 'yellow',\n error: 'red',\n fatal: 'red',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 truncate text-body-sm\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":["jsx","DataListCell","Badge","cn","AgentIcon","WorkflowIcon","ToolsIcon","jsxs","DataListTextCell","DataListRoot","DataListTop","DataListTopCell","DataListSortableTopCell","DataListTopCellWithTooltip","DataListTopCellSmart","DataListRowWrapper","DataListRowButton","DataListRowLink","DataListSpacer","DataListNoMatch","DataListDateCell","DataListTimeCell","DataListNextPageLoading"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { c as DataListCell, e as DataListTextCell, D as DataListRoot, f as DataListTimeCell, g as DataListDateCell, h as DataListTopCellSmart, i as DataListTopCellWithTooltip, b as DataListTopCell, a as DataListTop } from './data-list-top-DpbOA3uw.js';
|
|
2
2
|
import { D as DataListNextPageLoading, a as DataListNoMatch, b as DataListSpacer, c as DataListRowLink, d as DataListRowButton, e as DataListRowWrapper, f as DataListSortableTopCell } from './data-list-spacer-BmorAN0V.js';
|
|
3
3
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
4
|
-
import { B as Badge } from './Badge-
|
|
4
|
+
import { B as Badge } from './Badge-Bzn8Z-_I.js';
|
|
5
5
|
import { AgentIcon } from './icons/AgentIcon.es.js';
|
|
6
6
|
import { ToolsIcon } from './icons/ToolsIcon.es.js';
|
|
7
7
|
import { WorkflowIcon } from './icons/WorkflowIcon.es.js';
|
|
@@ -78,4 +78,4 @@ const LogsDataList = Object.assign(DataListRoot, {
|
|
|
78
78
|
});
|
|
79
79
|
|
|
80
80
|
export { LogsDataList as L };
|
|
81
|
-
//# sourceMappingURL=logs-data-list-
|
|
81
|
+
//# sourceMappingURL=logs-data-list-CgDcNIvS.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logs-data-list-
|
|
1
|
+
{"version":3,"file":"logs-data-list-CgDcNIvS.js","sources":["../src/ds/components/LogsDataList/logs-data-list-cells.tsx","../src/ds/components/LogsDataList/logs-data-list.tsx"],"sourcesContent":["import { Badge } from '../Badge';\nimport type { BadgeVariant } from '../Badge';\nimport { DataListCell, DataListTextCell } from '../DataList/data-list-cells';\nimport { AgentIcon } from '@/ds/icons/AgentIcon';\nimport { ToolsIcon } from '@/ds/icons/ToolsIcon';\nimport { WorkflowIcon } from '@/ds/icons/WorkflowIcon';\nimport { cn } from '@/lib/utils';\n\ntype LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';\n\nconst LEVEL_VARIANT: Record<LogLevel, BadgeVariant> = {\n debug: 'neutral',\n info: 'blue',\n warn: 'yellow',\n error: 'red',\n fatal: 'red',\n};\n\n// ---------------------------------------------------------------------------\n// LevelCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListLevelCellProps {\n level: LogLevel;\n}\n\nexport function LogsDataListLevelCell({ level }: LogsDataListLevelCellProps) {\n return (\n <DataListCell>\n <Badge variant={LEVEL_VARIANT[level]}>{level}</Badge>\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// EntityCell\n// ---------------------------------------------------------------------------\n\nfunction EntityTypeIcon({ entityType, className }: { entityType: string; className?: string }) {\n const iconClass = cn('size-3.5 shrink-0 text-placeholder', className);\n const normalizedEntityType = entityType.toLowerCase();\n\n switch (normalizedEntityType) {\n case 'agent':\n return <AgentIcon className={iconClass} aria-hidden />;\n case 'workflow':\n case 'workflow_run':\n return <WorkflowIcon className={iconClass} aria-hidden />;\n case 'tool':\n return <ToolsIcon className={iconClass} aria-hidden />;\n default:\n return null;\n }\n}\n\nexport interface LogsDataListEntityCellProps {\n entityType?: string | null;\n entityName?: string | null;\n}\n\nexport function LogsDataListEntityCell({ entityType, entityName }: LogsDataListEntityCellProps) {\n const type = entityType ?? '';\n\n return (\n <DataListCell className=\"flex min-w-0 items-center gap-2\">\n <EntityTypeIcon entityType={type} />\n {entityName ? <span className=\"min-w-0 truncate text-body-sm\">{entityName}</span> : '-'}\n </DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// MessageCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListMessageCellProps {\n message: string;\n}\n\nexport function LogsDataListMessageCell({ message }: LogsDataListMessageCellProps) {\n return (\n <DataListCell className=\"min-w-0 truncate font-mono text-body-sm text-muted-foreground\">{message}</DataListCell>\n );\n}\n\n// ---------------------------------------------------------------------------\n// DataCell\n// ---------------------------------------------------------------------------\n\nexport interface LogsDataListDataCellProps {\n data?: Record<string, unknown> | null;\n}\n\nexport function LogsDataListDataCell({ data }: LogsDataListDataCellProps) {\n if (!data || Object.keys(data).length === 0) {\n return <DataListCell>{null}</DataListCell>;\n }\n\n const summary = Object.entries(data)\n .map(([k, v]) => {\n if (typeof v === 'string') return `${k}: ${v}`;\n try {\n return `${k}: ${JSON.stringify(v)}`;\n } catch {\n return `${k}: <unserializable>`;\n }\n })\n .join(', ');\n\n return <DataListTextCell font=\"mono\">{summary}</DataListTextCell>;\n}\n","import { DataListDateCell, DataListTimeCell } from '../DataList/data-list-cells';\nimport { DataListNextPageLoading } from '../DataList/data-list-next-page-loading';\nimport { DataListNoMatch } from '../DataList/data-list-no-match';\nimport { DataListRoot } from '../DataList/data-list-root';\nimport { DataListRowButton } from '../DataList/data-list-row-button';\nimport { DataListRowLink } from '../DataList/data-list-row-link';\nimport { DataListRowWrapper } from '../DataList/data-list-row-wrapper';\nimport { DataListSortableTopCell } from '../DataList/data-list-sortable-top-cell';\nimport { DataListSpacer } from '../DataList/data-list-spacer';\nimport { DataListTop } from '../DataList/data-list-top';\nimport { DataListTopCell, DataListTopCellWithTooltip, DataListTopCellSmart } from '../DataList/data-list-top-cell';\nimport {\n LogsDataListLevelCell,\n LogsDataListEntityCell,\n LogsDataListMessageCell,\n LogsDataListDataCell,\n} from './logs-data-list-cells';\n\nexport const LogsDataList = Object.assign(DataListRoot, {\n Top: DataListTop,\n TopCell: DataListTopCell,\n SortableTopCell: DataListSortableTopCell,\n TopCellWithTooltip: DataListTopCellWithTooltip,\n TopCellSmart: DataListTopCellSmart,\n RowWrapper: DataListRowWrapper,\n RowButton: DataListRowButton,\n RowLink: DataListRowLink,\n Spacer: DataListSpacer,\n NoMatch: DataListNoMatch,\n DateCell: DataListDateCell,\n TimeCell: DataListTimeCell,\n LevelCell: LogsDataListLevelCell,\n EntityCell: LogsDataListEntityCell,\n MessageCell: LogsDataListMessageCell,\n DataCell: LogsDataListDataCell,\n NextPageLoading: DataListNextPageLoading,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
|
|
|
2
2
|
import { c as cn } from './cn-65Adrsfj.js';
|
|
3
3
|
import { S as Spinner } from './spinner-ylbE0TJA.js';
|
|
4
4
|
import { C as Card } from './Card-DmT57Pve.js';
|
|
5
|
-
import { M as MetricsKpiCard } from './metrics-kpi-card-
|
|
5
|
+
import { M as MetricsKpiCard } from './metrics-kpi-card-BVCuXeDa.js';
|
|
6
6
|
|
|
7
7
|
function MetricsCardActions({ children, className }) {
|
|
8
8
|
return /* @__PURE__ */ jsx("div", { className: cn("flex shrink-0 items-center gap-1", className), children });
|
|
@@ -36,7 +36,7 @@ function MetricsCardRoot({ children, className }) {
|
|
|
36
36
|
Card,
|
|
37
37
|
{
|
|
38
38
|
className: cn(
|
|
39
|
-
"grid min-h-72 min-w-80 flex-1 grid-rows-[
|
|
39
|
+
"grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104",
|
|
40
40
|
className
|
|
41
41
|
),
|
|
42
42
|
children
|
|
@@ -45,9 +45,9 @@ function MetricsCardRoot({ children, className }) {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
function MetricsCardSummary({ value, label, className }) {
|
|
48
|
-
return /* @__PURE__ */ jsxs("div", { className: cn("
|
|
49
|
-
/* @__PURE__ */ jsx("
|
|
50
|
-
label && /* @__PURE__ */ jsx("
|
|
48
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("text-right", className), children: [
|
|
49
|
+
/* @__PURE__ */ jsx("p", { className: "text-body text-muted-foreground tabular-nums", children: value }),
|
|
50
|
+
label && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-body text-placeholder", children: label })
|
|
51
51
|
] });
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -56,7 +56,7 @@ function MetricsCardTitle({
|
|
|
56
56
|
className,
|
|
57
57
|
as: Tag = "h2"
|
|
58
58
|
}) {
|
|
59
|
-
return /* @__PURE__ */ jsx(Tag, { className: cn("text-body text-
|
|
59
|
+
return /* @__PURE__ */ jsx(Tag, { className: cn("text-body text-foreground", className), children });
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
function MetricsCardTitleAndDescription(props) {
|
|
@@ -90,4 +90,4 @@ const MetricsCard = Object.assign(MetricsCardRoot, {
|
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
export { MetricsCard as M };
|
|
93
|
-
//# sourceMappingURL=metrics-card-
|
|
93
|
+
//# sourceMappingURL=metrics-card-C2RTi5Ew.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-card-C2RTi5Ew.js","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return <p className={cn('mt-0.5 text-body text-placeholder', className)}>{children}</p>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <p className=\"text-caption text-accent2\">{message}</p>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <p className=\"text-body text-placeholder\">{message}</p>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <p className=\"text-body text-muted-foreground tabular-nums\">{value}</p>\n {label && <p className=\"mt-0.5 text-body text-placeholder\">{label}</p>}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ const jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
const utils_cn = require('./cn-DG0X1KEP.cjs');
|
|
5
5
|
const spinner = require('./spinner-BCpN7LL9.cjs');
|
|
6
6
|
const Card = require('./Card-BbwF20OW.cjs');
|
|
7
|
-
const metricsKpiCard = require('./metrics-kpi-card-
|
|
7
|
+
const metricsKpiCard = require('./metrics-kpi-card-DoIeHfv6.cjs');
|
|
8
8
|
|
|
9
9
|
function MetricsCardActions({ children, className }) {
|
|
10
10
|
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils_cn.cn("flex shrink-0 items-center gap-1", className), children });
|
|
@@ -38,7 +38,7 @@ function MetricsCardRoot({ children, className }) {
|
|
|
38
38
|
Card.Card,
|
|
39
39
|
{
|
|
40
40
|
className: utils_cn.cn(
|
|
41
|
-
"grid min-h-72 min-w-80 flex-1 grid-rows-[
|
|
41
|
+
"grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104",
|
|
42
42
|
className
|
|
43
43
|
),
|
|
44
44
|
children
|
|
@@ -47,9 +47,9 @@ function MetricsCardRoot({ children, className }) {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
function MetricsCardSummary({ value, label, className }) {
|
|
50
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("
|
|
51
|
-
/* @__PURE__ */ jsxRuntime.jsx("
|
|
52
|
-
label && /* @__PURE__ */ jsxRuntime.jsx("
|
|
50
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("text-right", className), children: [
|
|
51
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-body text-muted-foreground tabular-nums", children: value }),
|
|
52
|
+
label && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-body text-placeholder", children: label })
|
|
53
53
|
] });
|
|
54
54
|
}
|
|
55
55
|
|
|
@@ -58,7 +58,7 @@ function MetricsCardTitle({
|
|
|
58
58
|
className,
|
|
59
59
|
as: Tag = "h2"
|
|
60
60
|
}) {
|
|
61
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Tag, { className: utils_cn.cn("text-body text-
|
|
61
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Tag, { className: utils_cn.cn("text-body text-foreground", className), children });
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
function MetricsCardTitleAndDescription(props) {
|
|
@@ -92,4 +92,4 @@ const MetricsCard = Object.assign(MetricsCardRoot, {
|
|
|
92
92
|
});
|
|
93
93
|
|
|
94
94
|
exports.MetricsCard = MetricsCard;
|
|
95
|
-
//# sourceMappingURL=metrics-card-
|
|
95
|
+
//# sourceMappingURL=metrics-card-DzcVJTAN.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-card-DzcVJTAN.cjs","sources":["../src/ds/components/MetricsCard/metrics-card-actions.tsx","../src/ds/components/MetricsCard/metrics-card-content.tsx","../src/ds/components/MetricsCard/metrics-card-description.tsx","../src/ds/components/MetricsCard/metrics-card-error.tsx","../src/ds/components/MetricsCard/metrics-card-loading.tsx","../src/ds/components/MetricsCard/metrics-card-no-data.tsx","../src/ds/components/MetricsCard/metrics-card-root.tsx","../src/ds/components/MetricsCard/metrics-card-summary.tsx","../src/ds/components/MetricsCard/metrics-card-title.tsx","../src/ds/components/MetricsCard/metrics-card-title-and-description.tsx","../src/ds/components/MetricsCard/metrics-card-top-bar.tsx","../src/ds/components/MetricsCard/metrics-card.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\n/** Container for icon buttons / small actions in the top bar of a MetricsCard,\n * placed alongside `TitleAndDescription` + `Summary`. */\nexport function MetricsCardActions({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex shrink-0 items-center gap-1', className)}>{children}</div>;\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardContent({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('overflow-x-auto', className)}>{children}</div>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardDescription({ children, className }: { children: string; className?: string }) {\n return <p className={cn('mt-0.5 text-body text-placeholder', className)}>{children}</p>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return (\n <div className={cn('flex flex-col items-center justify-center gap-3', className)}>\n <p className=\"text-caption text-accent2\">{message}</p>\n </div>\n );\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardLoading({ className }: { className?: string }) {\n return (\n <div className={cn('flex items-center justify-center', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return (\n <div className={cn('flex h-full items-center justify-center', className)}>\n <p className=\"text-body text-placeholder\">{message}</p>\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card\n className={cn(\n 'grid min-h-72 min-w-80 flex-1 grid-rows-[auto_1fr] gap-4 px-4 py-3 2xl:min-w-120 md:min-w-88 lg:min-w-sm xl:min-w-104',\n className,\n )}\n >\n {children}\n </Card>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardSummary({ value, label, className }: { value: string; label?: string; className?: string }) {\n return (\n <div className={cn('text-right', className)}>\n <p className=\"text-body text-muted-foreground tabular-nums\">{value}</p>\n {label && <p className=\"mt-0.5 text-body text-placeholder\">{label}</p>}\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsCardTitle({\n children,\n className,\n as: Tag = 'h2',\n}: {\n children: string;\n className?: string;\n as?: 'h2' | 'h3' | 'h4';\n}) {\n return <Tag className={cn('text-body text-foreground', className)}>{children}</Tag>;\n}\n","import type { ReactNode } from 'react';\n\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardTitle } from './metrics-card-title';\n\ntype PropsWithTitleDescription = {\n title: string;\n description?: string;\n titleAs?: 'h2' | 'h3' | 'h4';\n children?: never;\n className?: string;\n};\n\ntype PropsWithChildren = {\n title?: never;\n description?: never;\n children: ReactNode;\n className?: string;\n};\n\nexport function MetricsCardTitleAndDescription(props: PropsWithTitleDescription | PropsWithChildren) {\n if ('children' in props) {\n return <div className={props.className}>{props.children}</div>;\n }\n\n const { title, description, titleAs } = props;\n\n return (\n <div className={props.className}>\n <MetricsCardTitle as={titleAs}>{title}</MetricsCardTitle>\n {description && <MetricsCardDescription>{description}</MetricsCardDescription>}\n </div>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsCardTopBar({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <div className={cn('flex items-start gap-4 [&>:first-child]:min-w-0 [&>:first-child]:flex-1', className)}>\n {children}\n </div>\n );\n}\n","import { MetricsCardActions } from './metrics-card-actions';\nimport { MetricsCardContent } from './metrics-card-content';\nimport { MetricsCardDescription } from './metrics-card-description';\nimport { MetricsCardError } from './metrics-card-error';\nimport { MetricsCardLoading } from './metrics-card-loading';\nimport { MetricsCardNoData } from './metrics-card-no-data';\nimport { MetricsCardRoot } from './metrics-card-root';\nimport { MetricsCardSummary } from './metrics-card-summary';\nimport { MetricsCardTitle } from './metrics-card-title';\nimport { MetricsCardTitleAndDescription } from './metrics-card-title-and-description';\nimport { MetricsCardTopBar } from './metrics-card-top-bar';\nimport { MetricsKpiCard } from '@/ds/components/MetricsKpiCard';\n\nexport const MetricsCard = Object.assign(MetricsCardRoot, {\n Root: MetricsCardRoot,\n Kpi: MetricsKpiCard,\n TopBar: MetricsCardTopBar,\n Actions: MetricsCardActions,\n TitleAndDescription: MetricsCardTitleAndDescription,\n Title: MetricsCardTitle,\n Description: MetricsCardDescription,\n Summary: MetricsCardSummary,\n Loading: MetricsCardLoading,\n Error: MetricsCardError,\n Content: MetricsCardContent,\n NoData: MetricsCardNoData,\n});\n"],"names":["cn","jsx","Spinner","Card","jsxs","MetricsKpiCard"],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { ArrowUpRightIcon, ArrowDownRightIcon } from 'lucide-react';
|
|
3
|
-
import { B as Badge } from './Badge-
|
|
3
|
+
import { B as Badge } from './Badge-Bzn8Z-_I.js';
|
|
4
4
|
import { c as cn } from './cn-65Adrsfj.js';
|
|
5
5
|
import { S as Spinner } from './spinner-ylbE0TJA.js';
|
|
6
6
|
import { C as Card } from './Card-DmT57Pve.js';
|
|
7
7
|
|
|
8
|
+
const compact = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
|
|
9
|
+
function formatChange(changePct) {
|
|
10
|
+
if (changePct >= 1e3) return `×${compact.format(1 + changePct / 100)}`;
|
|
11
|
+
const digits = Math.abs(changePct) < 10 ? 1 : 0;
|
|
12
|
+
return `${changePct > 0 ? "+" : ""}${changePct.toFixed(digits)}%`;
|
|
13
|
+
}
|
|
8
14
|
function MetricsKpiCardChange({
|
|
9
15
|
changePct,
|
|
10
16
|
prevValue,
|
|
@@ -13,13 +19,9 @@ function MetricsKpiCardChange({
|
|
|
13
19
|
}) {
|
|
14
20
|
const isGood = lowerIsBetter ? changePct < 0 : changePct >= 0;
|
|
15
21
|
const Icon = changePct >= 0 ? ArrowUpRightIcon : ArrowDownRightIcon;
|
|
16
|
-
const
|
|
22
|
+
const formattedChange = formatChange(changePct);
|
|
17
23
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-1.5", className), children: [
|
|
18
|
-
/* @__PURE__ */
|
|
19
|
-
changePct > 0 ? "+" : "",
|
|
20
|
-
formattedChangePct,
|
|
21
|
-
"%"
|
|
22
|
-
] }),
|
|
24
|
+
/* @__PURE__ */ jsx(Badge, { variant: isGood ? "green" : "red", emphasis: "muted", size: "xs", icon: /* @__PURE__ */ jsx(Icon, {}), className: "tabular-nums", children: formattedChange }),
|
|
23
25
|
/* @__PURE__ */ jsxs("span", { className: "text-meta text-placeholder", children: [
|
|
24
26
|
"vs prior period",
|
|
25
27
|
prevValue ? /* @__PURE__ */ jsxs("span", { className: "sr-only", children: [
|
|
@@ -57,11 +59,20 @@ function MetricsKpiCardNoData({ message = "No data yet", className }) {
|
|
|
57
59
|
}
|
|
58
60
|
|
|
59
61
|
function MetricsKpiCardRoot({ children, className }) {
|
|
60
|
-
return /* @__PURE__ */ jsx(Card, { className: cn("min-w-72 flex-1 px-5 py-4", className), children: /* @__PURE__ */ jsx("div", { className: "grid gap-
|
|
62
|
+
return /* @__PURE__ */ jsx(Card, { className: cn("min-w-72 flex-1 px-5 py-4", className), children: /* @__PURE__ */ jsx("div", { className: "grid gap-1.5", children }) });
|
|
61
63
|
}
|
|
62
64
|
|
|
63
65
|
function MetricsKpiCardValue({ children, className }) {
|
|
64
|
-
return /* @__PURE__ */ jsx(
|
|
66
|
+
return /* @__PURE__ */ jsx(
|
|
67
|
+
"strong",
|
|
68
|
+
{
|
|
69
|
+
className: cn(
|
|
70
|
+
"text-title font-semibold text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]",
|
|
71
|
+
className
|
|
72
|
+
),
|
|
73
|
+
children
|
|
74
|
+
}
|
|
75
|
+
);
|
|
65
76
|
}
|
|
66
77
|
|
|
67
78
|
function MetricsKpiCardValueRow({ children, className }) {
|
|
@@ -80,4 +91,4 @@ const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {
|
|
|
80
91
|
});
|
|
81
92
|
|
|
82
93
|
export { MetricsKpiCard as M };
|
|
83
|
-
//# sourceMappingURL=metrics-kpi-card-
|
|
94
|
+
//# sourceMappingURL=metrics-kpi-card-BVCuXeDa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metrics-kpi-card-BVCuXeDa.js","sources":["../src/ds/components/MetricsKpiCard/metrics-kpi-card-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-error.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-label.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-loading.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-change.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-no-data.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-root.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card-value-row.tsx","../src/ds/components/MetricsKpiCard/metrics-kpi-card.tsx"],"sourcesContent":["import { ArrowDownRightIcon, ArrowUpRightIcon } from 'lucide-react';\nimport { Badge } from '@/ds/components/Badge';\nimport { cn } from '@/lib/utils';\n\nconst compact = new Intl.NumberFormat('en', { notation: 'compact', maximumFractionDigits: 1 });\n\n// Past +1000% a percentage is unreadable, so show how many times bigger the value got instead.\nfunction formatChange(changePct: number) {\n if (changePct >= 1000) return `×${compact.format(1 + changePct / 100)}`;\n const digits = Math.abs(changePct) < 10 ? 1 : 0;\n return `${changePct > 0 ? '+' : ''}${changePct.toFixed(digits)}%`;\n}\n\nexport function MetricsKpiCardChange({\n changePct,\n prevValue,\n lowerIsBetter,\n className,\n}: {\n changePct: number;\n prevValue?: string;\n lowerIsBetter?: boolean;\n className?: string;\n}) {\n const isGood = lowerIsBetter ? changePct < 0 : changePct >= 0;\n const Icon = changePct >= 0 ? ArrowUpRightIcon : ArrowDownRightIcon;\n const formattedChange = formatChange(changePct);\n\n return (\n <div className={cn('flex items-center gap-1.5', className)}>\n <Badge variant={isGood ? 'green' : 'red'} emphasis=\"muted\" size=\"xs\" icon={<Icon />} className=\"tabular-nums\">\n {formattedChange}\n </Badge>\n <span className=\"text-meta text-placeholder\">\n vs prior period\n {prevValue ? <span className=\"sr-only\">, previous value {prevValue}</span> : null}\n </span>\n </div>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardError({\n message = 'Failed to load data',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return <span className={cn('text-meta text-accent2', className)}>{message}</span>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardLabel({ children, className }: { children: string; className?: string }) {\n return <span className={cn('text-body font-medium text-foreground', className)}>{children}</span>;\n}\n","import { Spinner } from '@/ds/components/Spinner/spinner';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardLoading({ className }: { className?: string }) {\n return (\n <span className={cn('text-body', className)}>\n <Spinner size=\"md\" variant=\"pulse\" className=\"text-placeholder\" />\n </span>\n );\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardNoChange({\n message = 'No previous value to compare',\n className,\n}: {\n message?: string;\n className?: string;\n}) {\n return <span className={cn('text-meta text-placeholder', className)}>{message}</span>;\n}\n","import { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardNoData({ message = 'No data yet', className }: { message?: string; className?: string }) {\n return <span className={cn('text-meta text-placeholder', className)}>{message}</span>;\n}\n","import type { ReactNode } from 'react';\nimport { Card } from '@/ds/components/Card';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardRoot({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <Card className={cn('min-w-72 flex-1 px-5 py-4', className)}>\n <div className=\"grid gap-1.5\">{children}</div>\n </Card>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValue({ children, className }: { children: ReactNode; className?: string }) {\n return (\n <strong\n className={cn(\n 'text-title font-semibold text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]',\n className,\n )}\n >\n {children}\n </strong>\n );\n}\n","import type { ReactNode } from 'react';\nimport { cn } from '@/lib/utils';\n\nexport function MetricsKpiCardValueRow({ children, className }: { children: ReactNode; className?: string }) {\n return <div className={cn('flex min-h-6 flex-wrap items-center gap-x-2 gap-y-1', className)}>{children}</div>;\n}\n","import { MetricsKpiCardChange } from './metrics-kpi-card-change';\nimport { MetricsKpiCardError } from './metrics-kpi-card-error';\nimport { MetricsKpiCardLabel } from './metrics-kpi-card-label';\nimport { MetricsKpiCardLoading } from './metrics-kpi-card-loading';\nimport { MetricsKpiCardNoChange } from './metrics-kpi-card-no-change';\nimport { MetricsKpiCardNoData } from './metrics-kpi-card-no-data';\nimport { MetricsKpiCardRoot } from './metrics-kpi-card-root';\nimport { MetricsKpiCardValue } from './metrics-kpi-card-value';\nimport { MetricsKpiCardValueRow } from './metrics-kpi-card-value-row';\n\nexport const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {\n Label: MetricsKpiCardLabel,\n ValueRow: MetricsKpiCardValueRow,\n Value: MetricsKpiCardValue,\n Change: MetricsKpiCardChange,\n NoChange: MetricsKpiCardNoChange,\n NoData: MetricsKpiCardNoData,\n Error: MetricsKpiCardError,\n Loading: MetricsKpiCardLoading,\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
const jsxRuntime = require('react/jsx-runtime');
|
|
4
4
|
const lucideReact = require('lucide-react');
|
|
5
|
-
const Badge = require('./Badge-
|
|
5
|
+
const Badge = require('./Badge-DFNxcz-r.cjs');
|
|
6
6
|
const utils_cn = require('./cn-DG0X1KEP.cjs');
|
|
7
7
|
const spinner = require('./spinner-BCpN7LL9.cjs');
|
|
8
8
|
const Card = require('./Card-BbwF20OW.cjs');
|
|
9
9
|
|
|
10
|
+
const compact = new Intl.NumberFormat("en", { notation: "compact", maximumFractionDigits: 1 });
|
|
11
|
+
function formatChange(changePct) {
|
|
12
|
+
if (changePct >= 1e3) return `×${compact.format(1 + changePct / 100)}`;
|
|
13
|
+
const digits = Math.abs(changePct) < 10 ? 1 : 0;
|
|
14
|
+
return `${changePct > 0 ? "+" : ""}${changePct.toFixed(digits)}%`;
|
|
15
|
+
}
|
|
10
16
|
function MetricsKpiCardChange({
|
|
11
17
|
changePct,
|
|
12
18
|
prevValue,
|
|
@@ -15,13 +21,9 @@ function MetricsKpiCardChange({
|
|
|
15
21
|
}) {
|
|
16
22
|
const isGood = lowerIsBetter ? changePct < 0 : changePct >= 0;
|
|
17
23
|
const Icon = changePct >= 0 ? lucideReact.ArrowUpRightIcon : lucideReact.ArrowDownRightIcon;
|
|
18
|
-
const
|
|
24
|
+
const formattedChange = formatChange(changePct);
|
|
19
25
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: utils_cn.cn("flex items-center gap-1.5", className), children: [
|
|
20
|
-
/* @__PURE__ */ jsxRuntime.
|
|
21
|
-
changePct > 0 ? "+" : "",
|
|
22
|
-
formattedChangePct,
|
|
23
|
-
"%"
|
|
24
|
-
] }),
|
|
26
|
+
/* @__PURE__ */ jsxRuntime.jsx(Badge.Badge, { variant: isGood ? "green" : "red", emphasis: "muted", size: "xs", icon: /* @__PURE__ */ jsxRuntime.jsx(Icon, {}), className: "tabular-nums", children: formattedChange }),
|
|
25
27
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-meta text-placeholder", children: [
|
|
26
28
|
"vs prior period",
|
|
27
29
|
prevValue ? /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "sr-only", children: [
|
|
@@ -59,11 +61,20 @@ function MetricsKpiCardNoData({ message = "No data yet", className }) {
|
|
|
59
61
|
}
|
|
60
62
|
|
|
61
63
|
function MetricsKpiCardRoot({ children, className }) {
|
|
62
|
-
return /* @__PURE__ */ jsxRuntime.jsx(Card.Card, { className: utils_cn.cn("min-w-72 flex-1 px-5 py-4", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-
|
|
64
|
+
return /* @__PURE__ */ jsxRuntime.jsx(Card.Card, { className: utils_cn.cn("min-w-72 flex-1 px-5 py-4", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-1.5", children }) });
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
function MetricsKpiCardValue({ children, className }) {
|
|
66
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
68
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
69
|
+
"strong",
|
|
70
|
+
{
|
|
71
|
+
className: utils_cn.cn(
|
|
72
|
+
"text-title font-semibold text-foreground tabular-nums [text-box:trim-both_cap_alphabetic]",
|
|
73
|
+
className
|
|
74
|
+
),
|
|
75
|
+
children
|
|
76
|
+
}
|
|
77
|
+
);
|
|
67
78
|
}
|
|
68
79
|
|
|
69
80
|
function MetricsKpiCardValueRow({ children, className }) {
|
|
@@ -82,4 +93,4 @@ const MetricsKpiCard = Object.assign(MetricsKpiCardRoot, {
|
|
|
82
93
|
});
|
|
83
94
|
|
|
84
95
|
exports.MetricsKpiCard = MetricsKpiCard;
|
|
85
|
-
//# sourceMappingURL=metrics-kpi-card-
|
|
96
|
+
//# sourceMappingURL=metrics-kpi-card-DoIeHfv6.cjs.map
|