@burdenoff/microfe-cosmicintersection 2026.704.1 → 2026.704.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.
Files changed (36) hide show
  1. package/dist/cosmicintersection/CosmicIntersectionRoutes.js +31 -23
  2. package/dist/cosmicintersection/CosmicIntersectionRoutes.js.map +1 -1
  3. package/dist/cosmicintersection/api/cosmicApi.js +131 -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/index.js +5 -3
  10. package/dist/cosmicintersection/pages/access/AccessPage.js +24 -17
  11. package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
  12. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +12 -12
  13. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js +109 -96
  14. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js.map +1 -1
  15. package/dist/cosmicintersection/pages/collections/CollectionFormPage.js +87 -61
  16. package/dist/cosmicintersection/pages/collections/CollectionFormPage.js.map +1 -1
  17. package/dist/cosmicintersection/pages/collections/CollectionsPage.js +51 -42
  18. package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
  19. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +5 -3
  20. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
  21. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js +172 -152
  22. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js.map +1 -1
  23. package/dist/cosmicintersection/pages/datasets/DatasetFormPage.js +7 -7
  24. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js +205 -196
  25. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js.map +1 -1
  26. package/dist/cosmicintersection/pages/releases/ReleasesPage.js +211 -161
  27. package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
  28. package/dist/cosmicintersection/pages/runs/RunDetailPage.js +113 -108
  29. package/dist/cosmicintersection/pages/runs/RunDetailPage.js.map +1 -1
  30. package/dist/cosmicintersection/pages/runs/RunsPage.js +86 -101
  31. package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
  32. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js +205 -0
  33. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js.map +1 -0
  34. package/dist/cosmicintersection/pages/sources/SourcesPage.js +110 -104
  35. package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
  36. package/package.json +1 -1
@@ -1,30 +1,31 @@
1
1
  import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
2
2
  import { notify as t } from "../../lib/toast.js";
3
- import { useCosPublishReleaseMutation as n, useCosReleasesQuery as r } from "../../api/cosmicApi.js";
4
- import i from "../../components/ActionMenu.js";
5
- import ee from "../../components/EmptyState.js";
6
- import te from "../../components/ErrorState.js";
7
- import ne from "../../components/LoadingState.js";
8
- import re from "../../components/PageLayout.js";
9
- import a, { usePagination as o } from "../../components/Pagination.js";
10
- import s from "../../components/SafeLink.js";
11
- import c, { formatEnumLabel as l } from "../../components/StatusBadge.js";
3
+ import { useCosDatasetsQuery as ee, useCosNotebooksQuery as te, useCosPublishReleaseMutation as ne, useCosReleasesQuery as re } from "../../api/cosmicApi.js";
4
+ import ie from "../../components/ActionMenu.js";
5
+ import ae from "../../components/EmptyState.js";
6
+ import oe from "../../components/ErrorState.js";
7
+ import n from "../../components/LoadingState.js";
8
+ import r from "../../components/SafeLink.js";
9
+ import se from "../../components/DiscussionPanel.js";
10
+ import ce from "../../components/PageLayout.js";
11
+ import le, { usePagination as ue } from "../../components/Pagination.js";
12
+ import i, { formatEnumLabel as de } from "../../components/StatusBadge.js";
12
13
  import "../../components/index.js";
13
- import { useMemo as u, useState as d } from "react";
14
- import { Fragment as f, jsx as p, jsxs as m } from "react/jsx-runtime";
15
- import { BookOpen as ie, ExternalLink as h, Plus as ae, Rocket as g } from "lucide-react";
16
- import { Badge as _, Button as v, Dialog as y, DialogClose as b, DialogContent as x, DialogDescription as S, DialogFooter as C, DialogHeader as w, DialogTitle as T, Input as oe, Label as se, Select as ce, SelectContent as le, SelectItem as E, SelectTrigger as ue, SelectValue as de, Table as D, TableBody as fe, TableCell as O, TableHead as k, TableHeader as pe, TableRow as A } from "@burdenoff/fe-libs/ui";
14
+ import { useMemo as a, useState as o } from "react";
15
+ import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
16
+ import { BookOpen as u, Database as d, ExternalLink as f, NotebookPen as p, Plus as m, Rocket as h } from "lucide-react";
17
+ import { Button as g, Dialog as _, DialogClose as fe, DialogContent as v, DialogDescription as y, DialogFooter as b, DialogHeader as x, DialogTitle as S, Input as pe, Label as me, Select as he, SelectContent as ge, SelectItem as C, SelectTrigger as _e, SelectValue as ve, Table as ye, TableBody as be, TableCell as w, TableHead as T, TableHeader as E, TableRow as D } from "@burdenoff/fe-libs/ui";
17
18
  //#region src/cosmicintersection/pages/releases/ReleasesPage.tsx
18
- var j = "ALL", M = [
19
+ var O = "ALL", k = [
19
20
  "DRAFT",
20
21
  "UNDER_REVIEW",
21
22
  "PUBLISHED",
22
23
  "RETRACTED"
23
24
  ];
24
- function N(e) {
25
+ function A(e) {
25
26
  return e === "DRAFT" || e === "UNDER_REVIEW";
26
27
  }
27
- function P(e) {
28
+ function j(e) {
28
29
  if (!e) return "—";
29
30
  let t = new Date(e);
30
31
  return Number.isNaN(t.getTime()) ? "—" : t.toLocaleDateString(void 0, {
@@ -33,283 +34,332 @@ function P(e) {
33
34
  day: "numeric"
34
35
  });
35
36
  }
36
- function F(e) {
37
+ function M(e) {
37
38
  let t = e.trim();
38
39
  return /^https?:\/\//i.test(t) ? t : `https://doi.org/${t.replace(/^doi:/i, "")}`;
39
40
  }
40
- function I() {
41
- let { navigate: I } = e(), [L, R] = d(j), z = o({
41
+ function N() {
42
+ let { navigate: N } = e(), [P, xe] = o(O), F = ue({
42
43
  pageSize: 20,
43
- resetKey: L
44
- }), { data: B, loading: V, error: H, refetch: U } = r({
45
- status: L === j ? void 0 : L,
44
+ resetKey: P
45
+ }), { data: I, loading: L, error: R, refetch: z } = re({
46
+ status: P === O ? void 0 : P,
46
47
  pagination: {
47
- limit: z.limit,
48
- offset: z.offset
48
+ limit: F.limit,
49
+ offset: F.offset
49
50
  }
50
- }), [me, { loading: W }] = n(), G = u(() => B?.cosListReleases.items ?? [], [B]), he = B?.cosListReleases.pageInfo, [K, q] = d(null), [J, Y] = d(null), [X, Z] = d(""), Q = (e) => {
51
+ }), [Se, { loading: B }] = ne(), V = a(() => I?.cosListReleases.items ?? [], [I]), Ce = I?.cosListReleases.pageInfo, H = ee({ pagination: {
52
+ limit: 100,
53
+ offset: 0
54
+ } }), U = te({ pagination: {
55
+ limit: 100,
56
+ offset: 0
57
+ } }), we = a(() => {
58
+ let e = /* @__PURE__ */ new Map();
59
+ for (let t of H.data?.cosListDatasets.items ?? []) e.set(t.id, t.name);
60
+ return e;
61
+ }, [H.data]), W = a(() => {
62
+ let e = /* @__PURE__ */ new Map();
63
+ for (let t of U.data?.cosListNotebooks.items ?? []) e.set(t.id, t.title);
64
+ return e;
65
+ }, [U.data]), [G, K] = o(null), q = (e) => {
66
+ K(null), N(e);
67
+ }, [J, Y] = o(null), [X, Z] = o(""), Q = (e) => {
51
68
  Z(e.doi ?? ""), Y(e);
52
- }, ge = async () => {
69
+ }, Te = async () => {
53
70
  if (!J) return;
54
71
  let e = X.trim();
55
- (await me({ variables: {
72
+ (await Se({ variables: {
56
73
  id: J.id,
57
74
  doi: e || void 0
58
- } })).data?.cosPublishRelease?.id && (t.success("Release published", `“${J.title}” is now public.`), Y(null), Z(""), await U());
59
- }, $ = /* @__PURE__ */ m(v, {
75
+ } })).data?.cosPublishRelease?.id && (t.success("Release published", `“${J.title}” is now public.`), Y(null), Z(""), await z());
76
+ }, $ = /* @__PURE__ */ l(g, {
60
77
  type: "button",
61
- onClick: () => I("releases/create"),
62
- children: [/* @__PURE__ */ p(ae, { className: "size-4" }), "New release"]
78
+ onClick: () => N("releases/create"),
79
+ children: [/* @__PURE__ */ c(m, { className: "size-4" }), "New release"]
63
80
  });
64
- return /* @__PURE__ */ m(re, {
81
+ return /* @__PURE__ */ l(ce, {
65
82
  title: "Releases",
66
83
  description: "Citable, versioned publications that bundle datasets and notebooks for the community.",
67
84
  actions: $,
68
85
  children: [
69
- /* @__PURE__ */ m("div", {
86
+ /* @__PURE__ */ l("div", {
70
87
  className: "space-y-4",
71
- children: [/* @__PURE__ */ p("div", {
88
+ children: [/* @__PURE__ */ c("div", {
72
89
  className: "flex flex-wrap items-center gap-3",
73
- children: /* @__PURE__ */ p("div", {
90
+ children: /* @__PURE__ */ c("div", {
74
91
  className: "w-full max-w-[14rem]",
75
- children: /* @__PURE__ */ m(ce, {
76
- value: L,
77
- onValueChange: R,
78
- children: [/* @__PURE__ */ p(ue, {
92
+ children: /* @__PURE__ */ l(he, {
93
+ value: P,
94
+ onValueChange: xe,
95
+ children: [/* @__PURE__ */ c(_e, {
79
96
  "aria-label": "Filter by status",
80
- children: /* @__PURE__ */ p(de, { placeholder: "All statuses" })
81
- }), /* @__PURE__ */ m(le, { children: [/* @__PURE__ */ p(E, {
82
- value: j,
97
+ children: /* @__PURE__ */ c(ve, { placeholder: "All statuses" })
98
+ }), /* @__PURE__ */ l(ge, { children: [/* @__PURE__ */ c(C, {
99
+ value: O,
83
100
  children: "All statuses"
84
- }), M.map((e) => /* @__PURE__ */ p(E, {
101
+ }), k.map((e) => /* @__PURE__ */ c(C, {
85
102
  value: e,
86
- children: l(e)
103
+ children: de(e)
87
104
  }, e))] })]
88
105
  })
89
106
  })
90
107
  }), (() => {
91
- if (V) return /* @__PURE__ */ p(ne, {
108
+ if (L) return /* @__PURE__ */ c(n, {
92
109
  variant: "rows",
93
110
  rows: 6,
94
111
  label: "Loading releases…"
95
112
  });
96
- if (H) return /* @__PURE__ */ p(te, {
97
- message: H.message,
98
- onRetry: () => void U()
113
+ if (R) return /* @__PURE__ */ c(oe, {
114
+ message: R.message,
115
+ onRetry: () => void z()
99
116
  });
100
- if (G.length === 0) {
101
- let e = L !== j;
102
- return /* @__PURE__ */ p(ee, {
103
- icon: g,
117
+ if (V.length === 0) {
118
+ let e = P !== O;
119
+ return /* @__PURE__ */ c(ae, {
120
+ icon: h,
104
121
  title: e ? "No releases match this filter" : "No releases yet",
105
122
  description: e ? "Try clearing the status filter to see more releases." : "Package datasets and notebooks into a citable, versioned release for publication.",
106
123
  action: e ? void 0 : $
107
124
  });
108
125
  }
109
- return /* @__PURE__ */ m(f, { children: [/* @__PURE__ */ p("div", {
126
+ return /* @__PURE__ */ l(s, { children: [/* @__PURE__ */ c("div", {
110
127
  className: "overflow-x-auto rounded-card border border-border-default bg-bg-elevated",
111
- children: /* @__PURE__ */ m(D, { children: [/* @__PURE__ */ p(pe, { children: /* @__PURE__ */ m(A, { children: [
112
- /* @__PURE__ */ p(k, { children: "Title" }),
113
- /* @__PURE__ */ p(k, { children: "Version" }),
114
- /* @__PURE__ */ p(k, { children: "Status" }),
115
- /* @__PURE__ */ p(k, { children: "DOI" }),
116
- /* @__PURE__ */ p(k, { children: "Authors" }),
117
- /* @__PURE__ */ p(k, { children: "Published" }),
118
- /* @__PURE__ */ p(k, { children: "License" }),
119
- /* @__PURE__ */ p(k, {
128
+ children: /* @__PURE__ */ l(ye, { children: [/* @__PURE__ */ c(E, { children: /* @__PURE__ */ l(D, { children: [
129
+ /* @__PURE__ */ c(T, { children: "Title" }),
130
+ /* @__PURE__ */ c(T, { children: "Version" }),
131
+ /* @__PURE__ */ c(T, { children: "Status" }),
132
+ /* @__PURE__ */ c(T, { children: "DOI" }),
133
+ /* @__PURE__ */ c(T, { children: "Authors" }),
134
+ /* @__PURE__ */ c(T, { children: "Published" }),
135
+ /* @__PURE__ */ c(T, { children: "License" }),
136
+ /* @__PURE__ */ c(T, {
120
137
  className: "text-right",
121
138
  children: "Actions"
122
139
  })
123
- ] }) }), /* @__PURE__ */ p(fe, { children: G.map((e) => /* @__PURE__ */ m(A, { children: [
124
- /* @__PURE__ */ p(O, { children: /* @__PURE__ */ p("button", {
140
+ ] }) }), /* @__PURE__ */ c(be, { children: V.map((e) => /* @__PURE__ */ l(D, { children: [
141
+ /* @__PURE__ */ c(w, { children: /* @__PURE__ */ c("button", {
125
142
  type: "button",
126
- onClick: () => q(e),
143
+ onClick: () => K(e),
127
144
  className: "text-left font-medium text-text-primary underline-offset-2 hover:underline focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-border-focus",
128
145
  children: e.title
129
146
  }) }),
130
- /* @__PURE__ */ p(O, {
147
+ /* @__PURE__ */ c(w, {
131
148
  className: "whitespace-nowrap text-sm text-text-secondary",
132
149
  children: e.version || "—"
133
150
  }),
134
- /* @__PURE__ */ p(O, { children: /* @__PURE__ */ p(c, { status: e.status }) }),
135
- /* @__PURE__ */ p(O, {
151
+ /* @__PURE__ */ c(w, { children: /* @__PURE__ */ c(i, { status: e.status }) }),
152
+ /* @__PURE__ */ c(w, {
136
153
  className: "max-w-[14rem]",
137
- children: e.doi ? /* @__PURE__ */ m(s, {
138
- href: F(e.doi),
154
+ children: e.doi ? /* @__PURE__ */ l(r, {
155
+ href: M(e.doi),
139
156
  className: "inline-flex items-center gap-1 truncate text-sm text-text-primary underline-offset-2 hover:underline",
140
157
  fallbackClassName: "block truncate text-sm text-text-secondary",
141
- children: [/* @__PURE__ */ p("span", {
158
+ children: [/* @__PURE__ */ c("span", {
142
159
  className: "truncate",
143
160
  children: e.doi
144
- }), /* @__PURE__ */ p(h, {
161
+ }), /* @__PURE__ */ c(f, {
145
162
  className: "size-3.5 shrink-0",
146
163
  "aria-hidden": "true"
147
164
  })]
148
- }) : /* @__PURE__ */ p("span", {
165
+ }) : /* @__PURE__ */ c("span", {
149
166
  className: "text-sm text-text-secondary",
150
167
  children: "—"
151
168
  })
152
169
  }),
153
- /* @__PURE__ */ p(O, {
170
+ /* @__PURE__ */ c(w, {
154
171
  className: "max-w-[14rem]",
155
- children: e.authors.length === 0 ? /* @__PURE__ */ p("span", {
172
+ children: e.authors.length === 0 ? /* @__PURE__ */ c("span", {
156
173
  className: "text-sm text-text-secondary",
157
174
  children: "—"
158
- }) : /* @__PURE__ */ p("span", {
175
+ }) : /* @__PURE__ */ c("span", {
159
176
  className: "line-clamp-1 text-sm text-text-secondary",
160
177
  children: e.authors.join(", ")
161
178
  })
162
179
  }),
163
- /* @__PURE__ */ p(O, {
180
+ /* @__PURE__ */ c(w, {
164
181
  className: "whitespace-nowrap text-sm text-text-secondary",
165
- children: P(e.publishedAt)
182
+ children: j(e.publishedAt)
166
183
  }),
167
- /* @__PURE__ */ p(O, {
184
+ /* @__PURE__ */ c(w, {
168
185
  className: "whitespace-nowrap text-sm text-text-secondary",
169
186
  children: e.license || "—"
170
187
  }),
171
- /* @__PURE__ */ p(O, {
188
+ /* @__PURE__ */ c(w, {
172
189
  className: "text-right",
173
- children: /* @__PURE__ */ p(i, {
190
+ children: /* @__PURE__ */ c(ie, {
174
191
  ariaLabel: `Actions for ${e.title}`,
175
- onView: () => q(e),
176
- extraItems: N(e.status) ? [{
192
+ onView: () => K(e),
193
+ extraItems: A(e.status) ? [{
177
194
  key: "publish",
178
195
  label: "Publish",
179
- icon: g,
196
+ icon: h,
180
197
  onSelect: () => Q(e)
181
198
  }] : []
182
199
  })
183
200
  })
184
201
  ] }, e.id)) })] })
185
- }), /* @__PURE__ */ p(a, {
186
- offset: z.offset,
187
- limit: z.limit,
188
- loadedCount: G.length,
189
- hasMore: he?.hasMore ?? !1,
190
- onPrev: z.prevPage,
191
- onNext: z.nextPage,
202
+ }), /* @__PURE__ */ c(le, {
203
+ offset: F.offset,
204
+ limit: F.limit,
205
+ loadedCount: V.length,
206
+ hasMore: Ce?.hasMore ?? !1,
207
+ onPrev: F.prevPage,
208
+ onNext: F.nextPage,
192
209
  itemLabel: "releases",
193
- loading: V
210
+ loading: L
194
211
  })] });
195
212
  })()]
196
213
  }),
197
- /* @__PURE__ */ p(y, {
198
- open: K !== null,
199
- onOpenChange: (e) => e ? void 0 : q(null),
200
- children: /* @__PURE__ */ p(x, {
201
- className: "max-w-lg",
202
- children: K ? /* @__PURE__ */ m(f, { children: [
203
- /* @__PURE__ */ m(w, { children: [/* @__PURE__ */ m(T, {
214
+ /* @__PURE__ */ c(_, {
215
+ open: G !== null,
216
+ onOpenChange: (e) => e ? void 0 : K(null),
217
+ children: /* @__PURE__ */ c(v, {
218
+ className: "max-h-[85vh] max-w-lg overflow-y-auto",
219
+ children: G ? /* @__PURE__ */ l(s, { children: [
220
+ /* @__PURE__ */ l(x, { children: [/* @__PURE__ */ l(S, {
204
221
  className: "flex items-center gap-2",
205
- children: [/* @__PURE__ */ p(ie, {
222
+ children: [/* @__PURE__ */ c(u, {
206
223
  className: "size-5 text-text-secondary",
207
224
  "aria-hidden": "true"
208
- }), K.title]
209
- }), /* @__PURE__ */ m(S, { children: [
225
+ }), G.title]
226
+ }), /* @__PURE__ */ l(y, { children: [
210
227
  "Version ",
211
- K.version || "—",
228
+ G.version || "—",
212
229
  " · ",
213
- /* @__PURE__ */ p(c, { status: K.status })
230
+ /* @__PURE__ */ c(i, { status: G.status })
214
231
  ] })] }),
215
- /* @__PURE__ */ m("div", {
232
+ /* @__PURE__ */ l("div", {
216
233
  className: "space-y-4 text-sm",
217
234
  children: [
218
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
235
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
219
236
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
220
237
  children: "Abstract"
221
- }), /* @__PURE__ */ p("p", {
238
+ }), /* @__PURE__ */ c("p", {
222
239
  className: "mt-1 whitespace-pre-wrap text-text-primary",
223
- children: K.abstract?.trim() || "No abstract provided."
240
+ children: G.abstract?.trim() || "No abstract provided."
224
241
  })] }),
225
- /* @__PURE__ */ m("div", {
242
+ /* @__PURE__ */ l("div", {
226
243
  className: "grid grid-cols-2 gap-4",
227
244
  children: [
228
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
245
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
229
246
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
230
247
  children: "Authors"
231
- }), /* @__PURE__ */ p("p", {
248
+ }), /* @__PURE__ */ c("p", {
232
249
  className: "mt-1 text-text-primary",
233
- children: K.authors.length ? K.authors.join(", ") : "—"
250
+ children: G.authors.length ? G.authors.join(", ") : "—"
234
251
  })] }),
235
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
252
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
236
253
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
237
254
  children: "License"
238
- }), /* @__PURE__ */ p("p", {
255
+ }), /* @__PURE__ */ c("p", {
239
256
  className: "mt-1 text-text-primary",
240
- children: K.license || "—"
257
+ children: G.license || "—"
241
258
  })] }),
242
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
259
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
243
260
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
244
261
  children: "Published"
245
- }), /* @__PURE__ */ p("p", {
262
+ }), /* @__PURE__ */ c("p", {
246
263
  className: "mt-1 text-text-primary",
247
- children: P(K.publishedAt)
264
+ children: j(G.publishedAt)
248
265
  })] }),
249
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
266
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
250
267
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
251
268
  children: "DOI"
252
- }), /* @__PURE__ */ p("p", {
269
+ }), /* @__PURE__ */ c("p", {
253
270
  className: "mt-1",
254
- children: K.doi ? /* @__PURE__ */ m(s, {
255
- href: F(K.doi),
271
+ children: G.doi ? /* @__PURE__ */ l(r, {
272
+ href: M(G.doi),
256
273
  className: "inline-flex items-center gap-1 text-text-primary underline-offset-2 hover:underline",
257
274
  fallbackClassName: "text-text-secondary",
258
- children: [K.doi, /* @__PURE__ */ p(h, {
275
+ children: [G.doi, /* @__PURE__ */ c(f, {
259
276
  className: "size-3.5",
260
277
  "aria-hidden": "true"
261
278
  })]
262
- }) : /* @__PURE__ */ p("span", {
279
+ }) : /* @__PURE__ */ c("span", {
263
280
  className: "text-text-secondary",
264
281
  children: "Not assigned"
265
282
  })
266
283
  })] })
267
284
  ]
268
285
  }),
269
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ m("p", {
286
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ l("p", {
270
287
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
271
288
  children: [
272
289
  "Datasets (",
273
- K.datasetIds.length,
290
+ G.datasetIds.length,
274
291
  ")"
275
292
  ]
276
- }), /* @__PURE__ */ p("div", {
277
- className: "mt-1 flex flex-wrap gap-1",
278
- children: K.datasetIds.length === 0 ? /* @__PURE__ */ p("span", {
293
+ }), /* @__PURE__ */ c("div", {
294
+ className: "mt-1 flex flex-wrap gap-1.5",
295
+ children: G.datasetIds.length === 0 ? /* @__PURE__ */ c("span", {
279
296
  className: "text-text-secondary",
280
297
  children: "None linked."
281
- }) : K.datasetIds.map((e) => /* @__PURE__ */ p(_, {
282
- variant: "outline",
283
- className: "font-mono text-xs",
284
- children: e
285
- }, e))
298
+ }) : G.datasetIds.map((e) => {
299
+ let t = we.get(e);
300
+ return /* @__PURE__ */ l(g, {
301
+ type: "button",
302
+ variant: "outline",
303
+ size: "sm",
304
+ className: "h-auto gap-1 px-2 py-1",
305
+ onClick: () => q(`datasets/${e}`),
306
+ children: [/* @__PURE__ */ c(d, {
307
+ className: "size-3.5",
308
+ "aria-hidden": "true"
309
+ }), /* @__PURE__ */ c("span", {
310
+ className: t ? "" : "font-mono text-xs",
311
+ children: t ?? e
312
+ })]
313
+ }, e);
314
+ })
286
315
  })] }),
287
- /* @__PURE__ */ m("div", { children: [/* @__PURE__ */ p("p", {
316
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
288
317
  className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
289
318
  children: "Notebook"
290
- }), /* @__PURE__ */ p("p", {
319
+ }), /* @__PURE__ */ c("div", {
291
320
  className: "mt-1",
292
- children: K.notebookId ? /* @__PURE__ */ p(_, {
321
+ children: G.notebookId ? /* @__PURE__ */ l(g, {
322
+ type: "button",
293
323
  variant: "outline",
294
- className: "font-mono text-xs",
295
- children: K.notebookId
296
- }) : /* @__PURE__ */ p("span", {
324
+ size: "sm",
325
+ className: "h-auto gap-1 px-2 py-1",
326
+ onClick: () => q(`notebooks/${G.notebookId}`),
327
+ children: [/* @__PURE__ */ c(p, {
328
+ className: "size-3.5",
329
+ "aria-hidden": "true"
330
+ }), /* @__PURE__ */ c("span", {
331
+ className: W.get(G.notebookId) ? "" : "font-mono text-xs",
332
+ children: W.get(G.notebookId) ?? G.notebookId
333
+ })]
334
+ }) : /* @__PURE__ */ c("span", {
297
335
  className: "text-text-secondary",
298
336
  children: "None linked."
299
337
  })
338
+ })] }),
339
+ /* @__PURE__ */ l("div", { children: [/* @__PURE__ */ c("p", {
340
+ className: "text-xs font-medium uppercase tracking-wide text-text-secondary",
341
+ children: "Discussion"
342
+ }), /* @__PURE__ */ c("div", {
343
+ className: "mt-2",
344
+ children: /* @__PURE__ */ c(se, {
345
+ entityType: "cosmicintersection-release",
346
+ entityId: G.id,
347
+ title: G.title,
348
+ widgetKey: "release-discussion"
349
+ })
300
350
  })] })
301
351
  ]
302
352
  }),
303
- /* @__PURE__ */ m(C, { children: [N(K.status) ? /* @__PURE__ */ m(v, {
353
+ /* @__PURE__ */ l(b, { children: [A(G.status) ? /* @__PURE__ */ l(g, {
304
354
  type: "button",
305
355
  onClick: () => {
306
- let e = K;
307
- q(null), Q(e);
356
+ let e = G;
357
+ K(null), Q(e);
308
358
  },
309
- children: [/* @__PURE__ */ p(g, { className: "size-4" }), "Publish"]
310
- }) : null, /* @__PURE__ */ p(b, {
359
+ children: [/* @__PURE__ */ c(h, { className: "size-4" }), "Publish"]
360
+ }) : null, /* @__PURE__ */ c(fe, {
311
361
  asChild: !0,
312
- children: /* @__PURE__ */ p(v, {
362
+ children: /* @__PURE__ */ c(g, {
313
363
  type: "button",
314
364
  variant: "outline",
315
365
  children: "Close"
@@ -318,43 +368,43 @@ function I() {
318
368
  ] }) : null
319
369
  })
320
370
  }),
321
- /* @__PURE__ */ p(y, {
371
+ /* @__PURE__ */ c(_, {
322
372
  open: J !== null,
323
- onOpenChange: (e) => e || W ? void 0 : Y(null),
324
- children: /* @__PURE__ */ m(x, {
373
+ onOpenChange: (e) => e || B ? void 0 : Y(null),
374
+ children: /* @__PURE__ */ l(v, {
325
375
  className: "max-w-md",
326
376
  children: [
327
- /* @__PURE__ */ m(w, { children: [/* @__PURE__ */ p(T, { children: "Publish release" }), /* @__PURE__ */ p(S, { children: J ? `Publish “${J.title}” to make it publicly citable. You can attach a DOI now or later.` : "" })] }),
328
- /* @__PURE__ */ m("div", {
377
+ /* @__PURE__ */ l(x, { children: [/* @__PURE__ */ c(S, { children: "Publish release" }), /* @__PURE__ */ c(y, { children: J ? `Publish “${J.title}” to make it publicly citable. You can attach a DOI now or later.` : "" })] }),
378
+ /* @__PURE__ */ l("div", {
329
379
  className: "space-y-2",
330
380
  children: [
331
- /* @__PURE__ */ p(se, {
381
+ /* @__PURE__ */ c(me, {
332
382
  htmlFor: "release-doi",
333
383
  children: "DOI (optional)"
334
384
  }),
335
- /* @__PURE__ */ p(oe, {
385
+ /* @__PURE__ */ c(pe, {
336
386
  id: "release-doi",
337
387
  value: X,
338
388
  onChange: (e) => Z(e.target.value),
339
389
  placeholder: "10.1234/cosmic.2026.0001"
340
390
  }),
341
- /* @__PURE__ */ p("p", {
391
+ /* @__PURE__ */ c("p", {
342
392
  className: "text-xs text-text-secondary",
343
393
  children: "A Digital Object Identifier makes the release permanently referenceable."
344
394
  })
345
395
  ]
346
396
  }),
347
- /* @__PURE__ */ m(C, { children: [/* @__PURE__ */ p(v, {
397
+ /* @__PURE__ */ l(b, { children: [/* @__PURE__ */ c(g, {
348
398
  type: "button",
349
399
  variant: "outline",
350
400
  onClick: () => Y(null),
351
- disabled: W,
401
+ disabled: B,
352
402
  children: "Cancel"
353
- }), /* @__PURE__ */ m(v, {
403
+ }), /* @__PURE__ */ l(g, {
354
404
  type: "button",
355
- onClick: () => void ge(),
356
- disabled: W,
357
- children: [/* @__PURE__ */ p(g, { className: "size-4" }), W ? "Publishing…" : "Publish release"]
405
+ onClick: () => void Te(),
406
+ disabled: B,
407
+ children: [/* @__PURE__ */ c(h, { className: "size-4" }), B ? "Publishing…" : "Publish release"]
358
408
  })] })
359
409
  ]
360
410
  })
@@ -363,6 +413,6 @@ function I() {
363
413
  });
364
414
  }
365
415
  //#endregion
366
- export { I as default };
416
+ export { N as default };
367
417
 
368
418
  //# sourceMappingURL=ReleasesPage.js.map