@hot-updater/console 1.0.0-rc.37 → 1.0.0-rc.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/EventDetails-BUTZTAVo.js +1 -0
  3. package/.output/public/assets/{InsightsInfo-D1TJXkbu.js → InsightsInfo-B8i-PPsH.js} +1 -1
  4. package/.output/public/assets/{index-BnCs5zMw.js → index-YSc3HCcR.js} +2 -2
  5. package/.output/public/assets/{insights-CGJW_qQG.js → insights-BT0ER2ff.js} +2 -2
  6. package/.output/public/assets/{insights-C4dg-3pH.js → insights-DPY9akyx.js} +2 -2
  7. package/.output/public/assets/{insights_.distribution-DvwYKSL9.js → insights_.distribution-NyB0_bbh.js} +2 -2
  8. package/.output/public/assets/{insights_.distribution-DuPsUTYt.js → insights_.distribution-jH_7sKdg.js} +1 -1
  9. package/.output/public/assets/installations-C-QP0sM1.js +1 -0
  10. package/.output/public/assets/{installations-D-2HUF-S.js → installations-yQkxp5fm.js} +2 -2
  11. package/.output/public/assets/routes-DQWmO9Ow.js +2 -0
  12. package/.output/public/assets/{routes-B91Tl8_r.js → routes-DuBSi7uM.js} +1 -1
  13. package/.output/public/assets/styles-Cm2ONGCt.css +2 -0
  14. package/.output/server/{__23tanstack-start-server-fn-resolver-BbIdjgi3.mjs → __23tanstack-start-server-fn-resolver-DNbgEvfb.mjs} +36 -36
  15. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +1 -1
  16. package/.output/server/_ssr/{ConsoleFeatureUnavailable-3H5YBBIG.mjs → ConsoleFeatureUnavailable-BCGWklf8.mjs} +6 -6
  17. package/.output/server/_ssr/{EventDetails-CUN156Lp.mjs → EventDetails-vtXoqSGS.mjs} +13 -13
  18. package/.output/server/_ssr/{InsightsInfo-9k_ARQOR.mjs → InsightsInfo-B0AtaDnr.mjs} +2 -3
  19. package/.output/server/_ssr/{InsightsPageHeader-fomu7iXg.mjs → InsightsPageHeader-BryzBlT8.mjs} +5 -5
  20. package/.output/server/_ssr/{NotFoundPage-BDuHSdd6.mjs → NotFoundPage-xK1bhpoZ.mjs} +2 -2
  21. package/.output/server/_ssr/{alert-dialog-CWePRAJV.mjs → alert-dialog-Cc9d0p8Y.mjs} +1 -1
  22. package/.output/server/_ssr/{api-DQ-FXMz3.mjs → api-Bz1UGqdn.mjs} +3 -3
  23. package/.output/server/_ssr/{api-keys-bim5GRPD.mjs → api-keys-C2jqeEZ_.mjs} +2 -2
  24. package/.output/server/_ssr/{api-keys-C4LJdYs5.mjs → api-keys-DnKkFZ3T.mjs} +8 -8
  25. package/.output/server/_ssr/{api-keys-rpc-CXQTGlAg.mjs → api-keys-rpc-BJ0MKu1e.mjs} +3 -3
  26. package/.output/server/_ssr/{api-rpc-CPoJccqV.mjs → api-rpc-B9mAeGyS.mjs} +4 -4
  27. package/.output/server/_ssr/{auth-rpc-RRWjYszv.mjs → auth-rpc-Bs4tYGIg.mjs} +4 -4
  28. package/.output/server/_ssr/{auth.server-Jm-lGkAV.mjs → auth.server-CcTNWmd4.mjs} +2 -2
  29. package/.output/server/_ssr/{card-JDjWazaX.mjs → card-GK-VihZc.mjs} +1 -1
  30. package/.output/server/_ssr/{config.server-ByU2skgQ.mjs → config.server-DaeqzKiu.mjs} +3 -3
  31. package/.output/server/_ssr/{console-access-BKTPQEbc.mjs → console-access-CSVqeikY.mjs} +2 -2
  32. package/.output/server/_ssr/{console-features-api-DR64_VBz.mjs → console-features-api-CuukSjL8.mjs} +5 -5
  33. package/.output/server/_ssr/{console-features-rpc-DiQXop1k.mjs → console-features-rpc-Dxv_D020.mjs} +3 -3
  34. package/.output/server/_ssr/{dialog-B_H88HlL.mjs → dialog-Vjm_bDw9.mjs} +1 -1
  35. package/.output/server/_ssr/{empty-D4-dl3JT.mjs → empty-DeVHKygf.mjs} +2 -2
  36. package/.output/server/_ssr/{field-_iyHgZ6n.mjs → field-CcbQSAiS.mjs} +2 -2
  37. package/.output/server/_ssr/{input-group-C7STqztC.mjs → input-group-D7oZhqZP.mjs} +1 -1
  38. package/.output/server/_ssr/{insights-B4Dnb2-l.mjs → insights-C2_kuG7Z.mjs} +2 -2
  39. package/.output/server/_ssr/{insights-C79pFvJ0.mjs → insights-CdkhyQHH.mjs} +5 -5
  40. package/.output/server/_ssr/{insights-WJB5cOP1.mjs → insights-DFBjq_u1.mjs} +146 -120
  41. package/.output/server/_ssr/{insights-api-gOi3RxGF.mjs → insights-api-CBBcHIUP.mjs} +3 -3
  42. package/.output/server/_ssr/{insights-failures-rpc-I4DuA2w_.mjs → insights-failures-rpc-CTf5QF7O.mjs} +4 -4
  43. package/.output/server/_ssr/{insights-recovery-rpc-CP_yvJqm.mjs → insights-recovery-rpc-CPKwBt4V.mjs} +3 -3
  44. package/.output/server/_ssr/{insights-rpc-BMB_YXld.mjs → insights-rpc-DjhnYd2B.mjs} +3 -3
  45. package/.output/server/_ssr/{insights-usage-rpc-DjFvxUfh.mjs → insights-usage-rpc-CLHRgGDT.mjs} +3 -3
  46. package/.output/server/_ssr/{insights-usage-rpc-BGvxXZAK.mjs → insights-usage-rpc-CLyldyrz.mjs} +3 -3
  47. package/.output/server/_ssr/{insights_.distribution-BVCN8OAV.mjs → insights_.distribution-Buu3dsat.mjs} +12 -12
  48. package/.output/server/_ssr/{insights_.distribution-BZ-X0rqy.mjs → insights_.distribution-DXCwHGBj.mjs} +5 -5
  49. package/.output/server/_ssr/{insights_.distribution-Ct7BBlil.mjs → insights_.distribution-WDmsXtQl.mjs} +2 -2
  50. package/.output/server/_ssr/{installations-BYsNrAYO.mjs → installations-BiZY4zjE.mjs} +12 -12
  51. package/.output/server/_ssr/{installations-Bck5gWvu.mjs → installations-Dfe3WTAY.mjs} +2 -2
  52. package/.output/server/_ssr/{installations-j-TUOGSQ.mjs → installations-sR2BlZxi.mjs} +4 -4
  53. package/.output/server/_ssr/{release-adoption-RBqFLBpk.mjs → release-adoption-NO2DVJwF.mjs} +8 -8
  54. package/.output/server/_ssr/{release-adoption-rpc-C0uxuG4U.mjs → release-adoption-rpc-DVhlhHRR.mjs} +7 -7
  55. package/.output/server/_ssr/{releaseAdoption-CzeDAkz7.mjs → releaseAdoption-CwFUzIZA.mjs} +13 -6
  56. package/.output/server/_ssr/{router-Cmu4KYOY.mjs → router-HumF5rJs.mjs} +14 -14
  57. package/.output/server/_ssr/{routes-B0_R6UgL.mjs → routes-CN0fvuLB.mjs} +11 -11
  58. package/.output/server/_ssr/{routes-80FGZ5LN.mjs → routes-kDK03EWa.mjs} +12 -12
  59. package/.output/server/_ssr/{select-CvpHwKoP.mjs → select-ycdfR07Y.mjs} +1 -1
  60. package/.output/server/_ssr/{server-BJhN_kEZ.mjs → server-CyAnx61_.mjs} +3 -3
  61. package/.output/server/_ssr/{sidebar-VNZznbcK.mjs → sidebar-B2SHpuig.mjs} +2 -2
  62. package/.output/server/_ssr/ssr.mjs +1 -1
  63. package/.output/server/_ssr/{table-C_7IMswk.mjs → table-COXYXU49.mjs} +1 -1
  64. package/.output/server/{_tanstack-start-manifest_v-k0gJhOdb.mjs → _tanstack-start-manifest_v-DcB4oGQp.mjs} +21 -21
  65. package/.output/server/index.mjs +104 -104
  66. package/package.json +7 -7
  67. package/src/components/features/insights/ComparedBundlesChart.tsx +108 -61
  68. package/src/components/features/insights/EventDetails.tsx +7 -8
  69. package/src/components/features/insights/InsightsOverview.tsx +90 -71
  70. package/src/components/features/insights/InstallationHistoryCard.tsx +1 -1
  71. package/src/components/features/insights/ReleaseActivity.tsx +2 -3
  72. package/src/lib/insights-search.ts +0 -6
  73. package/src/lib/insights-view.ts +0 -7
  74. package/src/lib/release-adoption-api.ts +6 -3
  75. package/src/lib/release-adoption.ts +18 -15
  76. package/src/lib/server/releaseAdoption.ts +29 -20
  77. package/src/routes/insights.tsx +0 -9
  78. package/src/routes/installations.tsx +1 -1
  79. package/.output/public/assets/EventDetails-B7sg-hJY.js +0 -1
  80. package/.output/public/assets/installations-tTQd9kCf.js +0 -1
  81. package/.output/public/assets/routes-B2VVPV8z.js +0 -2
  82. package/.output/public/assets/styles-C0s3e1IX.css +0 -2
@@ -1,33 +1,33 @@
1
1
  import { i as __toESM } from "../_runtime.mjs";
2
2
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
3
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
4
3
  import { C as ScrollAreaRoot, S as ScrollAreaViewport, _ as ComboboxInput$1, b as ScrollAreaThumb, c as ComboboxItemIndicator, d as ComboboxItem$1, f as ComboboxPopup, g as ComboboxClear$1, h as ComboboxList$1, ht as require_react, l as ComboboxRoot, m as ComboboxPortal, mt as require_jsx_runtime, p as ComboboxPositioner, u as ComboboxEmpty$1, v as ComboboxTrigger$1, x as ScrollAreaScrollbar, y as ScrollAreaCorner } from "../_libs/@base-ui/react+[...].mjs";
5
4
  import { A as Copy, C as List, H as ArrowUpRight, I as ChevronRight, R as ChevronDown, U as ArrowRight, f as RotateCw, m as RefreshCw, n as Undo2, p as RotateCcw, r as TriangleAlert, t as X, z as Check } from "../_libs/lucide-react.mjs";
6
- import { A as createSsrRpc, C as Skeleton, O as buttonVariants, a as SheetContent, c as SheetTitle, i as Sheet, k as cn, l as SheetTrigger, n as Input, o as SheetDescription, r as Separator$1, s as SheetHeader, t as Button$1 } from "./sidebar-VNZznbcK.mjs";
7
- import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, r as CardDescription, t as Card } from "./card-JDjWazaX.mjs";
8
- import { a as Badge, i as AlertTitle, l as FieldGroup, o as Field, r as AlertDescription, t as Alert, u as FieldLabel } from "./field-_iyHgZ6n.mjs";
9
- import { a as AlertDialogDescription, i as AlertDialogContent, l as AlertDialogTitle, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1 } from "./alert-dialog-CWePRAJV.mjs";
10
- import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-C_7IMswk.mjs";
5
+ import { A as createSsrRpc, C as Skeleton, O as buttonVariants, a as SheetContent, c as SheetTitle, i as Sheet, k as cn, l as SheetTrigger, n as Input, o as SheetDescription, r as Separator$1, s as SheetHeader, t as Button$1 } from "./sidebar-B2SHpuig.mjs";
6
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
7
+ import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
11
8
  import { a as useQueries, i as useQuery, s as useQueryClient } from "../_libs/tanstack__react-query.mjs";
9
+ import { a as EmptyTitle, i as EmptyHeader, n as EmptyContent, r as EmptyDescription, t as Empty } from "./empty-DeVHKygf.mjs";
10
+ import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, r as CardDescription, t as Card } from "./card-GK-VihZc.mjs";
11
+ import { a as Badge, i as AlertTitle, l as FieldGroup, o as Field, r as AlertDescription, t as Alert, u as FieldLabel } from "./field-CcbQSAiS.mjs";
12
+ import { a as AlertDialogDescription, i as AlertDialogContent, l as AlertDialogTitle, n as AlertDialogAction, o as AlertDialogFooter, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1 } from "./alert-dialog-Cc9d0p8Y.mjs";
13
+ import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-COXYXU49.mjs";
12
14
  import { n as toast } from "../_libs/sonner.mjs";
13
- import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
14
- import { a as EmptyTitle, i as EmptyHeader, n as EmptyContent, r as EmptyDescription, t as Empty } from "./empty-D4-dl3JT.mjs";
15
15
  import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-Dpk6Mfb9.mjs";
16
16
  import { a as failureReasonLabel, c as patchFallbackRate, i as failureRate, o as failureStageLabel, r as failureDetailParts, s as formatRate, t as checkFailureRate } from "./insights-failures-BZaGNNij.mjs";
17
17
  import { t as groupFailureReports } from "./insights-errors-F-7hOApm.mjs";
18
18
  import { n as usageMetrics } from "./insights-usage-CLUWjUFz.mjs";
19
- import { a as readBundleEventsInput, i as readAdoptionReleasesInput, n as crashRateOf, o as recommendsRollback, r as readAdoptionReleaseInput, t as CRASH_RATE_THRESHOLD } from "./release-adoption-RBqFLBpk.mjs";
20
- import { i as useFailureReportsQuery, l as useInsightsRetention, r as keepsTwelveMonths, t as DEFAULT_INSIGHTS_RETENTION, u as useUpdateFailuresQuery } from "./insights-api-gOi3RxGF.mjs";
21
- import { r as comparedBundleIds, t as InsightsInfo } from "./InsightsInfo-9k_ARQOR.mjs";
22
- import { t as Route } from "./insights-C79pFvJ0.mjs";
23
- import { a as SelectGroup, c as SelectValue, i as SelectContent, n as PlatformIcon, o as SelectItem, r as Select$1, s as SelectTrigger, t as BundleIdDisplay } from "./select-CvpHwKoP.mjs";
24
- import { i as useChannelsQuery, l as usePreflightReleaseMutation, m as useUpdateReleaseMutation } from "./api-DQ-FXMz3.mjs";
25
- import { a as InputGroupInput, i as InputGroupButton, n as InputGroup, r as InputGroupAddon } from "./input-group-C7STqztC.mjs";
26
- import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-BGvxXZAK.mjs";
27
- import { c as TabsList, i as InsightsPeriodSelector, l as TabsTrigger, n as InsightsErrorAlert, o as Tabs$1, r as InsightsPageHeader, s as TabsContent, u as UsagePeriodSelector } from "./InsightsPageHeader-fomu7iXg.mjs";
28
- import { i as HttpResponseBody, n as EventTimestamp, o as useInsightsTimeFormat, t as EventBundleTransition } from "./EventDetails-CUN156Lp.mjs";
19
+ import { a as readBundleEventsInput, i as readAdoptionReleasesInput, n as crashRateOf, o as recommendsRollback, r as readAdoptionReleaseInput, t as CRASH_RATE_THRESHOLD } from "./release-adoption-NO2DVJwF.mjs";
20
+ import { i as useFailureReportsQuery, l as useInsightsRetention, r as keepsTwelveMonths, t as DEFAULT_INSIGHTS_RETENTION, u as useUpdateFailuresQuery } from "./insights-api-CBBcHIUP.mjs";
21
+ import { r as comparedBundleIds, t as InsightsInfo } from "./InsightsInfo-B0AtaDnr.mjs";
22
+ import { t as Route } from "./insights-CdkhyQHH.mjs";
23
+ import { a as SelectGroup, c as SelectValue, i as SelectContent, n as PlatformIcon, o as SelectItem, r as Select$1, s as SelectTrigger, t as BundleIdDisplay } from "./select-ycdfR07Y.mjs";
24
+ import { i as useChannelsQuery, l as usePreflightReleaseMutation, m as useUpdateReleaseMutation } from "./api-Bz1UGqdn.mjs";
25
+ import { a as InputGroupInput, i as InputGroupButton, n as InputGroup, r as InputGroupAddon } from "./input-group-D7oZhqZP.mjs";
26
+ import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-CLyldyrz.mjs";
27
+ import { c as TabsList, i as InsightsPeriodSelector, l as TabsTrigger, n as InsightsErrorAlert, o as Tabs$1, r as InsightsPageHeader, s as TabsContent, u as UsagePeriodSelector } from "./InsightsPageHeader-BryzBlT8.mjs";
28
+ import { i as HttpResponseBody, n as EventTimestamp, o as useInsightsTimeFormat, t as EventBundleTransition } from "./EventDetails-vtXoqSGS.mjs";
29
29
  import { a as CartesianGrid, i as Line, l as ResponsiveContainer, n as YAxis, o as ReferenceLine, r as XAxis, s as Tooltip, t as LineChart } from "../_libs/recharts+[...].mjs";
30
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-WJB5cOP1.js
30
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-DFBjq_u1.js
31
31
  var import_react = /* @__PURE__ */ __toESM(require_react());
32
32
  var import_jsx_runtime = require_jsx_runtime();
33
33
  var THEMES = {
@@ -1136,16 +1136,18 @@ function useSeriesColors(releaseIds) {
1136
1136
  var spanOf = (startMs, endMs) => dates.format(startMs) === dates.format(endMs) ? `${times.format(startMs)}–${clock.format(endMs)} UTC` : `${times.format(startMs)} – ${times.format(endMs)} UTC`;
1137
1137
  /**
1138
1138
  * One row per interval of the period, at the interval's end, with each
1139
- * bundle's count as `b<index>`: none before the interval it was deployed in,
1140
- * and none while its counts load.
1139
+ * bundle's count as `b<index>` and its dashed count, when it has one, as
1140
+ * `d<index>`: none before the interval it was deployed in, and none while
1141
+ * its counts load.
1141
1142
  */
1142
1143
  var curveOf = (period, lines) => Array.from({ length: Math.round(period.durationMs / period.intervalMs) }, (_, interval) => {
1143
1144
  const startMs = period.startMs + interval * period.intervalMs;
1144
1145
  const endMs = startMs + period.intervalMs;
1146
+ const countOf = (release, points) => points === void 0 || endMs <= release.deployedAtMs ? null : points.find((point) => point.startMs === startMs)?.events ?? 0;
1145
1147
  return Object.fromEntries([
1146
1148
  ["startMs", startMs],
1147
1149
  ["endMs", endMs],
1148
- ...lines.map(({ release, points }, index) => [`b${index}`, points === void 0 || endMs <= release.deployedAtMs ? null : points.find((point) => point.startMs === startMs)?.events ?? 0])
1150
+ ...lines.flatMap((line, index) => [[`b${index}`, countOf(line.release, line.points)], ..."dashed" in line ? [[`d${index}`, countOf(line.release, line.dashed)]] : []])
1149
1151
  ]);
1150
1152
  });
1151
1153
  /**
@@ -1160,25 +1162,47 @@ var ticksOf = (period) => {
1160
1162
  return ticks;
1161
1163
  };
1162
1164
  /**
1163
- * Each bundle's reports per interval of the period on one timeline, with its
1164
- * deployment marked. A count sits at the end of its interval, so a line starts
1165
- * after its deployment, with the interval it was deployed in.
1165
+ * Each bundle's counts per interval of the period on one timeline, with its
1166
+ * deployment marked: a solid line, and a dashed one in its hue when the
1167
+ * bundle has a second count. A count sits at the end of its interval, so a
1168
+ * line starts after its deployment, with the interval it was deployed in.
1166
1169
  */
1167
- function ComparedBundlesChart({ period, lines, colorOf, active, label }) {
1170
+ function ComparedBundlesChart({ period, lines, colorOf, active, label, names }) {
1168
1171
  const measuredAtMs = Math.max(0, ...lines.map((line) => line.measuredAtMs ?? 0));
1169
1172
  const curve = curveOf(period, lines);
1170
1173
  const ticks = ticksOf(period);
1171
1174
  const tick = (value) => period.intervalMs === HOUR$1 ? times.format(value) : dates.format(value);
1175
+ const labelOf = (release, name) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
1176
+ className: "flex items-center gap-1.5 whitespace-nowrap",
1177
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
1178
+ bundleId: release.releaseId,
1179
+ className: "whitespace-nowrap"
1180
+ }), name ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1181
+ className: "text-muted-foreground",
1182
+ children: name
1183
+ }) : null]
1184
+ });
1185
+ const config = Object.fromEntries(lines.flatMap((line, index) => [[`b${index}`, {
1186
+ label: labelOf(line.release, names?.solid),
1187
+ color: colorOf(line.release.releaseId)
1188
+ }], ..."dashed" in line ? [[`d${index}`, {
1189
+ label: labelOf(line.release, names?.dashed),
1190
+ color: colorOf(line.release.releaseId)
1191
+ }]] : []]));
1192
+ const isolated = (key, color, hollow) => ({ cx, cy, index: at }) => {
1193
+ return curve[at]?.[key] == null || cx == null || cy == null || curve[at - 1]?.[key] != null || curve[at + 1]?.[key] != null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("g", {}, `${key}-${at}`) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
1194
+ cx,
1195
+ cy,
1196
+ r: 4,
1197
+ fill: hollow ? "var(--background)" : color,
1198
+ stroke: color,
1199
+ strokeWidth: hollow ? 2 : 0
1200
+ }, `${key}-${at}`);
1201
+ };
1172
1202
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartContainer, {
1173
1203
  "aria-label": label,
1174
1204
  className: "h-64 w-full aspect-auto",
1175
- config: Object.fromEntries(lines.map(({ release }, index) => [`b${index}`, {
1176
- label: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
1177
- bundleId: release.releaseId,
1178
- className: "whitespace-nowrap"
1179
- }),
1180
- color: colorOf(release.releaseId)
1181
- }])),
1205
+ config,
1182
1206
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(LineChart, {
1183
1207
  accessibilityLayer: true,
1184
1208
  data: curve,
@@ -1214,25 +1238,21 @@ function ComparedBundlesChart({ period, lines, colorOf, active, label }) {
1214
1238
  strokeOpacity: .5,
1215
1239
  ifOverflow: "extendDomain"
1216
1240
  }, `deployed-${release.releaseId}`) : null),
1217
- lines.map(({ release }, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Line, {
1218
- dataKey: `b${index}`,
1219
- type: "linear",
1220
- stroke: `var(--color-b${index})`,
1221
- strokeWidth: active === release.releaseId ? 3 : 2,
1222
- strokeOpacity: active === null || active === release.releaseId ? 1 : .25,
1223
- dot: ({ cx, cy, index: at }) => {
1224
- const key = `b${index}`;
1225
- return curve[at]?.[key] == null || cx == null || cy == null || curve[at - 1]?.[key] != null || curve[at + 1]?.[key] != null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("g", {}, `${key}-${at}`) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("circle", {
1226
- cx,
1227
- cy,
1228
- r: 4,
1229
- fill: colorOf(release.releaseId)
1230
- }, `${key}-${at}`);
1231
- },
1232
- activeDot: { r: 4 },
1233
- connectNulls: false,
1234
- isAnimationActive: false
1235
- }, release.releaseId))
1241
+ lines.flatMap((line, index) => [..."dashed" in line ? ["d"] : [], "b"].map((kind) => {
1242
+ const { releaseId } = line.release;
1243
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Line, {
1244
+ dataKey: `${kind}${index}`,
1245
+ type: "linear",
1246
+ stroke: `var(--color-${kind}${index})`,
1247
+ strokeDasharray: kind === "d" ? "6 4" : void 0,
1248
+ strokeWidth: active === releaseId ? 3 : 2,
1249
+ strokeOpacity: active === null || active === releaseId ? 1 : .25,
1250
+ dot: isolated(`${kind}${index}`, colorOf(releaseId), kind === "d"),
1251
+ activeDot: { r: 4 },
1252
+ connectNulls: false,
1253
+ isAnimationActive: false
1254
+ }, `${kind}-${releaseId}`);
1255
+ }))
1236
1256
  ]
1237
1257
  })
1238
1258
  });
@@ -1325,25 +1345,32 @@ var crashesOf = ({ release, launched, recovered }) => launched === void 0 || rec
1325
1345
  ...crashRateOf(launched.total, recovered.total),
1326
1346
  recommended: recommendsRollback(release, launched.total, recovered.total)
1327
1347
  };
1328
- /** Each interval's count, or the running total up to it. */
1329
- var totalsOf = (points, cumulative) => {
1330
- if (points === void 0 || !cumulative) return points;
1331
- let sum = 0;
1332
- return points.map((point) => {
1333
- sum += point.events;
1334
- return {
1335
- ...point,
1336
- events: sum
1337
- };
1348
+ /** A line sample for the legend: solid or dashed, in the text color. */
1349
+ function LineSample({ dashed }) {
1350
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", {
1351
+ "aria-hidden": "true",
1352
+ className: "h-3 w-6 shrink-0",
1353
+ viewBox: "0 0 24 12",
1354
+ preserveAspectRatio: "none",
1355
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("line", {
1356
+ x1: "0",
1357
+ y1: "6",
1358
+ x2: "24",
1359
+ y2: "6",
1360
+ stroke: "currentColor",
1361
+ strokeWidth: "2",
1362
+ strokeDasharray: dashed ? "6 4" : void 0
1363
+ })
1338
1364
  });
1339
- };
1365
+ }
1340
1366
  /**
1341
1367
  * Release health: how the newest bundles fare after their deployment, on
1342
- * one timeline. Adoption shows installations launching each bundle, per
1343
- * interval or as a running total; Crashes shows them crashing back from it,
1344
- * and offers a rollback when a bundle crashes for too many of them.
1368
+ * one timeline, per interval. Adoption shows installations downloading each
1369
+ * bundle (dashed) and launching it (solid), so the gap is the restarts still
1370
+ * to come; Crashes shows them crashing back from it, and offers a rollback
1371
+ * when a bundle crashes for too many of them.
1345
1372
  */
1346
- function InsightsOverview({ input, chart, onChartChange, total = "interval", onTotalChange, health, onReleasesChange, onWindowChange }) {
1373
+ function InsightsOverview({ input, chart, onChartChange, health, onReleasesChange, onWindowChange }) {
1347
1374
  const [active, setActive] = (0, import_react.useState)(null);
1348
1375
  const { period, candidates, releases } = health;
1349
1376
  const ids = (releases ?? []).map(({ release }) => release.releaseId);
@@ -1365,8 +1392,7 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1365
1392
  ]
1366
1393
  });
1367
1394
  const seriesOf = (bundle) => chart === "adoption" ? bundle.launched : bundle.recovered;
1368
- const cumulative = chart === "adoption" && total === "cumulative";
1369
- const loaded = (releases ?? []).filter((bundle) => seriesOf(bundle) !== void 0);
1395
+ const loaded = (releases ?? []).filter((bundle) => seriesOf(bundle) !== void 0 && (chart !== "adoption" || bundle.downloaded !== void 0));
1370
1396
  const failed = (releases ?? []).find(({ error }) => error !== null)?.error ?? null;
1371
1397
  const flagged = (releases ?? []).flatMap((bundle) => {
1372
1398
  const crashes = crashesOf(bundle);
@@ -1380,42 +1406,33 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1380
1406
  onReleasesChange(rest.length === 0 ? void 0 : rest);
1381
1407
  };
1382
1408
  const heading = chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1383
- className: "flex flex-wrap items-start justify-between gap-3",
1409
+ className: "flex flex-col gap-1",
1384
1410
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1385
- className: "flex flex-col gap-1",
1386
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1387
- className: "flex items-center gap-1 text-sm font-medium",
1388
- children: ["Installations launching each bundle", /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
1389
- label: "About adoption",
1390
- children: "Installations that reported running each bundle, once each: at its apply report, or at its first report on the bundle when the apply report never arrived. One that comes back counts again."
1391
- })]
1392
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
1393
- className: "text-xs text-muted-foreground",
1394
- children: [
1395
- cumulative ? "Running total" : cadenceOf(period.intervalMs),
1396
- " · last",
1397
- " ",
1398
- lengthOf(period.durationMs),
1399
- " · UTC"
1400
- ]
1411
+ className: "flex items-center gap-1 text-sm font-medium",
1412
+ children: ["Installations downloading and launching each bundle", /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
1413
+ label: "About adoption",
1414
+ children: "Dashed: installations that downloaded the bundle. Solid: installations that launched it. After a forced update the two lines meet."
1401
1415
  })]
1402
- }), onTotalChange ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tabs$1, {
1403
- value: total,
1404
- onValueChange: (value) => onTotalChange(value),
1405
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TabsList, {
1406
- "aria-label": "Adoption counts",
1407
- className: "min-h-11 sm:min-h-9",
1408
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsTrigger, {
1409
- value: "interval",
1410
- className: "px-3",
1411
- children: "Per interval"
1412
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TabsTrigger, {
1413
- value: "cumulative",
1414
- className: "px-3",
1415
- children: "Cumulative"
1416
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1417
+ className: "flex flex-wrap items-center gap-x-4 gap-y-1 text-xs text-muted-foreground",
1418
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { children: [
1419
+ cadenceOf(period.intervalMs),
1420
+ " · last ",
1421
+ lengthOf(period.durationMs),
1422
+ " ",
1423
+ "· UTC"
1424
+ ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("ul", {
1425
+ "aria-label": "Line styles",
1426
+ className: "flex items-center gap-3",
1427
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
1428
+ className: "flex items-center gap-1.5",
1429
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LineSample, { dashed: true }), "Downloaded"]
1430
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("li", {
1431
+ className: "flex items-center gap-1.5",
1432
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LineSample, {}), "Launched"]
1416
1433
  })]
1417
- })
1418
- }) : null]
1434
+ })]
1435
+ })]
1419
1436
  }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1420
1437
  className: "flex flex-col gap-1",
1421
1438
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -1423,7 +1440,8 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1423
1440
  children: ["Crashes after each deployment", /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(InsightsInfo, {
1424
1441
  label: "About crashes",
1425
1442
  children: [
1426
- "Launches that crashed on a bundle and rolled back to the one before. Crash rate = crashes ÷ (launches + crashes). A rollback is suggested at ",
1443
+ "Installations that crashed on a bundle and rolled back. Crash rate = crashed ÷ (launched + crashed). A rollback is suggested at",
1444
+ " ",
1427
1445
  percent(CRASH_RATE_THRESHOLD),
1428
1446
  " once ",
1429
1447
  20,
@@ -1460,13 +1478,13 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1460
1478
  "aria-label": "Loading release health",
1461
1479
  className: "h-64"
1462
1480
  });
1463
- if (loaded.every((bundle) => seriesOf(bundle).total === 0)) return chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Empty, {
1481
+ if (loaded.every((bundle) => seriesOf(bundle).total === 0 && (chart !== "adoption" || bundle.downloaded.total === 0))) return chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Empty, {
1464
1482
  className: "min-h-48",
1465
1483
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(EmptyHeader, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(EmptyTitle, { children: [
1466
- "No installation launched these bundles in the last",
1484
+ "No installation downloaded or launched these bundles in the last",
1467
1485
  " ",
1468
1486
  lengthOf(period.durationMs)
1469
- ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyDescription, { children: wider ? "Choose a longer period, or refresh after apps apply them." : "Refresh after apps apply them." })] }), wider ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button$1, {
1487
+ ] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyDescription, { children: wider ? "Choose a longer period, or refresh after apps download them." : "Refresh after apps download them." })] }), wider ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EmptyContent, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button$1, {
1470
1488
  variant: "outline",
1471
1489
  size: "sm",
1472
1490
  onClick: () => onWindowChange(wider),
@@ -1480,12 +1498,17 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1480
1498
  period,
1481
1499
  lines: releases.map((bundle) => ({
1482
1500
  release: bundle.release,
1483
- points: totalsOf(seriesOf(bundle)?.points, cumulative),
1501
+ points: seriesOf(bundle)?.points,
1502
+ ...chart === "adoption" ? { dashed: bundle.downloaded?.points } : {},
1484
1503
  measuredAtMs: seriesOf(bundle)?.measuredAtMs
1485
1504
  })),
1486
1505
  colorOf,
1487
1506
  active,
1488
- label: chart === "adoption" ? cumulative ? "Installations launching each bundle, running total" : "Installations launching each bundle per interval" : "Crashes of each bundle per interval"
1507
+ names: chart === "adoption" ? {
1508
+ solid: "Launched",
1509
+ dashed: "Downloaded"
1510
+ } : { solid: "Crashed" },
1511
+ label: chart === "adoption" ? "Installations downloading (dashed) and launching (solid) each bundle per interval" : "Crashes of each bundle per interval"
1489
1512
  });
1490
1513
  })();
1491
1514
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("section", {
@@ -1605,12 +1628,15 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1605
1628
  "aria-label": "Compared bundles",
1606
1629
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, { children: [
1607
1630
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Bundle" }),
1608
- chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1631
+ chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1632
+ className: "text-right",
1633
+ children: "Downloaded"
1634
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1609
1635
  className: "text-right",
1610
1636
  children: "Launched"
1611
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1637
+ })] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1612
1638
  className: "text-right",
1613
- children: "Crashes"
1639
+ children: "Crashed"
1614
1640
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1615
1641
  className: "text-right",
1616
1642
  children: "Crash rate"
@@ -1672,10 +1698,13 @@ function InsightsOverview({ input, chart, onChartChange, total = "interval", onT
1672
1698
  })]
1673
1699
  })
1674
1700
  }),
1675
- chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
1701
+ chart === "adoption" ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
1702
+ className: "text-right whitespace-nowrap tabular-nums",
1703
+ children: bundle.downloaded?.total.toLocaleString() ?? "—"
1704
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
1676
1705
  className: "text-right font-medium whitespace-nowrap tabular-nums",
1677
1706
  children: bundle.launched?.total.toLocaleString() ?? "—"
1678
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
1707
+ })] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
1679
1708
  className: "text-right whitespace-nowrap tabular-nums",
1680
1709
  children: crashes === void 0 ? "—" : crashes.crashes === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1681
1710
  className: "text-muted-foreground",
@@ -2022,7 +2051,7 @@ var getAdoptionReleaseRpc = createServerFn({ method: "GET" }).middleware([consol
2022
2051
  var getBundleEventsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readBundleEventsInput).handler(createSsrRpc("bfcca2365dfef4d071bdcddf97538a2637482c77bb747969dbdcd6769ca98416"));
2023
2052
  /** What each Release health chart reads per bundle. */
2024
2053
  var READS = {
2025
- adoption: ["LAUNCHED"],
2054
+ adoption: ["DOWNLOADED", "LAUNCHED"],
2026
2055
  crashes: ["LAUNCHED", "RECOVERED"]
2027
2056
  };
2028
2057
  /**
@@ -2128,13 +2157,15 @@ function useReleaseHealth({ platform, channel, window, releaseIds, focusReleaseI
2128
2157
  },
2129
2158
  candidates,
2130
2159
  releases: releases?.map((release) => {
2160
+ const downloaded = seriesOf(release.bundleId, "DOWNLOADED");
2131
2161
  const launched = seriesOf(release.bundleId, "LAUNCHED");
2132
2162
  const recovered = seriesOf(release.bundleId, "RECOVERED");
2133
2163
  return {
2134
2164
  release,
2165
+ downloaded: downloaded?.data,
2135
2166
  launched: launched?.data,
2136
2167
  recovered: recovered?.data,
2137
- error: launched?.error ?? recovered?.error ?? null
2168
+ error: downloaded?.error ?? launched?.error ?? recovered?.error ?? null
2138
2169
  };
2139
2170
  }),
2140
2171
  isDefault: releaseIds === void 0,
@@ -2244,11 +2275,6 @@ function InsightsPage() {
2244
2275
  ...search,
2245
2276
  healthChart
2246
2277
  } }),
2247
- total: search.adoptionTotal ?? "interval",
2248
- onTotalChange: (total) => void navigate({ search: {
2249
- ...search,
2250
- adoptionTotal: total === "cumulative" ? total : void 0
2251
- } }),
2252
2278
  health,
2253
2279
  onReleasesChange: (ids) => void navigate({ search: {
2254
2280
  ...search,
@@ -1,10 +1,10 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
3
- import { A as createSsrRpc } from "./sidebar-VNZznbcK.mjs";
2
+ import { A as createSsrRpc } from "./sidebar-B2SHpuig.mjs";
3
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
4
4
  import { i as useQuery, t as useInfiniteQuery } from "../_libs/tanstack__react-query.mjs";
5
5
  import { l as readUpdateFailuresInput } from "./insights-failures-BZaGNNij.mjs";
6
6
  import { n as readFailureReportsInput } from "./insights-errors-F-7hOApm.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-gOi3RxGF.js
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-CBBcHIUP.js
8
8
  var getUpdateFailuresRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readUpdateFailuresInput).handler(createSsrRpc("0d1dacdd1e5ee6b100e5c142fb9af03602b6f2c6fe6af79312b36c223d7f8f97"));
9
9
  var listFailureReportsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readFailureReportsInput).handler(createSsrRpc("b4388826a9b515fb4d2113270aa8ded1c50ba13d7f07ac2b268c41396e87d0a3"));
10
10
  /** `insights()`'s defaults, for a server that does not report its periods. */
@@ -1,9 +1,9 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
2
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
4
  import { l as readUpdateFailuresInput } from "./insights-failures-BZaGNNij.mjs";
5
5
  import { n as readFailureReportsInput } from "./insights-errors-F-7hOApm.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-I4DuA2w_.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-CTf5QF7O.js
7
7
  var getUpdateFailuresRpc_createServerFn_handler = createServerRpc({
8
8
  id: "0d1dacdd1e5ee6b100e5c142fb9af03602b6f2c6fe6af79312b36c223d7f8f97",
9
9
  name: "getUpdateFailuresRpc",
@@ -11,7 +11,7 @@ var getUpdateFailuresRpc_createServerFn_handler = createServerRpc({
11
11
  }, (opts) => getUpdateFailuresRpc.__executeServer(opts));
12
12
  var getUpdateFailuresRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readUpdateFailuresInput).handler(getUpdateFailuresRpc_createServerFn_handler, async ({ data }) => {
13
13
  const [{ prepareConfig }, { getUpdateFailuresReport }, { requireFeature }] = await Promise.all([
14
- import("./config.server-ByU2skgQ.mjs"),
14
+ import("./config.server-DaeqzKiu.mjs"),
15
15
  import("./updateFailures-BP-A8Ppr.mjs"),
16
16
  import("./runtime.server-C1SVch_-.mjs")
17
17
  ]);
@@ -25,7 +25,7 @@ var listFailureReportsRpc_createServerFn_handler = createServerRpc({
25
25
  }, (opts) => listFailureReportsRpc.__executeServer(opts));
26
26
  var listFailureReportsRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readFailureReportsInput).handler(listFailureReportsRpc_createServerFn_handler, async ({ data }) => {
27
27
  const [{ prepareConfig }, { listFailureReports }, { requireFeature }] = await Promise.all([
28
- import("./config.server-ByU2skgQ.mjs"),
28
+ import("./config.server-DaeqzKiu.mjs"),
29
29
  import("./failureReports-CRYHdQBQ.mjs"),
30
30
  import("./runtime.server-C1SVch_-.mjs")
31
31
  ]);
@@ -1,8 +1,8 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
2
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
4
  import { n as readRecoveryInput } from "./insights-recovery-Dpk6Mfb9.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-rpc-CP_yvJqm.js
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-rpc-CPKwBt4V.js
6
6
  function readBundleActivityInput(inputs) {
7
7
  if (!Array.isArray(inputs) || inputs.length > 20) throw new Error("Choose up to 20 bundles.");
8
8
  return inputs.map((input) => {
@@ -21,7 +21,7 @@ var getBundleActivityRpc_createServerFn_handler = createServerRpc({
21
21
  }, (opts) => getBundleActivityRpc.__executeServer(opts));
22
22
  var getBundleActivityRpc = createServerFn({ method: "GET" }).middleware([consoleAccess]).validator(readBundleActivityInput).handler(getBundleActivityRpc_createServerFn_handler, async ({ data }) => {
23
23
  const [{ prepareConfig }, { getBundleActivity }, { requireFeature }] = await Promise.all([
24
- import("./config.server-ByU2skgQ.mjs"),
24
+ import("./config.server-DaeqzKiu.mjs"),
25
25
  import("./bundleActivity-BXSJbaQY.mjs"),
26
26
  import("./runtime.server-C1SVch_-.mjs")
27
27
  ]);
@@ -1,10 +1,10 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
2
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-BMB_YXld.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-DjhnYd2B.js
5
5
  /** The Insights reads, once the console's access check and the feature guard pass. */
6
6
  var insightsReads = async () => {
7
- const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-ByU2skgQ.mjs"), import("./runtime.server-C1SVch_-.mjs")]);
7
+ const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-DaeqzKiu.mjs"), import("./runtime.server-C1SVch_-.mjs")]);
8
8
  const { runtime } = await prepareConfig();
9
9
  return requireFeature(runtime, "insights");
10
10
  };
@@ -1,8 +1,8 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
2
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
4
  import { t as readAppUsageInput } from "./insights-usage-CLUWjUFz.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-DjFvxUfh.js
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-CLHRgGDT.js
6
6
  var getAppUsageReportRpc_createServerFn_handler = createServerRpc({
7
7
  id: "8a98cd9c178e4a54185d62c25a95f09d3d59850c43d3f5baa1563e1614ad942e",
8
8
  name: "getAppUsageReportRpc",
@@ -18,7 +18,7 @@ var getAppUsageReportRpc = createServerFn({ method: "GET" }).middleware([console
18
18
  };
19
19
  }).handler(getAppUsageReportRpc_createServerFn_handler, async ({ data }) => {
20
20
  const [{ prepareConfig }, { getAppUsageReport }, { requireFeature }] = await Promise.all([
21
- import("./config.server-ByU2skgQ.mjs"),
21
+ import("./config.server-DaeqzKiu.mjs"),
22
22
  import("./insightsUsage-9X2sp3ja.mjs"),
23
23
  import("./runtime.server-C1SVch_-.mjs")
24
24
  ]);
@@ -1,9 +1,9 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-BKTPQEbc.mjs";
3
2
  import { A as ProgressRoot, O as ProgressIndicator$1, k as ProgressTrack$1, mt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
- import { A as createSsrRpc, k as cn } from "./sidebar-VNZznbcK.mjs";
3
+ import { A as createSsrRpc, k as cn } from "./sidebar-B2SHpuig.mjs";
4
+ import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
5
5
  import { t as readAppUsageInput } from "./insights-usage-CLUWjUFz.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-BGvxXZAK.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-CLyldyrz.js
7
7
  var import_jsx_runtime = require_jsx_runtime();
8
8
  function Progress$1({ className, children, value, ...props }) {
9
9
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(ProgressRoot, {
@@ -1,18 +1,18 @@
1
1
  import { mt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
2
2
  import { G as ArrowLeft, H as ArrowUpRight, f as RotateCw } from "../_libs/lucide-react.mjs";
3
- import { C as Skeleton, O as buttonVariants, t as Button$1 } from "./sidebar-VNZznbcK.mjs";
4
- import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, t as Card } from "./card-JDjWazaX.mjs";
5
- import { a as Badge, i as AlertTitle, o as Field, r as AlertDescription, t as Alert, u as FieldLabel } from "./field-_iyHgZ6n.mjs";
6
- import { i as useQuery } from "../_libs/tanstack__react-query.mjs";
3
+ import { C as Skeleton, O as buttonVariants, t as Button$1 } from "./sidebar-B2SHpuig.mjs";
7
4
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
8
- import { a as EmptyTitle, i as EmptyHeader, r as EmptyDescription, t as Empty } from "./empty-D4-dl3JT.mjs";
9
- import { l as useInsightsRetention, r as keepsTwelveMonths } from "./insights-api-gOi3RxGF.mjs";
10
- import { a as validateInsightsSearch, t as InsightsInfo } from "./InsightsInfo-9k_ARQOR.mjs";
11
- import { a as SelectGroup, c as SelectValue, i as SelectContent, n as PlatformIcon, o as SelectItem, r as Select$1, s as SelectTrigger, t as BundleIdDisplay } from "./select-CvpHwKoP.mjs";
12
- import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-BGvxXZAK.mjs";
13
- import { n as InsightsErrorAlert, r as InsightsPageHeader, t as BuiltinBundleBadge, u as UsagePeriodSelector } from "./InsightsPageHeader-fomu7iXg.mjs";
14
- import { t as Route } from "./insights_.distribution-BZ-X0rqy.mjs";
15
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-BVCN8OAV.js
5
+ import { i as useQuery } from "../_libs/tanstack__react-query.mjs";
6
+ import { a as EmptyTitle, i as EmptyHeader, r as EmptyDescription, t as Empty } from "./empty-DeVHKygf.mjs";
7
+ import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, t as Card } from "./card-GK-VihZc.mjs";
8
+ import { a as Badge, i as AlertTitle, o as Field, r as AlertDescription, t as Alert, u as FieldLabel } from "./field-CcbQSAiS.mjs";
9
+ import { l as useInsightsRetention, r as keepsTwelveMonths } from "./insights-api-CBBcHIUP.mjs";
10
+ import { a as validateInsightsSearch, t as InsightsInfo } from "./InsightsInfo-B0AtaDnr.mjs";
11
+ import { a as SelectGroup, c as SelectValue, i as SelectContent, n as PlatformIcon, o as SelectItem, r as Select$1, s as SelectTrigger, t as BundleIdDisplay } from "./select-ycdfR07Y.mjs";
12
+ import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-CLyldyrz.mjs";
13
+ import { n as InsightsErrorAlert, r as InsightsPageHeader, t as BuiltinBundleBadge, u as UsagePeriodSelector } from "./InsightsPageHeader-BryzBlT8.mjs";
14
+ import { t as Route } from "./insights_.distribution-DXCwHGBj.mjs";
15
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-Buu3dsat.js
16
16
  var import_jsx_runtime = require_jsx_runtime();
17
17
  var PAGE_SIZE = 20;
18
18
  var dates = new Intl.DateTimeFormat("en", {
@@ -1,9 +1,9 @@
1
1
  import { f as lazyRouteComponent, p as createFileRoute } from "../_libs/@tanstack/react-router+[...].mjs";
2
- import { r as requireConsoleFeature } from "./console-features-api-DR64_VBz.mjs";
3
- import { i as validateDistributionSearch } from "./InsightsInfo-9k_ARQOR.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-BZ-X0rqy.js
5
- var $$splitComponentImporter = () => import("./insights_.distribution-BVCN8OAV.mjs");
6
- var $$splitNotFoundComponentImporter = () => import("./insights_.distribution-Ct7BBlil.mjs");
2
+ import { r as requireConsoleFeature } from "./console-features-api-CuukSjL8.mjs";
3
+ import { i as validateDistributionSearch } from "./InsightsInfo-B0AtaDnr.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-DXCwHGBj.js
5
+ var $$splitComponentImporter = () => import("./insights_.distribution-Buu3dsat.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights_.distribution-WDmsXtQl.mjs");
7
7
  /** How a distribution row's bundle reads aloud. */
8
8
  /** The bundle an app version's native build shipped, by its ID. */
9
9
  var Route = createFileRoute("/insights_/distribution")({
@@ -1,5 +1,5 @@
1
- import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-3H5YBBIG.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-Ct7BBlil.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-BCGWklf8.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-WDmsXtQl.js
3
3
  /** How a distribution row's bundle reads aloud. */
4
4
  /** The bundle an app version's native build shipped, by its ID. */
5
5
  var SplitNotFoundComponent = ConsoleFeatureUnavailable;