@loopstack/loopstack-studio 0.22.0 → 0.23.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 (98) hide show
  1. package/dist/app/EnvironmentEmbedRoot.js +20 -18
  2. package/dist/components/dynamic-form/Form.js +50 -27
  3. package/dist/components/dynamic-form/InputController.js +3 -1
  4. package/dist/components/dynamic-form/fields/MarkdownViewField.js +20 -0
  5. package/dist/components/feedback/ErrorBoundary.js +43 -0
  6. package/dist/components/{LoadingCentered.js → feedback/LoadingCentered.js} +1 -1
  7. package/dist/components/feedback/index.js +5 -0
  8. package/dist/components/index.js +6 -3
  9. package/dist/components/layout/MainLayout.js +32 -16
  10. package/dist/components/layout/StudioSidebar.js +165 -0
  11. package/dist/components/ui-widgets/widgets/SandboxRun.js +1 -0
  12. package/dist/features/code-explorer/CodeExplorer.js +6 -0
  13. package/dist/features/code-explorer/components/CodeExplorerTree.js +5 -0
  14. package/dist/features/code-explorer/components/CodeExplorerTreeNode.js +82 -0
  15. package/dist/features/code-explorer/components/FileContentViewer.js +1 -0
  16. package/dist/features/code-explorer/components/FileTabsBar.js +3 -190
  17. package/dist/features/code-explorer/components/FileTabsBarBase.js +190 -0
  18. package/dist/features/code-explorer/index.js +4 -0
  19. package/dist/features/code-explorer/providers/CodeExplorerProvider.js +2 -162
  20. package/dist/features/code-explorer/utils/fileIcons.js +7 -4
  21. package/dist/features/debug/components/ConfigFlowViewer.js +1 -1
  22. package/dist/features/debug/components/PipelineFlowViewer.js +47 -46
  23. package/dist/features/debug/components/pipeline-flow/WorkflowGraph.js +19 -19
  24. package/dist/features/debug/index.js +3 -0
  25. package/dist/features/documents/DocumentRenderer.js +58 -0
  26. package/dist/features/{workbench → documents}/components/DocumentItem.js +1 -1
  27. package/dist/features/{workbench → documents}/components/DocumentMetadataPills.js +2 -2
  28. package/dist/features/{workbench/components → documents}/document-details/DocumentDetails.js +3 -3
  29. package/dist/features/{workbench/components → documents}/document-details/PromptDetails.js +3 -3
  30. package/dist/features/documents/index.js +4 -0
  31. package/dist/features/{workbench/components/document-renderer → documents/renderers}/AiMessage.js +5 -5
  32. package/dist/features/documents/renderers/ClaudeMessage.js +96 -0
  33. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentDebugRenderer.js +1 -1
  34. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentFormRenderer.js +3 -3
  35. package/dist/features/{workbench/components/document-renderer → documents/renderers}/DocumentMessageRenderer.js +1 -1
  36. package/dist/features/{workbench/components/document-renderer → documents/renderers}/ErrorMessageRenderer.js +1 -1
  37. package/dist/features/{workbench/components/document-renderer → documents/renderers}/LinkMessageRenderer.js +1 -1
  38. package/dist/features/{workbench/components/document-renderer → documents/renderers}/MarkdownMessageRenderer.js +2 -2
  39. package/dist/features/{workbench/components/document-renderer → documents/renderers}/PlainMessageRenderer.js +1 -1
  40. package/dist/features/health/index.js +1 -0
  41. package/dist/features/workbench/NavigationItems.js +29 -29
  42. package/dist/features/workbench/Workbench.js +71 -99
  43. package/dist/features/workbench/WorkflowItem.js +63 -55
  44. package/dist/features/workbench/WorkflowList.js +52 -81
  45. package/dist/features/workbench/components/NewRunDialog.js +2 -1
  46. package/dist/features/workbench/components/RemoteFileTabsBar.js +18 -0
  47. package/dist/features/workbench/components/RemoteFileTree.js +90 -0
  48. package/dist/features/workbench/components/WorkbenchFilesPanel.js +60 -0
  49. package/dist/features/workbench/components/WorkbenchFlowPanel.js +4 -3
  50. package/dist/features/workbench/components/WorkbenchIconSidebar.js +37 -29
  51. package/dist/features/workbench/components/WorkflowHistoryItem.js +11 -11
  52. package/dist/features/workbench/components/buttons/WorkflowButtons.js +49 -50
  53. package/dist/features/workbench/hooks/useWorkflowData.js +49 -0
  54. package/dist/features/workbench/hooks/useWorkflowListState.js +50 -0
  55. package/dist/features/workbench/index.js +8 -0
  56. package/dist/features/workbench/providers/RemoteFileExplorerProvider.js +145 -0
  57. package/dist/features/workbench/providers/WorkbenchLayoutProvider.js +47 -45
  58. package/dist/features/workspaces/components/CreateWorkspace.js +1 -1
  59. package/dist/features/workspaces/components/ExecutionTimeline.js +1 -1
  60. package/dist/features/workspaces/components/PipelineForm.js +2 -2
  61. package/dist/features/workspaces/components/WorkspaceHomePage.js +93 -0
  62. package/dist/features/workspaces/index.js +3 -0
  63. package/dist/hooks/index.js +3 -2
  64. package/dist/hooks/query-keys.js +138 -0
  65. package/dist/hooks/useAuth.js +43 -42
  66. package/dist/hooks/useConfig.js +31 -35
  67. package/dist/hooks/useDashboard.js +9 -13
  68. package/dist/hooks/useDebounce.js +8 -17
  69. package/dist/hooks/useDocuments.js +4 -9
  70. package/dist/hooks/useFiles.js +1 -51
  71. package/dist/hooks/useNamespaces.js +2 -8
  72. package/dist/hooks/usePipelines.js +132 -155
  73. package/dist/hooks/useProcessor.js +11 -14
  74. package/dist/hooks/useWorkflows.js +40 -62
  75. package/dist/hooks/useWorkspaces.js +105 -110
  76. package/dist/index.d.ts +105 -3
  77. package/dist/index.js +15 -7
  78. package/dist/node_modules/@xyflow/react/dist/esm/index.js +1 -1
  79. package/dist/pages/DashboardPage.js +1 -1
  80. package/dist/pages/DebugWorkflowDetailsPage.js +2 -2
  81. package/dist/pages/EmbedWorkbenchPage.js +4 -3
  82. package/dist/pages/PipelineDebugPage.js +6 -5
  83. package/dist/pages/PreviewWorkbenchPage.js +228 -128
  84. package/dist/pages/RunsListPage.js +52 -24
  85. package/dist/pages/StudioLandingPage.js +1 -0
  86. package/dist/pages/WorkbenchPage.js +3 -2
  87. package/dist/pages/WorkspacePage.js +103 -51
  88. package/dist/pages/WorkspaceRunsPage.js +71 -0
  89. package/dist/providers/InvalidationEventsProvider.js +9 -11
  90. package/dist/providers/StudioProvider.js +2 -2
  91. package/dist/routing/LocalRouter.js +18 -8
  92. package/package.json +2 -2
  93. package/dist/features/workbench/components/DocumentRenderer.js +0 -54
  94. /package/dist/components/{content → feedback}/ErrorAlert.js +0 -0
  95. /package/dist/components/{snackbars → feedback}/ErrorSnackbar.js +0 -0
  96. /package/dist/components/{snackbars → feedback}/Snackbar.js +0 -0
  97. /package/dist/features/{workbench → documents}/components/DocumentList.js +0 -0
  98. /package/dist/features/{workbench/components/document-renderer → documents/renderers}/AiMessageContent.js +0 -0
@@ -0,0 +1,145 @@
1
+ import { c } from "react/compiler-runtime";
2
+ import { createContext, useCallback, useContext, useMemo, useState } from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+ import { useQuery, useQueryClient } from "@tanstack/react-query";
5
+ var RemoteFileExplorerContext = createContext(null);
6
+ function RemoteFileExplorerProvider(s) {
7
+ let l = c(45), { children: u } = s, d = useQueryClient(), f;
8
+ l[0] === Symbol.for("react.memo_cache_sentinel") ? (f = /* @__PURE__ */ new Set(), l[0] = f) : f = l[0];
9
+ let [p, m] = useState(f), h;
10
+ l[1] === Symbol.for("react.memo_cache_sentinel") ? (h = [], l[1] = h) : h = l[1];
11
+ let [g, _] = useState(h), [v, y] = useState(null), b;
12
+ l[2] === Symbol.for("react.memo_cache_sentinel") ? (b = {
13
+ queryKey: ["remote-agent-file-tree"],
14
+ queryFn: _temp,
15
+ staleTime: 3e4
16
+ }, l[2] = b) : b = l[2];
17
+ let x = useQuery(b), S = v?.path, C;
18
+ l[3] === S ? C = l[4] : (C = ["remote-agent-file-content", S], l[3] = S, l[4] = C);
19
+ let w;
20
+ l[5] === v ? w = l[6] : (w = async () => {
21
+ let e = new URL("http://localhost:8000/api/v1/files/read");
22
+ e.searchParams.set("path", v.path);
23
+ let s = await fetch(e.toString(), { credentials: "include" });
24
+ if (!s.ok) {
25
+ let e = await s.text();
26
+ throw Error(`Failed to read file (${s.status}): ${e}`);
27
+ }
28
+ return (await s.json()).content;
29
+ }, l[5] = v, l[6] = w);
30
+ let T = !!v && v.type === "file", E;
31
+ l[7] !== C || l[8] !== w || l[9] !== T ? (E = {
32
+ queryKey: C,
33
+ queryFn: w,
34
+ enabled: T,
35
+ staleTime: 15e3
36
+ }, l[7] = C, l[8] = w, l[9] = T, l[10] = E) : E = l[10];
37
+ let D = useQuery(E), O;
38
+ l[11] === Symbol.for("react.memo_cache_sentinel") ? (O = (e) => {
39
+ m((s) => {
40
+ let l = new Set(s);
41
+ return l.has(e) ? l.delete(e) : l.add(e), l;
42
+ });
43
+ }, l[11] = O) : O = l[11];
44
+ let k = O, A;
45
+ l[12] === Symbol.for("react.memo_cache_sentinel") ? (A = (e) => {
46
+ e.type === "file" && (y(e), _((s) => s.some((s) => s.path === e.path) ? s : [...s, e]));
47
+ }, l[12] = A) : A = l[12];
48
+ let j = A, M;
49
+ l[13] === v?.path ? M = l[14] : (M = (e) => {
50
+ _((s) => {
51
+ let l = s.filter((s) => s.path !== e.path);
52
+ if (v?.path === e.path) if (l.length > 0) {
53
+ let u = s.findIndex((s) => s.path === e.path);
54
+ y(l[Math.max(0, u - 1)]);
55
+ } else y(null);
56
+ return l;
57
+ });
58
+ }, l[13] = v?.path, l[14] = M);
59
+ let N = M, P;
60
+ l[15] === v ? P = l[16] : (P = () => {
61
+ v && _((e) => {
62
+ let s = e.filter((e) => e.path !== v.path);
63
+ if (s.length > 0) {
64
+ let l = e.findIndex((e) => e.path === v.path);
65
+ y(s[Math.max(0, l - 1)]);
66
+ } else y(null);
67
+ return s;
68
+ });
69
+ }, l[15] = v, l[16] = P);
70
+ let F = P, I;
71
+ l[17] === Symbol.for("react.memo_cache_sentinel") ? (I = () => {
72
+ _([]), y(null);
73
+ }, l[17] = I) : I = l[17];
74
+ let L = I, R;
75
+ l[18] === Symbol.for("react.memo_cache_sentinel") ? (R = (e) => {
76
+ _([e]), y(e);
77
+ }, l[18] = R) : R = l[18];
78
+ let z = R, B;
79
+ l[19] === v ? B = l[20] : (B = (e) => {
80
+ _((s) => {
81
+ let l = s.findIndex((s) => s.path === e.path);
82
+ if (l <= 0) return s;
83
+ let u = s.slice(l);
84
+ return v && s.findIndex((e) => e.path === v.path) < l && y(e), u;
85
+ });
86
+ }, l[19] = v, l[20] = B);
87
+ let V = B, H;
88
+ l[21] === v ? H = l[22] : (H = (e) => {
89
+ _((s) => {
90
+ let l = s.findIndex((s) => s.path === e.path);
91
+ if (l < 0 || l >= s.length - 1) return s;
92
+ let u = s.slice(0, l + 1);
93
+ return v && s.findIndex((e) => e.path === v.path) > l && y(e), u;
94
+ });
95
+ }, l[21] = v, l[22] = H);
96
+ let U = H, W;
97
+ l[23] === d ? W = l[24] : (W = () => {
98
+ d.invalidateQueries({ queryKey: ["remote-agent-file-tree"] });
99
+ }, l[23] = d, l[24] = W);
100
+ let G = W, K;
101
+ l[25] === x.data ? K = l[26] : (K = x.data ?? [], l[25] = x.data, l[26] = K);
102
+ let q = x.isLoading && !x.data, J = D.data ?? null, Y = D.isLoading && !!v, X;
103
+ l[27] !== F || l[28] !== N || l[29] !== V || l[30] !== U || l[31] !== p || l[32] !== g || l[33] !== G || l[34] !== v || l[35] !== K || l[36] !== q || l[37] !== J || l[38] !== Y || l[39] !== x.error || l[40] !== x.isFetching ? (X = {
104
+ nodes: K,
105
+ isTreeLoading: q,
106
+ treeError: x.error,
107
+ openFiles: g,
108
+ selectedFile: v,
109
+ fileContent: J,
110
+ isContentLoading: Y,
111
+ expandedFolders: p,
112
+ toggleFolder: k,
113
+ selectFile: j,
114
+ closeFile: N,
115
+ closeAll: L,
116
+ closeOthers: z,
117
+ closeToLeft: V,
118
+ closeToRight: U,
119
+ clearSelection: F,
120
+ refreshTree: G,
121
+ isFetchingTree: x.isFetching
122
+ }, l[27] = F, l[28] = N, l[29] = V, l[30] = U, l[31] = p, l[32] = g, l[33] = G, l[34] = v, l[35] = K, l[36] = q, l[37] = J, l[38] = Y, l[39] = x.error, l[40] = x.isFetching, l[41] = X) : X = l[41];
123
+ let Z = X, Q;
124
+ return l[42] !== u || l[43] !== Z ? (Q = /* @__PURE__ */ jsx(RemoteFileExplorerContext.Provider, {
125
+ value: Z,
126
+ children: u
127
+ }), l[42] = u, l[43] = Z, l[44] = Q) : Q = l[44], Q;
128
+ }
129
+ async function _temp() {
130
+ let e = await fetch("http://localhost:8000/api/v1/files/tree?path=./src", { credentials: "include" });
131
+ if (!e.ok) {
132
+ let s = await e.text();
133
+ throw Error(`Failed to load file tree (${e.status}): ${s}`);
134
+ }
135
+ return await e.json();
136
+ }
137
+ function useRemoteFileExplorer() {
138
+ let e = useContext(RemoteFileExplorerContext);
139
+ if (!e) throw Error("useRemoteFileExplorer must be used within RemoteFileExplorerProvider");
140
+ return e;
141
+ }
142
+ function useOptionalRemoteFileExplorer() {
143
+ return useContext(RemoteFileExplorerContext);
144
+ }
145
+ export { RemoteFileExplorerProvider, useOptionalRemoteFileExplorer, useRemoteFileExplorer };
@@ -3,75 +3,77 @@ import { createContext, useCallback, useContext, useMemo, useState } from "react
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  var WorkbenchLayoutContext = createContext(null);
5
5
  function WorkbenchLayoutProvider(a) {
6
- let o = c(39), { children: s, pipeline: l, isDeveloperMode: u, workspaceConfig: d, getPreviewUrl: f, getEnvironmentPreviewUrl: p, environments: m, previewPanelOpen: h, onPreviewPanelOpenChange: g } = a, _ = u === void 0 ? !1 : u, [v, y] = useState(null), [b, x] = useState(null), [S, C] = useState("preview"), [w, T] = useState(null), [E, D] = useState(""), O = h !== void 0, k = O ? h ? b ?? "preview" : null : b, A = d?.features?.previewPanel?.enabled ?? !1, j;
6
+ let o = c(44), { children: s, pipeline: l, isDeveloperMode: u, workspaceConfig: d, getPreviewUrl: f, getEnvironmentPreviewUrl: p, environments: m, previewPanelOpen: h, onPreviewPanelOpenChange: g } = a, _ = u === void 0 ? !1 : u, [v, y] = useState(null), [b, x] = useState(null), [S, C] = useState("preview"), [w, T] = useState(null), [E, D] = useState(""), O = h !== void 0, k = O ? h ? b ?? "preview" : null : b, A = d?.features?.previewPanel?.enabled ?? !1, j;
7
7
  o[0] === m ? j = o[1] : (j = m === void 0 || m.some(_temp), o[0] = m, o[1] = j);
8
- let M = A && j, N = k !== null, P;
9
- o[2] !== O || o[3] !== g ? (P = (t) => {
10
- O && g?.(t !== null), x(t);
11
- }, o[2] = O, o[3] = g, o[4] = P) : P = o[4];
12
- let F = P, I;
13
- o[5] === F ? I = o[6] : (I = (t) => {
14
- y((a) => a === t ? null : t), F(null);
15
- }, o[5] = F, o[6] = I);
8
+ let M = A && j, N;
9
+ o[2] !== m?.[0]?.slotId || o[3] !== d?.features?.fileExplorer?.enabled || o[4] !== d?.features?.fileExplorer?.environments ? (N = d?.features?.fileExplorer?.enabled && d?.features?.fileExplorer?.environments?.includes(m?.[0]?.slotId ?? ""), o[2] = m?.[0]?.slotId, o[3] = d?.features?.fileExplorer?.enabled, o[4] = d?.features?.fileExplorer?.environments, o[5] = N) : N = o[5];
10
+ let P = N, F = k !== null, I;
11
+ o[6] !== O || o[7] !== g ? (I = (e) => {
12
+ O && g?.(e !== null), x(e);
13
+ }, o[6] = O, o[7] = g, o[8] = I) : I = o[8];
16
14
  let L = I, R;
17
- o[7] === Symbol.for("react.memo_cache_sentinel") ? (R = () => {
18
- y(null);
19
- }, o[7] = R) : R = o[7];
15
+ o[9] === L ? R = o[10] : (R = (e) => {
16
+ y((a) => a === e ? null : e), L(null);
17
+ }, o[9] = L, o[10] = R);
20
18
  let z = R, B;
21
- o[8] !== k || o[9] !== F ? (B = (t) => {
22
- let a = k === t ? null : t;
23
- F(a), a && y(null);
24
- }, o[8] = k, o[9] = F, o[10] = B) : B = o[10];
19
+ o[11] === Symbol.for("react.memo_cache_sentinel") ? (B = () => {
20
+ y(null);
21
+ }, o[11] = B) : B = o[11];
25
22
  let V = B, H;
26
- o[11] === F ? H = o[12] : (H = () => {
27
- F(null);
28
- }, o[11] = F, o[12] = H);
23
+ o[12] !== k || o[13] !== L ? (H = (e) => {
24
+ let a = k === e ? null : e;
25
+ L(a), a && y(null);
26
+ }, o[12] = k, o[13] = L, o[14] = H) : H = o[14];
29
27
  let U = H, W;
30
- o[13] === F ? W = o[14] : (W = (t) => {
31
- D(t), F("preview"), y(null);
32
- }, o[13] = F, o[14] = W);
28
+ o[15] === L ? W = o[16] : (W = () => {
29
+ L(null);
30
+ }, o[15] = L, o[16] = W);
33
31
  let G = W, K;
34
- o[15] === V ? K = o[16] : (K = () => {
35
- V("preview");
36
- }, o[15] = V, o[16] = K);
32
+ o[17] === L ? K = o[18] : (K = (e) => {
33
+ D(e), L("preview"), y(null);
34
+ }, o[17] = L, o[18] = K);
37
35
  let q = K, J;
38
- o[17] !== v || o[18] !== S || o[19] !== w || o[20] !== k || o[21] !== U || o[22] !== m || o[23] !== p || o[24] !== f || o[25] !== _ || o[26] !== G || o[27] !== l || o[28] !== M || o[29] !== N || o[30] !== E || o[31] !== L || o[32] !== q || o[33] !== V || o[34] !== d ? (J = {
36
+ o[19] === U ? J = o[20] : (J = () => {
37
+ U("preview");
38
+ }, o[19] = U, o[20] = J);
39
+ let Y = J, X = P ?? !1, Z;
40
+ o[21] !== v || o[22] !== S || o[23] !== w || o[24] !== k || o[25] !== G || o[26] !== m || o[27] !== p || o[28] !== f || o[29] !== _ || o[30] !== q || o[31] !== l || o[32] !== M || o[33] !== F || o[34] !== E || o[35] !== X || o[36] !== z || o[37] !== Y || o[38] !== U || o[39] !== d ? (Z = {
39
41
  pipeline: l,
40
42
  previewPanelEnabled: M,
43
+ fileExplorerEnabled: X,
41
44
  isDeveloperMode: _,
42
45
  workspaceConfig: d,
43
46
  getPreviewUrl: f,
44
47
  getEnvironmentPreviewUrl: p,
45
48
  environments: m,
46
49
  activeFloatingPanel: v,
47
- toggleFloatingPanel: L,
48
- closeFloatingPanel: z,
50
+ toggleFloatingPanel: z,
51
+ closeFloatingPanel: V,
49
52
  activeSidePanel: k,
50
- toggleSidePanel: V,
51
- closeSidePanel: U,
53
+ toggleSidePanel: U,
54
+ closeSidePanel: G,
52
55
  selectedSlotId: E,
53
56
  setSelectedSlotId: D,
54
- openPreviewWithEnvironment: G,
55
- previewPanelOpen: N,
56
- togglePreviewPanel: q,
57
+ openPreviewWithEnvironment: q,
58
+ previewPanelOpen: F,
59
+ togglePreviewPanel: Y,
57
60
  activePreviewTab: S,
58
61
  setActivePreviewTab: C,
59
62
  activeSectionId: w,
60
63
  setActiveSectionId: T
61
- }, o[17] = v, o[18] = S, o[19] = w, o[20] = k, o[21] = U, o[22] = m, o[23] = p, o[24] = f, o[25] = _, o[26] = G, o[27] = l, o[28] = M, o[29] = N, o[30] = E, o[31] = L, o[32] = q, o[33] = V, o[34] = d, o[35] = J) : J = o[35];
62
- let Y = J, X;
63
- return o[36] !== s || o[37] !== Y ? (X = /* @__PURE__ */ jsx(WorkbenchLayoutContext.Provider, {
64
- value: Y,
64
+ }, o[21] = v, o[22] = S, o[23] = w, o[24] = k, o[25] = G, o[26] = m, o[27] = p, o[28] = f, o[29] = _, o[30] = q, o[31] = l, o[32] = M, o[33] = F, o[34] = E, o[35] = X, o[36] = z, o[37] = Y, o[38] = U, o[39] = d, o[40] = Z) : Z = o[40];
65
+ let Q = Z, $;
66
+ return o[41] !== s || o[42] !== Q ? ($ = /* @__PURE__ */ jsx(WorkbenchLayoutContext.Provider, {
67
+ value: Q,
65
68
  children: s
66
- }), o[36] = s, o[37] = Y, o[38] = X) : X = o[38], X;
69
+ }), o[41] = s, o[42] = Q, o[43] = $) : $ = o[43], $;
67
70
  }
68
- function _temp(t) {
69
- return !!t.connectionUrl && !!t.workerId;
71
+ function _temp(e) {
72
+ return !!e.connectionUrl && (!!e.workerId || e.local);
70
73
  }
71
74
  function useWorkbenchLayout() {
72
- let t = useContext(WorkbenchLayoutContext);
73
- if (!t) throw Error("useWorkbenchLayout must be used within a WorkbenchLayoutProvider");
74
- return t;
75
+ let e = useContext(WorkbenchLayoutContext);
76
+ if (!e) throw Error("useWorkbenchLayout must be used within a WorkbenchLayoutProvider");
77
+ return e;
75
78
  }
76
- const WorkbenchContextProvider = createContext(null);
77
- export { WorkbenchContextProvider, WorkbenchLayoutProvider, useWorkbenchLayout };
79
+ export { WorkbenchLayoutProvider, useWorkbenchLayout };
@@ -5,7 +5,7 @@ import { DialogHeader } from "../../../components/ui/dialog.js";
5
5
  import { Input } from "../../../components/ui/input.js";
6
6
  import { Label } from "../../../components/ui/label.js";
7
7
  import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "../../../components/ui/select.js";
8
- import ErrorSnackbar_default from "../../../components/snackbars/ErrorSnackbar.js";
8
+ import ErrorSnackbar_default from "../../../components/feedback/ErrorSnackbar.js";
9
9
  import { EnvironmentSlotSelector } from "./EnvironmentSlotSelector.js";
10
10
  import { c } from "react/compiler-runtime";
11
11
  import { useCallback, useEffect, useMemo, useState } from "react";
@@ -2,7 +2,7 @@ import { useStudio } from "../../../providers/StudioProvider.js";
2
2
  import { useBatchDeletePipeline, useChildPipelines, useFilterPipelines } from "../../../hooks/usePipelines.js";
3
3
  import { Badge } from "../../../components/ui/badge.js";
4
4
  import CustomListView_default from "../../../components/lists/CustomListView.js";
5
- import ErrorSnackbar_default from "../../../components/snackbars/ErrorSnackbar.js";
5
+ import ErrorSnackbar_default from "../../../components/feedback/ErrorSnackbar.js";
6
6
  import { require_enums } from "../../../packages/contracts/dist/enums/index.js";
7
7
  import NewPipelineRunDialog_default from "./NewPipelineRunDialog.js";
8
8
  import { c } from "react/compiler-runtime";
@@ -1,10 +1,10 @@
1
1
  import { useStudio } from "../../../providers/StudioProvider.js";
2
2
  import { usePipelineConfig } from "../../../hooks/useConfig.js";
3
3
  import { useCreatePipeline } from "../../../hooks/usePipelines.js";
4
- import ErrorSnackbar_default from "../../../components/snackbars/ErrorSnackbar.js";
4
+ import ErrorSnackbar_default from "../../../components/feedback/ErrorSnackbar.js";
5
+ import { useRunPipeline } from "../../../hooks/useProcessor.js";
5
6
  import ArgumentsView_default from "./pipeline-form/ArgumentsView.js";
6
7
  import SelectionView_default from "./pipeline-form/SelectionView.js";
7
- import { useRunPipeline } from "../../../hooks/useProcessor.js";
8
8
  import { c } from "react/compiler-runtime";
9
9
  import { useEffect, useMemo, useState } from "react";
10
10
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -0,0 +1,93 @@
1
+ import { useStudio } from "../../../providers/StudioProvider.js";
2
+ import { useCreatePipeline } from "../../../hooks/usePipelines.js";
3
+ import { Button } from "../../../components/ui/button.js";
4
+ import ErrorSnackbar_default from "../../../components/feedback/ErrorSnackbar.js";
5
+ import Form_default from "../../../components/dynamic-form/Form.js";
6
+ import { useRunPipeline } from "../../../hooks/useProcessor.js";
7
+ import { c } from "react/compiler-runtime";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { Loader2, Play } from "lucide-react";
10
+ import { useForm } from "react-hook-form";
11
+ var WorkspaceHomePage_default = (p) => {
12
+ let m = c(39), { workspace: h, action: g } = p, { router: _ } = useStudio(), v = useCreatePipeline(), y = useRunPipeline(), b;
13
+ m[0] === g.options ? b = m[1] : (b = g.options ?? {}, m[0] = g.options, m[1] = b);
14
+ let x = b, S = x.workflow, C = x.title, w = x.subtitle, T = x.schema, E = x.pipelineUi, D;
15
+ m[2] === Symbol.for("react.memo_cache_sentinel") ? (D = {
16
+ defaultValues: {},
17
+ mode: "onChange"
18
+ }, m[2] = D) : D = m[2];
19
+ let O = useForm(D), k = v.isPending || y.isPending, A = !!T, j;
20
+ m[3] !== v || m[4] !== A || m[5] !== _ || m[6] !== y || m[7] !== S || m[8] !== h ? (j = (t) => {
21
+ v.mutate({ pipelineCreateDto: {
22
+ blockName: S,
23
+ title: null,
24
+ workspaceId: h.id,
25
+ transition: null,
26
+ args: A ? t : void 0
27
+ } }, { onSuccess: (t) => {
28
+ y.mutate({
29
+ pipelineId: t.id,
30
+ runPipelinePayloadDto: {},
31
+ force: !0
32
+ }, { onSuccess: () => {
33
+ _.navigateToPipeline(t.id);
34
+ } });
35
+ } });
36
+ }, m[3] = v, m[4] = A, m[5] = _, m[6] = y, m[7] = S, m[8] = h, m[9] = j) : j = m[9];
37
+ let M = j, N;
38
+ m[10] !== O || m[11] !== M ? (N = () => {
39
+ O.handleSubmit(M)();
40
+ }, m[10] = O, m[11] = M, m[12] = N) : N = m[12];
41
+ let P = N, F;
42
+ m[13] === v.error ? F = m[14] : (F = /* @__PURE__ */ jsx(ErrorSnackbar_default, { error: v.error }), m[13] = v.error, m[14] = F);
43
+ let I;
44
+ m[15] === y.error ? I = m[16] : (I = /* @__PURE__ */ jsx(ErrorSnackbar_default, { error: y.error }), m[15] = y.error, m[16] = I);
45
+ let L;
46
+ m[17] === C ? L = m[18] : (L = C && /* @__PURE__ */ jsx("h2", {
47
+ className: "mb-2 text-center text-3xl font-bold tracking-tight",
48
+ children: C
49
+ }), m[17] = C, m[18] = L);
50
+ let R;
51
+ m[19] === w ? R = m[20] : (R = w && /* @__PURE__ */ jsx("p", {
52
+ className: "text-muted-foreground mb-8 text-center text-sm",
53
+ children: w
54
+ }), m[19] = w, m[20] = R);
55
+ let z;
56
+ m[21] !== O || m[22] !== A || m[23] !== E || m[24] !== T ? (z = A ? /* @__PURE__ */ jsx("div", {
57
+ className: "mb-6 w-full",
58
+ children: /* @__PURE__ */ jsx(Form_default, {
59
+ form: O,
60
+ schema: T,
61
+ ui: E,
62
+ disabled: !1,
63
+ viewOnly: !1
64
+ })
65
+ }) : null, m[21] = O, m[22] = A, m[23] = E, m[24] = T, m[25] = z) : z = m[25];
66
+ let B;
67
+ m[26] === k ? B = m[27] : (B = k ? /* @__PURE__ */ jsx(Loader2, { className: "mr-2 h-4 w-4 animate-spin" }) : /* @__PURE__ */ jsx(Play, { className: "mr-2 h-4 w-4" }), m[26] = k, m[27] = B);
68
+ let V;
69
+ m[28] !== k || m[29] !== P || m[30] !== B ? (V = /* @__PURE__ */ jsx("div", {
70
+ className: "flex w-full justify-end",
71
+ children: /* @__PURE__ */ jsxs(Button, {
72
+ variant: "default",
73
+ disabled: k,
74
+ onClick: P,
75
+ size: "lg",
76
+ className: "font-medium",
77
+ children: [B, "Run"]
78
+ })
79
+ }), m[28] = k, m[29] = P, m[30] = B, m[31] = V) : V = m[31];
80
+ let H;
81
+ return m[32] !== V || m[33] !== F || m[34] !== I || m[35] !== L || m[36] !== R || m[37] !== z ? (H = /* @__PURE__ */ jsxs("div", {
82
+ className: "mx-auto flex min-h-[60vh] max-w-2xl flex-col items-center justify-center",
83
+ children: [
84
+ F,
85
+ I,
86
+ L,
87
+ R,
88
+ z,
89
+ V
90
+ ]
91
+ }), m[32] = V, m[33] = F, m[34] = I, m[35] = L, m[36] = R, m[37] = z, m[38] = H) : H = m[38], H;
92
+ };
93
+ export { WorkspaceHomePage_default as default };
@@ -0,0 +1,3 @@
1
+ import { EnvironmentSlotSelector } from "./components/EnvironmentSlotSelector.js";
2
+ import CreateWorkspace_default from "./components/CreateWorkspace.js";
3
+ import Workspaces_default from "./Workspaces.js";
@@ -1,5 +1,6 @@
1
+ import { getAllWorkflowsCacheKey, getAvailableEnvironmentsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getHealthCacheKey, getMeCacheKey, getNamespaceCacheKey, getNamespacesByPipelineCacheKey, getPipelineCacheKey, getPipelineConfigCacheKey, getPipelineSourceCacheKey, getPipelineTypesCacheKey, getPipelinesCacheKey, getPipelinesChildrenCacheKey, getWorkflowCacheKey, getWorkflowsByPipelineCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspaceTypesCacheKey, getWorkspacesCacheKey } from "./query-keys.js";
1
2
  import { useApiClient } from "./useApi.js";
2
3
  import { useIsMobile } from "./use-mobile.js";
3
- import { useAvailableEnvironments, useWorkspaceConfig } from "./useConfig.js";
4
- import { useBatchDeletePipeline, useChildPipelines, useCreatePipeline, useDeletePipeline, useFilterPipelines, usePipeline, usePipelineConfig, usePipelineSource, useUpdatePipeline } from "./usePipelines.js";
4
+ import { useAvailableEnvironments, usePipelineConfig, useWorkspaceConfig } from "./useConfig.js";
5
+ import { useBatchDeletePipeline, useChildPipelines, useCreatePipeline, useDeletePipeline, useFilterPipelines, usePipeline, usePipelineConfigByName, usePipelineSource, useUpdatePipeline } from "./usePipelines.js";
5
6
  import { useBatchDeleteWorkspaces, useCreateWorkspace, useDeleteWorkspace, useFilterWorkspaces, useSetFavouriteWorkspace, useUpdateWorkspace, useWorkspace } from "./useWorkspaces.js";
@@ -0,0 +1,138 @@
1
+ function getMeCacheKey(e) {
2
+ return ["me", e];
3
+ }
4
+ function getHealthCacheKey(e) {
5
+ return ["health", e];
6
+ }
7
+ function getWorkspaceTypesCacheKey(e) {
8
+ return ["workspace-types", e];
9
+ }
10
+ function getPipelineTypesCacheKey(e, x) {
11
+ return [
12
+ "pipeline-types",
13
+ e,
14
+ x
15
+ ];
16
+ }
17
+ function getAvailableEnvironmentsCacheKey(e) {
18
+ return ["available-environments", e];
19
+ }
20
+ function getDashboardStatsCacheKey(e) {
21
+ return [
22
+ "dashboard",
23
+ "stats",
24
+ e
25
+ ];
26
+ }
27
+ function getPipelineCacheKey(e, x) {
28
+ return [
29
+ "pipeline",
30
+ e,
31
+ x
32
+ ];
33
+ }
34
+ function getPipelinesCacheKey(e) {
35
+ return ["pipelines", e];
36
+ }
37
+ function getPipelinesChildrenCacheKey(e, x) {
38
+ return [
39
+ "pipelines",
40
+ "children",
41
+ e,
42
+ x
43
+ ];
44
+ }
45
+ function getPipelineConfigCacheKey(e, x, S) {
46
+ return [
47
+ "pipelineConfig",
48
+ e,
49
+ x,
50
+ S
51
+ ];
52
+ }
53
+ function getPipelineSourceCacheKey(e, x, S) {
54
+ return [
55
+ "pipelineSource",
56
+ e,
57
+ x,
58
+ S
59
+ ];
60
+ }
61
+ function getWorkspaceCacheKey(e, x) {
62
+ return [
63
+ "workspace",
64
+ e,
65
+ x
66
+ ];
67
+ }
68
+ function getWorkspacesCacheKey(e) {
69
+ return ["workspaces", e];
70
+ }
71
+ function getWorkflowCacheKey(e, x) {
72
+ return [
73
+ "workflow",
74
+ e,
75
+ x
76
+ ];
77
+ }
78
+ function getWorkflowsCacheKey(e, x) {
79
+ return [
80
+ "workflows",
81
+ e,
82
+ x
83
+ ];
84
+ }
85
+ function getWorkflowsByPipelineCacheKey(e, x) {
86
+ return [
87
+ "workflows-by-pipeline",
88
+ e,
89
+ x
90
+ ];
91
+ }
92
+ function getAllWorkflowsCacheKey(e) {
93
+ return ["all-workflows", e];
94
+ }
95
+ function getNamespaceCacheKey(e, x) {
96
+ return [
97
+ "namespace",
98
+ e,
99
+ x
100
+ ];
101
+ }
102
+ function getNamespacesByPipelineCacheKey(e, x) {
103
+ return [
104
+ "namespaces",
105
+ e,
106
+ x
107
+ ];
108
+ }
109
+ function getDocumentCacheKey(e, x) {
110
+ return [
111
+ "document",
112
+ e,
113
+ x
114
+ ];
115
+ }
116
+ function getDocumentsCacheKey(e, x) {
117
+ return [
118
+ "documents",
119
+ e,
120
+ x
121
+ ];
122
+ }
123
+ function getFileTreeCacheKey(e, x) {
124
+ return [
125
+ "fileTree",
126
+ e,
127
+ x
128
+ ];
129
+ }
130
+ function getFileContentCacheKey(e, x, S) {
131
+ return [
132
+ "fileContent",
133
+ e,
134
+ x,
135
+ S
136
+ ];
137
+ }
138
+ export { getAllWorkflowsCacheKey, getAvailableEnvironmentsCacheKey, getDashboardStatsCacheKey, getDocumentCacheKey, getDocumentsCacheKey, getFileContentCacheKey, getFileTreeCacheKey, getHealthCacheKey, getMeCacheKey, getNamespaceCacheKey, getNamespacesByPipelineCacheKey, getPipelineCacheKey, getPipelineConfigCacheKey, getPipelineSourceCacheKey, getPipelineTypesCacheKey, getPipelinesCacheKey, getPipelinesChildrenCacheKey, getWorkflowCacheKey, getWorkflowsByPipelineCacheKey, getWorkflowsCacheKey, getWorkspaceCacheKey, getWorkspaceTypesCacheKey, getWorkspacesCacheKey };
@@ -1,57 +1,58 @@
1
+ import { getHealthCacheKey, getMeCacheKey } from "./query-keys.js";
1
2
  import { useApiClient } from "./useApi.js";
2
3
  import { c } from "react/compiler-runtime";
3
4
  import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
4
- function useMe(n) {
5
- let i = c(8), a = n === void 0 ? !0 : n, { envKey: o, api: s } = useApiClient(), l;
6
- i[0] === o ? l = i[1] : (l = ["me", o], i[0] = o, i[1] = l);
7
- let u;
8
- i[2] === s ? u = i[3] : (u = () => s.auth.me(), i[2] = s, i[3] = u);
5
+ function useMe(e) {
6
+ let i = c(8), o = e === void 0 ? !0 : e, { envKey: s, api: l } = useApiClient(), u;
7
+ i[0] === s ? u = i[1] : (u = getMeCacheKey(s), i[0] = s, i[1] = u);
9
8
  let d;
10
- return i[4] !== a || i[5] !== l || i[6] !== u ? (d = {
11
- queryKey: l,
12
- queryFn: u,
9
+ i[2] === l ? d = i[3] : (d = () => l.auth.me(), i[2] = l, i[3] = d);
10
+ let f;
11
+ return i[4] !== o || i[5] !== u || i[6] !== d ? (f = {
12
+ queryKey: u,
13
+ queryFn: d,
13
14
  retry: !1,
14
15
  staleTime: 3e5,
15
- enabled: a
16
- }, i[4] = a, i[5] = l, i[6] = u, i[7] = d) : d = i[7], useQuery(d);
16
+ enabled: o
17
+ }, i[4] = o, i[5] = u, i[6] = d, i[7] = f) : f = i[7], useQuery(f);
17
18
  }
18
- function useGetHealthInfo(n) {
19
- let i = c(8), a = n === void 0 ? !0 : n, { envKey: o, api: s } = useApiClient(), l;
20
- i[0] === o ? l = i[1] : (l = ["health", o], i[0] = o, i[1] = l);
21
- let u;
22
- i[2] === s ? u = i[3] : (u = () => s.auth.getInfo(), i[2] = s, i[3] = u);
19
+ function useGetHealthInfo(r) {
20
+ let i = c(8), o = r === void 0 ? !0 : r, { envKey: s, api: l } = useApiClient(), u;
21
+ i[0] === s ? u = i[1] : (u = getHealthCacheKey(s), i[0] = s, i[1] = u);
23
22
  let d;
24
- return i[4] !== a || i[5] !== l || i[6] !== u ? (d = {
25
- queryKey: l,
26
- queryFn: u,
23
+ i[2] === l ? d = i[3] : (d = () => l.auth.getInfo(), i[2] = l, i[3] = d);
24
+ let f;
25
+ return i[4] !== o || i[5] !== u || i[6] !== d ? (f = {
26
+ queryKey: u,
27
+ queryFn: d,
27
28
  staleTime: 3e5,
28
- enabled: a
29
- }, i[4] = a, i[5] = l, i[6] = u, i[7] = d) : d = i[7], useQuery(d);
29
+ enabled: o
30
+ }, i[4] = o, i[5] = u, i[6] = d, i[7] = f) : f = i[7], useQuery(f);
30
31
  }
31
32
  function useWorkerAuth() {
32
- let r = c(7), { api: a } = useApiClient(), o = useQueryClient(), s;
33
- r[0] === a ? s = r[1] : (s = (e) => a.auth.hubLogin(e), r[0] = a, r[1] = s);
34
- let l;
35
- r[2] === o ? l = r[3] : (l = () => {
36
- o.invalidateQueries();
37
- }, r[2] = o, r[3] = l);
38
- let u;
39
- return r[4] !== s || r[5] !== l ? (u = {
40
- mutationFn: s,
41
- onSuccess: l
42
- }, r[4] = s, r[5] = l, r[6] = u) : u = r[6], useMutation(u);
33
+ let a = c(8), { envKey: s, api: l } = useApiClient(), u = useQueryClient(), d;
34
+ a[0] === l ? d = a[1] : (d = (e) => l.auth.hubLogin(e), a[0] = l, a[1] = d);
35
+ let f;
36
+ a[2] !== s || a[3] !== u ? (f = () => {
37
+ u.invalidateQueries({ queryKey: getMeCacheKey(s) }), u.invalidateQueries({ queryKey: getHealthCacheKey(s) });
38
+ }, a[2] = s, a[3] = u, a[4] = f) : f = a[4];
39
+ let p;
40
+ return a[5] !== d || a[6] !== f ? (p = {
41
+ mutationFn: d,
42
+ onSuccess: f
43
+ }, a[5] = d, a[6] = f, a[7] = p) : p = a[7], useMutation(p);
43
44
  }
44
45
  function useWorkerAuthTokenRefresh() {
45
- let r = c(7), { api: a } = useApiClient(), o = useQueryClient(), s;
46
- r[0] === a ? s = r[1] : (s = () => a.auth.refresh(), r[0] = a, r[1] = s);
47
- let l;
48
- r[2] === o ? l = r[3] : (l = () => {
49
- o.invalidateQueries();
50
- }, r[2] = o, r[3] = l);
51
- let u;
52
- return r[4] !== s || r[5] !== l ? (u = {
53
- mutationFn: s,
54
- onSuccess: l
55
- }, r[4] = s, r[5] = l, r[6] = u) : u = r[6], useMutation(u);
46
+ let a = c(8), { envKey: s, api: l } = useApiClient(), u = useQueryClient(), d;
47
+ a[0] === l ? d = a[1] : (d = () => l.auth.refresh(), a[0] = l, a[1] = d);
48
+ let f;
49
+ a[2] !== s || a[3] !== u ? (f = () => {
50
+ u.invalidateQueries({ queryKey: getMeCacheKey(s) }), u.invalidateQueries({ queryKey: getHealthCacheKey(s) });
51
+ }, a[2] = s, a[3] = u, a[4] = f) : f = a[4];
52
+ let p;
53
+ return a[5] !== d || a[6] !== f ? (p = {
54
+ mutationFn: d,
55
+ onSuccess: f
56
+ }, a[5] = d, a[6] = f, a[7] = p) : p = a[7], useMutation(p);
56
57
  }
57
58
  export { useGetHealthInfo, useMe, useWorkerAuth, useWorkerAuthTokenRefresh };