@hot-updater/console 1.0.0-rc.2 → 1.0.0-rc.4

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 (126) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/InsightsPageHeader-C-Xc2MB9.js +1 -0
  3. package/.output/public/assets/api-keys-C1sgC6ko.js +1 -0
  4. package/.output/public/assets/{api-keys-api-BHcODB7q.js → api-keys-api-LchP65vQ.js} +1 -1
  5. package/.output/public/assets/badge-BuMDU0Rf.js +1 -0
  6. package/.output/public/assets/card-BEvx_QKh.js +1 -0
  7. package/.output/public/assets/{chart-no-axes-combined-Dy4WJv2U.js → chart-no-axes-combined-C0G0fQ3J.js} +1 -1
  8. package/.output/public/assets/{composite-Bp98A0Ld.js → composite-CHTH1Xhh.js} +1 -1
  9. package/.output/public/assets/createServerFn-DHc2erub.js +3 -0
  10. package/.output/public/assets/dialog-dyZ1SphZ.js +1 -0
  11. package/.output/public/assets/{dist-C_NydL0e.js → dist-Bh1gaDfB.js} +1 -1
  12. package/.output/public/assets/field-79SVH26s.js +1 -0
  13. package/.output/public/assets/index-BNkxg4jz.js +10 -0
  14. package/.output/public/assets/input-group-BbHfaBzQ.js +1 -0
  15. package/.output/public/assets/insights-D_7uSKfc.js +1 -0
  16. package/.output/public/assets/installations-BzoHWuXw.js +1 -0
  17. package/.output/public/assets/{installations-CE33wgbY.js → installations-DvjbUqd1.js} +2 -2
  18. package/.output/public/assets/{lazyRouteComponent-Ccp3bwBY.js → lazyRouteComponent-BN0MS05o.js} +1 -1
  19. package/.output/public/assets/{link-CI8idAUi.js → link-BG06whwB.js} +1 -1
  20. package/.output/public/assets/{loader-circle-BoxLrsOu.js → loader-circle-Bbp8LGVC.js} +1 -1
  21. package/.output/public/assets/{refresh-cw-Bqc72UZG.js → refresh-cw-DZgiAOMk.js} +1 -1
  22. package/.output/public/assets/routes-BFE-oRIT.js +1 -0
  23. package/.output/public/assets/{routes-DGVXdzpw.js → routes-DaPMY31P.js} +2 -2
  24. package/.output/public/assets/{shield-check-uK3MHWJZ.js → shield-check-DoIiaaXU.js} +1 -1
  25. package/.output/public/assets/signing-BTRhaF5D.js +1 -0
  26. package/.output/public/assets/styles-C7U0oVke.css +2 -0
  27. package/.output/public/assets/table-BBEzJ7Xl.js +1 -0
  28. package/.output/public/assets/useCompositeListItem-BkPDaqyj.js +42 -0
  29. package/.output/server/{__23tanstack-start-server-fn-resolver-B7ioJhtE.mjs → __23tanstack-start-server-fn-resolver-Dr2ixDgQ.mjs} +40 -32
  30. package/.output/server/_libs/@base-ui/react+[...].mjs +1 -1
  31. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1554 -0
  32. package/.output/server/_libs/@tanstack/react-router+[...].mjs +1 -1
  33. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +1 -1
  34. package/.output/server/_libs/d3-array.mjs +231 -0
  35. package/.output/server/_libs/d3-color.mjs +330 -0
  36. package/.output/server/_libs/d3-format.mjs +252 -0
  37. package/.output/server/_libs/d3-interpolate.mjs +207 -0
  38. package/.output/server/_libs/d3-path.mjs +77 -0
  39. package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
  40. package/.output/server/_libs/d3-shape.mjs +818 -0
  41. package/.output/server/_libs/decimal.js-light.mjs +884 -0
  42. package/.output/server/_libs/es-toolkit.mjs +1159 -0
  43. package/.output/server/_libs/eventemitter3.mjs +236 -0
  44. package/.output/server/_libs/immer.mjs +532 -0
  45. package/.output/server/_libs/lucide-react.mjs +9 -2
  46. package/.output/server/_libs/next-themes.mjs +1 -1
  47. package/.output/server/_libs/react-redux+[...].mjs +205 -0
  48. package/.output/server/_libs/recharts+[...].mjs +15054 -0
  49. package/.output/server/_libs/sonner.mjs +1 -1
  50. package/.output/server/_libs/tanstack__react-query.mjs +1 -1
  51. package/.output/server/_runtime.mjs +10 -1
  52. package/.output/server/_ssr/InsightsPageHeader-C5Has8Ry.mjs +60 -0
  53. package/.output/server/_ssr/{api-keys-CZeTPQys.mjs → api-keys-DJml_XoK.mjs} +10 -8
  54. package/.output/server/_ssr/{api-keys-api-BUPQVSpk.mjs → api-keys-api-CrCZyvnl.mjs} +2 -2
  55. package/.output/server/_ssr/{api-keys-rpc-Cs7tS5_j.mjs → api-keys-rpc-CFaNf-q0.mjs} +3 -3
  56. package/.output/server/_ssr/{api-rpc-tAupfGQm.mjs → api-rpc-B61KL3Eo.mjs} +25 -25
  57. package/.output/server/_ssr/{auth-rpc-DUaeOWKK.mjs → auth-rpc-D_hv52-J.mjs} +4 -4
  58. package/.output/server/_ssr/{auth.server-DW71WzsD.mjs → auth.server-DF_shCeq.mjs} +1 -1
  59. package/.output/server/_ssr/badge-BgsCP9Dp.mjs +28 -0
  60. package/.output/server/_ssr/{bundle-signing-rpc-BhnBw0-d.mjs → bundle-signing-rpc-BBipZnFs.mjs} +2 -2
  61. package/.output/server/_ssr/{bundle-signing.server-C4NW5mWx.mjs → bundle-signing.server-Co_zHdJx.mjs} +1 -1
  62. package/.output/server/_ssr/bundleActivity-D3_fIda2.mjs +27 -0
  63. package/.output/server/_ssr/{card-BRiPmi0C.mjs → card-DrbxCPtG.mjs} +3 -25
  64. package/.output/server/_ssr/chart-qxa-_30a.mjs +162 -0
  65. package/.output/server/_ssr/{config.server-afDuAwaG.mjs → config.server-CBr6PDj5.mjs} +5 -5
  66. package/.output/server/_ssr/{createSsrRpc-DjWNJ0uc.mjs → createSsrRpc-NHF2PxuK.mjs} +4 -4
  67. package/.output/server/_ssr/{deleteBundle-BTGwBgzx.mjs → deleteBundle-BAq3JuGr.mjs} +1 -1
  68. package/.output/server/_ssr/{dialog-DS-nw-pA.mjs → dialog-DUaIgpgd.mjs} +1 -1
  69. package/.output/server/_ssr/{downloadBundle-CNnYxYO2.mjs → downloadBundle-B3ert-pY.mjs} +1 -1
  70. package/.output/server/_ssr/{table-CnZmon_Z.mjs → field-CqNUlqUq.mjs} +4 -50
  71. package/.output/server/_ssr/{getBundleChildren-C0vh4ZvE.mjs → getBundleChildren-COMt16m_.mjs} +1 -1
  72. package/.output/server/_ssr/{input-group-BpsnmvZw.mjs → input-group-Bb8ueylQ.mjs} +51 -2
  73. package/.output/server/_ssr/insights-B-DUbksX.mjs +502 -0
  74. package/.output/server/_ssr/insights-recovery-DSFM-YTL.mjs +21 -0
  75. package/.output/server/_ssr/insights-recovery-rpc-P71FH66n.mjs +37 -0
  76. package/.output/server/_ssr/{insights-rpc-38DujK0G.mjs → insights-rpc-DrIQCjpD.mjs} +2 -2
  77. package/.output/server/_ssr/insightsRecovery-CqcosG7B.mjs +149 -0
  78. package/.output/server/_ssr/{installations-CtA59MQG.mjs → installations-BQrppti7.mjs} +2 -2
  79. package/.output/server/_ssr/{installations-DiVKEF5T.mjs → installations-YumqpNpa.mjs} +426 -11
  80. package/.output/server/_ssr/{router-B9wG_9f8.mjs → router-iP95Vqi2.mjs} +14 -14
  81. package/.output/server/_ssr/{routes-CKrrS2q2.mjs → routes-BDabsmc7.mjs} +2 -2
  82. package/.output/server/_ssr/{routes-D7Yh_jfj.mjs → routes-ivsV2TDu.mjs} +224 -13
  83. package/.output/server/_ssr/{runtime.server-DacU1TBV.mjs → runtime.server-jmZOKIQM.mjs} +1 -1
  84. package/.output/server/_ssr/{server-D_C2rMzf.mjs → server-p7yrVBfD.mjs} +3 -3
  85. package/.output/server/_ssr/{signing-Dz1WkZOf.mjs → signing-CxCbnFCt.mjs} +5 -4
  86. package/.output/server/_ssr/ssr.mjs +1 -1
  87. package/.output/server/_ssr/table-D1mL8fJu.mjs +53 -0
  88. package/.output/server/_tanstack-start-manifest_v-Cwpu0C9Q.mjs +100 -0
  89. package/.output/server/index.mjs +154 -154
  90. package/package.json +3 -3
  91. package/src/components/features/bundles/BundleActivityChart.tsx +95 -0
  92. package/src/components/features/bundles/BundleInsightsSummary.tsx +121 -0
  93. package/src/components/features/insights/InsightsControls.tsx +1 -15
  94. package/src/components/features/insights/InsightsOverview.tsx +368 -179
  95. package/src/components/features/releases/ReleaseEditorSheet.tsx +10 -0
  96. package/src/components/ui/empty.tsx +101 -0
  97. package/src/lib/bundle-activity.ts +21 -0
  98. package/src/lib/insights-recovery-rpc.ts +38 -0
  99. package/src/lib/insights-recovery.ts +59 -0
  100. package/src/lib/server/bundleActivity.ts +37 -0
  101. package/src/lib/server/insightsHistory.ts +52 -0
  102. package/src/lib/server/insightsRecovery.ts +186 -0
  103. package/src/routes/index.tsx +33 -3
  104. package/src/routes/insights.tsx +1 -42
  105. package/.output/public/assets/HashValueDisplay-CB0Eskit.js +0 -1
  106. package/.output/public/assets/InsightsPageHeader-Car5LNiZ.js +0 -1
  107. package/.output/public/assets/api-keys-BzKocqRy.js +0 -1
  108. package/.output/public/assets/card-Dhr_eFYj.js +0 -1
  109. package/.output/public/assets/createServerFn-CA8fs7QD.js +0 -3
  110. package/.output/public/assets/dialog-CUTrcPlB.js +0 -1
  111. package/.output/public/assets/index-DdAz-CXv.js +0 -10
  112. package/.output/public/assets/input-group-cSOG4wh_.js +0 -1
  113. package/.output/public/assets/insights-C0PBSZ-n.js +0 -1
  114. package/.output/public/assets/installations-CStZja8x.js +0 -1
  115. package/.output/public/assets/routes-DTlwOr8I.js +0 -1
  116. package/.output/public/assets/signing-CMf4aqDO.js +0 -1
  117. package/.output/public/assets/styles-BCvbtKsm.css +0 -2
  118. package/.output/public/assets/table-2vcV89QB.js +0 -1
  119. package/.output/public/assets/useCompositeListItem-CHLITE_4.js +0 -1
  120. package/.output/public/assets/x-DCd0j8c6.js +0 -1
  121. package/.output/server/_ssr/HashValueDisplay-DwpGLfrl.mjs +0 -55
  122. package/.output/server/_ssr/InsightsPageHeader-Df4Brj8u.mjs +0 -484
  123. package/.output/server/_ssr/insights-BdS364Xu.mjs +0 -460
  124. package/.output/server/_tanstack-start-manifest_v-2MjTyxil.mjs +0 -97
  125. package/src/components/features/insights/InsightsBundleReports.tsx +0 -51
  126. /package/.output/public/assets/{preload-helper-CQ36nxok.js → preload-helper-uTix4PVD.js} +0 -0
@@ -0,0 +1,162 @@
1
+ import { i as __toESM } from "../_runtime.mjs";
2
+ import { c as createServerFn } from "./createServerFn-B2hcXoPM.mjs";
3
+ import { J as require_react, q as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
4
+ import { C as cn, w as createSsrRpc } from "./createSsrRpc-NHF2PxuK.mjs";
5
+ import { t as readRecoveryInput } from "./insights-recovery-DSFM-YTL.mjs";
6
+ import { c as Tooltip, l as Legend, u as ResponsiveContainer } from "../_libs/recharts+[...].mjs";
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/chart-qxa-_30a.js
8
+ var import_react = /* @__PURE__ */ __toESM(require_react());
9
+ var import_jsx_runtime = require_jsx_runtime();
10
+ function readBundleActivityInput(inputs) {
11
+ if (!Array.isArray(inputs) || inputs.length > 20) throw new Error("Choose up to 20 bundles.");
12
+ return inputs.map((input) => {
13
+ readRecoveryInput({
14
+ ...input,
15
+ window: "30d"
16
+ });
17
+ if (!input.releaseId) throw new Error("Choose a bundle ID.");
18
+ return input;
19
+ });
20
+ }
21
+ var getBundleActivityRpc = createServerFn({ method: "GET" }).validator(readBundleActivityInput).handler(createSsrRpc("b4bf4c461903edcdc44eea52468c737b5b600a586f542138ff022dcbbe86c45c"));
22
+ var getRecoveryReportRpc = createServerFn({ method: "GET" }).validator(readRecoveryInput).handler(createSsrRpc("69cd8e2488b082eb2a22e7058be56ad6566f338c471c62557fa6beed5dc1352a"));
23
+ var THEMES = {
24
+ light: "",
25
+ dark: ".dark"
26
+ };
27
+ var INITIAL_DIMENSION = {
28
+ width: 320,
29
+ height: 200
30
+ };
31
+ var ChartContext = import_react.createContext(null);
32
+ function useChart() {
33
+ const context = import_react.useContext(ChartContext);
34
+ if (!context) throw new Error("useChart must be used within a <ChartContainer />");
35
+ return context;
36
+ }
37
+ function ChartContainer({ id, className, children, config, initialDimension = INITIAL_DIMENSION, ...props }) {
38
+ const uniqueId = import_react.useId();
39
+ const chartId = `chart-${id ?? uniqueId.replace(/:/g, "")}`;
40
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartContext.Provider, {
41
+ value: { config },
42
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
43
+ "data-slot": "chart",
44
+ "data-chart": chartId,
45
+ className: cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
46
+ ...props,
47
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChartStyle, {
48
+ id: chartId,
49
+ config
50
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ResponsiveContainer, {
51
+ initialDimension,
52
+ children
53
+ })]
54
+ })
55
+ });
56
+ }
57
+ var ChartStyle = ({ id, config }) => {
58
+ const colorConfig = Object.entries(config).filter(([, config]) => config.theme ?? config.color);
59
+ if (!colorConfig.length) return null;
60
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("style", { dangerouslySetInnerHTML: { __html: Object.entries(THEMES).map(([theme, prefix]) => `
61
+ ${prefix} [data-chart=${id}] {
62
+ ${colorConfig.map(([key, itemConfig]) => {
63
+ const color = itemConfig.theme?.[theme] ?? itemConfig.color;
64
+ return color ? ` --color-${key}: ${color};` : null;
65
+ }).join("\n")}
66
+ }
67
+ `).join("\n") } });
68
+ };
69
+ var ChartTooltip = Tooltip;
70
+ function ChartTooltipContent({ active, payload, className, indicator = "dot", hideLabel = false, hideIndicator = false, label, labelFormatter, labelClassName, formatter, color, nameKey, labelKey }) {
71
+ const { config } = useChart();
72
+ const tooltipLabel = import_react.useMemo(() => {
73
+ if (hideLabel || !payload?.length) return null;
74
+ const [item] = payload;
75
+ const itemConfig = getPayloadConfigFromPayload(config, item, `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`);
76
+ const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
77
+ if (labelFormatter) return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
78
+ className: cn("font-medium", labelClassName),
79
+ children: labelFormatter(value, payload)
80
+ });
81
+ if (!value) return null;
82
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
83
+ className: cn("font-medium", labelClassName),
84
+ children: value
85
+ });
86
+ }, [
87
+ label,
88
+ labelFormatter,
89
+ payload,
90
+ hideLabel,
91
+ labelClassName,
92
+ config,
93
+ labelKey
94
+ ]);
95
+ if (!active || !payload?.length) return null;
96
+ const nestLabel = payload.length === 1 && indicator !== "dot";
97
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
98
+ className: cn("grid min-w-32 items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs/relaxed shadow-xl", className),
99
+ children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
100
+ className: "grid gap-1.5",
101
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
102
+ const itemConfig = getPayloadConfigFromPayload(config, item, `${nameKey ?? item.name ?? item.dataKey ?? "value"}`);
103
+ const indicatorColor = color ?? item.payload?.fill ?? item.color;
104
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
105
+ className: cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
106
+ children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
107
+ className: cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
108
+ "h-2.5 w-2.5": indicator === "dot",
109
+ "w-1": indicator === "line",
110
+ "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
111
+ "my-0.5": nestLabel && indicator === "dashed"
112
+ }),
113
+ style: {
114
+ "--color-bg": indicatorColor,
115
+ "--color-border": indicatorColor
116
+ }
117
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
118
+ className: cn("flex flex-1 justify-between gap-2 leading-none", nestLabel ? "items-end" : "items-center"),
119
+ children: [/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
120
+ className: "grid gap-1.5",
121
+ children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
122
+ className: "text-muted-foreground",
123
+ children: itemConfig?.label ?? item.name
124
+ })]
125
+ }), item.value != null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
126
+ className: "font-mono font-medium text-foreground tabular-nums",
127
+ children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value)
128
+ })]
129
+ })] })
130
+ }, index);
131
+ })
132
+ })]
133
+ });
134
+ }
135
+ var ChartLegend = Legend;
136
+ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlign = "bottom", nameKey }) {
137
+ const { config } = useChart();
138
+ if (!payload?.length) return null;
139
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
140
+ className: cn("flex items-center justify-center gap-4", verticalAlign === "top" ? "pb-3" : "pt-3", className),
141
+ children: payload.filter((item) => item.type !== "none").map((item, index) => {
142
+ const itemConfig = getPayloadConfigFromPayload(config, item, `${nameKey ?? item.dataKey ?? "value"}`);
143
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
144
+ className: cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
145
+ children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(itemConfig.icon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
146
+ className: "h-2 w-2 shrink-0 rounded-[2px]",
147
+ style: { backgroundColor: item.color }
148
+ }), itemConfig?.label]
149
+ }, index);
150
+ })
151
+ });
152
+ }
153
+ function getPayloadConfigFromPayload(config, payload, key) {
154
+ if (typeof payload !== "object" || payload === null) return;
155
+ const payloadPayload = "payload" in payload && typeof payload.payload === "object" && payload.payload !== null ? payload.payload : void 0;
156
+ let configLabelKey = key;
157
+ if (key in payload && typeof payload[key] === "string") configLabelKey = payload[key];
158
+ else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") configLabelKey = payloadPayload[key];
159
+ return configLabelKey in config ? config[configLabelKey] : config[key];
160
+ }
161
+ //#endregion
162
+ export { ChartTooltipContent as a, ChartTooltip as i, ChartLegend as n, getBundleActivityRpc as o, ChartLegendContent as r, getRecoveryReportRpc as s, ChartContainer as t };
@@ -1,10 +1,10 @@
1
1
  import { t as DatabasePluginInputError } from "./databaseJsonValue-d6I3nAS4.mjs";
2
2
  import { l as getBundlePatches } from "./dist-CyzPaI5v.mjs";
3
3
  import { a as rowsToBundles, n as bundleToPatchRows, r as bundleToRow, t as bundleMetadataToRow } from "./databaseRows-5bCRTxm-.mjs";
4
- import { r as getRequest } from "./server-D_C2rMzf.mjs";
5
- import { requireConsoleAccess, t as resolveConsoleConfig } from "./auth.server-DW71WzsD.mjs";
4
+ import { r as getRequest } from "./server-p7yrVBfD.mjs";
5
+ import { requireConsoleAccess, t as resolveConsoleConfig } from "./auth.server-DF_shCeq.mjs";
6
6
  import { r as isRecord } from "./insightsContract-fjJDBeEE.mjs";
7
- //#region node_modules/.nitro/vite/services/ssr/assets/config.server-afDuAwaG.js
7
+ //#region node_modules/.nitro/vite/services/ssr/assets/config.server-CBr6PDj5.js
8
8
  /**
9
9
  * Calculate pagination information based on total count, limit, and offset
10
10
  */
@@ -342,11 +342,11 @@ var prepareConfig = async (request = getRequest()) => {
342
342
  const config = await loadCachedConfig(request);
343
343
  if (!databaseClient) databaseClient = createDatabaseClient(config.database);
344
344
  if (!hotUpdater) {
345
- const { createRuntimeHotUpdater } = await import("./runtime.server-DacU1TBV.mjs");
345
+ const { createRuntimeHotUpdater } = await import("./runtime.server-jmZOKIQM.mjs");
346
346
  hotUpdater = createRuntimeHotUpdater(config);
347
347
  }
348
348
  if (!apiKeyStoreResolved) {
349
- const { createApiKeyStore } = await import("./runtime.server-DacU1TBV.mjs");
349
+ const { createApiKeyStore } = await import("./runtime.server-jmZOKIQM.mjs");
350
350
  apiKeyStore = createApiKeyStore(config);
351
351
  apiKeyStoreResolved = true;
352
352
  }
@@ -1,11 +1,11 @@
1
- import { r as __toESM } from "../_runtime.mjs";
1
+ import { i as __toESM } from "../_runtime.mjs";
2
2
  import { i as TSS_SERVER_FUNCTION } from "./createServerFn-B2hcXoPM.mjs";
3
- import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-B7ioJhtE.mjs";
3
+ import { t as getServerFnById } from "../__23tanstack-start-server-fn-resolver-Dr2ixDgQ.mjs";
4
4
  import { B as TooltipRoot, F as TooltipArrow, G as useRender, I as TooltipPopup, J as require_react, K as mergeProps, L as TooltipPositioner, P as TooltipProvider$1, R as TooltipPortal, U as Separator, W as Button, q as require_jsx_runtime, z as TooltipTrigger$1 } from "../_libs/@base-ui/react+[...].mjs";
5
- import { p as PanelLeft } from "../_libs/lucide-react.mjs";
5
+ import { m as PanelLeft } from "../_libs/lucide-react.mjs";
6
6
  import { n as clsx, t as cva } from "../_libs/class-variance-authority+clsx.mjs";
7
7
  import { t as twMerge } from "../_libs/tailwind-merge.mjs";
8
- //#region node_modules/.nitro/vite/services/ssr/assets/createSsrRpc-DjWNJ0uc.js
8
+ //#region node_modules/.nitro/vite/services/ssr/assets/createSsrRpc-NHF2PxuK.js
9
9
  var import_react = /* @__PURE__ */ __toESM(require_react());
10
10
  var import_jsx_runtime = require_jsx_runtime();
11
11
  function cn(...inputs) {
@@ -1,5 +1,5 @@
1
1
  import { _ as getPatchStorageUri, d as getManifestStorageUri, l as getBundlePatches } from "./dist-CyzPaI5v.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/deleteBundle-BTGwBgzx.js
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/deleteBundle-BAq3JuGr.js
3
3
  function resolveStorageUriForDeletion(storageUri, storagePlugin) {
4
4
  const protocol = new URL(storageUri).protocol.replace(":", "");
5
5
  if (storagePlugin.protocol === protocol) return storageUri;
@@ -1,7 +1,7 @@
1
1
  import "../_runtime.mjs";
2
2
  import { A as DialogDescription$1, D as DialogTitle$1, E as DialogTrigger$1, J as require_react, M as DialogBackdrop, N as AlertDialogRoot, O as DialogPortal$1, T as AlertDialogTrigger$1, j as DialogClose, k as DialogPopup, q as require_jsx_runtime, w as DialogRoot } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { t as X } from "../_libs/lucide-react.mjs";
4
- import { C as cn, t as Button$1 } from "./createSsrRpc-DjWNJ0uc.mjs";
4
+ import { C as cn, t as Button$1 } from "./createSsrRpc-NHF2PxuK.mjs";
5
5
  require_react();
6
6
  var import_jsx_runtime = require_jsx_runtime();
7
7
  function AlertDialog$1({ ...props }) {
@@ -1,4 +1,4 @@
1
- //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-CNnYxYO2.js
1
+ //#region node_modules/.nitro/vite/services/ssr/assets/downloadBundle-B3ert-pY.js
2
2
  var downloadBundle = async (bundleId, { databaseClient, storagePlugin }) => {
3
3
  const bundle = await databaseClient.getBundleById(bundleId);
4
4
  if (!bundle) return new Response("Bundle not found", { status: 404 });
@@ -1,8 +1,8 @@
1
- import { r as __toESM } from "../_runtime.mjs";
1
+ import { i as __toESM } from "../_runtime.mjs";
2
2
  import { J as require_react, q as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
4
- import { C as cn } from "./createSsrRpc-DjWNJ0uc.mjs";
5
- //#region node_modules/.nitro/vite/services/ssr/assets/table-CnZmon_Z.js
4
+ import { C as cn } from "./createSsrRpc-NHF2PxuK.mjs";
5
+ //#region node_modules/.nitro/vite/services/ssr/assets/field-CqNUlqUq.js
6
6
  var import_react = /* @__PURE__ */ __toESM(require_react());
7
7
  var import_jsx_runtime = require_jsx_runtime();
8
8
  function Label({ className, htmlFor, ...props }) {
@@ -70,51 +70,5 @@ function FieldError({ className, children, errors, ...props }) {
70
70
  children: content
71
71
  });
72
72
  }
73
- function Table({ className, ...props }) {
74
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
75
- "data-slot": "table-container",
76
- className: "relative w-full overflow-x-auto",
77
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("table", {
78
- "data-slot": "table",
79
- className: cn("w-full caption-bottom text-xs", className),
80
- ...props
81
- })
82
- });
83
- }
84
- function TableHeader({ className, ...props }) {
85
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("thead", {
86
- "data-slot": "table-header",
87
- className: cn("[&_tr]:border-b", className),
88
- ...props
89
- });
90
- }
91
- function TableBody({ className, ...props }) {
92
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tbody", {
93
- "data-slot": "table-body",
94
- className: cn("[&_tr:last-child]:border-0", className),
95
- ...props
96
- });
97
- }
98
- function TableRow({ className, ...props }) {
99
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("tr", {
100
- "data-slot": "table-row",
101
- className: cn("hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors", className),
102
- ...props
103
- });
104
- }
105
- function TableHead({ className, ...props }) {
106
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("th", {
107
- "data-slot": "table-head",
108
- className: cn("text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
109
- ...props
110
- });
111
- }
112
- function TableCell({ className, ...props }) {
113
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("td", {
114
- "data-slot": "table-cell",
115
- className: cn("p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0", className),
116
- ...props
117
- });
118
- }
119
73
  //#endregion
120
- export { FieldLabel as a, TableBody as c, TableHeader as d, TableRow as f, FieldGroup as i, TableCell as l, FieldDescription as n, Label as o, FieldError as r, Table as s, Field as t, TableHead as u };
74
+ export { FieldLabel as a, FieldGroup as i, FieldDescription as n, Label as o, FieldError as r, Field as t };
@@ -1,5 +1,5 @@
1
1
  import { l as getBundlePatches } from "./dist-CyzPaI5v.mjs";
2
- //#region node_modules/.nitro/vite/services/ssr/assets/getBundleChildren-C0vh4ZvE.js
2
+ //#region node_modules/.nitro/vite/services/ssr/assets/getBundleChildren-COMt16m_.js
3
3
  var CHILDREN_QUERY_LIMIT = 100;
4
4
  async function collectBundleChildrenByBaseIds(baseBundleIds, deps) {
5
5
  const uniqueBaseBundleIds = [...new Set(baseBundleIds.filter(Boolean))];
@@ -1,9 +1,58 @@
1
1
  import "../_runtime.mjs";
2
2
  import { J as require_react, q as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
3
3
  import { t as cva } from "../_libs/class-variance-authority+clsx.mjs";
4
- import { C as cn, n as Input, t as Button$1 } from "./createSsrRpc-DjWNJ0uc.mjs";
4
+ import { C as cn, n as Input, t as Button$1, v as Tooltip$1, x as TooltipTrigger, y as TooltipContent } from "./createSsrRpc-NHF2PxuK.mjs";
5
+ import { n as toast } from "../_libs/sonner.mjs";
5
6
  require_react();
6
7
  var import_jsx_runtime = require_jsx_runtime();
8
+ var shortenIdentifier = (value, maxLength = 12) => value.length > maxLength ? `${value.slice(0, Math.max(1, maxLength - 4))}…${value.slice(-4)}` : value;
9
+ function HashValueDisplay({ value, maxLength = 12, className, buttonClassName }) {
10
+ const isTruncated = value.length > maxLength;
11
+ const truncated = shortenIdentifier(value, maxLength);
12
+ const copyValue = async () => {
13
+ try {
14
+ await navigator.clipboard.writeText(value);
15
+ toast.success("Copied to clipboard", { description: value });
16
+ } catch {
17
+ toast.error("Failed to copy value");
18
+ }
19
+ };
20
+ const handleClick = (event) => {
21
+ event.preventDefault();
22
+ event.stopPropagation();
23
+ copyValue();
24
+ };
25
+ const handleKeyDown = (event) => {
26
+ if (event.key === "Enter" || event.key === " ") {
27
+ event.preventDefault();
28
+ event.stopPropagation();
29
+ copyValue();
30
+ }
31
+ };
32
+ const content = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", {
33
+ translate: "no",
34
+ className: cn("font-mono text-xs tabular-nums whitespace-nowrap", className),
35
+ children: truncated
36
+ });
37
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Tooltip$1, { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipTrigger, {
38
+ render: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", {
39
+ type: "button",
40
+ "aria-label": `Copy full value: ${value}`,
41
+ translate: "no",
42
+ 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 motion-reduce:transition-none motion-reduce:active:scale-100", !isTruncated && "cursor-copy", buttonClassName),
43
+ onClick: handleClick,
44
+ onKeyDown: handleKeyDown
45
+ }),
46
+ children: content
47
+ }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContent, {
48
+ hidden: !isTruncated,
49
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
50
+ translate: "no",
51
+ className: "break-all font-mono text-xs tabular-nums",
52
+ children: value
53
+ })
54
+ })] });
55
+ }
7
56
  function Textarea({ className, ...props }) {
8
57
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("textarea", {
9
58
  "data-slot": "textarea",
@@ -67,4 +116,4 @@ function InputGroupInput({ className, ...props }) {
67
116
  });
68
117
  }
69
118
  //#endregion
70
- export { InputGroupText as a, InputGroupInput as i, InputGroupAddon as n, Textarea as o, InputGroupButton as r, InputGroup as t };
119
+ export { InputGroupInput as a, shortenIdentifier as c, InputGroupButton as i, InputGroup as n, InputGroupText as o, InputGroupAddon as r, Textarea as s, HashValueDisplay as t };