@burdenoff/microfe-cosmicintersection 2026.827.1 → 2026.830.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cosmicintersection/components/ActionMenu.d.ts +1 -1
- package/dist/cosmicintersection/components/ActionMenu.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ActionMenu.js +51 -54
- package/dist/cosmicintersection/components/ActionMenu.js.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.d.ts.map +1 -1
- package/dist/cosmicintersection/components/EntityFormShell.js +29 -27
- package/dist/cosmicintersection/components/EntityFormShell.js.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts +1 -1
- package/dist/cosmicintersection/components/ErrorState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/ErrorState.js +19 -17
- package/dist/cosmicintersection/components/ErrorState.js.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.d.ts.map +1 -1
- package/dist/cosmicintersection/components/FileUploadField.js +61 -60
- package/dist/cosmicintersection/components/FileUploadField.js.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts +1 -1
- package/dist/cosmicintersection/components/LoadingState.d.ts.map +1 -1
- package/dist/cosmicintersection/components/LoadingState.js +15 -13
- package/dist/cosmicintersection/components/LoadingState.js.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.d.ts.map +1 -1
- package/dist/cosmicintersection/components/PageLayout.js +28 -27
- package/dist/cosmicintersection/components/PageLayout.js.map +1 -1
- package/dist/cosmicintersection/components/Pagination.d.ts.map +1 -1
- package/dist/cosmicintersection/components/Pagination.js +38 -35
- package/dist/cosmicintersection/components/Pagination.js.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.d.ts.map +1 -1
- package/dist/cosmicintersection/components/StatusBadge.js +30 -9
- package/dist/cosmicintersection/components/StatusBadge.js.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/access/AccessPage.js +147 -146
- package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +260 -259
- package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js +63 -62
- package/dist/cosmicintersection/pages/collections/CollectionsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +132 -131
- package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +178 -177
- package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +138 -145
- package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/lineage/LineagePage.js +78 -88
- package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +125 -124
- package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +152 -151
- package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js +175 -174
- package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/runs/RunsPage.js +197 -188
- package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.d.ts.map +1 -1
- package/dist/cosmicintersection/pages/sources/SourcesPage.js +65 -64
- package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
- package/dist/dev/main.d.ts.map +1 -1
- package/dist/shared/hooks/useTr.d.ts +12 -0
- package/dist/shared/hooks/useTr.d.ts.map +1 -0
- package/dist/shared/hooks/useTr.js +16 -0
- package/dist/shared/hooks/useTr.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,38 +1,39 @@
|
|
|
1
1
|
import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
|
|
2
|
-
import { useCosAnalysesQuery as
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
2
|
+
import { useCosAnalysesQuery as ee, useCosCollectionsQuery as te, useCosDatasetsQuery as ne, useCosNotebooksQuery as t, useCosPipelinesQuery as n, useCosReleasesQuery as re, useCosRunsQuery as ie, useCosSourcesQuery as r } from "../../api/cosmicApi.js";
|
|
3
|
+
import { useTr as i } from "../../../shared/hooks/useTr.js";
|
|
4
|
+
import a from "../../components/EmptyState.js";
|
|
5
|
+
import o from "../../components/ErrorState.js";
|
|
6
|
+
import ae from "../../components/LoadingState.js";
|
|
7
|
+
import s from "../../components/PageLayout.js";
|
|
7
8
|
import "../../components/index.js";
|
|
8
|
-
import
|
|
9
|
-
import { useMemo as
|
|
10
|
-
import { jsx as
|
|
11
|
-
import { useParams as
|
|
12
|
-
import { Info as
|
|
13
|
-
import { Select as
|
|
9
|
+
import c, { buildDatasetLineage as l, buildReleaseLineage as oe } from "../../components/LineageGraph.js";
|
|
10
|
+
import { useMemo as u, useState as d } from "react";
|
|
11
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
12
|
+
import { useParams as m } from "react-router";
|
|
13
|
+
import { Info as h, Share2 as g, Workflow as _ } from "lucide-react";
|
|
14
|
+
import { Select as v, SelectContent as y, SelectItem as b, SelectTrigger as x, SelectValue as S } from "@burdenoff/fe-libs/ui";
|
|
14
15
|
//#region src/cosmicintersection/pages/lineage/LineagePage.tsx
|
|
15
|
-
var
|
|
16
|
-
function
|
|
17
|
-
let { navigate:
|
|
18
|
-
limit:
|
|
16
|
+
var C = 100;
|
|
17
|
+
function w() {
|
|
18
|
+
let { navigate: w } = e(), T = i(), { datasetId: E } = m(), D = ne({ pagination: {
|
|
19
|
+
limit: C,
|
|
19
20
|
offset: 0
|
|
20
|
-
} }), O =
|
|
21
|
-
limit:
|
|
21
|
+
} }), O = re({ pagination: {
|
|
22
|
+
limit: C,
|
|
22
23
|
offset: 0
|
|
23
|
-
} }), k =
|
|
24
|
-
limit:
|
|
24
|
+
} }), k = r({ pagination: {
|
|
25
|
+
limit: C,
|
|
25
26
|
offset: 0
|
|
26
|
-
} }), A =
|
|
27
|
-
limit:
|
|
27
|
+
} }), A = te(), j = ie({ pagination: {
|
|
28
|
+
limit: C,
|
|
28
29
|
offset: 0
|
|
29
|
-
} }), M =
|
|
30
|
-
limit:
|
|
30
|
+
} }), M = t({ pagination: {
|
|
31
|
+
limit: C,
|
|
31
32
|
offset: 0
|
|
32
|
-
} }), N =
|
|
33
|
-
limit:
|
|
33
|
+
} }), N = ee({}), P = n({ pagination: {
|
|
34
|
+
limit: C,
|
|
34
35
|
offset: 0
|
|
35
|
-
} }), F =
|
|
36
|
+
} }), F = u(() => D.data?.cosListDatasets?.items ?? [], [D.data]), I = u(() => O.data?.cosListReleases?.items ?? [], [O.data]), L = u(() => k.data?.cosListSources?.items ?? [], [k.data]), R = u(() => A.data?.cosListCollections ?? [], [A.data]), z = u(() => j.data?.cosListRuns?.items ?? [], [j.data]), B = u(() => M.data?.cosListNotebooks?.items ?? [], [M.data]), V = u(() => N.data?.cosListAnalyses ?? [], [N.data]), H = u(() => P.data?.cosListPipelines?.items ?? [], [P.data]), U = u(() => ({
|
|
36
37
|
datasetsById: new Map(F.map((e) => [e.id, e])),
|
|
37
38
|
sourcesById: new Map(L.map((e) => [e.id, e])),
|
|
38
39
|
collectionsById: new Map(R.map((e) => [e.id, e])),
|
|
@@ -50,115 +51,104 @@ function T() {
|
|
|
50
51
|
V,
|
|
51
52
|
I,
|
|
52
53
|
H
|
|
53
|
-
]), [W, G] =
|
|
54
|
+
]), [W, G] = d("dataset"), [K, q] = d(E ?? ""), J = W === "dataset" ? F : I, Y = J[0]?.id ?? "", X = J.some((e) => e.id === K);
|
|
54
55
|
!X && Y && q(Y);
|
|
55
|
-
let Z = X ? K : Y, Q =
|
|
56
|
+
let Z = X ? K : Y, Q = u(() => Z ? W === "dataset" ? l(Z, U) : oe(Z, U) : {
|
|
56
57
|
nodes: [],
|
|
57
58
|
edges: []
|
|
58
59
|
}, [
|
|
59
60
|
Z,
|
|
60
61
|
W,
|
|
61
62
|
U
|
|
62
|
-
]),
|
|
63
|
+
]), se = D.loading && F.length === 0 || O.loading && I.length === 0, ce = D.error || O.error, le = (e) => {
|
|
63
64
|
G(e), q("");
|
|
64
65
|
}, $ = W === "dataset" ? F.find((e) => e.id === Z)?.name : I.find((e) => e.id === Z)?.title;
|
|
65
|
-
return /* @__PURE__ */
|
|
66
|
-
title: "Lineage",
|
|
67
|
-
description: "Trace any result from raw observation to citable release.",
|
|
68
|
-
children: /* @__PURE__ */
|
|
66
|
+
return /* @__PURE__ */ f(s, {
|
|
67
|
+
title: T("cosmicintersection.pages.lineage.title", "Lineage"),
|
|
68
|
+
description: T("cosmicintersection.pages.lineage.description", "Trace any result from raw observation to citable release."),
|
|
69
|
+
children: /* @__PURE__ */ p("div", {
|
|
69
70
|
className: "space-y-6",
|
|
70
|
-
children: [/* @__PURE__ */
|
|
71
|
+
children: [/* @__PURE__ */ p("div", {
|
|
71
72
|
className: "flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 sm:flex-row sm:items-end",
|
|
72
|
-
children: [/* @__PURE__ */
|
|
73
|
+
children: [/* @__PURE__ */ p("label", {
|
|
73
74
|
className: "space-y-1 text-sm",
|
|
74
|
-
children: [/* @__PURE__ */
|
|
75
|
+
children: [/* @__PURE__ */ f("span", {
|
|
75
76
|
className: "block font-medium text-text-primary",
|
|
76
|
-
children: "Trace from"
|
|
77
|
-
}), /* @__PURE__ */
|
|
77
|
+
children: T("cosmicintersection.pages.lineage.traceFrom", "Trace from")
|
|
78
|
+
}), /* @__PURE__ */ p(v, {
|
|
78
79
|
value: W,
|
|
79
|
-
onValueChange:
|
|
80
|
-
children: [/* @__PURE__ */
|
|
81
|
-
"aria-label": "Root entity kind",
|
|
80
|
+
onValueChange: le,
|
|
81
|
+
children: [/* @__PURE__ */ f(x, {
|
|
82
|
+
"aria-label": T("cosmicintersection.pages.lineage.rootEntityKind", "Root entity kind"),
|
|
82
83
|
className: "w-full sm:w-44",
|
|
83
|
-
children: /* @__PURE__ */
|
|
84
|
-
}), /* @__PURE__ */
|
|
84
|
+
children: /* @__PURE__ */ f(S, {})
|
|
85
|
+
}), /* @__PURE__ */ p(y, { children: [/* @__PURE__ */ f(b, {
|
|
85
86
|
value: "dataset",
|
|
86
|
-
children: "Dataset"
|
|
87
|
-
}), /* @__PURE__ */
|
|
87
|
+
children: T("cosmicintersection.pages.lineage.dataset", "Dataset")
|
|
88
|
+
}), /* @__PURE__ */ f(b, {
|
|
88
89
|
value: "release",
|
|
89
|
-
children: "Release"
|
|
90
|
+
children: T("cosmicintersection.pages.lineage.release", "Release")
|
|
90
91
|
})] })]
|
|
91
92
|
})]
|
|
92
|
-
}), /* @__PURE__ */
|
|
93
|
+
}), /* @__PURE__ */ p("label", {
|
|
93
94
|
className: "space-y-1 text-sm sm:flex-1",
|
|
94
|
-
children: [/* @__PURE__ */
|
|
95
|
+
children: [/* @__PURE__ */ f("span", {
|
|
95
96
|
className: "block font-medium text-text-primary",
|
|
96
|
-
children: W === "dataset" ? "Dataset" : "Release"
|
|
97
|
-
}), /* @__PURE__ */
|
|
97
|
+
children: W === "dataset" ? T("cosmicintersection.pages.lineage.dataset", "Dataset") : T("cosmicintersection.pages.lineage.release", "Release")
|
|
98
|
+
}), /* @__PURE__ */ p(v, {
|
|
98
99
|
value: Z,
|
|
99
100
|
onValueChange: q,
|
|
100
101
|
disabled: J.length === 0,
|
|
101
|
-
children: [/* @__PURE__ */
|
|
102
|
-
"aria-label":
|
|
102
|
+
children: [/* @__PURE__ */ f(x, {
|
|
103
|
+
"aria-label": T("cosmicintersection.pages.lineage.selectRoot", "Select {{kind}}", { kind: W }),
|
|
103
104
|
className: "w-full sm:max-w-md",
|
|
104
|
-
children: /* @__PURE__ */
|
|
105
|
-
}), /* @__PURE__ */
|
|
105
|
+
children: /* @__PURE__ */ f(S, { placeholder: J.length === 0 ? T("cosmicintersection.pages.lineage.noRootAvailable", "No {{kind}}s available", { kind: W }) : T("cosmicintersection.pages.lineage.selectRoot", "Select a {{kind}}", { kind: W }) })
|
|
106
|
+
}), /* @__PURE__ */ f(y, { children: J.map((e) => /* @__PURE__ */ f(b, {
|
|
106
107
|
value: e.id,
|
|
107
108
|
children: W === "dataset" ? e.name : e.title
|
|
108
109
|
}, e.id)) })]
|
|
109
110
|
})]
|
|
110
111
|
})]
|
|
111
|
-
}),
|
|
112
|
-
message: "We could not load lineage data. Please try again.",
|
|
112
|
+
}), ce ? /* @__PURE__ */ f(o, {
|
|
113
|
+
message: T("cosmicintersection.pages.lineage.error", "We could not load lineage data. Please try again."),
|
|
113
114
|
onRetry: () => {
|
|
114
115
|
D.refetch(), O.refetch();
|
|
115
116
|
}
|
|
116
|
-
}) :
|
|
117
|
-
icon:
|
|
118
|
-
title: "Nothing to trace yet.",
|
|
119
|
-
description: "Register a dataset or publish a release to build a provenance graph from raw observation to citable output.",
|
|
120
|
-
action: /* @__PURE__ */
|
|
117
|
+
}) : se ? /* @__PURE__ */ f(ae, { label: T("cosmicintersection.pages.lineage.loading", "Loading lineage…") }) : F.length === 0 && I.length === 0 ? /* @__PURE__ */ f(a, {
|
|
118
|
+
icon: _,
|
|
119
|
+
title: T("cosmicintersection.pages.lineage.nothingToTrace", "Nothing to trace yet."),
|
|
120
|
+
description: T("cosmicintersection.pages.lineage.nothingToTraceDescription", "Register a dataset or publish a release to build a provenance graph from raw observation to citable output."),
|
|
121
|
+
action: /* @__PURE__ */ f("button", {
|
|
121
122
|
type: "button",
|
|
122
|
-
onClick: () =>
|
|
123
|
+
onClick: () => w("datasets"),
|
|
123
124
|
className: "text-sm font-medium text-text-link underline-offset-2 hover:underline",
|
|
124
|
-
children: "Go to datasets"
|
|
125
|
+
children: T("cosmicintersection.pages.lineage.goToDatasets", "Go to datasets")
|
|
125
126
|
})
|
|
126
|
-
}) : Q.nodes.length === 0 ? /* @__PURE__ */
|
|
127
|
-
icon:
|
|
128
|
-
title:
|
|
129
|
-
description: "Choose a root above to render its provenance graph."
|
|
130
|
-
}) : /* @__PURE__ */
|
|
127
|
+
}) : Q.nodes.length === 0 ? /* @__PURE__ */ f(a, {
|
|
128
|
+
icon: g,
|
|
129
|
+
title: T("cosmicintersection.pages.lineage.selectToTrace", "Select a {{kind}} to trace", { kind: W }),
|
|
130
|
+
description: T("cosmicintersection.pages.lineage.selectToTraceDescription", "Choose a root above to render its provenance graph.")
|
|
131
|
+
}) : /* @__PURE__ */ p("div", {
|
|
131
132
|
className: "space-y-4",
|
|
132
133
|
children: [
|
|
133
|
-
$ ? /* @__PURE__ */
|
|
134
|
+
$ ? /* @__PURE__ */ p("div", {
|
|
134
135
|
className: "flex items-center gap-2 text-sm text-text-secondary",
|
|
135
|
-
children: [/* @__PURE__ */
|
|
136
|
+
children: [/* @__PURE__ */ f(g, {
|
|
136
137
|
className: "size-4 text-text-tertiary",
|
|
137
138
|
"aria-hidden": "true"
|
|
138
|
-
}), /* @__PURE__ */
|
|
139
|
-
"Provenance for",
|
|
140
|
-
" ",
|
|
141
|
-
/* @__PURE__ */ m("span", {
|
|
142
|
-
className: "font-medium text-text-primary",
|
|
143
|
-
children: $
|
|
144
|
-
})
|
|
145
|
-
] })]
|
|
139
|
+
}), /* @__PURE__ */ f("span", { children: T("cosmicintersection.pages.lineage.provenanceFor", "Provenance for {{name}}", { name: $ }) })]
|
|
146
140
|
}) : null,
|
|
147
|
-
/* @__PURE__ */
|
|
141
|
+
/* @__PURE__ */ f(c, {
|
|
148
142
|
model: Q,
|
|
149
143
|
mode: "full",
|
|
150
|
-
onNavigate:
|
|
144
|
+
onNavigate: w
|
|
151
145
|
}),
|
|
152
|
-
/* @__PURE__ */
|
|
146
|
+
/* @__PURE__ */ p("p", {
|
|
153
147
|
className: "flex items-start gap-2 text-xs text-text-tertiary",
|
|
154
|
-
children: [/* @__PURE__ */
|
|
148
|
+
children: [/* @__PURE__ */ f(h, {
|
|
155
149
|
className: "mt-0.5 size-3.5 shrink-0",
|
|
156
150
|
"aria-hidden": "true"
|
|
157
|
-
}), /* @__PURE__ */
|
|
158
|
-
"This graph is derived live from your workspace’s cos entities. Connected runs, notebooks, analyses and releases are matched across the ",
|
|
159
|
-
w,
|
|
160
|
-
" most recent records of each type; older items may not appear."
|
|
161
|
-
] })]
|
|
151
|
+
}), /* @__PURE__ */ f("span", { children: T("cosmicintersection.pages.lineage.graphDisclaimer", "This graph is derived live from your workspace’s cos entities. Connected runs, notebooks, analyses and releases are matched across the {{limit}} most recent records of each type; older items may not appear.", { limit: C }) })]
|
|
162
152
|
})
|
|
163
153
|
]
|
|
164
154
|
})]
|
|
@@ -166,6 +156,6 @@ function T() {
|
|
|
166
156
|
});
|
|
167
157
|
}
|
|
168
158
|
//#endregion
|
|
169
|
-
export {
|
|
159
|
+
export { w as default };
|
|
170
160
|
|
|
171
161
|
//# sourceMappingURL=LineagePage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineagePage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/lineage/LineagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { Info, Share2, Workflow } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosCollectionsQuery,\n useCosDatasetsQuery,\n useCosNotebooksQuery,\n useCosPipelinesQuery,\n useCosReleasesQuery,\n useCosRunsQuery,\n useCosAnalysesQuery,\n useCosSourcesQuery,\n} from '../../api/cosmicApi';\nimport { EmptyState, ErrorState, LoadingState, PageLayout } from '../../components';\nimport {\n LineageGraph,\n buildDatasetLineage,\n buildReleaseLineage,\n type LineageDataPools,\n} from '../../components/LineageGraph';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\n\ntype RootKind = 'dataset' | 'release';\n\nconst PAGE_LIMIT = 100;\n\nexport default function LineagePage() {\n const { navigate } = useCosmicIntersection();\n // Optional deep-link: /lineage/:datasetId preselects that dataset as the root.\n const { datasetId: routeDatasetId } = useParams<{ datasetId?: string }>();\n\n const datasetsQuery = useCosDatasetsQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const releasesQuery = useCosReleasesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const sourcesQuery = useCosSourcesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const collectionsQuery = useCosCollectionsQuery();\n const runsQuery = useCosRunsQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const notebooksQuery = useCosNotebooksQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const analysesQuery = useCosAnalysesQuery({});\n const pipelinesQuery = useCosPipelinesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n\n const datasets = useMemo(\n () => datasetsQuery.data?.cosListDatasets?.items ?? [],\n [datasetsQuery.data]\n );\n const releases = useMemo(\n () => releasesQuery.data?.cosListReleases?.items ?? [],\n [releasesQuery.data]\n );\n const sources = useMemo(\n () => sourcesQuery.data?.cosListSources?.items ?? [],\n [sourcesQuery.data]\n );\n const collections = useMemo(\n () => collectionsQuery.data?.cosListCollections ?? [],\n [collectionsQuery.data]\n );\n const runs = useMemo(() => runsQuery.data?.cosListRuns?.items ?? [], [runsQuery.data]);\n const notebooks = useMemo(\n () => notebooksQuery.data?.cosListNotebooks?.items ?? [],\n [notebooksQuery.data]\n );\n const analyses = useMemo(() => analysesQuery.data?.cosListAnalyses ?? [], [analysesQuery.data]);\n const pipelines = useMemo(\n () => pipelinesQuery.data?.cosListPipelines?.items ?? [],\n [pipelinesQuery.data]\n );\n\n const pools: LineageDataPools = useMemo(\n () => ({\n datasetsById: new Map(datasets.map((item) => [item.id, item])),\n sourcesById: new Map(sources.map((item) => [item.id, item])),\n collectionsById: new Map(collections.map((item) => [item.id, item])),\n runs,\n notebooks,\n analyses,\n releases,\n pipelinesById: new Map(pipelines.map((item) => [item.id, item])),\n }),\n [datasets, sources, collections, runs, notebooks, analyses, releases, pipelines]\n );\n\n const [rootKind, setRootKind] = useState<RootKind>('dataset');\n const [selectedId, setSelectedId] = useState<string>(routeDatasetId ?? '');\n\n // Auto-select the first available root of the current kind once lists load —\n // the documented derive-state-during-render pattern (no effect required).\n const options = rootKind === 'dataset' ? datasets : releases;\n const firstOption = options[0]?.id ?? '';\n const selectionValid = options.some((item) => item.id === selectedId);\n if (!selectionValid && firstOption) {\n setSelectedId(firstOption);\n }\n const activeId = selectionValid ? selectedId : firstOption;\n\n const model = useMemo(() => {\n if (!activeId) {\n return { nodes: [], edges: [] };\n }\n return rootKind === 'dataset'\n ? buildDatasetLineage(activeId, pools)\n : buildReleaseLineage(activeId, pools);\n }, [activeId, rootKind, pools]);\n\n const primaryLoading =\n (datasetsQuery.loading && datasets.length === 0) ||\n (releasesQuery.loading && releases.length === 0);\n const primaryError = datasetsQuery.error || releasesQuery.error;\n\n const handleKindChange = (value: string) => {\n setRootKind(value as RootKind);\n setSelectedId('');\n };\n\n const activeLabel =\n rootKind === 'dataset'\n ? datasets.find((item) => item.id === activeId)?.name\n : releases.find((item) => item.id === activeId)?.title;\n\n return (\n <PageLayout\n title=\"Lineage\"\n description=\"Trace any result from raw observation to citable release.\"\n >\n <div className=\"space-y-6\">\n {/* Root picker */}\n <div className=\"flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 sm:flex-row sm:items-end\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">Trace from</span>\n <Select value={rootKind} onValueChange={handleKindChange}>\n <SelectTrigger aria-label=\"Root entity kind\" className=\"w-full sm:w-44\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"dataset\">Dataset</SelectItem>\n <SelectItem value=\"release\">Release</SelectItem>\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm sm:flex-1\">\n <span className=\"block font-medium text-text-primary\">\n {rootKind === 'dataset' ? 'Dataset' : 'Release'}\n </span>\n <Select value={activeId} onValueChange={setSelectedId} disabled={options.length === 0}>\n <SelectTrigger aria-label={`Select ${rootKind}`} className=\"w-full sm:max-w-md\">\n <SelectValue\n placeholder={\n options.length === 0 ? `No ${rootKind}s available` : `Select a ${rootKind}`\n }\n />\n </SelectTrigger>\n <SelectContent>\n {options.map((item) => (\n <SelectItem key={item.id} value={item.id}>\n {rootKind === 'dataset'\n ? (item as (typeof datasets)[number]).name\n : (item as (typeof releases)[number]).title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {primaryError ? (\n <ErrorState\n message=\"We could not load lineage data. Please try again.\"\n onRetry={() => {\n void datasetsQuery.refetch();\n void releasesQuery.refetch();\n }}\n />\n ) : primaryLoading ? (\n <LoadingState label=\"Loading lineage…\" />\n ) : datasets.length === 0 && releases.length === 0 ? (\n <EmptyState\n icon={Workflow}\n title=\"Nothing to trace yet.\"\n description=\"Register a dataset or publish a release to build a provenance graph from raw observation to citable output.\"\n action={\n <button\n type=\"button\"\n onClick={() => navigate('datasets')}\n className=\"text-sm font-medium text-text-link underline-offset-2 hover:underline\"\n >\n Go to datasets\n </button>\n }\n />\n ) : model.nodes.length === 0 ? (\n <EmptyState\n icon={Share2}\n title={`Select a ${rootKind} to trace`}\n description=\"Choose a root above to render its provenance graph.\"\n />\n ) : (\n <div className=\"space-y-4\">\n {activeLabel ? (\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Share2 className=\"size-4 text-text-tertiary\" aria-hidden=\"true\" />\n <span>\n Provenance for{' '}\n <span className=\"font-medium text-text-primary\">{activeLabel}</span>\n </span>\n </div>\n ) : null}\n\n <LineageGraph model={model} mode=\"full\" onNavigate={navigate} />\n\n <p className=\"flex items-start gap-2 text-xs text-text-tertiary\">\n <Info className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span>\n This graph is derived live from your workspace’s cos entities. Connected runs,\n notebooks, analyses and releases are matched across the {PAGE_LIMIT} most recent\n records of each type; older items may not appear.\n </span>\n </p>\n </div>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LineagePage.js","names":[],"sources":["../../../../src/cosmicintersection/pages/lineage/LineagePage.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\nimport { useParams } from 'react-router';\nimport { Info, Share2, Workflow } from 'lucide-react';\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@burdenoff/fe-libs/ui';\n\nimport {\n useCosCollectionsQuery,\n useCosDatasetsQuery,\n useCosNotebooksQuery,\n useCosPipelinesQuery,\n useCosReleasesQuery,\n useCosRunsQuery,\n useCosAnalysesQuery,\n useCosSourcesQuery,\n} from '../../api/cosmicApi';\nimport { EmptyState, ErrorState, LoadingState, PageLayout } from '../../components';\nimport {\n LineageGraph,\n buildDatasetLineage,\n buildReleaseLineage,\n type LineageDataPools,\n} from '../../components/LineageGraph';\nimport { useCosmicIntersection } from '../../context/CosmicIntersectionContext';\nimport { useTr } from '../../../shared/hooks/useTr';\n\ntype RootKind = 'dataset' | 'release';\n\nconst PAGE_LIMIT = 100;\n\nexport default function LineagePage() {\n const { navigate } = useCosmicIntersection();\n const tr = useTr();\n // Optional deep-link: /lineage/:datasetId preselects that dataset as the root.\n const { datasetId: routeDatasetId } = useParams<{ datasetId?: string }>();\n\n const datasetsQuery = useCosDatasetsQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const releasesQuery = useCosReleasesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const sourcesQuery = useCosSourcesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const collectionsQuery = useCosCollectionsQuery();\n const runsQuery = useCosRunsQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const notebooksQuery = useCosNotebooksQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n const analysesQuery = useCosAnalysesQuery({});\n const pipelinesQuery = useCosPipelinesQuery({ pagination: { limit: PAGE_LIMIT, offset: 0 } });\n\n const datasets = useMemo(\n () => datasetsQuery.data?.cosListDatasets?.items ?? [],\n [datasetsQuery.data]\n );\n const releases = useMemo(\n () => releasesQuery.data?.cosListReleases?.items ?? [],\n [releasesQuery.data]\n );\n const sources = useMemo(\n () => sourcesQuery.data?.cosListSources?.items ?? [],\n [sourcesQuery.data]\n );\n const collections = useMemo(\n () => collectionsQuery.data?.cosListCollections ?? [],\n [collectionsQuery.data]\n );\n const runs = useMemo(() => runsQuery.data?.cosListRuns?.items ?? [], [runsQuery.data]);\n const notebooks = useMemo(\n () => notebooksQuery.data?.cosListNotebooks?.items ?? [],\n [notebooksQuery.data]\n );\n const analyses = useMemo(() => analysesQuery.data?.cosListAnalyses ?? [], [analysesQuery.data]);\n const pipelines = useMemo(\n () => pipelinesQuery.data?.cosListPipelines?.items ?? [],\n [pipelinesQuery.data]\n );\n\n const pools: LineageDataPools = useMemo(\n () => ({\n datasetsById: new Map(datasets.map((item) => [item.id, item])),\n sourcesById: new Map(sources.map((item) => [item.id, item])),\n collectionsById: new Map(collections.map((item) => [item.id, item])),\n runs,\n notebooks,\n analyses,\n releases,\n pipelinesById: new Map(pipelines.map((item) => [item.id, item])),\n }),\n [datasets, sources, collections, runs, notebooks, analyses, releases, pipelines]\n );\n\n const [rootKind, setRootKind] = useState<RootKind>('dataset');\n const [selectedId, setSelectedId] = useState<string>(routeDatasetId ?? '');\n\n // Auto-select the first available root of the current kind once lists load —\n // the documented derive-state-during-render pattern (no effect required).\n const options = rootKind === 'dataset' ? datasets : releases;\n const firstOption = options[0]?.id ?? '';\n const selectionValid = options.some((item) => item.id === selectedId);\n if (!selectionValid && firstOption) {\n setSelectedId(firstOption);\n }\n const activeId = selectionValid ? selectedId : firstOption;\n\n const model = useMemo(() => {\n if (!activeId) {\n return { nodes: [], edges: [] };\n }\n return rootKind === 'dataset'\n ? buildDatasetLineage(activeId, pools)\n : buildReleaseLineage(activeId, pools);\n }, [activeId, rootKind, pools]);\n\n const primaryLoading =\n (datasetsQuery.loading && datasets.length === 0) ||\n (releasesQuery.loading && releases.length === 0);\n const primaryError = datasetsQuery.error || releasesQuery.error;\n\n const handleKindChange = (value: string) => {\n setRootKind(value as RootKind);\n setSelectedId('');\n };\n\n const activeLabel =\n rootKind === 'dataset'\n ? datasets.find((item) => item.id === activeId)?.name\n : releases.find((item) => item.id === activeId)?.title;\n\n return (\n <PageLayout\n title={tr('cosmicintersection.pages.lineage.title', 'Lineage')}\n description={tr(\n 'cosmicintersection.pages.lineage.description',\n 'Trace any result from raw observation to citable release.'\n )}\n >\n <div className=\"space-y-6\">\n {/* Root picker */}\n <div className=\"flex flex-col gap-3 rounded-card border border-border-default bg-bg-elevated p-4 sm:flex-row sm:items-end\">\n <label className=\"space-y-1 text-sm\">\n <span className=\"block font-medium text-text-primary\">\n {tr('cosmicintersection.pages.lineage.traceFrom', 'Trace from')}\n </span>\n <Select value={rootKind} onValueChange={handleKindChange}>\n <SelectTrigger\n aria-label={tr(\n 'cosmicintersection.pages.lineage.rootEntityKind',\n 'Root entity kind'\n )}\n className=\"w-full sm:w-44\"\n >\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n <SelectItem value=\"dataset\">\n {tr('cosmicintersection.pages.lineage.dataset', 'Dataset')}\n </SelectItem>\n <SelectItem value=\"release\">\n {tr('cosmicintersection.pages.lineage.release', 'Release')}\n </SelectItem>\n </SelectContent>\n </Select>\n </label>\n\n <label className=\"space-y-1 text-sm sm:flex-1\">\n <span className=\"block font-medium text-text-primary\">\n {rootKind === 'dataset'\n ? tr('cosmicintersection.pages.lineage.dataset', 'Dataset')\n : tr('cosmicintersection.pages.lineage.release', 'Release')}\n </span>\n <Select value={activeId} onValueChange={setSelectedId} disabled={options.length === 0}>\n <SelectTrigger\n aria-label={tr('cosmicintersection.pages.lineage.selectRoot', 'Select {{kind}}', {\n kind: rootKind,\n })}\n className=\"w-full sm:max-w-md\"\n >\n <SelectValue\n placeholder={\n options.length === 0\n ? tr(\n 'cosmicintersection.pages.lineage.noRootAvailable',\n 'No {{kind}}s available',\n { kind: rootKind }\n )\n : tr('cosmicintersection.pages.lineage.selectRoot', 'Select a {{kind}}', {\n kind: rootKind,\n })\n }\n />\n </SelectTrigger>\n <SelectContent>\n {options.map((item) => (\n <SelectItem key={item.id} value={item.id}>\n {rootKind === 'dataset'\n ? (item as (typeof datasets)[number]).name\n : (item as (typeof releases)[number]).title}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </label>\n </div>\n\n {primaryError ? (\n <ErrorState\n message={tr(\n 'cosmicintersection.pages.lineage.error',\n 'We could not load lineage data. Please try again.'\n )}\n onRetry={() => {\n void datasetsQuery.refetch();\n void releasesQuery.refetch();\n }}\n />\n ) : primaryLoading ? (\n <LoadingState\n label={tr('cosmicintersection.pages.lineage.loading', 'Loading lineage…')}\n />\n ) : datasets.length === 0 && releases.length === 0 ? (\n <EmptyState\n icon={Workflow}\n title={tr('cosmicintersection.pages.lineage.nothingToTrace', 'Nothing to trace yet.')}\n description={tr(\n 'cosmicintersection.pages.lineage.nothingToTraceDescription',\n 'Register a dataset or publish a release to build a provenance graph from raw observation to citable output.'\n )}\n action={\n <button\n type=\"button\"\n onClick={() => navigate('datasets')}\n className=\"text-sm font-medium text-text-link underline-offset-2 hover:underline\"\n >\n {tr('cosmicintersection.pages.lineage.goToDatasets', 'Go to datasets')}\n </button>\n }\n />\n ) : model.nodes.length === 0 ? (\n <EmptyState\n icon={Share2}\n title={tr(\n 'cosmicintersection.pages.lineage.selectToTrace',\n 'Select a {{kind}} to trace',\n { kind: rootKind }\n )}\n description={tr(\n 'cosmicintersection.pages.lineage.selectToTraceDescription',\n 'Choose a root above to render its provenance graph.'\n )}\n />\n ) : (\n <div className=\"space-y-4\">\n {activeLabel ? (\n <div className=\"flex items-center gap-2 text-sm text-text-secondary\">\n <Share2 className=\"size-4 text-text-tertiary\" aria-hidden=\"true\" />\n <span>\n {tr('cosmicintersection.pages.lineage.provenanceFor', 'Provenance for {{name}}', {\n name: activeLabel,\n })}\n </span>\n </div>\n ) : null}\n\n <LineageGraph model={model} mode=\"full\" onNavigate={navigate} />\n\n <p className=\"flex items-start gap-2 text-xs text-text-tertiary\">\n <Info className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span>\n {tr(\n 'cosmicintersection.pages.lineage.graphDisclaimer',\n 'This graph is derived live from your workspace’s cos entities. Connected runs, notebooks, analyses and releases are matched across the {{limit}} most recent records of each type; older items may not appear.',\n { limit: PAGE_LIMIT }\n )}\n </span>\n </p>\n </div>\n )}\n </div>\n </PageLayout>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NotebooksPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/notebooks/NotebooksPage.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NotebooksPage.d.ts","sourceRoot":"","sources":["../../../../src/cosmicintersection/pages/notebooks/NotebooksPage.tsx"],"names":[],"mappings":"AAmEA,MAAM,CAAC,OAAO,UAAU,aAAa,4CAqTpC"}
|