@burdenoff/microfe-cosmicintersection 2026.827.1 → 2026.830.1

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 (70) hide show
  1. package/dist/cosmicintersection/components/ActionMenu.d.ts +1 -1
  2. package/dist/cosmicintersection/components/ActionMenu.d.ts.map +1 -1
  3. package/dist/cosmicintersection/components/ActionMenu.js +51 -54
  4. package/dist/cosmicintersection/components/ActionMenu.js.map +1 -1
  5. package/dist/cosmicintersection/components/EntityFormShell.d.ts +1 -1
  6. package/dist/cosmicintersection/components/EntityFormShell.d.ts.map +1 -1
  7. package/dist/cosmicintersection/components/EntityFormShell.js +29 -27
  8. package/dist/cosmicintersection/components/EntityFormShell.js.map +1 -1
  9. package/dist/cosmicintersection/components/ErrorState.d.ts +1 -1
  10. package/dist/cosmicintersection/components/ErrorState.d.ts.map +1 -1
  11. package/dist/cosmicintersection/components/ErrorState.js +19 -17
  12. package/dist/cosmicintersection/components/ErrorState.js.map +1 -1
  13. package/dist/cosmicintersection/components/FileUploadField.d.ts.map +1 -1
  14. package/dist/cosmicintersection/components/FileUploadField.js +61 -60
  15. package/dist/cosmicintersection/components/FileUploadField.js.map +1 -1
  16. package/dist/cosmicintersection/components/LoadingState.d.ts +1 -1
  17. package/dist/cosmicintersection/components/LoadingState.d.ts.map +1 -1
  18. package/dist/cosmicintersection/components/LoadingState.js +15 -13
  19. package/dist/cosmicintersection/components/LoadingState.js.map +1 -1
  20. package/dist/cosmicintersection/components/PageLayout.d.ts.map +1 -1
  21. package/dist/cosmicintersection/components/PageLayout.js +28 -27
  22. package/dist/cosmicintersection/components/PageLayout.js.map +1 -1
  23. package/dist/cosmicintersection/components/Pagination.d.ts.map +1 -1
  24. package/dist/cosmicintersection/components/Pagination.js +38 -35
  25. package/dist/cosmicintersection/components/Pagination.js.map +1 -1
  26. package/dist/cosmicintersection/components/StatusBadge.d.ts.map +1 -1
  27. package/dist/cosmicintersection/components/StatusBadge.js +30 -9
  28. package/dist/cosmicintersection/components/StatusBadge.js.map +1 -1
  29. package/dist/cosmicintersection/pages/access/AccessPage.d.ts.map +1 -1
  30. package/dist/cosmicintersection/pages/access/AccessPage.js +147 -146
  31. package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
  32. package/dist/cosmicintersection/pages/analyses/AnalysesPage.d.ts.map +1 -1
  33. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +260 -259
  34. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
  35. package/dist/cosmicintersection/pages/collections/CollectionsPage.d.ts.map +1 -1
  36. package/dist/cosmicintersection/pages/collections/CollectionsPage.js +63 -62
  37. package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
  38. package/dist/cosmicintersection/pages/dashboard/DashboardPage.d.ts.map +1 -1
  39. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +132 -131
  40. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
  41. package/dist/cosmicintersection/pages/datasets/DatasetsPage.d.ts.map +1 -1
  42. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +178 -177
  43. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
  44. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.d.ts.map +1 -1
  45. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +138 -145
  46. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -1
  47. package/dist/cosmicintersection/pages/lineage/LineagePage.d.ts.map +1 -1
  48. package/dist/cosmicintersection/pages/lineage/LineagePage.js +78 -88
  49. package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -1
  50. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.d.ts.map +1 -1
  51. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +125 -124
  52. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
  53. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.d.ts.map +1 -1
  54. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +152 -151
  55. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
  56. package/dist/cosmicintersection/pages/releases/ReleasesPage.d.ts.map +1 -1
  57. package/dist/cosmicintersection/pages/releases/ReleasesPage.js +175 -174
  58. package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
  59. package/dist/cosmicintersection/pages/runs/RunsPage.d.ts.map +1 -1
  60. package/dist/cosmicintersection/pages/runs/RunsPage.js +197 -188
  61. package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
  62. package/dist/cosmicintersection/pages/sources/SourcesPage.d.ts.map +1 -1
  63. package/dist/cosmicintersection/pages/sources/SourcesPage.js +65 -64
  64. package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
  65. package/dist/dev/main.d.ts.map +1 -1
  66. package/dist/shared/hooks/useTr.d.ts +12 -0
  67. package/dist/shared/hooks/useTr.d.ts.map +1 -0
  68. package/dist/shared/hooks/useTr.js +16 -0
  69. package/dist/shared/hooks/useTr.js.map +1 -0
  70. package/package.json +1 -1
@@ -1,31 +1,32 @@
1
1
  import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
2
2
  import { notify as t } from "../../lib/toast.js";
3
- import { useCosArchiveDatasetMutation as n, useCosCollectionsQuery as r, useCosDatasetsQuery as i, useCosPublishDatasetMutation as a, useCosSourcesQuery as ee } from "../../api/cosmicApi.js";
4
- import o from "../../components/ActionMenu.js";
5
- import s from "../../components/EmptyState.js";
6
- import c from "../../components/ErrorState.js";
7
- import te from "../../components/LoadingState.js";
8
- import l from "../../components/PageLayout.js";
9
- import u, { usePagination as d } from "../../components/Pagination.js";
10
- import f, { formatEnumLabel as p } from "../../components/StatusBadge.js";
3
+ import { useCosArchiveDatasetMutation as n, useCosCollectionsQuery as r, useCosDatasetsQuery as i, useCosPublishDatasetMutation as ee, useCosSourcesQuery as te } from "../../api/cosmicApi.js";
4
+ import { useTr as ne } from "../../../shared/hooks/useTr.js";
5
+ import a from "../../components/ActionMenu.js";
6
+ import re from "../../components/EmptyState.js";
7
+ import ie from "../../components/ErrorState.js";
8
+ import o from "../../components/LoadingState.js";
9
+ import s from "../../components/PageLayout.js";
10
+ import c, { usePagination as ae } from "../../components/Pagination.js";
11
+ import l, { formatEnumLabel as u } from "../../components/StatusBadge.js";
11
12
  import "../../components/index.js";
12
- import { useMemo as m, useState as h } from "react";
13
- import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
14
- import { Compass as ne, Database as re, Plus as y } from "lucide-react";
15
- import { Badge as b, Button as x, Select as S, SelectContent as C, SelectItem as w, SelectTrigger as T, SelectValue as E, Table as ie, TableBody as ae, TableCell as D, TableHead as O, TableHeader as oe, TableRow as k } from "@burdenoff/fe-libs/ui";
13
+ import { useMemo as d, useState as f } from "react";
14
+ import { Fragment as p, jsx as m, jsxs as h } from "react/jsx-runtime";
15
+ import { Compass as g, Database as _, Plus as v } from "lucide-react";
16
+ import { Badge as y, Button as b, Select as x, SelectContent as S, SelectItem as C, SelectTrigger as w, SelectValue as T, Table as oe, TableBody as se, TableCell as E, TableHead as D, TableHeader as ce, TableRow as O } from "@burdenoff/fe-libs/ui";
16
17
  //#region src/cosmicintersection/pages/datasets/DatasetsPage.tsx
17
- var se = [
18
+ var le = [
18
19
  "DRAFT",
19
20
  "INGESTING",
20
21
  "AVAILABLE",
21
22
  "DEPRECATED",
22
23
  "ARCHIVED"
23
- ], ce = [
24
+ ], k = [
24
25
  "PUBLIC",
25
26
  "WORKSPACE",
26
27
  "RESTRICTED",
27
28
  "EMBARGOED"
28
- ], A = "__all__", le = 200;
29
+ ], A = "__all__", ue = 200;
29
30
  function j(e) {
30
31
  if (!e) return "—";
31
32
  let t = Number(e);
@@ -47,342 +48,342 @@ function M(e) {
47
48
  return Number.isNaN(t.getTime()) ? "—" : t.toLocaleDateString();
48
49
  }
49
50
  function N() {
50
- let { navigate: N } = e(), [P, F] = h(A), [I, L] = h(A), [R, z] = h(A), [B, V] = h(A), [H, U] = h(A), W = d({
51
+ let { navigate: N } = e(), P = ne(), [F, I] = f(A), [L, R] = f(A), [z, B] = f(A), [V, H] = f(A), [U, de] = f(A), W = ae({
51
52
  pageSize: 20,
52
- resetKey: `${P}|${I}|${R}|${B}|${H}`
53
- }), { data: G, loading: K, error: ue, refetch: q } = i({
54
- status: P === A ? void 0 : P,
55
- sourceId: I === A ? void 0 : I,
56
- collectionId: R === A ? void 0 : R,
57
- format: B === A ? void 0 : B,
58
- accessLevel: H === A ? void 0 : H,
53
+ resetKey: `${F}|${L}|${z}|${V}|${U}`
54
+ }), { data: G, loading: K, error: fe, refetch: q } = i({
55
+ status: F === A ? void 0 : F,
56
+ sourceId: L === A ? void 0 : L,
57
+ collectionId: z === A ? void 0 : z,
58
+ format: V === A ? void 0 : V,
59
+ accessLevel: U === A ? void 0 : U,
59
60
  pagination: {
60
61
  limit: W.limit,
61
62
  offset: W.offset
62
63
  }
63
- }), de = ee({ pagination: {
64
+ }), pe = te({ pagination: {
64
65
  limit: 100,
65
66
  offset: 0
66
- } }), fe = r(), J = i({ pagination: {
67
- limit: le,
67
+ } }), me = r(), J = i({ pagination: {
68
+ limit: ue,
68
69
  offset: 0
69
- } }), [pe] = a(), [me] = n(), Y = m(() => G?.cosListDatasets?.items ?? [], [G]), he = G?.cosListDatasets?.pageInfo, ge = de.data?.cosListSources?.items ?? [], _e = fe.data?.cosListCollections ?? [], X = m(() => {
70
+ } }), [he] = ee(), [ge] = n(), Y = d(() => G?.cosListDatasets?.items ?? [], [G]), _e = G?.cosListDatasets?.pageInfo, ve = pe.data?.cosListSources?.items ?? [], ye = me.data?.cosListCollections ?? [], X = d(() => {
70
71
  let e = /* @__PURE__ */ new Set();
71
72
  for (let t of J.data?.cosListDatasets?.items ?? []) t.format && e.add(t.format);
72
73
  return [...e].sort((e, t) => e.localeCompare(t));
73
- }, [J.data]), Z = P === A && I === A && R === A && B === A && H === A, Q = async (e) => {
74
- (await pe({ variables: { id: e.id } })).data?.cosPublishDataset && (t.success("Dataset published", `“${e.name}” is now available.`), await q());
74
+ }, [J.data]), Z = F === A && L === A && z === A && V === A && U === A, Q = async (e) => {
75
+ (await he({ variables: { id: e.id } })).data?.cosPublishDataset && (t.success(P("cosmicintersection.pages.datasets.publishSuccess", "Dataset published"), P("cosmicintersection.pages.datasets.publishSuccessDescription", "“{{name}}” is now available.", { name: e.name })), await q());
75
76
  }, $ = async (e) => {
76
- let n = await me({ variables: { id: e.id } });
77
+ let n = await ge({ variables: { id: e.id } });
77
78
  if (n.error) throw Error(n.error.message);
78
- if (!n.data?.cosArchiveDataset) throw t.error("Could not archive dataset", "The server did not confirm the change."), Error("Archive not confirmed");
79
- t.success("Dataset archived"), await q();
79
+ if (!n.data?.cosArchiveDataset) throw t.error(P("cosmicintersection.pages.datasets.archiveError", "Could not archive dataset"), P("cosmicintersection.pages.datasets.archiveErrorDescription", "The server did not confirm the change.")), Error("Archive not confirmed");
80
+ t.success(P("cosmicintersection.pages.datasets.archiveSuccess", "Dataset archived")), await q();
80
81
  };
81
- return /* @__PURE__ */ _(l, {
82
- title: "Datasets",
83
- description: "Federated science datasets — catalog, schema, lineage and access, all from live data.",
84
- actions: /* @__PURE__ */ v(g, { children: [/* @__PURE__ */ v(x, {
82
+ return /* @__PURE__ */ m(s, {
83
+ title: P("cosmicintersection.pages.datasets.title", "Datasets"),
84
+ description: P("cosmicintersection.pages.datasets.description", "Federated science datasets — catalog, schema, lineage and access, all from live data."),
85
+ actions: /* @__PURE__ */ h(p, { children: [/* @__PURE__ */ h(b, {
85
86
  type: "button",
86
87
  variant: "outline",
87
88
  onClick: () => N("discovery"),
88
- children: [/* @__PURE__ */ _(ne, { className: "size-4" }), "Discover"]
89
- }), /* @__PURE__ */ v(x, {
89
+ children: [/* @__PURE__ */ m(g, { className: "size-4" }), P("nav.discover", "Discover")]
90
+ }), /* @__PURE__ */ h(b, {
90
91
  type: "button",
91
92
  onClick: () => N("datasets/create"),
92
- children: [/* @__PURE__ */ _(y, { className: "size-4" }), "New dataset"]
93
+ children: [/* @__PURE__ */ m(v, { className: "size-4" }), P("cosmicintersection.pages.datasets.create", "New dataset")]
93
94
  })] }),
94
- children: /* @__PURE__ */ v("div", {
95
+ children: /* @__PURE__ */ h("div", {
95
96
  className: "space-y-4",
96
- children: [/* @__PURE__ */ v("div", {
97
+ children: [/* @__PURE__ */ h("div", {
97
98
  className: "flex flex-wrap items-end gap-3",
98
99
  children: [
99
- /* @__PURE__ */ v("label", {
100
+ /* @__PURE__ */ h("label", {
100
101
  className: "space-y-1 text-sm",
101
- children: [/* @__PURE__ */ _("span", {
102
+ children: [/* @__PURE__ */ m("span", {
102
103
  className: "block font-medium text-text-primary",
103
- children: "Status"
104
- }), /* @__PURE__ */ v(S, {
105
- value: P,
106
- onValueChange: F,
107
- children: [/* @__PURE__ */ _(T, {
108
- "aria-label": "Filter by status",
104
+ children: P("cosmicintersection.common.status", "Status")
105
+ }), /* @__PURE__ */ h(x, {
106
+ value: F,
107
+ onValueChange: I,
108
+ children: [/* @__PURE__ */ m(w, {
109
+ "aria-label": P("cosmicintersection.common.filterByStatus", "Filter by status"),
109
110
  className: "w-44",
110
- children: /* @__PURE__ */ _(E, {})
111
- }), /* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, {
111
+ children: /* @__PURE__ */ m(T, {})
112
+ }), /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(C, {
112
113
  value: A,
113
- children: "All statuses"
114
- }), se.map((e) => /* @__PURE__ */ _(w, {
114
+ children: P("cosmicintersection.common.allStatuses", "All statuses")
115
+ }), le.map((e) => /* @__PURE__ */ m(C, {
115
116
  value: e,
116
- children: p(e)
117
+ children: u(e)
117
118
  }, e))] })]
118
119
  })]
119
120
  }),
120
- /* @__PURE__ */ v("label", {
121
+ /* @__PURE__ */ h("label", {
121
122
  className: "space-y-1 text-sm",
122
- children: [/* @__PURE__ */ _("span", {
123
+ children: [/* @__PURE__ */ m("span", {
123
124
  className: "block font-medium text-text-primary",
124
- children: "Source"
125
- }), /* @__PURE__ */ v(S, {
126
- value: I,
127
- onValueChange: L,
128
- children: [/* @__PURE__ */ _(T, {
129
- "aria-label": "Filter by source",
125
+ children: P("cosmicintersection.common.source", "Source")
126
+ }), /* @__PURE__ */ h(x, {
127
+ value: L,
128
+ onValueChange: R,
129
+ children: [/* @__PURE__ */ m(w, {
130
+ "aria-label": P("cosmicintersection.common.filterBySource", "Filter by source"),
130
131
  className: "w-48",
131
- children: /* @__PURE__ */ _(E, {})
132
- }), /* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, {
132
+ children: /* @__PURE__ */ m(T, {})
133
+ }), /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(C, {
133
134
  value: A,
134
- children: "All sources"
135
- }), ge.map((e) => /* @__PURE__ */ _(w, {
135
+ children: P("cosmicintersection.common.allSources", "All sources")
136
+ }), ve.map((e) => /* @__PURE__ */ m(C, {
136
137
  value: e.id,
137
138
  children: e.name
138
139
  }, e.id))] })]
139
140
  })]
140
141
  }),
141
- /* @__PURE__ */ v("label", {
142
+ /* @__PURE__ */ h("label", {
142
143
  className: "space-y-1 text-sm",
143
- children: [/* @__PURE__ */ _("span", {
144
+ children: [/* @__PURE__ */ m("span", {
144
145
  className: "block font-medium text-text-primary",
145
- children: "Collection"
146
- }), /* @__PURE__ */ v(S, {
147
- value: R,
148
- onValueChange: z,
149
- children: [/* @__PURE__ */ _(T, {
150
- "aria-label": "Filter by collection",
146
+ children: P("cosmicintersection.common.collection", "Collection")
147
+ }), /* @__PURE__ */ h(x, {
148
+ value: z,
149
+ onValueChange: B,
150
+ children: [/* @__PURE__ */ m(w, {
151
+ "aria-label": P("cosmicintersection.common.filterByCollection", "Filter by collection"),
151
152
  className: "w-48",
152
- children: /* @__PURE__ */ _(E, {})
153
- }), /* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, {
153
+ children: /* @__PURE__ */ m(T, {})
154
+ }), /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(C, {
154
155
  value: A,
155
- children: "All collections"
156
- }), _e.map((e) => /* @__PURE__ */ _(w, {
156
+ children: P("cosmicintersection.common.allCollections", "All collections")
157
+ }), ye.map((e) => /* @__PURE__ */ m(C, {
157
158
  value: e.id,
158
159
  children: e.name
159
160
  }, e.id))] })]
160
161
  })]
161
162
  }),
162
- /* @__PURE__ */ v("label", {
163
+ /* @__PURE__ */ h("label", {
163
164
  className: "space-y-1 text-sm",
164
- children: [/* @__PURE__ */ _("span", {
165
+ children: [/* @__PURE__ */ m("span", {
165
166
  className: "block font-medium text-text-primary",
166
- children: "Format"
167
- }), /* @__PURE__ */ v(S, {
168
- value: B,
169
- onValueChange: V,
167
+ children: P("cosmicintersection.common.format", "Format")
168
+ }), /* @__PURE__ */ h(x, {
169
+ value: V,
170
+ onValueChange: H,
170
171
  disabled: X.length === 0,
171
- children: [/* @__PURE__ */ _(T, {
172
- "aria-label": "Filter by format",
172
+ children: [/* @__PURE__ */ m(w, {
173
+ "aria-label": P("cosmicintersection.common.filterByFormat", "Filter by format"),
173
174
  className: "w-40",
174
- children: /* @__PURE__ */ _(E, {})
175
- }), /* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, {
175
+ children: /* @__PURE__ */ m(T, {})
176
+ }), /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(C, {
176
177
  value: A,
177
- children: "All formats"
178
- }), X.map((e) => /* @__PURE__ */ _(w, {
178
+ children: P("cosmicintersection.common.allFormats", "All formats")
179
+ }), X.map((e) => /* @__PURE__ */ m(C, {
179
180
  value: e,
180
181
  children: e
181
182
  }, e))] })]
182
183
  })]
183
184
  }),
184
- /* @__PURE__ */ v("label", {
185
+ /* @__PURE__ */ h("label", {
185
186
  className: "space-y-1 text-sm",
186
- children: [/* @__PURE__ */ _("span", {
187
+ children: [/* @__PURE__ */ m("span", {
187
188
  className: "block font-medium text-text-primary",
188
- children: "Access"
189
- }), /* @__PURE__ */ v(S, {
190
- value: H,
191
- onValueChange: U,
192
- children: [/* @__PURE__ */ _(T, {
193
- "aria-label": "Filter by access level",
189
+ children: P("cosmicintersection.common.access", "Access")
190
+ }), /* @__PURE__ */ h(x, {
191
+ value: U,
192
+ onValueChange: de,
193
+ children: [/* @__PURE__ */ m(w, {
194
+ "aria-label": P("cosmicintersection.common.filterByAccess", "Filter by access level"),
194
195
  className: "w-44",
195
- children: /* @__PURE__ */ _(E, {})
196
- }), /* @__PURE__ */ v(C, { children: [/* @__PURE__ */ _(w, {
196
+ children: /* @__PURE__ */ m(T, {})
197
+ }), /* @__PURE__ */ h(S, { children: [/* @__PURE__ */ m(C, {
197
198
  value: A,
198
- children: "All access levels"
199
- }), ce.map((e) => /* @__PURE__ */ _(w, {
199
+ children: P("cosmicintersection.common.allAccessLevels", "All access levels")
200
+ }), k.map((e) => /* @__PURE__ */ m(C, {
200
201
  value: e,
201
- children: p(e)
202
+ children: u(e)
202
203
  }, e))] })]
203
204
  })]
204
205
  })
205
206
  ]
206
- }), K ? /* @__PURE__ */ _(te, {
207
+ }), K ? /* @__PURE__ */ m(o, {
207
208
  variant: "rows",
208
209
  rows: 6,
209
- label: "Loading datasets…"
210
- }) : ue ? /* @__PURE__ */ _(c, {
211
- message: "We could not load datasets. Please try again.",
210
+ label: P("cosmicintersection.pages.datasets.loading", "Loading datasets…")
211
+ }) : fe ? /* @__PURE__ */ m(ie, {
212
+ message: P("cosmicintersection.pages.datasets.error", "We could not load datasets. Please try again."),
212
213
  onRetry: () => void q()
213
- }) : Y.length === 0 ? /* @__PURE__ */ _(s, {
214
- icon: re,
215
- title: Z ? "No datasets yet." : "No datasets match these filters.",
216
- description: Z ? "Register your first dataset to start federating science data across sources." : "Try a different status, source, collection, format or access level.",
217
- action: Z ? /* @__PURE__ */ v(x, {
214
+ }) : Y.length === 0 ? /* @__PURE__ */ m(re, {
215
+ icon: _,
216
+ title: Z ? P("cosmicintersection.pages.datasets.emptyTitle", "No datasets yet.") : P("cosmicintersection.pages.datasets.emptyFilterTitle", "No datasets match these filters."),
217
+ description: Z ? P("cosmicintersection.pages.datasets.emptyDescription", "Register your first dataset to start federating science data across sources.") : P("cosmicintersection.pages.datasets.emptyFilterDescription", "Try a different status, source, collection, format or access level."),
218
+ action: Z ? /* @__PURE__ */ h(b, {
218
219
  type: "button",
219
220
  onClick: () => N("datasets/create"),
220
- children: [/* @__PURE__ */ _(y, { className: "size-4" }), "New dataset"]
221
+ children: [/* @__PURE__ */ m(v, { className: "size-4" }), P("cosmicintersection.pages.datasets.create", "New dataset")]
221
222
  }) : void 0
222
- }) : /* @__PURE__ */ v(g, { children: [
223
- /* @__PURE__ */ _("div", {
223
+ }) : /* @__PURE__ */ h(p, { children: [
224
+ /* @__PURE__ */ m("div", {
224
225
  className: "hidden rounded-card border border-border-default bg-bg-elevated md:block",
225
- children: /* @__PURE__ */ v(ie, { children: [/* @__PURE__ */ _(oe, { children: /* @__PURE__ */ v(k, { children: [
226
- /* @__PURE__ */ _(O, { children: "Name" }),
227
- /* @__PURE__ */ _(O, { children: "Status" }),
228
- /* @__PURE__ */ _(O, { children: "Access" }),
229
- /* @__PURE__ */ _(O, { children: "Format" }),
230
- /* @__PURE__ */ _(O, {
226
+ children: /* @__PURE__ */ h(oe, { children: [/* @__PURE__ */ m(ce, { children: /* @__PURE__ */ h(O, { children: [
227
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.name", "Name") }),
228
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.status", "Status") }),
229
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.access", "Access") }),
230
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.format", "Format") }),
231
+ /* @__PURE__ */ m(D, {
231
232
  className: "text-right",
232
- children: "Size"
233
+ children: P("cosmicintersection.common.size", "Size")
233
234
  }),
234
- /* @__PURE__ */ _(O, { children: "Tags" }),
235
- /* @__PURE__ */ _(O, { children: "Updated" }),
236
- /* @__PURE__ */ _(O, {
235
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.tags", "Tags") }),
236
+ /* @__PURE__ */ m(D, { children: P("cosmicintersection.common.updated", "Updated") }),
237
+ /* @__PURE__ */ m(D, {
237
238
  className: "text-right",
238
- children: "Actions"
239
+ children: P("cosmicintersection.common.actions", "Actions")
239
240
  })
240
- ] }) }), /* @__PURE__ */ _(ae, { children: Y.map((e) => /* @__PURE__ */ v(k, {
241
+ ] }) }), /* @__PURE__ */ m(se, { children: Y.map((e) => /* @__PURE__ */ h(O, {
241
242
  className: "cursor-pointer",
242
243
  onClick: () => N(`datasets/${e.id}`),
243
244
  children: [
244
- /* @__PURE__ */ v(D, { children: [/* @__PURE__ */ _("span", {
245
+ /* @__PURE__ */ h(E, { children: [/* @__PURE__ */ m("span", {
245
246
  className: "font-medium text-text-primary",
246
247
  children: e.name
247
- }), e.description ? /* @__PURE__ */ _("p", {
248
+ }), e.description ? /* @__PURE__ */ m("p", {
248
249
  className: "mt-0.5 line-clamp-1 max-w-xs text-xs text-text-secondary",
249
250
  children: e.description
250
251
  }) : null] }),
251
- /* @__PURE__ */ _(D, { children: /* @__PURE__ */ _(f, { status: e.status }) }),
252
- /* @__PURE__ */ _(D, { children: /* @__PURE__ */ _("span", {
252
+ /* @__PURE__ */ m(E, { children: /* @__PURE__ */ m(l, { status: e.status }) }),
253
+ /* @__PURE__ */ m(E, { children: /* @__PURE__ */ m("span", {
253
254
  className: "text-sm text-text-secondary",
254
- children: p(e.accessLevel)
255
+ children: u(e.accessLevel)
255
256
  }) }),
256
- /* @__PURE__ */ _(D, { children: /* @__PURE__ */ _("span", {
257
+ /* @__PURE__ */ m(E, { children: /* @__PURE__ */ m("span", {
257
258
  className: "text-sm text-text-secondary",
258
259
  children: e.format || "—"
259
260
  }) }),
260
- /* @__PURE__ */ _(D, {
261
+ /* @__PURE__ */ m(E, {
261
262
  className: "text-right text-sm tabular-nums text-text-secondary",
262
263
  children: j(e.sizeBytes)
263
264
  }),
264
- /* @__PURE__ */ _(D, { children: /* @__PURE__ */ _("div", {
265
+ /* @__PURE__ */ m(E, { children: /* @__PURE__ */ m("div", {
265
266
  className: "flex max-w-[12rem] flex-wrap gap-1",
266
- children: e.tags.length === 0 ? /* @__PURE__ */ _("span", {
267
+ children: e.tags.length === 0 ? /* @__PURE__ */ m("span", {
267
268
  className: "text-xs text-text-secondary",
268
269
  children: "—"
269
- }) : /* @__PURE__ */ v(g, { children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */ _(b, {
270
+ }) : /* @__PURE__ */ h(p, { children: [e.tags.slice(0, 2).map((e) => /* @__PURE__ */ m(y, {
270
271
  variant: "secondary",
271
272
  children: e
272
- }, e)), e.tags.length > 2 ? /* @__PURE__ */ v(b, {
273
+ }, e)), e.tags.length > 2 ? /* @__PURE__ */ h(y, {
273
274
  variant: "secondary",
274
275
  children: ["+", e.tags.length - 2]
275
276
  }) : null] })
276
277
  }) }),
277
- /* @__PURE__ */ _(D, {
278
+ /* @__PURE__ */ m(E, {
278
279
  className: "whitespace-nowrap text-sm text-text-secondary",
279
280
  children: M(e.updatedAt)
280
281
  }),
281
- /* @__PURE__ */ _(D, {
282
+ /* @__PURE__ */ m(E, {
282
283
  className: "text-right",
283
- children: /* @__PURE__ */ _(o, {
284
- ariaLabel: `Actions for ${e.name}`,
284
+ children: /* @__PURE__ */ m(a, {
285
+ ariaLabel: P("cosmicintersection.common.actionsFor", "Actions for {{name}}", { name: e.name }),
285
286
  entityName: e.name,
286
287
  onView: () => N(`datasets/${e.id}`),
287
288
  onEdit: () => N(`datasets/${e.id}/edit`),
288
289
  extraItems: e.status === "AVAILABLE" || e.status === "ARCHIVED" ? [] : [{
289
290
  key: "publish",
290
- label: "Publish",
291
+ label: P("cosmicintersection.common.publish", "Publish"),
291
292
  onSelect: () => void Q(e)
292
293
  }],
293
294
  onDelete: () => $(e),
294
- deleteLabel: "Archive dataset"
295
+ deleteLabel: P("cosmicintersection.pages.datasets.archive", "Archive dataset")
295
296
  })
296
297
  })
297
298
  ]
298
299
  }, e.id)) })] })
299
300
  }),
300
- /* @__PURE__ */ _("ul", {
301
+ /* @__PURE__ */ m("ul", {
301
302
  className: "space-y-3 md:hidden",
302
- children: Y.map((e) => /* @__PURE__ */ _("li", { children: /* @__PURE__ */ v("div", {
303
+ children: Y.map((e) => /* @__PURE__ */ m("li", { children: /* @__PURE__ */ h("div", {
303
304
  role: "button",
304
305
  tabIndex: 0,
305
- "aria-label": `Open ${e.name}`,
306
+ "aria-label": P("cosmicintersection.common.open", "Open {{name}}", { name: e.name }),
306
307
  onClick: () => N(`datasets/${e.id}`),
307
308
  onKeyDown: (t) => {
308
309
  (t.key === "Enter" || t.key === " ") && (t.preventDefault(), N(`datasets/${e.id}`));
309
310
  },
310
311
  className: "flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 outline-none transition-colors hover:bg-bg-sunken focus-visible:ring-2 focus-visible:ring-border-focus",
311
312
  children: [
312
- /* @__PURE__ */ v("div", {
313
+ /* @__PURE__ */ h("div", {
313
314
  className: "flex items-start justify-between gap-3",
314
- children: [/* @__PURE__ */ v("div", {
315
+ children: [/* @__PURE__ */ h("div", {
315
316
  className: "min-w-0",
316
- children: [/* @__PURE__ */ _("p", {
317
+ children: [/* @__PURE__ */ m("p", {
317
318
  className: "font-medium text-text-primary",
318
319
  children: e.name
319
- }), e.description ? /* @__PURE__ */ _("p", {
320
+ }), e.description ? /* @__PURE__ */ m("p", {
320
321
  className: "mt-0.5 line-clamp-2 text-xs text-text-secondary",
321
322
  children: e.description
322
323
  }) : null]
323
- }), /* @__PURE__ */ _("div", {
324
+ }), /* @__PURE__ */ m("div", {
324
325
  onClick: (e) => e.stopPropagation(),
325
- children: /* @__PURE__ */ _(o, {
326
- ariaLabel: `Actions for ${e.name}`,
326
+ children: /* @__PURE__ */ m(a, {
327
+ ariaLabel: P("cosmicintersection.common.actionsFor", "Actions for {{name}}", { name: e.name }),
327
328
  entityName: e.name,
328
329
  onView: () => N(`datasets/${e.id}`),
329
330
  onEdit: () => N(`datasets/${e.id}/edit`),
330
331
  extraItems: e.status === "AVAILABLE" || e.status === "ARCHIVED" ? [] : [{
331
332
  key: "publish",
332
- label: "Publish",
333
+ label: P("cosmicintersection.common.publish", "Publish"),
333
334
  onSelect: () => void Q(e)
334
335
  }],
335
336
  onDelete: () => $(e),
336
- deleteLabel: "Archive dataset"
337
+ deleteLabel: P("cosmicintersection.pages.datasets.archive", "Archive dataset")
337
338
  })
338
339
  })]
339
340
  }),
340
- /* @__PURE__ */ v("div", {
341
+ /* @__PURE__ */ h("div", {
341
342
  className: "flex flex-wrap items-center gap-1.5",
342
- children: [/* @__PURE__ */ _(f, { status: e.status }), /* @__PURE__ */ _(f, { status: e.accessLevel })]
343
+ children: [/* @__PURE__ */ m(l, { status: e.status }), /* @__PURE__ */ m(l, { status: e.accessLevel })]
343
344
  }),
344
- /* @__PURE__ */ v("dl", {
345
+ /* @__PURE__ */ h("dl", {
345
346
  className: "grid grid-cols-2 gap-x-4 gap-y-1 text-xs",
346
347
  children: [
347
- /* @__PURE__ */ v("div", {
348
+ /* @__PURE__ */ h("div", {
348
349
  className: "flex justify-between gap-2",
349
- children: [/* @__PURE__ */ _("dt", {
350
+ children: [/* @__PURE__ */ m("dt", {
350
351
  className: "text-text-secondary",
351
- children: "Format"
352
- }), /* @__PURE__ */ _("dd", {
352
+ children: P("cosmicintersection.common.format", "Format")
353
+ }), /* @__PURE__ */ m("dd", {
353
354
  className: "text-text-primary",
354
355
  children: e.format || "—"
355
356
  })]
356
357
  }),
357
- /* @__PURE__ */ v("div", {
358
+ /* @__PURE__ */ h("div", {
358
359
  className: "flex justify-between gap-2",
359
- children: [/* @__PURE__ */ _("dt", {
360
+ children: [/* @__PURE__ */ m("dt", {
360
361
  className: "text-text-secondary",
361
- children: "Size"
362
- }), /* @__PURE__ */ _("dd", {
362
+ children: P("cosmicintersection.common.size", "Size")
363
+ }), /* @__PURE__ */ m("dd", {
363
364
  className: "tabular-nums text-text-primary",
364
365
  children: j(e.sizeBytes)
365
366
  })]
366
367
  }),
367
- /* @__PURE__ */ v("div", {
368
+ /* @__PURE__ */ h("div", {
368
369
  className: "flex justify-between gap-2",
369
- children: [/* @__PURE__ */ _("dt", {
370
+ children: [/* @__PURE__ */ m("dt", {
370
371
  className: "text-text-secondary",
371
- children: "Updated"
372
- }), /* @__PURE__ */ _("dd", {
372
+ children: P("cosmicintersection.common.updated", "Updated")
373
+ }), /* @__PURE__ */ m("dd", {
373
374
  className: "text-text-primary",
374
375
  children: M(e.updatedAt)
375
376
  })]
376
377
  })
377
378
  ]
378
379
  }),
379
- e.tags.length > 0 ? /* @__PURE__ */ v("div", {
380
+ e.tags.length > 0 ? /* @__PURE__ */ h("div", {
380
381
  className: "flex flex-wrap gap-1",
381
- children: [e.tags.slice(0, 4).map((e) => /* @__PURE__ */ _(b, {
382
+ children: [e.tags.slice(0, 4).map((e) => /* @__PURE__ */ m(y, {
382
383
  variant: "secondary",
383
384
  className: "text-xs",
384
385
  children: e
385
- }, e)), e.tags.length > 4 ? /* @__PURE__ */ v("span", {
386
+ }, e)), e.tags.length > 4 ? /* @__PURE__ */ h("span", {
386
387
  className: "text-xs text-text-secondary",
387
388
  children: ["+", e.tags.length - 4]
388
389
  }) : null]
@@ -390,14 +391,14 @@ function N() {
390
391
  ]
391
392
  }) }, e.id))
392
393
  }),
393
- /* @__PURE__ */ _(u, {
394
+ /* @__PURE__ */ m(c, {
394
395
  offset: W.offset,
395
396
  limit: W.limit,
396
397
  loadedCount: Y.length,
397
- hasMore: !!he?.hasMore,
398
+ hasMore: !!_e?.hasMore,
398
399
  onPrev: W.prevPage,
399
400
  onNext: W.nextPage,
400
- itemLabel: "datasets",
401
+ itemLabel: P("cosmicintersection.pages.datasets.itemLabel", "datasets"),
401
402
  loading: K
402
403
  })
403
404
  ] })]