@hot-updater/console 1.0.0-rc.0 → 1.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.output/nitro.json +1 -1
- package/.output/public/assets/HashValueDisplay-CB0Eskit.js +1 -0
- package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +1 -0
- package/.output/public/assets/api-keys-BzKocqRy.js +1 -0
- package/.output/public/assets/api-keys-api-BHcODB7q.js +1 -0
- package/.output/public/assets/card-Dhr_eFYj.js +1 -0
- package/.output/public/assets/{chart-no-axes-combined-FaYMGmQS.js → chart-no-axes-combined-Dy4WJv2U.js} +1 -1
- package/.output/public/assets/composite-Bp98A0Ld.js +1 -0
- package/.output/public/assets/createServerFn-CA8fs7QD.js +3 -0
- package/.output/public/assets/dialog-CUTrcPlB.js +1 -0
- package/.output/public/assets/{dist-DspNKfMj.js → dist-C_NydL0e.js} +1 -1
- package/.output/public/assets/index-DdAz-CXv.js +10 -0
- package/.output/public/assets/input-group-cSOG4wh_.js +1 -0
- package/.output/public/assets/insights-C0PBSZ-n.js +1 -0
- package/.output/public/assets/installations-CE33wgbY.js +2 -0
- package/.output/public/assets/installations-CStZja8x.js +1 -0
- package/.output/public/assets/lazyRouteComponent-Ccp3bwBY.js +1 -0
- package/.output/public/assets/link-CI8idAUi.js +1 -0
- package/.output/public/assets/loader-circle-BoxLrsOu.js +1 -0
- package/.output/public/assets/refresh-cw-Bqc72UZG.js +1 -0
- package/.output/public/assets/{routes-DcQnVajO.js → routes-DGVXdzpw.js} +2 -2
- package/.output/public/assets/routes-DTlwOr8I.js +1 -0
- package/.output/public/assets/{shield-check-DE_hVuHu.js → shield-check-uK3MHWJZ.js} +1 -1
- package/.output/public/assets/signing-CMf4aqDO.js +1 -0
- package/.output/public/assets/styles-BCvbtKsm.css +2 -0
- package/.output/public/assets/table-2vcV89QB.js +1 -0
- package/.output/public/assets/useCompositeListItem-CHLITE_4.js +1 -0
- package/.output/public/assets/x-DCd0j8c6.js +1 -0
- package/.output/server/{__23tanstack-start-server-fn-resolver-DBP9TQ7K.mjs → __23tanstack-start-server-fn-resolver-B7ioJhtE.mjs} +44 -52
- package/.output/server/_libs/@base-ui/react+[...].mjs +1906 -4040
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +52 -4
- package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +2 -2
- package/.output/server/_libs/lucide-react.mjs +36 -3
- package/.output/server/_libs/next-themes.mjs +2 -2
- package/.output/server/_libs/sonner.mjs +2 -2
- package/.output/server/_libs/tanstack__react-query.mjs +2 -2
- package/.output/server/_libs/verkit.mjs +20 -15
- package/.output/server/_runtime.mjs +1 -10
- package/.output/server/_ssr/HashValueDisplay-DwpGLfrl.mjs +55 -0
- package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +484 -0
- package/.output/server/_ssr/{api-keys-BnM_o2nS.mjs → api-keys-CZeTPQys.mjs} +11 -13
- package/.output/server/_ssr/{api-keys-api-CIywsSF5.mjs → api-keys-api-BUPQVSpk.mjs} +2 -2
- package/.output/server/_ssr/{api-keys-rpc-BSp1wkIV.mjs → api-keys-rpc-Cs7tS5_j.mjs} +5 -5
- package/.output/server/_ssr/{api-rpc-cG5wd_tO.mjs → api-rpc-tAupfGQm.mjs} +73 -142
- package/.output/server/_ssr/{auth-rpc-BrJ6obHJ.mjs → auth-rpc-DUaeOWKK.mjs} +4 -4
- package/.output/server/_ssr/{auth.server-DwKoZoQM.mjs → auth.server-DW71WzsD.mjs} +2 -5
- package/.output/server/_ssr/{bundle-signing-rpc-COoQhW8E.mjs → bundle-signing-rpc-BhnBw0-d.mjs} +2 -2
- package/.output/server/_ssr/bundle-signing.server-C4NW5mWx.mjs +12 -0
- package/.output/server/_ssr/{alert-Dim3MGY5.mjs → card-BRiPmi0C.mjs} +61 -39
- package/.output/server/_ssr/{config.server-DEiLhKmy.mjs → config.server-afDuAwaG.mjs} +15 -8
- package/.output/server/_ssr/{createSsrRpc-9P0S0lJ3.mjs → createSsrRpc-DjWNJ0uc.mjs} +6 -6
- package/.output/server/_ssr/databaseJsonValue-d6I3nAS4.mjs +45 -0
- package/.output/server/_ssr/{databaseRows-CwbNwYSl.mjs → databaseRows-5bCRTxm-.mjs} +4 -44
- package/.output/server/_ssr/{deleteBundle-Cu_XOMt0.mjs → deleteBundle-BTGwBgzx.mjs} +2 -2
- package/.output/server/_ssr/{dialog-CQuRMNZ4.mjs → dialog-DS-nw-pA.mjs} +2 -2
- package/.output/server/_ssr/{dist-BVSLTpoP.mjs → dist-CyzPaI5v.mjs} +2 -2
- package/.output/server/_ssr/{getBundleChildren-BcRMFoDF.mjs → getBundleChildren-C0vh4ZvE.mjs} +2 -2
- package/.output/server/_ssr/input-group-BpsnmvZw.mjs +70 -0
- package/.output/server/_ssr/insights-BdS364Xu.mjs +460 -0
- package/.output/server/_ssr/insights-rpc-38DujK0G.mjs +57 -0
- package/.output/server/_ssr/insightsContract-fjJDBeEE.mjs +303 -0
- package/.output/server/_ssr/installations-CtA59MQG.mjs +29 -0
- package/.output/server/_ssr/installations-DiVKEF5T.mjs +627 -0
- package/.output/server/_ssr/{router-C-KUBfOi.mjs → router-B9wG_9f8.mjs} +37 -46
- package/.output/server/_ssr/{routes-Z7TwC6nC.mjs → routes-CKrrS2q2.mjs} +3 -3
- package/.output/server/_ssr/{routes-BM4ht9jb.mjs → routes-D7Yh_jfj.mjs} +402 -390
- package/.output/server/_ssr/runtime.server-DacU1TBV.mjs +438 -0
- package/.output/server/_ssr/{server-BjzmvXnO.mjs → server-D_C2rMzf.mjs} +5 -5
- package/.output/server/_ssr/{signing-k8GxyBDF.mjs → signing-Dz1WkZOf.mjs} +16 -85
- package/.output/server/_ssr/ssr.mjs +1 -1
- package/.output/server/_ssr/{field-DRIXKjZG.mjs → table-CnZmon_Z.mjs} +51 -5
- package/.output/server/_ssr/{uuidv7-BbJ-9D_I.mjs → uuidv7-D0QFkPL_.mjs} +3 -3
- package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +97 -0
- package/.output/server/index.mjs +168 -203
- package/lib/index.d.mts +4 -4
- package/lib/vite-internal.mjs +1 -1
- package/lib/vite.d.mts +0 -1
- package/package.json +8 -8
- package/src/components/AppSidebar.tsx +12 -16
- package/src/components/ConsoleAccessPage.tsx +1 -1
- package/src/components/HashValueDisplay.tsx +11 -2
- package/src/components/features/api-keys/ApiKeysPage.tsx +1 -1
- package/src/components/features/bundles/BundleChildrenPanel.tsx +7 -6
- package/src/components/features/bundles/BundleMetadata.tsx +1 -20
- package/src/components/features/channels/ChannelManagementDialog.tsx +1 -1
- package/src/components/features/insights/EventDetails.tsx +151 -0
- package/src/components/features/insights/EventHistoryCard.tsx +245 -0
- package/src/components/features/insights/EventHistoryList.tsx +63 -0
- package/src/components/features/insights/InsightsBundleReports.tsx +51 -0
- package/src/components/features/insights/InsightsControls.tsx +121 -0
- package/src/components/features/{analytics/AnalyticsErrorAlert.tsx → insights/InsightsErrorAlert.tsx} +6 -6
- package/src/components/features/insights/InsightsOverview.tsx +203 -0
- package/src/components/features/insights/InsightsPageHeader.tsx +48 -0
- package/src/components/features/insights/InsightsPagination.tsx +52 -0
- package/src/components/features/insights/InstallationHistoryCard.tsx +250 -0
- package/src/components/features/insights/InstallationMatchesCard.tsx +178 -0
- package/src/components/features/insights/InstallationPageHeader.tsx +90 -0
- package/src/components/features/releases/ReleaseEditorSheet.tsx +24 -24
- package/src/components/features/signing/BundleSigningPage.tsx +18 -126
- package/src/components/ui/badge.tsx +2 -0
- package/src/components/ui/combobox.tsx +1 -0
- package/src/components/ui/skeleton.tsx +4 -1
- package/src/components/ui/tooltip.tsx +1 -1
- package/src/index.ts +7 -3
- package/src/lib/api-rpc.ts +19 -90
- package/src/lib/api.ts +0 -99
- package/src/lib/insights-api.ts +100 -0
- package/src/lib/insights-rpc.ts +88 -0
- package/src/lib/insights-view.ts +15 -0
- package/src/lib/public-bundle-error.ts +19 -0
- package/src/lib/server/bundle-signing.server.ts +5 -82
- package/src/lib/server/console-runtime.server.ts +0 -9
- package/src/lib/server/releaseReachability.ts +1 -4
- package/src/lib/server/runtime.server.ts +6 -142
- package/src/routeTree.gen.ts +21 -21
- package/src/router.tsx +3 -0
- package/src/routes/-installations-search.ts +25 -12
- package/src/routes/__root.tsx +6 -16
- package/src/routes/api-keys.tsx +1 -1
- package/src/routes/index.tsx +21 -81
- package/src/routes/insights.tsx +84 -0
- package/src/routes/installations.tsx +294 -142
- package/src/styles.css +6 -0
- package/.output/public/assets/AnalyticsCapabilityContext-BCke57-7.js +0 -1
- package/.output/public/assets/BundleActivityChart-CnsBe_1J.js +0 -42
- package/.output/public/assets/BundleIdDisplay-Dky75zLU.js +0 -1
- package/.output/public/assets/alert-C-1KvDW8.js +0 -1
- package/.output/public/assets/analytics-Bqz0c-BT.js +0 -1
- package/.output/public/assets/analytics-api-CJdrTLLO.js +0 -1
- package/.output/public/assets/api-B_Rh-uzC.js +0 -1
- package/.output/public/assets/api-keys-BurCFhzH.js +0 -1
- package/.output/public/assets/api-keys-api-BEDJdQg3.js +0 -1
- package/.output/public/assets/badge-Bf0fZ-Gx.js +0 -1
- package/.output/public/assets/createServerFn-gM2-LFBy.js +0 -3
- package/.output/public/assets/dialog-BS60BRr2.js +0 -1
- package/.output/public/assets/download-O-yNBc9H.js +0 -1
- package/.output/public/assets/field-Buq148-A.js +0 -1
- package/.output/public/assets/index-kFhd2S78.js +0 -10
- package/.output/public/assets/installations-BrQ-od41.js +0 -2
- package/.output/public/assets/installations-CGlZ3ROz.js +0 -1
- package/.output/public/assets/lazyRouteComponent-rPzgA7S-.js +0 -1
- package/.output/public/assets/loader-circle-DCYF-wJl.js +0 -1
- package/.output/public/assets/refresh-cw-n8XYbPPj.js +0 -1
- package/.output/public/assets/routes-CrdokJ80.js +0 -1
- package/.output/public/assets/search-DLhbWw3W.js +0 -1
- package/.output/public/assets/signing-HRexfjsH.js +0 -1
- package/.output/public/assets/styles-eB4EtvFS.css +0 -2
- package/.output/public/assets/table-D8CLieHX.js +0 -1
- package/.output/public/assets/textarea-YJLTVAoq.js +0 -1
- package/.output/public/assets/useMutation-JsGVjQMY.js +0 -1
- package/.output/public/assets/useOpenInteractionType-4cRD5xO0.js +0 -1
- package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +0 -1554
- package/.output/server/_libs/d3-array.mjs +0 -231
- package/.output/server/_libs/d3-color.mjs +0 -330
- package/.output/server/_libs/d3-format.mjs +0 -252
- package/.output/server/_libs/d3-interpolate.mjs +0 -207
- package/.output/server/_libs/d3-path.mjs +0 -77
- package/.output/server/_libs/d3-scale+[...].mjs +0 -1907
- package/.output/server/_libs/d3-shape.mjs +0 -818
- package/.output/server/_libs/decimal.js-light.mjs +0 -884
- package/.output/server/_libs/es-toolkit.mjs +0 -1134
- package/.output/server/_libs/eventemitter3.mjs +0 -236
- package/.output/server/_libs/immer.mjs +0 -532
- package/.output/server/_libs/react-redux+[...].mjs +0 -205
- package/.output/server/_libs/recharts+[...].mjs +0 -14117
- package/.output/server/_ssr/AnalyticsCapabilityContext-ui4DX8GO.mjs +0 -15
- package/.output/server/_ssr/BundleActivityChart-BiB9ZORH.mjs +0 -288
- package/.output/server/_ssr/BundleIdDisplay-Czk6iR6p.mjs +0 -13
- package/.output/server/_ssr/analytics-DtMTn8fn.mjs +0 -858
- package/.output/server/_ssr/analytics-api-Cg1M5v_H.mjs +0 -71
- package/.output/server/_ssr/analytics-input-fRRRn0uA.mjs +0 -96
- package/.output/server/_ssr/analytics-rpc-DY5uXvHT.mjs +0 -155
- package/.output/server/_ssr/api-BTSv1tZb.mjs +0 -282
- package/.output/server/_ssr/badge-DCxbEeof.mjs +0 -26
- package/.output/server/_ssr/bundle-signing.server-D5u8KkMp.mjs +0 -51
- package/.output/server/_ssr/installations-B-azgAvX.mjs +0 -19
- package/.output/server/_ssr/installations-Ctvzp2JH.mjs +0 -535
- package/.output/server/_ssr/runtime.server-awTLiiXW.mjs +0 -527
- package/.output/server/_ssr/table-v1yCvYo7.mjs +0 -53
- package/.output/server/_ssr/textarea-DYHnskhb.mjs +0 -14
- package/.output/server/_tanstack-start-manifest_v-CH4StzJu.mjs +0 -108
- package/src/components/features/analytics/ActivityChart.tsx +0 -150
- package/src/components/features/analytics/AnalyticsCapabilityContext.tsx +0 -24
- package/src/components/features/analytics/AnalyticsControls.tsx +0 -115
- package/src/components/features/analytics/AnalyticsOverview.tsx +0 -208
- package/src/components/features/analytics/BundleDistribution.tsx +0 -133
- package/src/components/features/analytics/BundleSelector.tsx +0 -114
- package/src/components/features/analytics/InstallationHistoryCard.tsx +0 -248
- package/src/components/features/analytics/InstallationMatchesCard.tsx +0 -132
- package/src/components/features/analytics/InstallationPageHeader.tsx +0 -138
- package/src/components/features/analytics/InstallationPagination.tsx +0 -48
- package/src/components/features/analytics/InstallationSearch.tsx +0 -230
- package/src/components/features/analytics/UpdateOutcomes.tsx +0 -147
- package/src/components/features/bundles/BundleActivityChart.tsx +0 -193
- package/src/components/features/bundles/BundleAnalyticsSummary.tsx +0 -123
- package/src/lib/analytics-api.ts +0 -145
- package/src/lib/analytics-error.ts +0 -19
- package/src/lib/analytics-input.ts +0 -187
- package/src/lib/analytics-overview.ts +0 -170
- package/src/lib/analytics-rpc.ts +0 -218
- package/src/lib/server/releaseActivity.ts +0 -27
- package/src/routes/analytics.tsx +0 -139
- /package/.output/public/assets/{preload-helper-TKOBYGYD.js → preload-helper-CQ36nxok.js} +0 -0
|
@@ -1,29 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as
|
|
4
|
-
import { A as
|
|
5
|
-
import { C as cn, S as buttonVariants, T as useIsMobile, _ as Skeleton, g as SidebarTrigger, n as Input, r as Separator$1, t as Button$1,
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
10
|
-
import { a as
|
|
11
|
-
import { n as BundleActivityChart, t as AnalyticsErrorAlert } from "./BundleActivityChart-BiB9ZORH.mjs";
|
|
12
|
-
import { C as normalizeCohortValue, S as isValidCohort, f as getNumericCohortRolloutPosition, g as getPatchFileHash, h as getPatchBaseFileHash, m as getPatchBaseBundleId, r as NUMERIC_COHORT_SIZE, t as INVALID_COHORT_ERROR_MESSAGE, w as normalizeRolloutCohortCount } from "./dist-BVSLTpoP.mjs";
|
|
13
|
-
import { _ as DialogTrigger, a as AlertDialogDescription, d as Dialog$1, f as DialogContent, g as DialogTitle$1, h as DialogHeader, i as AlertDialogContent, l as AlertDialogTitle, m as DialogFooter, n as AlertDialogAction, o as AlertDialogFooter, p as DialogDescription$1, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1 } from "./dialog-CQuRMNZ4.mjs";
|
|
14
|
-
import { t as Badge } from "./badge-DCxbEeof.mjs";
|
|
15
|
-
import { a as TableHeader, i as TableHead, n as TableBody, o as TableRow, r as TableCell, t as Table } from "./table-v1yCvYo7.mjs";
|
|
1
|
+
import { r as __toESM } from "../_runtime.mjs";
|
|
2
|
+
import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
|
|
3
|
+
import { A as DialogDescription, D as DialogTitle, J as require_react, M as DialogBackdrop, O as DialogPortal, _ as SelectPortal, a as SliderTrack, b as SelectTrigger$1, c as SelectGroup$1, d as SelectItemText, f as SelectItemIndicator, g as SelectPositioner, h as SelectPopup, i as SliderThumb, j as DialogClose, k as DialogPopup, l as SelectScrollUpArrow, m as SelectList, n as SwitchRoot, o as SliderControl, p as SelectItem$1, q as require_jsx_runtime, r as SliderIndicator, s as SliderRoot, t as SwitchThumb, u as SelectScrollDownArrow, v as SelectIcon, w as DialogRoot, x as SelectRoot, y as SelectValue$1 } from "../_libs/@base-ui/react+[...].mjs";
|
|
4
|
+
import { A as ChevronUp, C as Funnel, E as Download, L as ArrowRight, M as ChevronLeft, N as ChevronDown, O as CircleOff, P as Check, T as ExternalLink, a as Tag, b as List, f as Plus, i as Tags, j as ChevronRight, m as Package, n as TriangleAlert, r as Trash2, t as X, u as RotateCcw, v as Minus, w as FingerprintPattern, y as LoaderCircle } from "../_libs/lucide-react.mjs";
|
|
5
|
+
import { C as cn, S as buttonVariants, T as useIsMobile, _ as Skeleton, g as SidebarTrigger, n as Input, r as Separator$1, t as Button$1, w as createSsrRpc } from "./createSsrRpc-DjWNJ0uc.mjs";
|
|
6
|
+
import { m as Link } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
7
|
+
import { i as useQueryClient, n as useQuery, t as useMutation } from "../_libs/tanstack__react-query.mjs";
|
|
8
|
+
import { a as Badge, c as CardDescription, d as CardTitle, i as AlertTitle, o as Card, r as AlertDescription, s as CardContent, t as Alert, u as CardHeader } from "./card-BRiPmi0C.mjs";
|
|
9
|
+
import { _ as DialogTrigger, a as AlertDialogDescription, d as Dialog$1, f as DialogContent, g as DialogTitle$1, h as DialogHeader, i as AlertDialogContent, l as AlertDialogTitle, m as DialogFooter, n as AlertDialogAction, o as AlertDialogFooter, p as DialogDescription$1, r as AlertDialogCancel, s as AlertDialogHeader, t as AlertDialog$1 } from "./dialog-DS-nw-pA.mjs";
|
|
10
|
+
import { a as FieldLabel, c as TableBody, d as TableHeader, f as TableRow, i as FieldGroup, l as TableCell, n as FieldDescription, o as Label, r as FieldError, s as Table, t as Field, u as TableHead } from "./table-CnZmon_Z.mjs";
|
|
16
11
|
import { n as toast } from "../_libs/sonner.mjs";
|
|
17
|
-
import { r as
|
|
18
|
-
import { t as
|
|
19
|
-
import {
|
|
12
|
+
import { C as normalizeCohortValue, S as isValidCohort, f as getNumericCohortRolloutPosition, g as getPatchFileHash, h as getPatchBaseFileHash, m as getPatchBaseBundleId, r as NUMERIC_COHORT_SIZE, t as INVALID_COHORT_ERROR_MESSAGE, w as normalizeRolloutCohortCount } from "./dist-CyzPaI5v.mjs";
|
|
13
|
+
import { r as extractTimestampFromUUIDv7, t as createUUIDv7 } from "./uuidv7-D0QFkPL_.mjs";
|
|
14
|
+
import { t as HashValueDisplay } from "./HashValueDisplay-DwpGLfrl.mjs";
|
|
15
|
+
import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as Textarea, t as InputGroup } from "./input-group-BpsnmvZw.mjs";
|
|
16
|
+
import { n as updateReleaseFilters, t as Route } from "./routes-CKrrS2q2.mjs";
|
|
20
17
|
import { n as require_dayjs_min, t as require_relativeTime } from "../_libs/dayjs.mjs";
|
|
21
18
|
import { t as normalizeRange } from "../_libs/verkit.mjs";
|
|
22
|
-
//#region node_modules/.nitro/vite/services/ssr/assets/routes-
|
|
19
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/routes-D7Yh_jfj.js
|
|
23
20
|
var import_react = /* @__PURE__ */ __toESM(require_react());
|
|
24
21
|
var import_jsx_runtime = require_jsx_runtime();
|
|
25
22
|
var import_dayjs_min = /* @__PURE__ */ __toESM(require_dayjs_min());
|
|
26
23
|
var import_relativeTime = /* @__PURE__ */ __toESM(require_relativeTime());
|
|
24
|
+
function BundleIdDisplay({ bundleId, className }) {
|
|
25
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
26
|
+
translate: "no",
|
|
27
|
+
className: cn("break-all font-mono text-xs tabular-nums", className),
|
|
28
|
+
children: bundleId
|
|
29
|
+
});
|
|
30
|
+
}
|
|
27
31
|
var channelColors = {
|
|
28
32
|
production: "bg-green-500/10 text-green-700 dark:text-green-400 border-green-500/20",
|
|
29
33
|
dev: "bg-blue-500/10 text-blue-700 dark:text-blue-400 border-blue-500/20",
|
|
@@ -72,179 +76,355 @@ function BundleChildrenPanel({ panelId, bundle, bundles, loading, onDetailClick
|
|
|
72
76
|
id: panelId,
|
|
73
77
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
74
78
|
className: "flex flex-col gap-4",
|
|
75
|
-
children: [
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
79
|
+
children: [
|
|
80
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", {
|
|
81
|
+
className: "text-sm font-medium",
|
|
82
|
+
children: "Advanced artifact diagnostics"
|
|
83
|
+
}),
|
|
84
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
85
|
+
className: "flex flex-wrap items-center justify-between gap-3",
|
|
86
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
87
|
+
className: "flex min-w-0 items-start gap-2 text-sm sm:items-center",
|
|
88
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
89
|
+
className: "text-muted-foreground",
|
|
90
|
+
children: "Base artifact ID"
|
|
91
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
92
|
+
bundleId: bundle.id,
|
|
93
|
+
fullOnMobile: true,
|
|
94
|
+
maxLength: 18
|
|
95
|
+
})]
|
|
96
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Badge, {
|
|
97
|
+
variant: "outline",
|
|
98
|
+
children: [
|
|
99
|
+
bundles.length,
|
|
100
|
+
" ",
|
|
101
|
+
bundles.length === 1 ? "patch" : "patches"
|
|
102
|
+
]
|
|
86
103
|
})]
|
|
87
|
-
}),
|
|
88
|
-
|
|
89
|
-
children: [
|
|
90
|
-
bundles.length,
|
|
91
|
-
" ",
|
|
92
|
-
bundles.length === 1 ? "patch" : "patches"
|
|
93
|
-
]
|
|
94
|
-
})]
|
|
95
|
-
}), loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
96
|
-
className: "flex flex-col gap-2",
|
|
97
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" })]
|
|
98
|
-
}) : bundles.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
99
|
-
className: "flex flex-col gap-2",
|
|
100
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
101
|
-
className: "text-xs font-semibold uppercase text-muted-foreground/70",
|
|
102
|
-
children: "Patch bundles from this base"
|
|
103
|
-
}), isMobile ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
104
|
+
}),
|
|
105
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
104
106
|
className: "flex flex-col gap-2",
|
|
105
|
-
children:
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
})]
|
|
120
|
-
}),
|
|
121
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
122
|
-
className: "space-y-1",
|
|
123
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
124
|
-
className: "text-[11px] font-medium uppercase text-muted-foreground/70",
|
|
125
|
-
children: "Relation"
|
|
126
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
127
|
-
className: "flex flex-col items-start gap-1 text-sm",
|
|
128
|
-
children: [
|
|
129
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
130
|
-
bundleId: bundle.id,
|
|
131
|
-
fullOnMobile: true,
|
|
132
|
-
maxLength: 12
|
|
133
|
-
}),
|
|
134
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowRight, { className: "size-4 rotate-90 text-muted-foreground" }),
|
|
135
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
136
|
-
bundleId: childBundle.id,
|
|
137
|
-
fullOnMobile: true,
|
|
138
|
-
maxLength: 12
|
|
139
|
-
})
|
|
140
|
-
]
|
|
141
|
-
})]
|
|
142
|
-
}),
|
|
143
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
144
|
-
className: "flex items-center justify-between gap-3",
|
|
145
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
107
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" })]
|
|
108
|
+
}) : bundles.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
109
|
+
className: "flex flex-col gap-2",
|
|
110
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
111
|
+
className: "text-xs font-semibold uppercase text-muted-foreground/70",
|
|
112
|
+
children: "Patch artifacts from this base"
|
|
113
|
+
}), isMobile ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
114
|
+
className: "flex flex-col gap-2",
|
|
115
|
+
children: bundles.map((childBundle) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
116
|
+
className: "rounded-md border bg-background p-3",
|
|
117
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
118
|
+
className: "flex flex-col gap-3",
|
|
119
|
+
children: [
|
|
120
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
146
121
|
className: "space-y-1",
|
|
147
122
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
148
123
|
className: "text-[11px] font-medium uppercase text-muted-foreground/70",
|
|
149
|
-
children: "
|
|
150
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
151
|
-
|
|
152
|
-
|
|
124
|
+
children: "Target artifact ID"
|
|
125
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
126
|
+
bundleId: childBundle.id,
|
|
127
|
+
fullOnMobile: true,
|
|
128
|
+
maxLength: 18
|
|
153
129
|
})]
|
|
154
|
-
}),
|
|
155
|
-
|
|
130
|
+
}),
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
132
|
+
className: "space-y-1",
|
|
156
133
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
157
134
|
className: "text-[11px] font-medium uppercase text-muted-foreground/70",
|
|
158
|
-
children: "
|
|
159
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.
|
|
160
|
-
className: "
|
|
161
|
-
children:
|
|
135
|
+
children: "Relation"
|
|
136
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
137
|
+
className: "flex flex-col items-start gap-1 text-sm",
|
|
138
|
+
children: [
|
|
139
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
140
|
+
bundleId: bundle.id,
|
|
141
|
+
fullOnMobile: true,
|
|
142
|
+
maxLength: 12
|
|
143
|
+
}),
|
|
144
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowRight, { className: "size-4 rotate-90 text-muted-foreground" }),
|
|
145
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
146
|
+
bundleId: childBundle.id,
|
|
147
|
+
fullOnMobile: true,
|
|
148
|
+
maxLength: 12
|
|
149
|
+
})
|
|
150
|
+
]
|
|
162
151
|
})]
|
|
163
|
-
})]
|
|
164
|
-
}),
|
|
165
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
166
|
-
className: "w-full",
|
|
167
|
-
onClick: () => onDetailClick(childBundle),
|
|
168
|
-
size: "sm",
|
|
169
|
-
type: "button",
|
|
170
|
-
variant: "outline",
|
|
171
|
-
children: "Detail"
|
|
172
|
-
})
|
|
173
|
-
]
|
|
174
|
-
})
|
|
175
|
-
}, childBundle.id))
|
|
176
|
-
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
177
|
-
className: "overflow-x-auto rounded-md border bg-background",
|
|
178
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Table, {
|
|
179
|
-
className: "min-w-max",
|
|
180
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
|
|
181
|
-
className: "hover:bg-transparent",
|
|
182
|
-
children: [
|
|
183
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Patch Bundle" }),
|
|
184
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Relation" }),
|
|
185
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Artifact" }),
|
|
186
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Created" }),
|
|
187
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
|
|
188
|
-
className: "w-24 text-right",
|
|
189
|
-
children: "Detail"
|
|
190
|
-
})
|
|
191
|
-
]
|
|
192
|
-
}) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableBody, { children: bundles.map((childBundle) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, { children: [
|
|
193
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
194
|
-
bundleId: childBundle.id,
|
|
195
|
-
fullOnMobile: true,
|
|
196
|
-
maxLength: 18
|
|
197
|
-
}) }),
|
|
198
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
199
|
-
className: "flex min-w-[280px] flex-col items-start gap-1 sm:flex-row sm:items-center sm:gap-2",
|
|
200
|
-
children: [
|
|
201
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
202
|
-
bundleId: bundle.id,
|
|
203
|
-
fullOnMobile: true,
|
|
204
|
-
maxLength: 12
|
|
205
152
|
}),
|
|
206
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
153
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
154
|
+
className: "flex items-center justify-between gap-3",
|
|
155
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
156
|
+
className: "space-y-1",
|
|
157
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
158
|
+
className: "text-[11px] font-medium uppercase text-muted-foreground/70",
|
|
159
|
+
children: "Artifact"
|
|
160
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
161
|
+
variant: "secondary",
|
|
162
|
+
children: "bsdiff"
|
|
163
|
+
})]
|
|
164
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
165
|
+
className: "space-y-1 text-right",
|
|
166
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
167
|
+
className: "text-[11px] font-medium uppercase text-muted-foreground/70",
|
|
168
|
+
children: "Created"
|
|
169
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
170
|
+
className: "text-xs tabular-nums text-foreground",
|
|
171
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TimestampDisplay, { uuid: childBundle.id })
|
|
172
|
+
})]
|
|
173
|
+
})]
|
|
174
|
+
}),
|
|
175
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
176
|
+
className: "w-full",
|
|
177
|
+
onClick: () => onDetailClick(childBundle),
|
|
178
|
+
size: "sm",
|
|
179
|
+
type: "button",
|
|
180
|
+
variant: "outline",
|
|
181
|
+
children: "Detail"
|
|
211
182
|
})
|
|
212
183
|
]
|
|
213
|
-
}) }),
|
|
214
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
215
|
-
variant: "secondary",
|
|
216
|
-
children: "bsdiff"
|
|
217
|
-
}) }),
|
|
218
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
219
|
-
className: "tabular-nums",
|
|
220
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TimestampDisplay, { uuid: childBundle.id })
|
|
221
|
-
}),
|
|
222
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
223
|
-
className: "text-right",
|
|
224
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
225
|
-
onClick: () => onDetailClick(childBundle),
|
|
226
|
-
size: "sm",
|
|
227
|
-
type: "button",
|
|
228
|
-
variant: "outline",
|
|
229
|
-
children: "Detail"
|
|
230
|
-
})
|
|
231
184
|
})
|
|
232
|
-
|
|
233
|
-
})
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
185
|
+
}, childBundle.id))
|
|
186
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
187
|
+
className: "overflow-x-auto rounded-md border bg-background",
|
|
188
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Table, {
|
|
189
|
+
className: "min-w-max",
|
|
190
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHeader, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
|
|
191
|
+
className: "hover:bg-transparent",
|
|
192
|
+
children: [
|
|
193
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Target artifact ID" }),
|
|
194
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Relation" }),
|
|
195
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Artifact" }),
|
|
196
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Created" }),
|
|
197
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
|
|
198
|
+
className: "w-24 text-right",
|
|
199
|
+
children: "Detail"
|
|
200
|
+
})
|
|
201
|
+
]
|
|
202
|
+
}) }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableBody, { children: bundles.map((childBundle) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, { children: [
|
|
203
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
204
|
+
bundleId: childBundle.id,
|
|
205
|
+
fullOnMobile: true,
|
|
206
|
+
maxLength: 18
|
|
207
|
+
}) }),
|
|
208
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
209
|
+
className: "flex min-w-[280px] flex-col items-start gap-1 sm:flex-row sm:items-center sm:gap-2",
|
|
210
|
+
children: [
|
|
211
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
212
|
+
bundleId: bundle.id,
|
|
213
|
+
fullOnMobile: true,
|
|
214
|
+
maxLength: 12
|
|
215
|
+
}),
|
|
216
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowRight, { className: "size-4 shrink-0 rotate-90 text-muted-foreground sm:rotate-0" }),
|
|
217
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
218
|
+
bundleId: childBundle.id,
|
|
219
|
+
fullOnMobile: true,
|
|
220
|
+
maxLength: 12
|
|
221
|
+
})
|
|
222
|
+
]
|
|
223
|
+
}) }),
|
|
224
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
225
|
+
variant: "secondary",
|
|
226
|
+
children: "bsdiff"
|
|
227
|
+
}) }),
|
|
228
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
229
|
+
className: "tabular-nums",
|
|
230
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TimestampDisplay, { uuid: childBundle.id })
|
|
231
|
+
}),
|
|
232
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
233
|
+
className: "text-right",
|
|
234
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
235
|
+
onClick: () => onDetailClick(childBundle),
|
|
236
|
+
size: "sm",
|
|
237
|
+
type: "button",
|
|
238
|
+
variant: "outline",
|
|
239
|
+
children: "Detail"
|
|
240
|
+
})
|
|
241
|
+
})
|
|
242
|
+
] }, childBundle.id)) })]
|
|
243
|
+
})
|
|
244
|
+
})]
|
|
245
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
246
|
+
className: "flex flex-col gap-2",
|
|
247
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
248
|
+
className: "text-xs font-semibold uppercase text-muted-foreground/70",
|
|
249
|
+
children: "Patch artifacts from this base"
|
|
250
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
251
|
+
className: "rounded-md border bg-background p-3 text-sm text-muted-foreground",
|
|
252
|
+
children: "No direct patch artifacts."
|
|
253
|
+
})]
|
|
254
|
+
})
|
|
255
|
+
]
|
|
245
256
|
})
|
|
246
257
|
});
|
|
247
258
|
}
|
|
259
|
+
var getReleases = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("206547cb1526f961070a989818ca7b9e34f6b2b0e4ab851698c3807fe9fb5e0c"));
|
|
260
|
+
var getRelease = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("a6f23116eeaf76166d405e28a95213123025613c6603030894e519015bf48032"));
|
|
261
|
+
var updateRelease = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("7ea0186f19f9f2bc2ca4b26e3c59636891cf046957f84287b6783f8d88bd8cb7"));
|
|
262
|
+
var preflightRelease = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("b46c95dba95a6a3e8fa5c9d100e3622fa5ae7af4f38e10fb1ed2fa48289a3a8f"));
|
|
263
|
+
var deleteRelease = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("d5b58722ce514e3b63a377f736b4823c2011782495442ae4870ed547e392c70b"));
|
|
264
|
+
var promoteRelease = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("956539a300d79a7efa191c1cc2d529d62fc4bfd940442548fdbc1404e0d53078"));
|
|
265
|
+
var getReleaseCatalogDiagnostics = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("e8c24b7247936f045a145ffd5c177fd0e3df3b52769d67dfbd8d1de491d66396"));
|
|
266
|
+
var getConfig = createServerFn().handler(createSsrRpc("51a34c05479a893c7d320bd4cd1604427289d667698c48b9f30a01aabf8a5e68"));
|
|
267
|
+
var getChannels = createServerFn().handler(createSsrRpc("79ada05964de8f2123bfcd62b10097d59bf8fd689ef5c7161031e5871d8396c5"));
|
|
268
|
+
var createChannel = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("2b9b8d1f49f79a511589617d8d4bfc6094a3acf5264f33651b9569ba66d3f321"));
|
|
269
|
+
var deleteChannel = createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("52756dde414919a906bfe83d1ab6d29910c63bcafdb47653d6f1df562d958920"));
|
|
270
|
+
createServerFn().handler(createSsrRpc("f8bdca3d0579adb812d6404f55d9261a89cdb025e920b1fcad82883646a5fe9e"));
|
|
271
|
+
createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("00ccacb4a0212c83ec29f4d11719046ad91ea8291cfc557d514dbf00d3bd7f5f"));
|
|
272
|
+
var getBundle = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("1bd85c2a50e24785cb6abb023a247a9f048f37ddfa85cbb1c57e579563bad013"));
|
|
273
|
+
var getBundleChildren = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("4370f1bf70b91f1168d85379d3008449a1bedb915e9878ca4ef89d5f3a80fa7f"));
|
|
274
|
+
var getBundleChildCounts = createServerFn({ method: "GET" }).inputValidator((input) => input).handler(createSsrRpc("4ca367070b00f58179a572f0bb8196a4ccdd3881e9b1dbfe33deee0cb6e1f549"));
|
|
275
|
+
createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("16cc7c2f080ea5b73e0c6bba815b110dbd7727796036d248ba0d8ae819ddef08"));
|
|
276
|
+
createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("3a27ff5679228b86a346b3fe42142e7a5bf0264f73173c0dbe5f07fb37c43cf7"));
|
|
277
|
+
createServerFn({ method: "POST" }).inputValidator((input) => input).handler(createSsrRpc("61de3b69779c5ce2a5f5d3c27e2cfaca8fba8f14c8803559b9cd733c456494fa"));
|
|
278
|
+
var bundleListQueryKey = ["bundles"];
|
|
279
|
+
var releaseListQueryKey = ["releases"];
|
|
280
|
+
var queryKeys = {
|
|
281
|
+
config: ["config"],
|
|
282
|
+
channels: ["channels"],
|
|
283
|
+
configLoaded: ["config-loaded"],
|
|
284
|
+
bundles: {
|
|
285
|
+
all: bundleListQueryKey,
|
|
286
|
+
list: (filters) => [...bundleListQueryKey, filters ?? {}]
|
|
287
|
+
},
|
|
288
|
+
releases: {
|
|
289
|
+
all: releaseListQueryKey,
|
|
290
|
+
list: (filters) => [...releaseListQueryKey, filters ?? {}]
|
|
291
|
+
},
|
|
292
|
+
release: (releaseId) => ["release", releaseId],
|
|
293
|
+
releaseCatalog: (scopeKey) => ["release-catalog", scopeKey],
|
|
294
|
+
bundleChildren: {
|
|
295
|
+
all: ["bundle-children"],
|
|
296
|
+
list: (baseBundleId) => ["bundle-children", baseBundleId],
|
|
297
|
+
counts: (bundleIds) => [
|
|
298
|
+
"bundle-children",
|
|
299
|
+
"counts",
|
|
300
|
+
...bundleIds
|
|
301
|
+
]
|
|
302
|
+
},
|
|
303
|
+
bundle: (bundleId) => ["bundle", bundleId]
|
|
304
|
+
};
|
|
305
|
+
function useConfigQuery() {
|
|
306
|
+
return useQuery({
|
|
307
|
+
queryKey: queryKeys.config,
|
|
308
|
+
queryFn: () => getConfig(),
|
|
309
|
+
staleTime: Infinity
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
function useChannelsQuery() {
|
|
313
|
+
return useQuery({
|
|
314
|
+
queryKey: queryKeys.channels,
|
|
315
|
+
queryFn: () => getChannels(),
|
|
316
|
+
staleTime: Infinity
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
function useReleasesQuery(filters) {
|
|
320
|
+
return useQuery({
|
|
321
|
+
queryKey: queryKeys.releases.list(filters),
|
|
322
|
+
queryFn: () => getReleases({ data: filters }),
|
|
323
|
+
placeholderData: (previousData) => previousData
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
function useReleaseQuery(releaseId) {
|
|
327
|
+
return useQuery({
|
|
328
|
+
enabled: releaseId.length > 0,
|
|
329
|
+
queryFn: () => getRelease({ data: { releaseId } }),
|
|
330
|
+
queryKey: queryKeys.release(releaseId)
|
|
331
|
+
});
|
|
332
|
+
}
|
|
333
|
+
function useReleaseCatalogDiagnosticsQuery(scopeKey) {
|
|
334
|
+
return useQuery({
|
|
335
|
+
enabled: scopeKey.length > 0,
|
|
336
|
+
queryFn: () => getReleaseCatalogDiagnostics({ data: { scopeKey } }),
|
|
337
|
+
queryKey: queryKeys.releaseCatalog(scopeKey)
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
function useBundleQuery(bundleId) {
|
|
341
|
+
return useQuery({
|
|
342
|
+
queryKey: queryKeys.bundle(bundleId),
|
|
343
|
+
queryFn: () => getBundle({ data: { bundleId } }),
|
|
344
|
+
staleTime: Infinity,
|
|
345
|
+
enabled: !!bundleId
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
function useBundleChildrenQuery(baseBundleId) {
|
|
349
|
+
return useQuery({
|
|
350
|
+
queryKey: queryKeys.bundleChildren.list(baseBundleId),
|
|
351
|
+
queryFn: () => getBundleChildren({ data: { baseBundleId } }),
|
|
352
|
+
staleTime: Infinity,
|
|
353
|
+
enabled: !!baseBundleId
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
function useBundleChildCountsQuery(bundleIds) {
|
|
357
|
+
const normalizedBundleIds = [...bundleIds].sort((left, right) => left.localeCompare(right));
|
|
358
|
+
return useQuery({
|
|
359
|
+
queryKey: queryKeys.bundleChildren.counts(normalizedBundleIds),
|
|
360
|
+
queryFn: () => getBundleChildCounts({ data: { bundleIds: normalizedBundleIds } }),
|
|
361
|
+
staleTime: Infinity,
|
|
362
|
+
enabled: normalizedBundleIds.length > 0
|
|
363
|
+
});
|
|
364
|
+
}
|
|
365
|
+
function useCreateChannelMutation() {
|
|
366
|
+
const queryClient = useQueryClient();
|
|
367
|
+
return useMutation({
|
|
368
|
+
mutationFn: (input) => createChannel({ data: input }).then((response) => response.data),
|
|
369
|
+
onSuccess: async () => {
|
|
370
|
+
await queryClient.invalidateQueries({ queryKey: queryKeys.channels });
|
|
371
|
+
}
|
|
372
|
+
});
|
|
373
|
+
}
|
|
374
|
+
function useDeleteChannelMutation() {
|
|
375
|
+
const queryClient = useQueryClient();
|
|
376
|
+
return useMutation({
|
|
377
|
+
mutationFn: (input) => deleteChannel({ data: input }).then((response) => response.data),
|
|
378
|
+
onSettled: async () => {
|
|
379
|
+
await queryClient.invalidateQueries({ queryKey: queryKeys.channels });
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
function useUpdateReleaseMutation() {
|
|
384
|
+
const queryClient = useQueryClient();
|
|
385
|
+
return useMutation({
|
|
386
|
+
mutationFn: (input) => updateRelease({ data: input }),
|
|
387
|
+
onSuccess: async (_, input) => {
|
|
388
|
+
await Promise.all([
|
|
389
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.releases.all }),
|
|
390
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.release(input.releaseId) }),
|
|
391
|
+
queryClient.invalidateQueries({ queryKey: ["release-catalog"] }),
|
|
392
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.channels })
|
|
393
|
+
]);
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
function usePreflightReleaseMutation() {
|
|
398
|
+
return useMutation({ mutationFn: (input) => preflightRelease({ data: input }) });
|
|
399
|
+
}
|
|
400
|
+
function useDeleteReleaseMutation() {
|
|
401
|
+
const queryClient = useQueryClient();
|
|
402
|
+
return useMutation({
|
|
403
|
+
mutationFn: (input) => deleteRelease({ data: input }),
|
|
404
|
+
onSuccess: async (_, input) => {
|
|
405
|
+
queryClient.removeQueries({ queryKey: queryKeys.release(input.releaseId) });
|
|
406
|
+
await Promise.all([
|
|
407
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.releases.all }),
|
|
408
|
+
queryClient.invalidateQueries({ queryKey: ["release-catalog"] }),
|
|
409
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.channels })
|
|
410
|
+
]);
|
|
411
|
+
}
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
function usePromoteReleaseMutation() {
|
|
415
|
+
const queryClient = useQueryClient();
|
|
416
|
+
return useMutation({
|
|
417
|
+
mutationFn: (input) => promoteRelease({ data: input }),
|
|
418
|
+
onSuccess: async () => {
|
|
419
|
+
await Promise.all([
|
|
420
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.releases.all }),
|
|
421
|
+
queryClient.invalidateQueries({ queryKey: ["release"] }),
|
|
422
|
+
queryClient.invalidateQueries({ queryKey: ["release-catalog"] }),
|
|
423
|
+
queryClient.invalidateQueries({ queryKey: queryKeys.channels })
|
|
424
|
+
]);
|
|
425
|
+
}
|
|
426
|
+
});
|
|
427
|
+
}
|
|
248
428
|
function ChannelManagementDialog({ open, onOpenChange }) {
|
|
249
429
|
const [channelName, setChannelName] = (0, import_react.useState)("");
|
|
250
430
|
const [channelToDelete, setChannelToDelete] = (0, import_react.useState)(null);
|
|
@@ -293,7 +473,7 @@ function ChannelManagementDialog({ open, onOpenChange }) {
|
|
|
293
473
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogHeader, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(DialogTitle$1, {
|
|
294
474
|
className: "flex items-center gap-2",
|
|
295
475
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Tag, { className: "size-4 text-muted-foreground" }), "Channels"]
|
|
296
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogDescription$1, { children: "Create deployment channels and remove them when no
|
|
476
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DialogDescription$1, { children: "Create deployment channels and remove them when no bundle uses them. Empty channels remain available until you delete them." })] }),
|
|
297
477
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("form", {
|
|
298
478
|
onSubmit: handleCreate,
|
|
299
479
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FieldGroup, {
|
|
@@ -386,120 +566,6 @@ function ChannelManagementDialog({ open, onOpenChange }) {
|
|
|
386
566
|
})] })] })
|
|
387
567
|
})] });
|
|
388
568
|
}
|
|
389
|
-
function Metric({ label, tone, value }) {
|
|
390
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
391
|
-
className: "flex flex-col gap-1",
|
|
392
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", {
|
|
393
|
-
className: "flex items-center gap-2 text-xs text-muted-foreground",
|
|
394
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
395
|
-
"aria-hidden": "true",
|
|
396
|
-
className: tone === "applied" ? "size-2 rounded-full bg-chart-2" : "size-2 rounded-full bg-muted-foreground"
|
|
397
|
-
}), label]
|
|
398
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
399
|
-
className: "text-xl font-semibold tracking-tight tabular-nums",
|
|
400
|
-
children: value
|
|
401
|
-
})]
|
|
402
|
-
});
|
|
403
|
-
}
|
|
404
|
-
function SupportedBundleAnalyticsSummary({ bundleId }) {
|
|
405
|
-
const { data, error, isLoading } = useBundleEventAnalyticsQuery({
|
|
406
|
-
bundleId,
|
|
407
|
-
window: "30d",
|
|
408
|
-
limit: 1,
|
|
409
|
-
offset: 0
|
|
410
|
-
}, true);
|
|
411
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
|
|
412
|
-
className: "p-4 pb-3",
|
|
413
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
|
|
414
|
-
className: "text-sm font-medium",
|
|
415
|
-
children: "Activity · 30 days"
|
|
416
|
-
})
|
|
417
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardContent, {
|
|
418
|
-
className: "flex flex-col gap-3 px-4 pb-4",
|
|
419
|
-
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
420
|
-
"aria-label": "Loading reported bundle outcomes",
|
|
421
|
-
className: "flex flex-col gap-3",
|
|
422
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
423
|
-
className: "grid grid-cols-2 gap-4",
|
|
424
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-10 w-full" })]
|
|
425
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-24 w-full sm:h-32" })]
|
|
426
|
-
}) : error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AnalyticsErrorAlert, {
|
|
427
|
-
error: error instanceof Error ? error : /* @__PURE__ */ new Error("Failed to load bundle analytics."),
|
|
428
|
-
fallbackTitle: "Analytics unavailable"
|
|
429
|
-
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", {
|
|
430
|
-
className: "grid grid-cols-2 divide-x divide-border/70",
|
|
431
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
432
|
-
className: "pr-4",
|
|
433
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
|
|
434
|
-
label: "Applied",
|
|
435
|
-
tone: "applied",
|
|
436
|
-
value: data?.summary.installed ?? 0
|
|
437
|
-
})
|
|
438
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
439
|
-
className: "pl-4",
|
|
440
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Metric, {
|
|
441
|
-
label: "Recovered",
|
|
442
|
-
tone: "recovered",
|
|
443
|
-
value: data?.summary.recovered ?? 0
|
|
444
|
-
})
|
|
445
|
-
})]
|
|
446
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleActivityChart, {
|
|
447
|
-
installed: data?.series.installed ?? [],
|
|
448
|
-
recovered: data?.series.recovered ?? [],
|
|
449
|
-
window: "30d"
|
|
450
|
-
})] })
|
|
451
|
-
})] });
|
|
452
|
-
}
|
|
453
|
-
function BundleAnalyticsSummary({ bundleId }) {
|
|
454
|
-
if (useAnalyticsCapability().status !== "supported") return null;
|
|
455
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(SupportedBundleAnalyticsSummary, { bundleId });
|
|
456
|
-
}
|
|
457
|
-
function HashValueDisplay({ value, maxLength = 12, className }) {
|
|
458
|
-
const isTruncated = value.length > maxLength;
|
|
459
|
-
const truncated = isTruncated ? value.slice(0, maxLength) : value;
|
|
460
|
-
const copyValue = async () => {
|
|
461
|
-
try {
|
|
462
|
-
await navigator.clipboard.writeText(value);
|
|
463
|
-
toast.success("Copied to clipboard", { description: value });
|
|
464
|
-
} catch {
|
|
465
|
-
toast.error("Failed to copy value");
|
|
466
|
-
}
|
|
467
|
-
};
|
|
468
|
-
const handleClick = (event) => {
|
|
469
|
-
event.preventDefault();
|
|
470
|
-
event.stopPropagation();
|
|
471
|
-
copyValue();
|
|
472
|
-
};
|
|
473
|
-
const handleKeyDown = (event) => {
|
|
474
|
-
if (event.key === "Enter" || event.key === " ") {
|
|
475
|
-
event.preventDefault();
|
|
476
|
-
event.stopPropagation();
|
|
477
|
-
copyValue();
|
|
478
|
-
}
|
|
479
|
-
};
|
|
480
|
-
const content = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
481
|
-
translate: "no",
|
|
482
|
-
className: cn("font-mono text-xs tabular-nums whitespace-nowrap", className),
|
|
483
|
-
children: truncated
|
|
484
|
-
});
|
|
485
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Tooltip$1, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipTrigger, {
|
|
486
|
-
render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
487
|
-
type: "button",
|
|
488
|
-
translate: "no",
|
|
489
|
-
className: cn("ring-ring/30 bg-muted/40 border-border/70 inline-flex min-w-0 max-w-full cursor-pointer items-center rounded-md border px-1.5 py-0.5 align-top shadow-xs outline-none transition-[background-color,border-color,transform,box-shadow]", "hover:bg-muted/70 active:scale-[0.98] active:bg-muted/85 focus-visible:ring-[2px]", "touch-manipulation select-none", !isTruncated && "cursor-copy"),
|
|
490
|
-
onClick: handleClick,
|
|
491
|
-
onKeyDown: handleKeyDown
|
|
492
|
-
}),
|
|
493
|
-
children: content
|
|
494
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContent, {
|
|
495
|
-
hidden: !isTruncated,
|
|
496
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
497
|
-
translate: "no",
|
|
498
|
-
className: "break-all font-mono text-xs tabular-nums",
|
|
499
|
-
children: value
|
|
500
|
-
})
|
|
501
|
-
})] });
|
|
502
|
-
}
|
|
503
569
|
var normalizeGitUrl = (gitUrl) => {
|
|
504
570
|
const trimmedGitUrl = gitUrl.trim();
|
|
505
571
|
if (trimmedGitUrl.startsWith("git@")) {
|
|
@@ -538,12 +604,11 @@ function Row({ label, value }) {
|
|
|
538
604
|
}
|
|
539
605
|
function BundleMetadata({ bundle, release }) {
|
|
540
606
|
const { data: configData, isFetched } = useConfigQuery();
|
|
541
|
-
const patchBaseBundleId = bundle ? getPatchBaseBundleId(bundle) : null;
|
|
542
607
|
const hbcPatchFileHash = bundle ? getPatchFileHash(bundle) : null;
|
|
543
608
|
const hbcPatchBaseFileHash = bundle ? getPatchBaseFileHash(bundle) : null;
|
|
544
609
|
const gitCommitUrl = bundle?.gitCommitHash && isFetched ? getCommitUrl(configData?.console.gitUrl, bundle.gitCommitHash) : null;
|
|
545
610
|
const target = release.strategy === "APP_VERSION" ? release.target_app_version : release.fingerprint_hash;
|
|
546
|
-
if (!(target || bundle?.gitCommitHash || bundle?.fileHash ||
|
|
611
|
+
if (!(target || bundle?.gitCommitHash || bundle?.fileHash || hbcPatchBaseFileHash || hbcPatchFileHash)) return null;
|
|
547
612
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Card, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardHeader, {
|
|
548
613
|
className: "p-4 pb-3",
|
|
549
614
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CardTitle, {
|
|
@@ -588,14 +653,6 @@ function BundleMetadata({ bundle, release }) {
|
|
|
588
653
|
value: bundle.fileHash
|
|
589
654
|
})
|
|
590
655
|
}) : null,
|
|
591
|
-
patchBaseBundleId ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
|
|
592
|
-
label: "Patch base",
|
|
593
|
-
value: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
594
|
-
bundleId: patchBaseBundleId,
|
|
595
|
-
fullOnMobile: true,
|
|
596
|
-
maxLength: 18
|
|
597
|
-
})
|
|
598
|
-
}) : null,
|
|
599
656
|
hbcPatchBaseFileHash ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Row, {
|
|
600
657
|
label: "Base hash",
|
|
601
658
|
value: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(HashValueDisplay, {
|
|
@@ -1027,6 +1084,7 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1027
1084
|
const release = releaseQuery.data;
|
|
1028
1085
|
const bundleQuery = useBundleQuery(release?.bundle_id ?? "");
|
|
1029
1086
|
const bundle = bundleQuery.data;
|
|
1087
|
+
const patchBaseBundleId = bundle ? getPatchBaseBundleId(bundle) : null;
|
|
1030
1088
|
const diagnostics = useReleaseCatalogDiagnosticsQuery(release?.scope_key ?? "");
|
|
1031
1089
|
const update = useUpdateReleaseMutation();
|
|
1032
1090
|
const preflight = usePreflightReleaseMutation();
|
|
@@ -1093,6 +1151,7 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1093
1151
|
await preflight.mutateAsync(input);
|
|
1094
1152
|
await update.mutateAsync(input);
|
|
1095
1153
|
toast.success("Bundle settings saved");
|
|
1154
|
+
onOpenChange(false);
|
|
1096
1155
|
} catch (caught) {
|
|
1097
1156
|
setError(caught instanceof Error ? caught.message : "Bundle settings could not be saved.");
|
|
1098
1157
|
}
|
|
@@ -1149,17 +1208,17 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1149
1208
|
className: "flex flex-wrap items-start gap-2",
|
|
1150
1209
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1151
1210
|
className: "font-medium text-muted-foreground",
|
|
1152
|
-
children: "
|
|
1153
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.
|
|
1211
|
+
children: "ID"
|
|
1212
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
1154
1213
|
className: "min-w-0 basis-full sm:basis-auto",
|
|
1155
|
-
children:
|
|
1156
|
-
bundleId: release.
|
|
1214
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
1215
|
+
bundleId: release.id,
|
|
1157
1216
|
fullOnMobile: true,
|
|
1158
1217
|
maxLength: 18
|
|
1159
|
-
})
|
|
1218
|
+
}), !release.bundle_id ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1160
1219
|
className: "text-xs text-foreground",
|
|
1161
1220
|
children: "Built-in app"
|
|
1162
|
-
})
|
|
1221
|
+
}) : null]
|
|
1163
1222
|
})]
|
|
1164
1223
|
}),
|
|
1165
1224
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
@@ -1199,7 +1258,6 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1199
1258
|
}) : null, release && draft ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1200
1259
|
className: "flex flex-col gap-6 px-4 pb-4 sm:px-6 sm:pb-6",
|
|
1201
1260
|
children: [
|
|
1202
|
-
release.bundle_id ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleAnalyticsSummary, { bundleId: release.bundle_id }) : null,
|
|
1203
1261
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", {
|
|
1204
1262
|
"aria-labelledby": "delivery-settings-heading",
|
|
1205
1263
|
className: "flex flex-col gap-4",
|
|
@@ -1258,7 +1316,7 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1258
1316
|
enabled
|
|
1259
1317
|
})
|
|
1260
1318
|
})]
|
|
1261
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FieldDescription, { children: "Disabling rolls devices back to the previous enabled
|
|
1319
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FieldDescription, { children: "Disabling rolls devices back to the previous enabled bundle on their next check, or to the built-in app when none remains." })] }),
|
|
1262
1320
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Field, {
|
|
1263
1321
|
orientation: "horizontal",
|
|
1264
1322
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(FieldLabel, {
|
|
@@ -1415,15 +1473,22 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1415
1473
|
children: [
|
|
1416
1474
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1417
1475
|
className: "sm:col-span-2",
|
|
1418
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "
|
|
1476
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Artifact ID" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
1419
1477
|
className: "mt-1 break-all font-mono text-foreground",
|
|
1420
|
-
children: release.
|
|
1478
|
+
children: release.bundle_id ?? "Built-in app"
|
|
1421
1479
|
})]
|
|
1422
1480
|
}),
|
|
1423
1481
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Revision" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
1424
1482
|
className: "mt-1 font-mono text-foreground",
|
|
1425
1483
|
children: release.revision
|
|
1426
1484
|
})] }),
|
|
1485
|
+
patchBaseBundleId ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1486
|
+
className: "sm:col-span-2",
|
|
1487
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Patch base artifact ID" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
1488
|
+
className: "mt-1 break-all font-mono text-foreground",
|
|
1489
|
+
children: patchBaseBundleId
|
|
1490
|
+
})]
|
|
1491
|
+
}) : null,
|
|
1427
1492
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: "Catalog generation" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
1428
1493
|
className: "mt-1 font-mono text-foreground",
|
|
1429
1494
|
children: diagnostics.data?.generation ?? "—"
|
|
@@ -1471,7 +1536,7 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1471
1536
|
"Remove this Bundle from ",
|
|
1472
1537
|
channelName ?? "the channel",
|
|
1473
1538
|
"?"
|
|
1474
|
-
] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogDescription, { children: "The
|
|
1539
|
+
] }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogDescription, { children: "The uploaded artifact stays available. This only removes the Bundle from the channel." })] }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(AlertDialogFooter, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogCancel, { children: "Cancel" }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlertDialogAction, {
|
|
1475
1540
|
onClick: async () => {
|
|
1476
1541
|
if (!release) return;
|
|
1477
1542
|
try {
|
|
@@ -1569,7 +1634,7 @@ function ReleaseEditorSheet({ channels, onOpenChange, open, releaseId }) {
|
|
|
1569
1634
|
targetChannel: normalizedTargetChannel
|
|
1570
1635
|
});
|
|
1571
1636
|
handlePromoteOpenChange(false);
|
|
1572
|
-
toast.success(isCopyPromotion ? `Bundle copied to ${normalizedTargetChannel}` : `Bundle moved to ${normalizedTargetChannel}
|
|
1637
|
+
toast.success(isCopyPromotion ? `Bundle copied to ${normalizedTargetChannel}` : `Bundle moved to ${normalizedTargetChannel}`);
|
|
1573
1638
|
} catch (caught) {
|
|
1574
1639
|
toast.error(caught instanceof Error ? caught.message : "Bundle could not be promoted.");
|
|
1575
1640
|
}
|
|
@@ -1621,40 +1686,6 @@ var dateFormatter = new Intl.DateTimeFormat(void 0, {
|
|
|
1621
1686
|
timeStyle: "short"
|
|
1622
1687
|
});
|
|
1623
1688
|
var tableDateFormatter = new Intl.DateTimeFormat(void 0, { dateStyle: "medium" });
|
|
1624
|
-
var shortId = (id) => id.length > 18 ? `${id.slice(0, 8)}…${id.slice(-4)}` : id;
|
|
1625
|
-
function BundleMovementSummary({ summary }) {
|
|
1626
|
-
if (summary === null) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1627
|
-
"aria-label": "30-day Bundle activity unavailable",
|
|
1628
|
-
className: "text-sm text-muted-foreground",
|
|
1629
|
-
title: "Analytics are unavailable for this Bundle.",
|
|
1630
|
-
children: "—"
|
|
1631
|
-
});
|
|
1632
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1633
|
-
"aria-label": "Bundle movement over 30 days, distinct installations",
|
|
1634
|
-
className: "flex min-w-[140px] items-baseline gap-3 whitespace-nowrap",
|
|
1635
|
-
role: "group",
|
|
1636
|
-
title: "Distinct installations over the last 30 days.",
|
|
1637
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
1638
|
-
className: "flex items-baseline gap-1.5",
|
|
1639
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1640
|
-
className: "text-xs text-muted-foreground",
|
|
1641
|
-
children: "Applied"
|
|
1642
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1643
|
-
className: "text-sm font-medium tabular-nums",
|
|
1644
|
-
children: summary.installed
|
|
1645
|
-
})]
|
|
1646
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
1647
|
-
className: "flex items-baseline gap-1.5",
|
|
1648
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1649
|
-
className: "text-xs text-muted-foreground",
|
|
1650
|
-
children: "Recovered"
|
|
1651
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
|
|
1652
|
-
className: "text-sm font-medium tabular-nums",
|
|
1653
|
-
children: summary.recovered
|
|
1654
|
-
})]
|
|
1655
|
-
})]
|
|
1656
|
-
});
|
|
1657
|
-
}
|
|
1658
1689
|
function BundleFilterToolbar({ channels, onChange, onClear, onManageChannels, search }) {
|
|
1659
1690
|
const [targetAppVersion, setTargetAppVersion] = (0, import_react.useState)(search.targetAppVersion ?? "");
|
|
1660
1691
|
const hasFilters = Boolean(search.bundleId || search.channelId || search.enabled !== void 0 || search.platform || search.targetAppVersion);
|
|
@@ -1747,17 +1778,13 @@ function BundleFilterToolbar({ channels, onChange, onClear, onManageChannels, se
|
|
|
1747
1778
|
search.bundleId ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Badge, {
|
|
1748
1779
|
className: "max-w-48 gap-1",
|
|
1749
1780
|
variant: "secondary",
|
|
1750
|
-
children: [
|
|
1751
|
-
"
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
type: "button",
|
|
1758
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(X, { className: "size-3" })
|
|
1759
|
-
})
|
|
1760
|
-
]
|
|
1781
|
+
children: ["Artifact filter", /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
|
|
1782
|
+
"aria-label": "Clear artifact filter",
|
|
1783
|
+
className: "rounded-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1784
|
+
onClick: () => onChange({ bundleId: void 0 }),
|
|
1785
|
+
type: "button",
|
|
1786
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(X, { className: "size-3" })
|
|
1787
|
+
})]
|
|
1761
1788
|
}) : null,
|
|
1762
1789
|
hasFilters ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Button$1, {
|
|
1763
1790
|
className: "h-8 px-2 text-xs text-muted-foreground hover:text-foreground sm:ml-auto",
|
|
@@ -1770,7 +1797,6 @@ function BundleFilterToolbar({ channels, onChange, onClear, onManageChannels, se
|
|
|
1770
1797
|
});
|
|
1771
1798
|
}
|
|
1772
1799
|
function BundleEntry({ expanded, onOpen, onToggleExpand, release }) {
|
|
1773
|
-
const bundleLabel = release.bundle_id ? `bundle ${release.bundle_id}` : "the built-in app deployment";
|
|
1774
1800
|
const operationLabel = release.operation === "PROMOTE" ? "Promoted" : release.operation === "ROLLBACK" ? "Rollback" : null;
|
|
1775
1801
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
1776
1802
|
className: "flex min-w-[240px] items-center gap-3",
|
|
@@ -1778,7 +1804,8 @@ function BundleEntry({ expanded, onOpen, onToggleExpand, release }) {
|
|
|
1778
1804
|
release.bundle_id ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
1779
1805
|
"aria-controls": `bundle-lineage-panel-${release.id}`,
|
|
1780
1806
|
"aria-expanded": expanded,
|
|
1781
|
-
"aria-label": expanded ? "Hide
|
|
1807
|
+
"aria-label": expanded ? "Hide advanced artifact diagnostics" : "Show advanced artifact diagnostics",
|
|
1808
|
+
title: "Advanced artifact diagnostics",
|
|
1782
1809
|
className: "size-8 shrink-0 touch-manipulation",
|
|
1783
1810
|
onClick: onToggleExpand,
|
|
1784
1811
|
size: "icon",
|
|
@@ -1789,19 +1816,19 @@ function BundleEntry({ expanded, onOpen, onToggleExpand, release }) {
|
|
|
1789
1816
|
"aria-hidden": "true",
|
|
1790
1817
|
className: "size-8 shrink-0"
|
|
1791
1818
|
}),
|
|
1792
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
1793
|
-
"aria-label": `Open details for ${
|
|
1819
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("button", {
|
|
1820
|
+
"aria-label": `Open details for ID ${release.id}`,
|
|
1794
1821
|
className: "min-w-0 rounded-sm text-left text-foreground transition-colors underline-offset-4 hover:text-primary hover:underline focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring",
|
|
1795
1822
|
onClick: onOpen,
|
|
1796
|
-
title: release.
|
|
1823
|
+
title: release.id,
|
|
1797
1824
|
type: "button",
|
|
1798
|
-
children:
|
|
1799
|
-
bundleId: release.
|
|
1825
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleIdDisplay, {
|
|
1826
|
+
bundleId: release.id,
|
|
1800
1827
|
fullOnMobile: true
|
|
1801
|
-
})
|
|
1828
|
+
}), !release.bundle_id ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
1802
1829
|
className: "inline-flex items-center gap-1.5 text-sm",
|
|
1803
1830
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(RotateCcw, { className: "size-3.5" }), " Built-in app"]
|
|
1804
|
-
})
|
|
1831
|
+
}) : null]
|
|
1805
1832
|
}),
|
|
1806
1833
|
operationLabel ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
1807
1834
|
className: "shrink-0 font-normal",
|
|
@@ -1809,9 +1836,9 @@ function BundleEntry({ expanded, onOpen, onToggleExpand, release }) {
|
|
|
1809
1836
|
children: operationLabel
|
|
1810
1837
|
}) : null,
|
|
1811
1838
|
release.currentlyUnreachable ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", {
|
|
1812
|
-
"aria-label": "Currently unreachable. No catalog segment or cohort selects this
|
|
1839
|
+
"aria-label": "Currently unreachable. No catalog segment or cohort selects this bundle first.",
|
|
1813
1840
|
className: "inline-flex shrink-0 items-center gap-1 text-xs text-muted-foreground",
|
|
1814
|
-
title: "No catalog segment or cohort selects this
|
|
1841
|
+
title: "No catalog segment or cohort selects this bundle first with the current delivery settings.",
|
|
1815
1842
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(CircleOff, { className: "size-3.5" }), "Unreachable"]
|
|
1816
1843
|
}) : null
|
|
1817
1844
|
]
|
|
@@ -2003,16 +2030,6 @@ function BundlesPage() {
|
|
|
2003
2030
|
children: patchCount === void 0 ? "Checking" : patchCount > 0 ? `${patchCount} ${patchCount === 1 ? "patch" : "patches"}` : "—"
|
|
2004
2031
|
})]
|
|
2005
2032
|
}),
|
|
2006
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
2007
|
-
className: "col-span-2 rounded-md bg-muted/40 p-3",
|
|
2008
|
-
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", {
|
|
2009
|
-
className: "text-muted-foreground",
|
|
2010
|
-
children: "Activity · 30d"
|
|
2011
|
-
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", {
|
|
2012
|
-
className: "mt-1",
|
|
2013
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, { summary: release.activity30d })
|
|
2014
|
-
})]
|
|
2015
|
-
}),
|
|
2016
2033
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
2017
2034
|
className: "col-span-2 flex flex-wrap items-center gap-2 rounded-md bg-muted/40 p-3",
|
|
2018
2035
|
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReleaseStateBadge, { release }), release.should_force_update ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
@@ -2051,7 +2068,7 @@ function BundlesPage() {
|
|
|
2051
2068
|
}) : null] }, release.id);
|
|
2052
2069
|
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
2053
2070
|
className: "p-8 text-center text-sm text-muted-foreground",
|
|
2054
|
-
children: search.bundleId || search.channelId || search.enabled !== void 0 || search.platform || search.targetAppVersion ? "No bundles match these filters." : "No bundles yet. Deploy
|
|
2071
|
+
children: search.bundleId || search.channelId || search.enabled !== void 0 || search.platform || search.targetAppVersion ? "No bundles match these filters." : "No bundles yet. Deploy an update to see it here."
|
|
2055
2072
|
})
|
|
2056
2073
|
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Table, {
|
|
2057
2074
|
className: "min-w-max",
|
|
@@ -2060,7 +2077,7 @@ function BundlesPage() {
|
|
|
2060
2077
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
|
|
2061
2078
|
className: "border-b border-border/60 hover:bg-transparent [&>th]:h-10 [&>th]:text-xs [&>th]:font-semibold [&>th]:uppercase [&>th]:text-muted-foreground/70",
|
|
2062
2079
|
children: [
|
|
2063
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "
|
|
2080
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "ID" }),
|
|
2064
2081
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Channel" }),
|
|
2065
2082
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Platform" }),
|
|
2066
2083
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Patches" }),
|
|
@@ -2068,22 +2085,18 @@ function BundlesPage() {
|
|
|
2068
2085
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Enabled" }),
|
|
2069
2086
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Force update" }),
|
|
2070
2087
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Rollout" }),
|
|
2071
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, {
|
|
2072
|
-
title: "Distinct installations over the last 30 days.",
|
|
2073
|
-
children: "Activity · 30d"
|
|
2074
|
-
}),
|
|
2075
2088
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Message" }),
|
|
2076
2089
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableHead, { children: "Created" })
|
|
2077
2090
|
]
|
|
2078
2091
|
})
|
|
2079
2092
|
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableBody, { children: [releasesQuery.isPending ? Array.from({ length: 7 }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
2080
|
-
colSpan:
|
|
2093
|
+
colSpan: 10,
|
|
2081
2094
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Skeleton, { className: "h-8 w-full" })
|
|
2082
2095
|
}) }, index)) : releases.map((release) => {
|
|
2083
2096
|
const isExpanded = expandedReleaseId === release.id;
|
|
2084
2097
|
const panelId = `bundle-lineage-panel-${release.id}`;
|
|
2085
2098
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_react.Fragment, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(TableRow, {
|
|
2086
|
-
"aria-label": `Open bundle ${release.
|
|
2099
|
+
"aria-label": `Open bundle ${release.id}`,
|
|
2087
2100
|
className: cn("cursor-pointer transition-[background-color,filter] hover:bg-muted/10 focus-within:bg-muted/15 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring motion-reduce:transition-none data-[state=selected]:bg-muted/15 [&>td]:py-3", release.currentlyUnreachable && "bg-muted/35 saturate-50 hover:bg-muted/50 hover:saturate-100 focus-within:saturate-100", isExpanded && "bg-primary/5"),
|
|
2088
2101
|
"data-state": search.releaseId === release.id ? "selected" : void 0,
|
|
2089
2102
|
onClick: (event) => {
|
|
@@ -2171,7 +2184,6 @@ function BundlesPage() {
|
|
|
2171
2184
|
})]
|
|
2172
2185
|
}) }),
|
|
2173
2186
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RolloutPercentageBadge, { percentage: release.rollout_cohort_count / 10 }) }),
|
|
2174
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(BundleMovementSummary, { summary: release.activity30d }) }),
|
|
2175
2187
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
2176
2188
|
className: "text-sm text-muted-foreground",
|
|
2177
2189
|
title: release.message ?? void 0,
|
|
@@ -2187,7 +2199,7 @@ function BundlesPage() {
|
|
|
2187
2199
|
className: "hover:bg-transparent",
|
|
2188
2200
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
2189
2201
|
className: "border-t-0 p-0",
|
|
2190
|
-
colSpan:
|
|
2202
|
+
colSpan: 10,
|
|
2191
2203
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ReleaseBundleChildrenPanel, {
|
|
2192
2204
|
onDetailClick: openChildBundle,
|
|
2193
2205
|
panelId,
|
|
@@ -2198,7 +2210,7 @@ function BundlesPage() {
|
|
|
2198
2210
|
}), !releasesQuery.isPending && releases.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableRow, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCell, {
|
|
2199
2211
|
className: "h-40 text-center text-muted-foreground",
|
|
2200
2212
|
colSpan: 10,
|
|
2201
|
-
children: search.bundleId || search.channelId || search.enabled !== void 0 || search.platform || search.targetAppVersion ? "No bundles match these filters." : "No bundles yet. Deploy
|
|
2213
|
+
children: search.bundleId || search.channelId || search.enabled !== void 0 || search.platform || search.targetAppVersion ? "No bundles match these filters." : "No bundles yet. Deploy an update to see it here."
|
|
2202
2214
|
}) }) : null] })]
|
|
2203
2215
|
})
|
|
2204
2216
|
}), !releasesQuery.isError && !releasesQuery.isPending ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("nav", {
|