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

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 (84) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/{EventDetails-BUTZTAVo.js → EventDetails-3DgVjwDn.js} +1 -1
  3. package/.output/public/assets/{InsightsInfo-B8i-PPsH.js → InsightsInfo-NUuLFYqg.js} +1 -1
  4. package/.output/public/assets/{InsightsPageHeader-CASeYum3.js → InsightsPageHeader-DqCp0vf7.js} +1 -1
  5. package/.output/public/assets/{index-YSc3HCcR.js → index-B7BSdp0k.js} +2 -2
  6. package/.output/public/assets/insights-CevVB_8E.js +2 -0
  7. package/.output/public/assets/insights-DMH-zhbe.js +42 -0
  8. package/.output/public/assets/insights_.distribution-B9MOEnzZ.js +2 -0
  9. package/.output/public/assets/insights_.distribution-O73SKvoa.js +1 -0
  10. package/.output/public/assets/{installations-C-QP0sM1.js → installations-DtZj5jk2.js} +1 -1
  11. package/.output/public/assets/{installations-yQkxp5fm.js → installations-LJBhFDEM.js} +2 -2
  12. package/.output/public/assets/{preload-helper-DuV6lz46.js → preload-helper-D9SUwQT7.js} +1 -1
  13. package/.output/public/assets/{routes-DuBSi7uM.js → routes-CJSxovHS.js} +1 -1
  14. package/.output/public/assets/routes-DyZCr794.js +2 -0
  15. package/.output/public/assets/styles-DwA6mhnh.css +2 -0
  16. package/.output/server/{__23tanstack-start-server-fn-resolver-DNbgEvfb.mjs → __23tanstack-start-server-fn-resolver-CUp7Too4.mjs} +36 -36
  17. package/.output/server/_ssr/{ConsoleFeatureUnavailable-BCGWklf8.mjs → ConsoleFeatureUnavailable-BxaV7ca0.mjs} +5 -5
  18. package/.output/server/_ssr/{EventDetails-vtXoqSGS.mjs → EventDetails-B5HHZsCk.mjs} +7 -7
  19. package/.output/server/_ssr/{InsightsInfo-B0AtaDnr.mjs → InsightsInfo-C7K_HKHZ.mjs} +2 -2
  20. package/.output/server/_ssr/{InsightsPageHeader-BryzBlT8.mjs → InsightsPageHeader-BPaYzzkg.mjs} +18 -7
  21. package/.output/server/_ssr/{NotFoundPage-xK1bhpoZ.mjs → NotFoundPage-CyBONH8d.mjs} +2 -2
  22. package/.output/server/_ssr/{alert-dialog-Cc9d0p8Y.mjs → alert-dialog-BsqgyNOZ.mjs} +1 -1
  23. package/.output/server/_ssr/{api-keys-C2jqeEZ_.mjs → api-keys-CY1d8bCZ.mjs} +2 -2
  24. package/.output/server/_ssr/{api-keys-DnKkFZ3T.mjs → api-keys-D8R-eRJ-.mjs} +8 -8
  25. package/.output/server/_ssr/{api-keys-rpc-BJ0MKu1e.mjs → api-keys-rpc-CC1ERVtk.mjs} +3 -3
  26. package/.output/server/_ssr/{api-Bz1UGqdn.mjs → api-otC0m2Cl.mjs} +3 -3
  27. package/.output/server/_ssr/{api-rpc-B9mAeGyS.mjs → api-rpc-C99iexLk.mjs} +4 -4
  28. package/.output/server/_ssr/{auth-rpc-Bs4tYGIg.mjs → auth-rpc-PABg7kHk.mjs} +4 -4
  29. package/.output/server/_ssr/{auth.server-CcTNWmd4.mjs → auth.server-8-IRXBc-.mjs} +2 -2
  30. package/.output/server/_ssr/{card-GK-VihZc.mjs → card-ijGSudc_.mjs} +1 -1
  31. package/.output/server/_ssr/{config.server-DaeqzKiu.mjs → config.server-08RES1G-.mjs} +3 -3
  32. package/.output/server/_ssr/{console-access-CSVqeikY.mjs → console-access-D0bQJ9tx.mjs} +2 -2
  33. package/.output/server/_ssr/{console-features-api-CuukSjL8.mjs → console-features-api-BRGAxAgc.mjs} +3 -3
  34. package/.output/server/_ssr/{console-features-rpc-Dxv_D020.mjs → console-features-rpc-845alOXy.mjs} +3 -3
  35. package/.output/server/_ssr/{dialog-Vjm_bDw9.mjs → dialog-BnfVyv4I.mjs} +1 -1
  36. package/.output/server/_ssr/{empty-DeVHKygf.mjs → empty-CnGZqF1a.mjs} +2 -2
  37. package/.output/server/_ssr/{failureReports-CRYHdQBQ.mjs → failureReports-_trbWCVo.mjs} +2 -2
  38. package/.output/server/_ssr/{field-CcbQSAiS.mjs → field-CysUuRJx.mjs} +2 -2
  39. package/.output/server/_ssr/{input-group-D7oZhqZP.mjs → input-group-C44twsSf.mjs} +1 -1
  40. package/.output/server/_ssr/{insights-C2_kuG7Z.mjs → insights-Br6JnctH.mjs} +2 -2
  41. package/.output/server/_ssr/{insights-DFBjq_u1.mjs → insights-CgRV7dlP.mjs} +134 -125
  42. package/.output/server/_ssr/{insights-CdkhyQHH.mjs → insights-CrrlG-bz.mjs} +5 -5
  43. package/.output/server/_ssr/{insights-api-CBBcHIUP.mjs → insights-api-MpLvDjmC.mjs} +5 -5
  44. package/.output/server/_ssr/{insights-errors-F-7hOApm.mjs → insights-errors-Cy03daYs.mjs} +2 -2
  45. package/.output/server/_ssr/{insights-failures-BZaGNNij.mjs → insights-failures-HHiiIbag.mjs} +4 -5
  46. package/.output/server/_ssr/{insights-failures-rpc-CTf5QF7O.mjs → insights-failures-rpc-CGiDJbg-.mjs} +8 -8
  47. package/.output/server/_ssr/{insights-recovery-rpc-CPKwBt4V.mjs → insights-recovery-rpc-Bul_1cyL.mjs} +3 -3
  48. package/.output/server/_ssr/{insights-rpc-DjhnYd2B.mjs → insights-rpc-D24DKKlx.mjs} +3 -3
  49. package/.output/server/_ssr/{insights-usage-rpc-CLHRgGDT.mjs → insights-usage-rpc-iG8wRo4G.mjs} +3 -3
  50. package/.output/server/_ssr/{insights-usage-rpc-CLyldyrz.mjs → insights-usage-rpc-tVCHkzGH.mjs} +3 -3
  51. package/.output/server/_ssr/{insights_.distribution-DXCwHGBj.mjs → insights_.distribution-Ckc_O360.mjs} +5 -5
  52. package/.output/server/_ssr/{insights_.distribution-WDmsXtQl.mjs → insights_.distribution-DbO4X6X6.mjs} +2 -2
  53. package/.output/server/_ssr/{insights_.distribution-Buu3dsat.mjs → insights_.distribution-DsujaomV.mjs} +13 -13
  54. package/.output/server/_ssr/{installations-BiZY4zjE.mjs → installations-DV3sNoM5.mjs} +10 -10
  55. package/.output/server/_ssr/{installations-Dfe3WTAY.mjs → installations-DkJq_y8i.mjs} +2 -2
  56. package/.output/server/_ssr/{installations-sR2BlZxi.mjs → installations-F6vBSPUU.mjs} +4 -4
  57. package/.output/server/_ssr/{release-adoption-rpc-DVhlhHRR.mjs → release-adoption-rpc-h_r3KQsi.mjs} +5 -5
  58. package/.output/server/_ssr/{router-HumF5rJs.mjs → router-C_IshN2d.mjs} +13 -13
  59. package/.output/server/_ssr/{routes-kDK03EWa.mjs → routes-BEHlOXKL.mjs} +33 -22
  60. package/.output/server/_ssr/{routes-CN0fvuLB.mjs → routes-DeSps20R.mjs} +14 -10
  61. package/.output/server/_ssr/{select-ycdfR07Y.mjs → select-BL10bGzk.mjs} +1 -1
  62. package/.output/server/_ssr/{server-CyAnx61_.mjs → server-DIIIVgcN.mjs} +3 -3
  63. package/.output/server/_ssr/{sidebar-B2SHpuig.mjs → sidebar-DLus-ndm.mjs} +2 -2
  64. package/.output/server/_ssr/ssr.mjs +1 -1
  65. package/.output/server/_ssr/{table-COXYXU49.mjs → table-U7InIZlH.mjs} +1 -1
  66. package/.output/server/_ssr/{updateFailures-BP-A8Ppr.mjs → updateFailures-BLs3R7j0.mjs} +2 -2
  67. package/.output/server/{_tanstack-start-manifest_v-DcB4oGQp.mjs → _tanstack-start-manifest_v-VxUXUIhM.mjs} +25 -25
  68. package/.output/server/index.mjs +113 -113
  69. package/package.json +7 -7
  70. package/src/components/features/insights/BuiltinBundle.tsx +18 -3
  71. package/src/components/features/insights/FailureReports.tsx +15 -2
  72. package/src/components/features/insights/ReleaseActivity.tsx +1 -1
  73. package/src/components/features/insights/UpdateFailures.tsx +103 -104
  74. package/src/components/features/releases/ReleaseEditorSheet.tsx +2 -2
  75. package/src/lib/insights-failures.ts +1 -11
  76. package/src/routes/index.tsx +33 -15
  77. package/src/routes/insights.tsx +1 -1
  78. package/src/routes/insights_.distribution.tsx +3 -3
  79. package/.output/public/assets/insights-BT0ER2ff.js +0 -2
  80. package/.output/public/assets/insights-DPY9akyx.js +0 -42
  81. package/.output/public/assets/insights_.distribution-NyB0_bbh.js +0 -2
  82. package/.output/public/assets/insights_.distribution-jH_7sKdg.js +0 -1
  83. package/.output/public/assets/routes-DQWmO9Ow.js +0 -2
  84. package/.output/public/assets/styles-Cm2ONGCt.css +0 -2
@@ -2,32 +2,32 @@ import { i as __toESM } from "../_runtime.mjs";
2
2
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
3
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";
4
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";
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";
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-DLus-ndm.mjs";
6
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.mjs";
7
7
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
8
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";
9
+ import { a as EmptyTitle, i as EmptyHeader, n as EmptyContent, r as EmptyDescription, t as Empty } from "./empty-CnGZqF1a.mjs";
10
+ import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, r as CardDescription, t as Card } from "./card-ijGSudc_.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-CysUuRJx.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-BsqgyNOZ.mjs";
13
+ import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-U7InIZlH.mjs";
14
14
  import { n as toast } from "../_libs/sonner.mjs";
15
15
  import { r as recoveryWindows, t as insightsPeriodEnd } from "./insights-recovery-Dpk6Mfb9.mjs";
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
- import { t as groupFailureReports } from "./insights-errors-F-7hOApm.mjs";
16
+ import { a as failureReasonLabel, i as failureRate, o as failureStageLabel, r as failureDetailParts, s as formatRate, t as checkFailureRate } from "./insights-failures-HHiiIbag.mjs";
17
+ import { t as groupFailureReports } from "./insights-errors-Cy03daYs.mjs";
18
18
  import { n as usageMetrics } from "./insights-usage-CLUWjUFz.mjs";
19
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";
20
+ import { i as useFailureReportsQuery, l as useInsightsRetention, r as keepsTwelveMonths, t as DEFAULT_INSIGHTS_RETENTION, u as useUpdateFailuresQuery } from "./insights-api-MpLvDjmC.mjs";
21
+ import { r as comparedBundleIds, t as InsightsInfo } from "./InsightsInfo-C7K_HKHZ.mjs";
22
+ import { t as Route } from "./insights-CrrlG-bz.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-BL10bGzk.mjs";
24
+ import { i as useChannelsQuery, l as usePreflightReleaseMutation, m as useUpdateReleaseMutation } from "./api-otC0m2Cl.mjs";
25
+ import { a as InputGroupInput, i as InputGroupButton, n as InputGroup, r as InputGroupAddon } from "./input-group-C44twsSf.mjs";
26
+ import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-tVCHkzGH.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-BPaYzzkg.mjs";
28
+ import { i as HttpResponseBody, n as EventTimestamp, o as useInsightsTimeFormat, t as EventBundleTransition } from "./EventDetails-B5HHZsCk.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-DFBjq_u1.js
30
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-CgRV7dlP.js
31
31
  var import_react = /* @__PURE__ */ __toESM(require_react());
32
32
  var import_jsx_runtime = require_jsx_runtime();
33
33
  var THEMES = {
@@ -522,7 +522,7 @@ function FailureDetail({ group }) {
522
522
  ]
523
523
  }),
524
524
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
525
- className: "font-mono text-sm leading-relaxed whitespace-pre-wrap wrap-anywhere",
525
+ className: cn("text-sm leading-relaxed whitespace-pre-wrap wrap-anywhere", failure.errorMessage ? "font-mono" : "text-muted-foreground"),
526
526
  children: messageOf(event)
527
527
  }),
528
528
  !failure.errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
@@ -738,7 +738,7 @@ function FailureReportsList({ pages, error, isPending, isFetching, hasNextPage,
738
738
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
739
739
  className: "flex min-w-0 flex-col gap-1",
740
740
  children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
741
- className: "line-clamp-2 font-mono text-xs leading-relaxed wrap-anywhere",
741
+ className: cn("line-clamp-2 text-xs leading-relaxed wrap-anywhere", latest.failure?.errorMessage ? "font-mono" : "text-muted-foreground"),
742
742
  children: messageOf(latest)
743
743
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
744
744
  className: "text-xs font-normal text-muted-foreground",
@@ -1790,19 +1790,50 @@ function InsightsOverview({ input, chart, onChartChange, health, onReleasesChang
1790
1790
  });
1791
1791
  }
1792
1792
  var share = (events, total) => total === 0 ? "—" : `${(events / total * 100).toFixed(1)}%`;
1793
- function Metric({ label, info, attention = false, children }) {
1794
- return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1793
+ /**
1794
+ * One kind of failure: its rate as the headline, then how many failures and
1795
+ * installations it holds.
1796
+ */
1797
+ function FailureSummary({ id, title, info, rate, of, failures, installations, previous, children }) {
1798
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1799
+ "aria-labelledby": id,
1795
1800
  className: "flex min-w-0 flex-col gap-1",
1796
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", {
1797
- className: "flex min-h-11 items-center gap-1 text-xs text-muted-foreground sm:min-h-7",
1798
- children: [label, info ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
1799
- label: `About ${label.toLowerCase()}`,
1800
- children: info
1801
- }) : null]
1802
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
1803
- className: cn("text-2xl font-semibold tracking-tight tabular-nums", attention && "text-warning"),
1801
+ children: [
1802
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("h3", {
1803
+ id,
1804
+ className: "flex min-h-11 items-center gap-1 text-sm font-medium sm:min-h-7",
1805
+ children: [title, /* @__PURE__ */ (0, import_jsx_runtime.jsx)(InsightsInfo, {
1806
+ label: `About ${title.toLowerCase()}`,
1807
+ children: info
1808
+ })]
1809
+ }),
1810
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1811
+ className: "text-3xl font-semibold tracking-tight tabular-nums",
1812
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Rate, { value: rate })
1813
+ }),
1814
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1815
+ className: "text-xs text-muted-foreground",
1816
+ children: of
1817
+ }),
1818
+ previous ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RateChange, {
1819
+ value: rate,
1820
+ previous: previous.rate,
1821
+ complete: previous.complete
1822
+ }) : null,
1823
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
1824
+ className: "mt-2 text-sm text-muted-foreground tabular-nums",
1825
+ children: [
1826
+ failures.toLocaleString(),
1827
+ " ",
1828
+ failures === 1 ? "failure" : "failures",
1829
+ " · ",
1830
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EstimatedCount, { value: installations }),
1831
+ " ",
1832
+ installations === 1 ? "installation" : "installations"
1833
+ ]
1834
+ }),
1804
1835
  children
1805
- })]
1836
+ ]
1806
1837
  });
1807
1838
  }
1808
1839
  function Rate({ value }) {
@@ -1813,10 +1844,7 @@ function Rate({ value }) {
1813
1844
  })] });
1814
1845
  }
1815
1846
  function RateChange({ value, previous, complete }) {
1816
- if (!complete || value === null || previous === null) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
1817
- className: "mt-1 block text-xs font-normal text-muted-foreground",
1818
- children: "Previous period unavailable"
1819
- });
1847
+ if (!complete || value === null || previous === null) return null;
1820
1848
  const difference = (value - previous) * 100;
1821
1849
  const rounded = Number(difference.toFixed(2));
1822
1850
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
@@ -1893,73 +1921,47 @@ function FailureRow({ failure, total }) {
1893
1921
  function FailuresReport({ report, errors }) {
1894
1922
  const breakdown = report.breakdown ?? [];
1895
1923
  const total = breakdown.reduce((sum, { events }) => sum + events, 0);
1924
+ const unreasoned = breakdown.filter(({ reason }) => reason === "unknown").reduce((sum, { events }) => sum + events, 0);
1925
+ const patchAttempts = report.patchDownloads + report.patchFallbacks;
1896
1926
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1897
1927
  className: "flex flex-col gap-8",
1898
1928
  children: [
1899
1929
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
1900
- className: cn("grid gap-6", report.checks && "lg:grid-cols-[2fr_1fr]"),
1901
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1902
- "aria-labelledby": "download-install-failures",
1903
- className: "flex min-w-0 flex-col gap-3",
1904
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
1905
- id: "download-install-failures",
1906
- className: "text-sm font-medium",
1907
- children: "Downloads & installs"
1908
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", {
1909
- className: "grid grid-cols-2 gap-x-6 gap-y-4",
1930
+ className: cn("grid gap-6", report.checks && "sm:grid-cols-2"),
1931
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FailureSummary, {
1932
+ id: "download-install-failures",
1933
+ title: "Downloads & installs",
1934
+ info: "Failed downloads and installs ÷ those plus successful downloads.",
1935
+ rate: failureRate(report),
1936
+ of: "of update attempts failed",
1937
+ failures: report.failedUpdates,
1938
+ installations: report.failedInstallations,
1939
+ previous: report.previous && {
1940
+ rate: report.previous.attemptRate,
1941
+ complete: report.previous.complete
1942
+ },
1943
+ children: patchAttempts > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
1944
+ className: "text-sm text-muted-foreground tabular-nums",
1910
1945
  children: [
1911
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
1912
- label: "Failed updates",
1913
- attention: report.failedUpdates > 0,
1914
- children: report.failedUpdates.toLocaleString()
1915
- }),
1916
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Metric, {
1917
- label: "Attempt failure rate",
1918
- attention: report.failedUpdates > 0,
1919
- info: "Share of update attempts that failed: failures ÷ (failures + downloads).",
1920
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Rate, { value: failureRate(report) }), report.previous ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RateChange, {
1921
- value: failureRate(report),
1922
- previous: report.previous.attemptRate,
1923
- complete: report.previous.complete
1924
- }) : null]
1925
- }),
1926
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
1927
- label: "Failed installations",
1928
- attention: report.failedInstallations > 0,
1929
- info: "Installations with a failed download or install, estimated within about 3%.",
1930
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(EstimatedCount, { value: report.failedInstallations })
1931
- }),
1932
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
1933
- label: "Patch fallback rate",
1934
- info: "Share of patch downloads that fell back to full files.",
1935
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Rate, { value: patchFallbackRate(report) })
1936
- })
1946
+ report.patchFallbacks.toLocaleString(),
1947
+ " of",
1948
+ " ",
1949
+ patchAttempts.toLocaleString(),
1950
+ " patch downloads fell back to the full archive"
1937
1951
  ]
1938
- })]
1939
- }), report.checks ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1940
- "aria-labelledby": "update-check-failures",
1941
- className: "flex min-w-0 flex-col gap-3 rounded-lg bg-muted/30 p-4 lg:p-6",
1942
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
1943
- id: "update-check-failures",
1944
- className: "text-sm font-medium",
1945
- children: "Update checks"
1946
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", {
1947
- className: "grid grid-cols-2 gap-4 lg:grid-cols-1",
1948
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
1949
- label: "Failed checks",
1950
- attention: report.checks.failures > 0,
1951
- children: report.checks.failures.toLocaleString()
1952
- }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Metric, {
1953
- label: "Check failure rate",
1954
- attention: report.checks.failedInstallations > 0,
1955
- info: "Installations whose update check failed ÷ active installations. Offline checks aren't reported.",
1956
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Rate, { value: checkFailureRate(report.checks) }), report.previous ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RateChange, {
1957
- value: checkFailureRate(report.checks),
1958
- previous: report.previous.checkRate,
1959
- complete: report.previous.complete
1960
- }) : null]
1961
- })]
1962
- })]
1952
+ }) : null
1953
+ }), report.checks ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FailureSummary, {
1954
+ id: "update-check-failures",
1955
+ title: "Update checks",
1956
+ info: "Installations whose update check failed ÷ active installations. A check that fails offline isn't reported.",
1957
+ rate: checkFailureRate(report.checks),
1958
+ of: "of active installations had a check fail",
1959
+ failures: report.checks.failures,
1960
+ installations: report.checks.failedInstallations,
1961
+ previous: report.previous && {
1962
+ rate: report.previous.checkRate,
1963
+ complete: report.previous.complete
1964
+ }
1963
1965
  }) : null]
1964
1966
  }),
1965
1967
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Separator$1, {}),
@@ -1967,33 +1969,40 @@ function FailuresReport({ report, errors }) {
1967
1969
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
1968
1970
  "aria-labelledby": "failures-by-stage",
1969
1971
  className: "flex flex-col gap-3",
1970
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
1971
- className: "text-sm font-medium",
1972
- id: "failures-by-stage",
1973
- children: "Failures by stage and reason"
1974
- }), breakdown.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1975
- className: "text-sm text-muted-foreground",
1976
- children: "No update failures in this period."
1977
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Table, {
1978
- "aria-label": "Failures by stage and reason",
1979
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
1980
- className: "[&>th]:px-2 sm:[&>th]:px-4",
1981
- children: [
1982
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Stage / reason" }),
1983
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1984
- className: "w-16 text-right sm:w-24",
1985
- children: "Reports"
1986
- }),
1987
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1988
- className: "w-16 text-right sm:w-24",
1989
- children: "Share"
1990
- })
1991
- ]
1992
- }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableBody, { children: breakdown.map((failure) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FailureRow, {
1993
- failure,
1994
- total
1995
- }, `${failure.stage} ${failure.reason}`)) })]
1996
- })]
1972
+ children: [
1973
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
1974
+ className: "text-sm font-medium",
1975
+ id: "failures-by-stage",
1976
+ children: "Failures by stage and reason"
1977
+ }),
1978
+ unreasoned * 2 > total ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1979
+ className: "text-sm text-muted-foreground",
1980
+ children: "Most report no reason: an SDK that doesn't classify failures reports every failed check, offline ones included."
1981
+ }) : null,
1982
+ breakdown.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
1983
+ className: "text-sm text-muted-foreground",
1984
+ children: "No update failures in this period."
1985
+ }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Table, {
1986
+ "aria-label": "Failures by stage and reason",
1987
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
1988
+ className: "[&>th]:px-2 sm:[&>th]:px-4",
1989
+ children: [
1990
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Stage / reason" }),
1991
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1992
+ className: "w-16 text-right sm:w-24",
1993
+ children: "Reports"
1994
+ }),
1995
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
1996
+ className: "w-16 text-right sm:w-24",
1997
+ children: "Share"
1998
+ })
1999
+ ]
2000
+ }) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableBody, { children: breakdown.map((failure) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FailureRow, {
2001
+ failure,
2002
+ total
2003
+ }, `${failure.stage} ${failure.reason}`)) })]
2004
+ })
2005
+ ]
1997
2006
  })
1998
2007
  ]
1999
2008
  });
@@ -2183,7 +2192,7 @@ function InsightsPage() {
2183
2192
  const navigate = Route.useNavigate();
2184
2193
  const retention = useInsightsRetention();
2185
2194
  const usageWindow = search.window ?? "24h";
2186
- const bundleWindow = search.bundleWindow ?? "7d";
2195
+ const bundleWindow = search.bundleWindow ?? "24h";
2187
2196
  const channel = search.channel ?? search.healthChannel ?? "production";
2188
2197
  const scope = {
2189
2198
  platform: search.platform ?? "all",
@@ -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-CuukSjL8.mjs";
3
- import { a as validateInsightsSearch } from "./InsightsInfo-B0AtaDnr.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-CdkhyQHH.js
5
- var $$splitComponentImporter = () => import("./insights-DFBjq_u1.mjs");
6
- var $$splitNotFoundComponentImporter = () => import("./insights-C2_kuG7Z.mjs");
2
+ import { r as requireConsoleFeature } from "./console-features-api-BRGAxAgc.mjs";
3
+ import { a as validateInsightsSearch } from "./InsightsInfo-C7K_HKHZ.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-CrrlG-bz.js
5
+ var $$splitComponentImporter = () => import("./insights-CgRV7dlP.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights-Br6JnctH.mjs");
7
7
  var Route = createFileRoute("/insights")({
8
8
  beforeLoad: ({ context }) => requireConsoleFeature(context.queryClient, "insightsAnalytics"),
9
9
  notFoundComponent: lazyRouteComponent($$splitNotFoundComponentImporter, "notFoundComponent"),
@@ -1,10 +1,10 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { A as createSsrRpc } from "./sidebar-B2SHpuig.mjs";
3
- import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
2
+ import { A as createSsrRpc } from "./sidebar-DLus-ndm.mjs";
3
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.mjs";
4
4
  import { i as useQuery, t as useInfiniteQuery } from "../_libs/tanstack__react-query.mjs";
5
- import { l as readUpdateFailuresInput } from "./insights-failures-BZaGNNij.mjs";
6
- import { n as readFailureReportsInput } from "./insights-errors-F-7hOApm.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-CBBcHIUP.js
5
+ import { c as readUpdateFailuresInput } from "./insights-failures-HHiiIbag.mjs";
6
+ import { n as readFailureReportsInput } from "./insights-errors-Cy03daYs.mjs";
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-api-MpLvDjmC.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,5 +1,5 @@
1
- import { l as readUpdateFailuresInput } from "./insights-failures-BZaGNNij.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-errors-F-7hOApm.js
1
+ import { c as readUpdateFailuresInput } from "./insights-failures-HHiiIbag.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-errors-Cy03daYs.js
3
3
  function readFailureReportsInput(input) {
4
4
  readUpdateFailuresInput(input);
5
5
  if (!Number.isSafeInteger(input.beforeReceivedAtMs) || input.beforeReceivedAtMs < 0 || input.cursor !== void 0 && (typeof input.cursor !== "string" || !input.cursor.length || input.cursor.length > 8192)) throw new Error("Invalid failure report range or cursor.");
@@ -1,5 +1,5 @@
1
1
  import { r as recoveryWindows } from "./insights-recovery-Dpk6Mfb9.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-BZaGNNij.js
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-HHiiIbag.js
3
3
  function readUpdateFailuresInput(input) {
4
4
  if (!input || input.platform !== "ios" && input.platform !== "android" || typeof input.channel !== "string" || !input.channel.trim() || input.channel.length > 1024 || input.releaseId !== void 0 && (typeof input.releaseId !== "string" || !input.releaseId.trim() || input.releaseId.length > 36) || (input.window === void 0 ? input.releaseId === void 0 : !Object.hasOwn(recoveryWindows, input.window))) throw new Error("Choose a platform, channel, and time window.");
5
5
  return input;
@@ -9,8 +9,6 @@ function readUpdateFailuresInput(input) {
9
9
  * over those plus download reports. Null without either.
10
10
  */
11
11
  var failureRate = ({ failedUpdates, downloads }) => failedUpdates + downloads === 0 ? null : failedUpdates / (failedUpdates + downloads);
12
- /** Of the downloads that tried a patch, the share that fell back to files or the archive. */
13
- var patchFallbackRate = ({ patchDownloads, patchFallbacks }) => patchDownloads + patchFallbacks === 0 ? null : patchFallbacks / (patchDownloads + patchFallbacks);
14
12
  /** Installations whose update check failed, over the active ones; estimates, so at most 100%. */
15
13
  var checkFailureRate = ({ failedInstallations, activeInstallations }) => activeInstallations === 0 ? null : Math.min(1, failedInstallations / activeInstallations);
16
14
  var formatRate = (rate) => rate === null ? "—" : `${(rate * 100).toFixed(2)}%`;
@@ -27,7 +25,8 @@ var REASONS = {
27
25
  signature: "Signature",
28
26
  patch: "Patch",
29
27
  extract: "Extract",
30
- storage: "Storage"
28
+ storage: "Storage",
29
+ unknown: "No reason reported"
31
30
  };
32
31
  var failureStageLabel = (stage) => STAGES[stage] ?? "Unknown stage";
33
32
  var failureReasonLabel = (reason) => REASONS[reason] ?? "Unknown reason";
@@ -44,4 +43,4 @@ var describeFailure = (failure) => {
44
43
  return [`${failureStageLabel(failure.stage)} failed: ${message}`, ...failureDetailParts(failure)].join(" · ");
45
44
  };
46
45
  //#endregion
47
- export { failureReasonLabel as a, patchFallbackRate as c, failureRate as i, readUpdateFailuresInput as l, describeFailure as n, failureStageLabel as o, failureDetailParts as r, formatRate as s, checkFailureRate as t };
46
+ export { failureReasonLabel as a, readUpdateFailuresInput as c, failureRate as i, describeFailure as n, failureStageLabel as o, failureDetailParts as r, formatRate as s, checkFailureRate as t };
@@ -1,9 +1,9 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
2
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
- import { l as readUpdateFailuresInput } from "./insights-failures-BZaGNNij.mjs";
5
- import { n as readFailureReportsInput } from "./insights-errors-F-7hOApm.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-CTf5QF7O.js
4
+ import { c as readUpdateFailuresInput } from "./insights-failures-HHiiIbag.mjs";
5
+ import { n as readFailureReportsInput } from "./insights-errors-Cy03daYs.mjs";
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-failures-rpc-CGiDJbg-.js
7
7
  var getUpdateFailuresRpc_createServerFn_handler = createServerRpc({
8
8
  id: "0d1dacdd1e5ee6b100e5c142fb9af03602b6f2c6fe6af79312b36c223d7f8f97",
9
9
  name: "getUpdateFailuresRpc",
@@ -11,8 +11,8 @@ 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-DaeqzKiu.mjs"),
15
- import("./updateFailures-BP-A8Ppr.mjs"),
14
+ import("./config.server-08RES1G-.mjs"),
15
+ import("./updateFailures-BLs3R7j0.mjs"),
16
16
  import("./runtime.server-C1SVch_-.mjs")
17
17
  ]);
18
18
  const { runtime } = await prepareConfig();
@@ -25,8 +25,8 @@ 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-DaeqzKiu.mjs"),
29
- import("./failureReports-CRYHdQBQ.mjs"),
28
+ import("./config.server-08RES1G-.mjs"),
29
+ import("./failureReports-_trbWCVo.mjs"),
30
30
  import("./runtime.server-C1SVch_-.mjs")
31
31
  ]);
32
32
  const { runtime } = await prepareConfig();
@@ -1,8 +1,8 @@
1
1
  import { u as createServerFn } from "./createMiddleware-BdBf_ezN.mjs";
2
- import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
2
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.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-CPKwBt4V.js
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-recovery-rpc-Bul_1cyL.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-DaeqzKiu.mjs"),
24
+ import("./config.server-08RES1G-.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-CSVqeikY.mjs";
2
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.mjs";
3
3
  import { t as createServerRpc } from "./createServerRpc-B_y2lrwA.mjs";
4
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-DjhnYd2B.js
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-rpc-D24DKKlx.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-DaeqzKiu.mjs"), import("./runtime.server-C1SVch_-.mjs")]);
7
+ const [{ prepareConfig }, { requireFeature }] = await Promise.all([import("./config.server-08RES1G-.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-CSVqeikY.mjs";
2
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.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-CLHRgGDT.js
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-iG8wRo4G.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-DaeqzKiu.mjs"),
21
+ import("./config.server-08RES1G-.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
2
  import { A as ProgressRoot, O as ProgressIndicator$1, k as ProgressTrack$1, mt as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
- import { A as createSsrRpc, k as cn } from "./sidebar-B2SHpuig.mjs";
4
- import { t as consoleAccess } from "./console-access-CSVqeikY.mjs";
3
+ import { A as createSsrRpc, k as cn } from "./sidebar-DLus-ndm.mjs";
4
+ import { t as consoleAccess } from "./console-access-D0bQJ9tx.mjs";
5
5
  import { t as readAppUsageInput } from "./insights-usage-CLUWjUFz.mjs";
6
- //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-CLyldyrz.js
6
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights-usage-rpc-tVCHkzGH.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,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-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");
2
+ import { r as requireConsoleFeature } from "./console-features-api-BRGAxAgc.mjs";
3
+ import { i as validateDistributionSearch } from "./InsightsInfo-C7K_HKHZ.mjs";
4
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-Ckc_O360.js
5
+ var $$splitComponentImporter = () => import("./insights_.distribution-DsujaomV.mjs");
6
+ var $$splitNotFoundComponentImporter = () => import("./insights_.distribution-DbO4X6X6.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-BCGWklf8.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-WDmsXtQl.js
1
+ import { t as ConsoleFeatureUnavailable } from "./ConsoleFeatureUnavailable-BxaV7ca0.mjs";
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-DbO4X6X6.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;
@@ -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-B2SHpuig.mjs";
3
+ import { C as Skeleton, O as buttonVariants, t as Button$1 } from "./sidebar-DLus-ndm.mjs";
4
4
  import { h as Link } from "../_libs/@tanstack/react-router+[...].mjs";
5
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
6
+ import { a as EmptyTitle, i as EmptyHeader, r as EmptyDescription, t as Empty } from "./empty-CnGZqF1a.mjs";
7
+ import { a as CardHeader, i as CardFooter, n as CardContent, o as CardTitle, t as Card } from "./card-ijGSudc_.mjs";
8
+ import { a as Badge, i as AlertTitle, o as Field, r as AlertDescription, t as Alert, u as FieldLabel } from "./field-CysUuRJx.mjs";
9
+ import { l as useInsightsRetention, r as keepsTwelveMonths } from "./insights-api-MpLvDjmC.mjs";
10
+ import { a as validateInsightsSearch, t as InsightsInfo } from "./InsightsInfo-C7K_HKHZ.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-BL10bGzk.mjs";
12
+ import { n as getAppUsageReportRpc, t as Progress$1 } from "./insights-usage-rpc-tVCHkzGH.mjs";
13
+ import { n as InsightsErrorAlert, r as InsightsPageHeader, t as BuiltinBundleBadge, u as UsagePeriodSelector } from "./InsightsPageHeader-BPaYzzkg.mjs";
14
+ import { t as Route } from "./insights_.distribution-Ckc_O360.mjs";
15
+ //#region node_modules/.nitro/vite/services/ssr/assets/insights_.distribution-DsujaomV.js
16
16
  var import_jsx_runtime = require_jsx_runtime();
17
17
  var PAGE_SIZE = 20;
18
18
  var dates = new Intl.DateTimeFormat("en", {
@@ -21,7 +21,7 @@ var dates = new Intl.DateTimeFormat("en", {
21
21
  timeZone: "UTC"
22
22
  });
23
23
  /** How a distribution row's bundle reads aloud. */
24
- var bundleName = (row) => row.releaseId ?? (row.builtinBundleId ? `Built-in app ${row.builtinBundleId}` : "Unknown bundle");
24
+ var bundleName = (row) => row.releaseId ?? (row.builtinBundleId ? `Built-in bundle ${row.builtinBundleId}` : "Unknown bundle");
25
25
  /** The bundle an app version's native build shipped, by its ID. */
26
26
  function BuiltinBundle({ bundleId }) {
27
27
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
@@ -171,7 +171,7 @@ function DistributionPage() {
171
171
  "Each installation counts once, by its latest report",
172
172
  " ",
173
173
  distributionPeriod,
174
- ". Shares are within each app version. Built-in app: the bundle the native build shipped, by its ID. Unknown bundle: no deployment and no built-in bundle ID."
174
+ ". Shares are within each app version. Built-in bundle: the bundle the native build shipped, by its ID. Unknown bundle: no deployment and no built-in bundle ID."
175
175
  ]
176
176
  })]
177
177
  }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {