@burdenoff/microfe-cosmicintersection 2026.704.1 → 2026.704.3

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 (59) hide show
  1. package/dist/cosmicintersection/CosmicIntersectionRoutes.js +45 -25
  2. package/dist/cosmicintersection/CosmicIntersectionRoutes.js.map +1 -1
  3. package/dist/cosmicintersection/api/cosmicApi.js +137 -66
  4. package/dist/cosmicintersection/api/cosmicApi.js.map +1 -1
  5. package/dist/cosmicintersection/components/ActivityFeedPanel.js +68 -0
  6. package/dist/cosmicintersection/components/ActivityFeedPanel.js.map +1 -0
  7. package/dist/cosmicintersection/components/DiscussionPanel.js +57 -0
  8. package/dist/cosmicintersection/components/DiscussionPanel.js.map +1 -0
  9. package/dist/cosmicintersection/components/FacetPanel.js +66 -0
  10. package/dist/cosmicintersection/components/FacetPanel.js.map +1 -0
  11. package/dist/cosmicintersection/components/LineageGraph.js +388 -0
  12. package/dist/cosmicintersection/components/LineageGraph.js.map +1 -0
  13. package/dist/cosmicintersection/components/ResultsChart.js +329 -0
  14. package/dist/cosmicintersection/components/ResultsChart.js.map +1 -0
  15. package/dist/cosmicintersection/components/StepDAG.js +104 -0
  16. package/dist/cosmicintersection/components/StepDAG.js.map +1 -0
  17. package/dist/cosmicintersection/components/index.js +5 -3
  18. package/dist/cosmicintersection/pages/access/AccessPage.js +220 -161
  19. package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
  20. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +332 -172
  21. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
  22. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js +167 -109
  23. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js.map +1 -1
  24. package/dist/cosmicintersection/pages/collections/CollectionFormPage.js +87 -61
  25. package/dist/cosmicintersection/pages/collections/CollectionFormPage.js.map +1 -1
  26. package/dist/cosmicintersection/pages/collections/CollectionsPage.js +51 -42
  27. package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
  28. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +31 -18
  29. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
  30. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js +330 -184
  31. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js.map +1 -1
  32. package/dist/cosmicintersection/pages/datasets/DatasetFormPage.js +7 -7
  33. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +321 -163
  34. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
  35. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +358 -0
  36. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -0
  37. package/dist/cosmicintersection/pages/lineage/LineagePage.js +171 -0
  38. package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -0
  39. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js +339 -260
  40. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js.map +1 -1
  41. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +143 -82
  42. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
  43. package/dist/cosmicintersection/pages/pipelines/PipelineDetailPage.js +286 -142
  44. package/dist/cosmicintersection/pages/pipelines/PipelineDetailPage.js.map +1 -1
  45. package/dist/cosmicintersection/pages/pipelines/PipelineFormPage.js +305 -103
  46. package/dist/cosmicintersection/pages/pipelines/PipelineFormPage.js.map +1 -1
  47. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +183 -79
  48. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
  49. package/dist/cosmicintersection/pages/releases/ReleasesPage.js +346 -204
  50. package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
  51. package/dist/cosmicintersection/pages/runs/RunDetailPage.js +184 -136
  52. package/dist/cosmicintersection/pages/runs/RunDetailPage.js.map +1 -1
  53. package/dist/cosmicintersection/pages/runs/RunsPage.js +182 -120
  54. package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
  55. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js +234 -0
  56. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js.map +1 -0
  57. package/dist/cosmicintersection/pages/sources/SourcesPage.js +250 -133
  58. package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
  59. package/package.json +1 -1
@@ -1,28 +1,29 @@
1
1
  import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
2
2
  import { notify as t } from "../../lib/toast.js";
3
- import { useCosAddRunStepMutation as n, useCosRunQuery as r, useCosRunStepsQuery as ee, useCosTransitionRunMutation as te } from "../../api/cosmicApi.js";
4
- import i from "../../components/EmptyState.js";
5
- import a from "../../components/ErrorState.js";
6
- import o from "../../components/LoadingState.js";
7
- import s from "../../components/PageLayout.js";
3
+ import { useCosAddRunStepMutation as n, useCosRunQuery as r, useCosRunStepsQuery as i, useCosTransitionRunMutation as ee } from "../../api/cosmicApi.js";
4
+ import a from "../../components/EmptyState.js";
5
+ import o from "../../components/ErrorState.js";
6
+ import s from "../../components/LoadingState.js";
7
+ import te from "../../components/ActivityFeedPanel.js";
8
8
  import ne from "../../components/SafeLink.js";
9
- import c, { formatEnumLabel as l } from "../../components/StatusBadge.js";
9
+ import c from "../../components/PageLayout.js";
10
+ import l, { formatEnumLabel as u } from "../../components/StatusBadge.js";
10
11
  import "../../components/index.js";
11
- import { describeError as re, mutationSucceeded as u } from "../../lib/mutationResult.js";
12
- import { useMemo as ie, useState as d } from "react";
13
- import { jsx as f, jsxs as p } from "react/jsx-runtime";
14
- import { useParams as m } from "react-router-dom";
15
- import { ListTree as h, Plus as g } from "lucide-react";
16
- import { Button as _, Card as v, CardContent as y, CardHeader as b, CardTitle as x, Dialog as S, DialogContent as ae, DialogDescription as oe, DialogFooter as C, DialogHeader as se, DialogTitle as ce, Input as w, Label as T, Select as E, SelectContent as D, SelectItem as le, SelectTrigger as ue, SelectValue as de, Textarea as fe } from "@burdenoff/fe-libs/ui";
12
+ import { describeError as d, mutationSucceeded as f } from "../../lib/mutationResult.js";
13
+ import { useMemo as re, useState as p } from "react";
14
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
15
+ import { useParams as g } from "react-router-dom";
16
+ import { Check as _, Circle as v, ListTree as ie, Loader2 as y, Plus as b, X as x } from "lucide-react";
17
+ import { Button as S, Card as C, CardContent as w, CardHeader as T, CardTitle as E, Dialog as ae, DialogContent as D, DialogDescription as O, DialogFooter as oe, DialogHeader as se, DialogTitle as ce, Input as k, Label as A, Select as le, SelectContent as ue, SelectItem as de, SelectTrigger as fe, SelectValue as pe, Textarea as me } from "@burdenoff/fe-libs/ui";
17
18
  //#region src/cosmicintersection/pages/runs/RunDetailPage.tsx
18
- var pe = [
19
+ var he = [
19
20
  "INGEST",
20
21
  "CALIBRATE",
21
22
  "TRANSFORM",
22
23
  "ANALYZE",
23
24
  "EXPORT",
24
25
  "NOTIFY"
25
- ], me = {
26
+ ], ge = {
26
27
  QUEUED: ["RUNNING", "CANCELLED"],
27
28
  RUNNING: [
28
29
  "SUCCEEDED",
@@ -32,50 +33,76 @@ var pe = [
32
33
  SUCCEEDED: [],
33
34
  FAILED: [],
34
35
  CANCELLED: []
36
+ }, j = {
37
+ SUCCEEDED: {
38
+ icon: _,
39
+ spin: !1,
40
+ wrap: "border-status-success-border bg-status-success-bg-subtle text-status-success-text"
41
+ },
42
+ RUNNING: {
43
+ icon: y,
44
+ spin: !0,
45
+ wrap: "border-status-warning-border bg-status-warning-bg-subtle text-status-warning-text"
46
+ },
47
+ FAILED: {
48
+ icon: x,
49
+ spin: !1,
50
+ wrap: "border-status-error-border bg-status-error-bg-subtle text-status-error-text"
51
+ },
52
+ QUEUED: {
53
+ icon: v,
54
+ spin: !1,
55
+ wrap: "border-status-info-border bg-status-info-bg-subtle text-status-info-text"
56
+ },
57
+ CANCELLED: {
58
+ icon: x,
59
+ spin: !1,
60
+ wrap: "border-border-default bg-bg-sunken text-text-secondary"
61
+ }
35
62
  };
36
- function O(e) {
63
+ function M(e) {
37
64
  if (!e) return "—";
38
65
  let t = new Date(e);
39
66
  return Number.isNaN(t.getTime()) ? "—" : t.toLocaleString();
40
67
  }
41
- function k(e) {
68
+ function N(e) {
42
69
  if (e == null) return "—";
43
70
  if (e < 1e3) return `${e} ms`;
44
71
  let t = e / 1e3;
45
72
  return t < 60 ? `${t.toFixed(1)} s` : `${Math.floor(t / 60)}m ${Math.round(t % 60)}s`;
46
73
  }
47
- function A({ label: e, children: t }) {
48
- return /* @__PURE__ */ p("div", {
74
+ function P({ label: e, children: t }) {
75
+ return /* @__PURE__ */ h("div", {
49
76
  className: "flex flex-col gap-1 border-b border-border-seam py-3 last:border-0 sm:flex-row sm:items-start sm:gap-4",
50
- children: [/* @__PURE__ */ f("span", {
77
+ children: [/* @__PURE__ */ m("span", {
51
78
  className: "w-40 shrink-0 text-sm font-medium text-text-secondary",
52
79
  children: e
53
- }), /* @__PURE__ */ f("span", {
80
+ }), /* @__PURE__ */ m("span", {
54
81
  className: "min-w-0 text-sm text-text-primary",
55
82
  children: t
56
83
  })]
57
84
  });
58
85
  }
59
- function j({ value: e }) {
60
- return !e || Object.keys(e).length === 0 ? /* @__PURE__ */ f("span", {
86
+ function F({ value: e }) {
87
+ return !e || Object.keys(e).length === 0 ? /* @__PURE__ */ m("span", {
61
88
  className: "text-sm text-text-secondary",
62
89
  children: "—"
63
- }) : /* @__PURE__ */ f("pre", {
90
+ }) : /* @__PURE__ */ m("pre", {
64
91
  className: "overflow-x-auto rounded-card border border-border-default bg-bg-sunken p-3 font-mono text-xs text-text-primary",
65
92
  children: JSON.stringify(e, null, 2)
66
93
  });
67
94
  }
68
- function M() {
69
- let { id: M = "" } = m(), { navigate: N } = e(), { data: P, loading: F, error: I, refetch: L } = r(M), { data: R, loading: he, error: ge, refetch: z } = ee(M), [_e, { loading: ve }] = te(), [ye, { loading: B }] = n(), [be, V] = d(!1), [H, U] = d(""), [W, G] = d("INGEST"), [K, q] = d(""), [J, Y] = d(""), X = P?.cosRun, Z = ie(() => [...R?.cosListRunSteps ?? []].sort((e, t) => e.position - t.position), [R]), xe = async (e) => {
95
+ function I() {
96
+ let { id: _ = "" } = g(), { navigate: v } = e(), { data: y, loading: x, error: I, refetch: L } = r(_), { data: R, loading: _e, error: ve, refetch: z } = i(_), [ye, { loading: be }] = ee(), [xe, { loading: B }] = n(), [Se, V] = p(!1), [H, U] = p(""), [W, G] = p("INGEST"), [K, q] = p(""), [J, Y] = p(""), X = y?.cosRun, Z = re(() => [...R?.cosListRunSteps ?? []].sort((e, t) => e.position - t.position), [R]), Ce = async (e) => {
70
97
  if (!X) return;
71
- let n = await _e({ variables: {
98
+ let n = await ye({ variables: {
72
99
  id: X.id,
73
100
  status: e
74
101
  } });
75
- u(n, n.data?.cosTransitionRun?.id, "Could not update the run") && (t.success("Run updated", `Run #${X.runNumber} moved to ${l(e)}.`), await Promise.all([L(), z()]));
102
+ f(n, n.data?.cosTransitionRun?.id, "Could not update the run") && (t.success("Run updated", `Run #${X.runNumber} moved to ${u(e)}.`), await Promise.all([L(), z()]));
76
103
  }, Q = () => {
77
104
  U(""), G("INGEST"), q(""), Y("");
78
- }, Se = async () => {
105
+ }, we = async () => {
79
106
  if (!X) return;
80
107
  if (!H.trim()) {
81
108
  t.error("Step name is required", "Give the step a name before adding it.");
@@ -87,7 +114,7 @@ function M() {
87
114
  if (typeof t != "object" || !t || Array.isArray(t)) throw Error("Inputs must be a JSON object.");
88
115
  e = t;
89
116
  } catch (e) {
90
- t.error("Invalid inputs JSON", re(e) ?? "Please provide valid JSON.");
117
+ t.error("Invalid inputs JSON", d(e) ?? "Please provide valid JSON.");
91
118
  return;
92
119
  }
93
120
  let n = K.trim() ? Number(K.trim()) : void 0;
@@ -95,229 +122,250 @@ function M() {
95
122
  t.error("Invalid position", "Position must be a non-negative number.");
96
123
  return;
97
124
  }
98
- let r = await ye({ variables: { input: {
125
+ let r = await xe({ variables: { input: {
99
126
  runId: X.id,
100
127
  name: H.trim(),
101
128
  kind: W,
102
129
  inputs: e,
103
130
  position: n
104
131
  } } });
105
- u(r, r.data?.cosAddRunStep?.id, "Could not add the step") && (t.success("Step added", `“${H.trim()}” was added to the run.`), V(!1), Q(), await z());
132
+ f(r, r.data?.cosAddRunStep?.id, "Could not add the step") && (t.success("Step added", `“${H.trim()}” was added to the run.`), V(!1), Q(), await z());
106
133
  };
107
- if (F) return /* @__PURE__ */ f(s, {
134
+ if (x) return /* @__PURE__ */ m(c, {
108
135
  title: "Run",
109
136
  backPath: "runs",
110
- children: /* @__PURE__ */ f(o, { label: "Loading run…" })
137
+ children: /* @__PURE__ */ m(s, { label: "Loading run…" })
111
138
  });
112
- if (I) return /* @__PURE__ */ f(s, {
139
+ if (I) return /* @__PURE__ */ m(c, {
113
140
  title: "Run",
114
141
  backPath: "runs",
115
- children: /* @__PURE__ */ f(a, { onRetry: () => void L() })
142
+ children: /* @__PURE__ */ m(o, { onRetry: () => void L() })
116
143
  });
117
- if (!X) return /* @__PURE__ */ f(s, {
144
+ if (!X) return /* @__PURE__ */ m(c, {
118
145
  title: "Run",
119
146
  backPath: "runs",
120
- children: /* @__PURE__ */ f(i, {
147
+ children: /* @__PURE__ */ m(a, {
121
148
  title: "Run not found",
122
149
  description: "This run may have been removed or you may not have access to it.",
123
- action: /* @__PURE__ */ f(_, {
150
+ action: /* @__PURE__ */ m(S, {
124
151
  type: "button",
125
152
  variant: "outline",
126
- onClick: () => N("runs"),
153
+ onClick: () => v("runs"),
127
154
  children: "Back to runs"
128
155
  })
129
156
  })
130
157
  });
131
- let $ = me[X.status] ?? [];
132
- return /* @__PURE__ */ p(s, {
158
+ let $ = ge[X.status] ?? [];
159
+ return /* @__PURE__ */ h(c, {
133
160
  title: `Run #${X.runNumber}`,
134
161
  description: X.pipeline ? `Pipeline: ${X.pipeline.name}` : void 0,
135
162
  backPath: "runs",
136
- actions: /* @__PURE__ */ p("div", {
163
+ actions: /* @__PURE__ */ h("div", {
137
164
  className: "flex flex-wrap items-center gap-2",
138
- children: [$.map((e) => /* @__PURE__ */ f(_, {
165
+ children: [$.map((e) => /* @__PURE__ */ m(S, {
139
166
  type: "button",
140
167
  variant: e === "CANCELLED" || e === "FAILED" ? "outline" : "default",
141
- onClick: () => void xe(e),
142
- disabled: ve,
143
- children: `Mark ${l(e)}`
144
- }, e)), /* @__PURE__ */ p(_, {
168
+ onClick: () => void Ce(e),
169
+ disabled: be,
170
+ children: `Mark ${u(e)}`
171
+ }, e)), /* @__PURE__ */ h(S, {
145
172
  type: "button",
146
173
  variant: "outline",
147
174
  onClick: () => V(!0),
148
- children: [/* @__PURE__ */ f(g, { className: "size-4" }), "Add step"]
175
+ children: [/* @__PURE__ */ m(b, { className: "size-4" }), "Add step"]
149
176
  })]
150
177
  }),
151
- children: [/* @__PURE__ */ p("div", {
178
+ children: [/* @__PURE__ */ h("div", {
152
179
  className: "space-y-6",
153
180
  children: [
154
- /* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(b, { children: /* @__PURE__ */ f(x, { children: "Overview" }) }), /* @__PURE__ */ p(y, { children: [
155
- /* @__PURE__ */ f(A, {
181
+ /* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(T, { children: /* @__PURE__ */ m(E, { children: "Overview" }) }), /* @__PURE__ */ h(w, { children: [
182
+ /* @__PURE__ */ m(P, {
156
183
  label: "Status",
157
- children: /* @__PURE__ */ f(c, { status: X.status })
184
+ children: /* @__PURE__ */ m(l, { status: X.status })
158
185
  }),
159
- /* @__PURE__ */ f(A, {
186
+ /* @__PURE__ */ m(P, {
160
187
  label: "Pipeline",
161
- children: X.pipeline ? /* @__PURE__ */ f("button", {
188
+ children: X.pipeline ? /* @__PURE__ */ m("button", {
162
189
  type: "button",
163
190
  className: "text-text-primary underline-offset-2 hover:underline",
164
- onClick: () => N(`pipelines/${X.pipelineId}`),
191
+ onClick: () => v(`pipelines/${X.pipelineId}`),
165
192
  children: X.pipeline.name
166
- }) : /* @__PURE__ */ f("span", {
193
+ }) : /* @__PURE__ */ m("span", {
167
194
  className: "font-mono text-xs",
168
195
  children: X.pipelineId
169
196
  })
170
197
  }),
171
- /* @__PURE__ */ f(A, {
198
+ /* @__PURE__ */ m(P, {
172
199
  label: "Dataset",
173
- children: X.datasetId ? /* @__PURE__ */ f("button", {
200
+ children: X.datasetId ? /* @__PURE__ */ m("button", {
174
201
  type: "button",
175
202
  className: "text-text-primary underline-offset-2 hover:underline",
176
- onClick: () => N(`datasets/${X.datasetId}`),
177
- children: /* @__PURE__ */ f("span", {
203
+ onClick: () => v(`datasets/${X.datasetId}`),
204
+ children: /* @__PURE__ */ m("span", {
178
205
  className: "font-mono text-xs",
179
206
  children: X.datasetId
180
207
  })
181
208
  }) : "—"
182
209
  }),
183
- /* @__PURE__ */ f(A, {
210
+ /* @__PURE__ */ m(P, {
184
211
  label: "Triggered by",
185
212
  children: X.triggeredBy || "—"
186
213
  }),
187
- /* @__PURE__ */ f(A, {
214
+ /* @__PURE__ */ m(P, {
188
215
  label: "Started",
189
- children: O(X.startedAt)
216
+ children: M(X.startedAt)
190
217
  }),
191
- /* @__PURE__ */ f(A, {
218
+ /* @__PURE__ */ m(P, {
192
219
  label: "Finished",
193
- children: O(X.finishedAt)
220
+ children: M(X.finishedAt)
194
221
  }),
195
- /* @__PURE__ */ f(A, {
222
+ /* @__PURE__ */ m(P, {
196
223
  label: "Duration",
197
- children: k(X.durationMs)
224
+ children: N(X.durationMs)
198
225
  }),
199
- X.errorMessage ? /* @__PURE__ */ f(A, {
226
+ X.errorMessage ? /* @__PURE__ */ m(P, {
200
227
  label: "Error",
201
- children: /* @__PURE__ */ f("span", {
228
+ children: /* @__PURE__ */ m("span", {
202
229
  className: "text-status-error-text",
203
230
  children: X.errorMessage
204
231
  })
205
232
  }) : null,
206
- $.length === 0 ? /* @__PURE__ */ f(A, {
233
+ $.length === 0 ? /* @__PURE__ */ m(P, {
207
234
  label: "Discuss",
208
- children: /* @__PURE__ */ f(ne, {
235
+ children: /* @__PURE__ */ m(ne, {
209
236
  href: "/conversations",
210
237
  className: "text-text-primary underline-offset-2 hover:underline",
211
238
  children: "Open discussions"
212
239
  })
213
240
  }) : null
214
241
  ] })] }),
215
- /* @__PURE__ */ p("div", {
242
+ /* @__PURE__ */ h("div", {
216
243
  className: "grid grid-cols-1 gap-6 lg:grid-cols-2",
217
- children: [/* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(b, { children: /* @__PURE__ */ f(x, { children: "Parameters" }) }), /* @__PURE__ */ f(y, { children: /* @__PURE__ */ f(j, { value: X.params }) })] }), /* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(b, { children: /* @__PURE__ */ f(x, { children: "Metrics" }) }), /* @__PURE__ */ f(y, { children: /* @__PURE__ */ f(j, { value: X.metrics }) })] })]
244
+ children: [/* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(T, { children: /* @__PURE__ */ m(E, { children: "Parameters" }) }), /* @__PURE__ */ m(w, { children: /* @__PURE__ */ m(F, { value: X.params }) })] }), /* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(T, { children: /* @__PURE__ */ m(E, { children: "Metrics" }) }), /* @__PURE__ */ m(w, { children: /* @__PURE__ */ m(F, { value: X.metrics }) })] })]
218
245
  }),
219
- /* @__PURE__ */ p(v, { children: [/* @__PURE__ */ f(b, { children: /* @__PURE__ */ f(x, { children: "Steps" }) }), /* @__PURE__ */ f(y, { children: he ? /* @__PURE__ */ f(o, {
246
+ /* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(T, { children: /* @__PURE__ */ m(E, { children: "Steps" }) }), /* @__PURE__ */ m(w, { children: _e ? /* @__PURE__ */ m(s, {
220
247
  variant: "rows",
221
248
  rows: 4,
222
249
  label: "Loading steps…"
223
- }) : ge ? /* @__PURE__ */ f(a, {
250
+ }) : ve ? /* @__PURE__ */ m(o, {
224
251
  message: "Could not load steps.",
225
252
  onRetry: () => void z()
226
- }) : Z.length === 0 ? /* @__PURE__ */ f(i, {
227
- icon: h,
253
+ }) : Z.length === 0 ? /* @__PURE__ */ m(a, {
254
+ icon: ie,
228
255
  title: "No steps yet",
229
256
  description: "Add steps to record the ingest, calibration, transform, analyze or export stages of this run.",
230
- action: /* @__PURE__ */ p(_, {
257
+ action: /* @__PURE__ */ h(S, {
231
258
  type: "button",
232
259
  onClick: () => V(!0),
233
- children: [/* @__PURE__ */ f(g, { className: "size-4" }), "Add step"]
260
+ children: [/* @__PURE__ */ m(b, { className: "size-4" }), "Add step"]
234
261
  })
235
- }) : /* @__PURE__ */ f("ol", {
236
- className: "space-y-3",
237
- children: Z.map((e) => /* @__PURE__ */ p("li", {
238
- className: "flex flex-col gap-2 rounded-card border border-border-default bg-bg-elevated p-4 sm:flex-row sm:items-start sm:justify-between",
239
- children: [/* @__PURE__ */ p("div", {
240
- className: "flex min-w-0 items-start gap-3",
241
- children: [/* @__PURE__ */ f("span", {
242
- className: "mt-0.5 flex size-7 shrink-0 items-center justify-center rounded-full bg-bg-sunken text-xs font-semibold tabular-nums text-text-secondary",
243
- children: e.position
244
- }), /* @__PURE__ */ p("div", {
245
- className: "min-w-0",
262
+ }) : /* @__PURE__ */ m("ol", {
263
+ className: "flex flex-col",
264
+ children: Z.map((e, t) => {
265
+ let n = j[e.status] ?? j.QUEUED, r = n.icon, i = t === Z.length - 1;
266
+ return /* @__PURE__ */ h("li", {
267
+ className: "flex gap-4",
268
+ children: [/* @__PURE__ */ h("div", {
269
+ className: "flex flex-col items-center",
270
+ children: [/* @__PURE__ */ m("span", {
271
+ className: `flex size-8 shrink-0 items-center justify-center rounded-full border ${n.wrap}`,
272
+ children: /* @__PURE__ */ m(r, {
273
+ className: `size-4 ${n.spin ? "animate-spin" : ""}`,
274
+ "aria-hidden": "true"
275
+ })
276
+ }), i ? null : /* @__PURE__ */ m("span", {
277
+ className: "w-px flex-1 bg-border-default",
278
+ "aria-hidden": "true"
279
+ })]
280
+ }), /* @__PURE__ */ h("div", {
281
+ className: `min-w-0 flex-1 rounded-card border border-border-default bg-bg-elevated p-4 ${i ? "" : "mb-4"}`,
246
282
  children: [
247
- /* @__PURE__ */ p("div", {
283
+ /* @__PURE__ */ h("div", {
248
284
  className: "flex flex-wrap items-center gap-2",
249
- children: [/* @__PURE__ */ f("span", {
250
- className: "font-medium text-text-primary",
251
- children: e.name
252
- }), /* @__PURE__ */ f(c, {
253
- status: e.kind,
254
- tone: "neutral"
255
- })]
285
+ children: [
286
+ /* @__PURE__ */ h("span", {
287
+ className: "text-xs font-semibold tabular-nums text-text-secondary",
288
+ children: [t + 1, "."]
289
+ }),
290
+ /* @__PURE__ */ m("span", {
291
+ className: "min-w-0 truncate font-medium text-text-primary",
292
+ children: e.name
293
+ }),
294
+ /* @__PURE__ */ m(l, {
295
+ status: e.kind,
296
+ tone: "neutral"
297
+ }),
298
+ /* @__PURE__ */ m(l, {
299
+ status: e.status,
300
+ className: "ml-auto"
301
+ })
302
+ ]
256
303
  }),
257
- e.errorMessage ? /* @__PURE__ */ f("p", {
258
- className: "mt-1 text-xs text-status-error-text",
304
+ e.errorMessage ? /* @__PURE__ */ m("p", {
305
+ className: "mt-1.5 text-xs text-status-error-text",
259
306
  children: e.errorMessage
260
307
  }) : null,
261
- /* @__PURE__ */ p("p", {
262
- className: "mt-1 text-xs text-text-secondary",
263
- children: ["Duration: ", k(e.durationMs)]
308
+ /* @__PURE__ */ h("p", {
309
+ className: "mt-1.5 text-xs text-text-secondary",
310
+ children: ["Duration: ", N(e.durationMs)]
264
311
  })
265
312
  ]
266
313
  })]
267
- }), /* @__PURE__ */ f("div", {
268
- className: "shrink-0",
269
- children: /* @__PURE__ */ f(c, { status: e.status })
270
- })]
271
- }, e.id))
314
+ }, e.id);
315
+ })
316
+ }) })] }),
317
+ /* @__PURE__ */ h(C, { children: [/* @__PURE__ */ m(T, { children: /* @__PURE__ */ m(E, { children: "Activity" }) }), /* @__PURE__ */ m(w, { children: /* @__PURE__ */ m(te, {
318
+ resourceId: X.id,
319
+ resourceType: "cosmicintersection-run"
272
320
  }) })] })
273
321
  ]
274
- }), /* @__PURE__ */ f(S, {
275
- open: be,
322
+ }), /* @__PURE__ */ m(ae, {
323
+ open: Se,
276
324
  onOpenChange: (e) => {
277
325
  B || (V(e), e || Q());
278
326
  },
279
- children: /* @__PURE__ */ p(ae, { children: [
280
- /* @__PURE__ */ p(se, { children: [/* @__PURE__ */ f(ce, { children: "Add step" }), /* @__PURE__ */ f(oe, { children: "Record a stage of this run — its kind, order and optional inputs." })] }),
281
- /* @__PURE__ */ p("div", {
327
+ children: /* @__PURE__ */ h(D, { children: [
328
+ /* @__PURE__ */ h(se, { children: [/* @__PURE__ */ m(ce, { children: "Add step" }), /* @__PURE__ */ m(O, { children: "Record a stage of this run — its kind, order and optional inputs." })] }),
329
+ /* @__PURE__ */ h("div", {
282
330
  className: "space-y-4",
283
331
  children: [
284
- /* @__PURE__ */ p("div", {
332
+ /* @__PURE__ */ h("div", {
285
333
  className: "space-y-1",
286
- children: [/* @__PURE__ */ f(T, {
334
+ children: [/* @__PURE__ */ m(A, {
287
335
  htmlFor: "step-name",
288
336
  children: "Name"
289
- }), /* @__PURE__ */ f(w, {
337
+ }), /* @__PURE__ */ m(k, {
290
338
  id: "step-name",
291
339
  value: H,
292
340
  onChange: (e) => U(e.target.value),
293
341
  placeholder: "e.g. Calibrate flat fields"
294
342
  })]
295
343
  }),
296
- /* @__PURE__ */ p("div", {
344
+ /* @__PURE__ */ h("div", {
297
345
  className: "grid grid-cols-1 gap-4 sm:grid-cols-2",
298
- children: [/* @__PURE__ */ p("div", {
346
+ children: [/* @__PURE__ */ h("div", {
299
347
  className: "space-y-1",
300
- children: [/* @__PURE__ */ f(T, {
348
+ children: [/* @__PURE__ */ m(A, {
301
349
  htmlFor: "step-kind",
302
350
  children: "Kind"
303
- }), /* @__PURE__ */ p(E, {
351
+ }), /* @__PURE__ */ h(le, {
304
352
  value: W,
305
353
  onValueChange: (e) => G(e),
306
- children: [/* @__PURE__ */ f(ue, {
354
+ children: [/* @__PURE__ */ m(fe, {
307
355
  id: "step-kind",
308
356
  "aria-label": "Step kind",
309
- children: /* @__PURE__ */ f(de, {})
310
- }), /* @__PURE__ */ f(D, { children: pe.map((e) => /* @__PURE__ */ f(le, {
357
+ children: /* @__PURE__ */ m(pe, {})
358
+ }), /* @__PURE__ */ m(ue, { children: he.map((e) => /* @__PURE__ */ m(de, {
311
359
  value: e,
312
- children: l(e)
360
+ children: u(e)
313
361
  }, e)) })]
314
362
  })]
315
- }), /* @__PURE__ */ p("div", {
363
+ }), /* @__PURE__ */ h("div", {
316
364
  className: "space-y-1",
317
- children: [/* @__PURE__ */ f(T, {
365
+ children: [/* @__PURE__ */ m(A, {
318
366
  htmlFor: "step-position",
319
367
  children: "Position"
320
- }), /* @__PURE__ */ f(w, {
368
+ }), /* @__PURE__ */ m(k, {
321
369
  id: "step-position",
322
370
  type: "number",
323
371
  min: "0",
@@ -327,14 +375,14 @@ function M() {
327
375
  })]
328
376
  })]
329
377
  }),
330
- /* @__PURE__ */ p("div", {
378
+ /* @__PURE__ */ h("div", {
331
379
  className: "space-y-1",
332
380
  children: [
333
- /* @__PURE__ */ f(T, {
381
+ /* @__PURE__ */ m(A, {
334
382
  htmlFor: "step-inputs",
335
383
  children: "Inputs (JSON)"
336
384
  }),
337
- /* @__PURE__ */ f(fe, {
385
+ /* @__PURE__ */ m(me, {
338
386
  id: "step-inputs",
339
387
  value: J,
340
388
  onChange: (e) => Y(e.target.value),
@@ -343,7 +391,7 @@ function M() {
343
391
  className: "font-mono text-xs",
344
392
  placeholder: "{\n \"source\": \"raw-frames\"\n}"
345
393
  }),
346
- /* @__PURE__ */ f("p", {
394
+ /* @__PURE__ */ m("p", {
347
395
  className: "text-xs text-text-secondary",
348
396
  children: "Optional. A JSON object of step inputs."
349
397
  })
@@ -351,7 +399,7 @@ function M() {
351
399
  })
352
400
  ]
353
401
  }),
354
- /* @__PURE__ */ p(C, { children: [/* @__PURE__ */ f(_, {
402
+ /* @__PURE__ */ h(oe, { children: [/* @__PURE__ */ m(S, {
355
403
  type: "button",
356
404
  variant: "outline",
357
405
  onClick: () => {
@@ -359,17 +407,17 @@ function M() {
359
407
  },
360
408
  disabled: B,
361
409
  children: "Cancel"
362
- }), /* @__PURE__ */ p(_, {
410
+ }), /* @__PURE__ */ h(S, {
363
411
  type: "button",
364
- onClick: () => void Se(),
412
+ onClick: () => void we(),
365
413
  disabled: B,
366
- children: [/* @__PURE__ */ f(g, { className: "size-4" }), B ? "Adding…" : "Add step"]
414
+ children: [/* @__PURE__ */ m(b, { className: "size-4" }), B ? "Adding…" : "Add step"]
367
415
  })] })
368
416
  ] })
369
417
  })]
370
418
  });
371
419
  }
372
420
  //#endregion
373
- export { M as default };
421
+ export { I as default };
374
422
 
375
423
  //# sourceMappingURL=RunDetailPage.js.map