@burdenoff/microfe-cosmicintersection 2026.704.2 → 2026.704.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/cosmicintersection/CosmicIntersectionRoutes.js +39 -27
  2. package/dist/cosmicintersection/CosmicIntersectionRoutes.js.map +1 -1
  3. package/dist/cosmicintersection/api/cosmicApi.js +6 -0
  4. package/dist/cosmicintersection/api/cosmicApi.js.map +1 -1
  5. package/dist/cosmicintersection/components/FacetPanel.js +66 -0
  6. package/dist/cosmicintersection/components/FacetPanel.js.map +1 -0
  7. package/dist/cosmicintersection/components/LineageGraph.js +388 -0
  8. package/dist/cosmicintersection/components/LineageGraph.js.map +1 -0
  9. package/dist/cosmicintersection/components/ResultsChart.js +329 -0
  10. package/dist/cosmicintersection/components/ResultsChart.js.map +1 -0
  11. package/dist/cosmicintersection/components/StepDAG.js +104 -0
  12. package/dist/cosmicintersection/components/StepDAG.js.map +1 -0
  13. package/dist/cosmicintersection/pages/access/AccessPage.js +207 -155
  14. package/dist/cosmicintersection/pages/access/AccessPage.js.map +1 -1
  15. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js +325 -165
  16. package/dist/cosmicintersection/pages/analyses/AnalysesPage.js.map +1 -1
  17. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js +138 -93
  18. package/dist/cosmicintersection/pages/collections/CollectionDetailPage.js.map +1 -1
  19. package/dist/cosmicintersection/pages/collections/CollectionFormPage.js.map +1 -1
  20. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js +26 -15
  21. package/dist/cosmicintersection/pages/dashboard/DashboardPage.js.map +1 -1
  22. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js +345 -219
  23. package/dist/cosmicintersection/pages/datasets/DatasetDetailPage.js.map +1 -1
  24. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js +321 -163
  25. package/dist/cosmicintersection/pages/datasets/DatasetsPage.js.map +1 -1
  26. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js +358 -0
  27. package/dist/cosmicintersection/pages/discovery/DiscoveryPage.js.map +1 -0
  28. package/dist/cosmicintersection/pages/lineage/LineagePage.js +171 -0
  29. package/dist/cosmicintersection/pages/lineage/LineagePage.js.map +1 -0
  30. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js +232 -162
  31. package/dist/cosmicintersection/pages/notebooks/NotebookDetailPage.js.map +1 -1
  32. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js +143 -82
  33. package/dist/cosmicintersection/pages/notebooks/NotebooksPage.js.map +1 -1
  34. package/dist/cosmicintersection/pages/pipelines/PipelineDetailPage.js +286 -142
  35. package/dist/cosmicintersection/pages/pipelines/PipelineDetailPage.js.map +1 -1
  36. package/dist/cosmicintersection/pages/pipelines/PipelineFormPage.js +305 -103
  37. package/dist/cosmicintersection/pages/pipelines/PipelineFormPage.js.map +1 -1
  38. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js +183 -79
  39. package/dist/cosmicintersection/pages/pipelines/PipelinesPage.js.map +1 -1
  40. package/dist/cosmicintersection/pages/releases/ReleasesPage.js +262 -170
  41. package/dist/cosmicintersection/pages/releases/ReleasesPage.js.map +1 -1
  42. package/dist/cosmicintersection/pages/runs/RunDetailPage.js +179 -136
  43. package/dist/cosmicintersection/pages/runs/RunDetailPage.js.map +1 -1
  44. package/dist/cosmicintersection/pages/runs/RunsPage.js +124 -47
  45. package/dist/cosmicintersection/pages/runs/RunsPage.js.map +1 -1
  46. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js +114 -85
  47. package/dist/cosmicintersection/pages/sources/SourceDetailPage.js.map +1 -1
  48. package/dist/cosmicintersection/pages/sources/SourcesPage.js +263 -152
  49. package/dist/cosmicintersection/pages/sources/SourcesPage.js.map +1 -1
  50. package/package.json +1 -1
@@ -0,0 +1,171 @@
1
+ import { useCosmicIntersection as e } from "../../context/CosmicIntersectionContext.js";
2
+ import { useCosAnalysesQuery as t, useCosCollectionsQuery as ee, useCosDatasetsQuery as n, useCosNotebooksQuery as r, useCosPipelinesQuery as i, useCosReleasesQuery as a, useCosRunsQuery as o, useCosSourcesQuery as te } from "../../api/cosmicApi.js";
3
+ import s from "../../components/EmptyState.js";
4
+ import ne from "../../components/ErrorState.js";
5
+ import re from "../../components/LoadingState.js";
6
+ import c from "../../components/PageLayout.js";
7
+ import "../../components/index.js";
8
+ import l, { buildDatasetLineage as u, buildReleaseLineage as d } from "../../components/LineageGraph.js";
9
+ import { useMemo as f, useState as p } from "react";
10
+ import { jsx as m, jsxs as h } from "react/jsx-runtime";
11
+ import { useParams as g } from "react-router-dom";
12
+ import { Info as ie, Share2 as _, Workflow as v } from "lucide-react";
13
+ import { Select as y, SelectContent as b, SelectItem as x, SelectTrigger as S, SelectValue as C } from "@burdenoff/fe-libs/ui";
14
+ //#region src/cosmicintersection/pages/lineage/LineagePage.tsx
15
+ var w = 100;
16
+ function T() {
17
+ let { navigate: T } = e(), { datasetId: E } = g(), D = n({ pagination: {
18
+ limit: w,
19
+ offset: 0
20
+ } }), O = a({ pagination: {
21
+ limit: w,
22
+ offset: 0
23
+ } }), k = te({ pagination: {
24
+ limit: w,
25
+ offset: 0
26
+ } }), A = ee(), j = o({ pagination: {
27
+ limit: w,
28
+ offset: 0
29
+ } }), M = r({ pagination: {
30
+ limit: w,
31
+ offset: 0
32
+ } }), N = t({}), P = i({ pagination: {
33
+ limit: w,
34
+ offset: 0
35
+ } }), F = f(() => D.data?.cosListDatasets?.items ?? [], [D.data]), I = f(() => O.data?.cosListReleases?.items ?? [], [O.data]), L = f(() => k.data?.cosListSources?.items ?? [], [k.data]), R = f(() => A.data?.cosListCollections ?? [], [A.data]), z = f(() => j.data?.cosListRuns?.items ?? [], [j.data]), B = f(() => M.data?.cosListNotebooks?.items ?? [], [M.data]), V = f(() => N.data?.cosListAnalyses ?? [], [N.data]), H = f(() => P.data?.cosListPipelines?.items ?? [], [P.data]), U = f(() => ({
36
+ datasetsById: new Map(F.map((e) => [e.id, e])),
37
+ sourcesById: new Map(L.map((e) => [e.id, e])),
38
+ collectionsById: new Map(R.map((e) => [e.id, e])),
39
+ runs: z,
40
+ notebooks: B,
41
+ analyses: V,
42
+ releases: I,
43
+ pipelinesById: new Map(H.map((e) => [e.id, e]))
44
+ }), [
45
+ F,
46
+ L,
47
+ R,
48
+ z,
49
+ B,
50
+ V,
51
+ I,
52
+ H
53
+ ]), [W, G] = p("dataset"), [K, q] = p(E ?? ""), J = W === "dataset" ? F : I, Y = J[0]?.id ?? "", X = J.some((e) => e.id === K);
54
+ !X && Y && q(Y);
55
+ let Z = X ? K : Y, Q = f(() => Z ? W === "dataset" ? u(Z, U) : d(Z, U) : {
56
+ nodes: [],
57
+ edges: []
58
+ }, [
59
+ Z,
60
+ W,
61
+ U
62
+ ]), ae = D.loading && F.length === 0 || O.loading && I.length === 0, oe = D.error || O.error, se = (e) => {
63
+ G(e), q("");
64
+ }, $ = W === "dataset" ? F.find((e) => e.id === Z)?.name : I.find((e) => e.id === Z)?.title;
65
+ return /* @__PURE__ */ m(c, {
66
+ title: "Lineage",
67
+ description: "Trace any result from raw observation to citable release.",
68
+ children: /* @__PURE__ */ h("div", {
69
+ className: "space-y-6",
70
+ children: [/* @__PURE__ */ h("div", {
71
+ 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__ */ h("label", {
73
+ className: "space-y-1 text-sm",
74
+ children: [/* @__PURE__ */ m("span", {
75
+ className: "block font-medium text-text-primary",
76
+ children: "Trace from"
77
+ }), /* @__PURE__ */ h(y, {
78
+ value: W,
79
+ onValueChange: se,
80
+ children: [/* @__PURE__ */ m(S, {
81
+ "aria-label": "Root entity kind",
82
+ className: "w-full sm:w-44",
83
+ children: /* @__PURE__ */ m(C, {})
84
+ }), /* @__PURE__ */ h(b, { children: [/* @__PURE__ */ m(x, {
85
+ value: "dataset",
86
+ children: "Dataset"
87
+ }), /* @__PURE__ */ m(x, {
88
+ value: "release",
89
+ children: "Release"
90
+ })] })]
91
+ })]
92
+ }), /* @__PURE__ */ h("label", {
93
+ className: "space-y-1 text-sm sm:flex-1",
94
+ children: [/* @__PURE__ */ m("span", {
95
+ className: "block font-medium text-text-primary",
96
+ children: W === "dataset" ? "Dataset" : "Release"
97
+ }), /* @__PURE__ */ h(y, {
98
+ value: Z,
99
+ onValueChange: q,
100
+ disabled: J.length === 0,
101
+ children: [/* @__PURE__ */ m(S, {
102
+ "aria-label": `Select ${W}`,
103
+ className: "w-full sm:max-w-md",
104
+ children: /* @__PURE__ */ m(C, { placeholder: J.length === 0 ? `No ${W}s available` : `Select a ${W}` })
105
+ }), /* @__PURE__ */ m(b, { children: J.map((e) => /* @__PURE__ */ m(x, {
106
+ value: e.id,
107
+ children: W === "dataset" ? e.name : e.title
108
+ }, e.id)) })]
109
+ })]
110
+ })]
111
+ }), oe ? /* @__PURE__ */ m(ne, {
112
+ message: "We could not load lineage data. Please try again.",
113
+ onRetry: () => {
114
+ D.refetch(), O.refetch();
115
+ }
116
+ }) : ae ? /* @__PURE__ */ m(re, { label: "Loading lineage…" }) : F.length === 0 && I.length === 0 ? /* @__PURE__ */ m(s, {
117
+ icon: v,
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__ */ m("button", {
121
+ type: "button",
122
+ onClick: () => T("datasets"),
123
+ className: "text-sm font-medium text-text-link underline-offset-2 hover:underline",
124
+ children: "Go to datasets"
125
+ })
126
+ }) : Q.nodes.length === 0 ? /* @__PURE__ */ m(s, {
127
+ icon: _,
128
+ title: `Select a ${W} to trace`,
129
+ description: "Choose a root above to render its provenance graph."
130
+ }) : /* @__PURE__ */ h("div", {
131
+ className: "space-y-4",
132
+ children: [
133
+ $ ? /* @__PURE__ */ h("div", {
134
+ className: "flex items-center gap-2 text-sm text-text-secondary",
135
+ children: [/* @__PURE__ */ m(_, {
136
+ className: "size-4 text-text-tertiary",
137
+ "aria-hidden": "true"
138
+ }), /* @__PURE__ */ h("span", { children: [
139
+ "Provenance for",
140
+ " ",
141
+ /* @__PURE__ */ m("span", {
142
+ className: "font-medium text-text-primary",
143
+ children: $
144
+ })
145
+ ] })]
146
+ }) : null,
147
+ /* @__PURE__ */ m(l, {
148
+ model: Q,
149
+ mode: "full",
150
+ onNavigate: T
151
+ }),
152
+ /* @__PURE__ */ h("p", {
153
+ className: "flex items-start gap-2 text-xs text-text-tertiary",
154
+ children: [/* @__PURE__ */ m(ie, {
155
+ className: "mt-0.5 size-3.5 shrink-0",
156
+ "aria-hidden": "true"
157
+ }), /* @__PURE__ */ h("span", { children: [
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
+ ] })]
162
+ })
163
+ ]
164
+ })]
165
+ })
166
+ });
167
+ }
168
+ //#endregion
169
+ export { T as default };
170
+
171
+ //# sourceMappingURL=LineagePage.js.map
@@ -0,0 +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-dom';\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&rsquo;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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"}