@loopstack/loopstack-studio 0.23.0 → 0.24.0

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 (90) hide show
  1. package/dist/api/index.js +12 -10
  2. package/dist/api/secrets.js +16 -0
  3. package/dist/components/dynamic-form/ArrayController.js +68 -64
  4. package/dist/components/dynamic-form/Form.js +56 -27
  5. package/dist/components/dynamic-form/FormElement.js +1 -1
  6. package/dist/components/dynamic-form/FormElementHeader.js +2 -2
  7. package/dist/components/dynamic-form/InputController.js +3 -1
  8. package/dist/components/dynamic-form/ObjectController.js +24 -21
  9. package/dist/components/dynamic-form/fields/BaseFieldWrapper.js +1 -1
  10. package/dist/components/dynamic-form/fields/InputField.js +20 -19
  11. package/dist/components/dynamic-form/fields/MarkdownViewField.js +20 -0
  12. package/dist/components/dynamic-form/fields/RadioField.js +18 -18
  13. package/dist/components/dynamic-form/fields/SelectField.js +19 -19
  14. package/dist/components/dynamic-form/fields/TextareaField.js +17 -17
  15. package/dist/components/layout/MainLayout.js +18 -31
  16. package/dist/components/layout/StudioSidebar.js +168 -108
  17. package/dist/components/page/PageBreadcrumbs.js +79 -32
  18. package/dist/components/ui-widgets/UiWidget.js +36 -27
  19. package/dist/components/ui-widgets/widgets/SecretInput.js +42 -0
  20. package/dist/features/code-explorer/components/CodeExplorerTreeNode.js +80 -4
  21. package/dist/features/code-explorer/components/FileContentViewer.js +47 -30
  22. package/dist/features/code-explorer/components/FileTabsBar.js +3 -190
  23. package/dist/features/code-explorer/components/FileTabsBarBase.js +190 -0
  24. package/dist/features/code-explorer/index.js +2 -2
  25. package/dist/features/code-explorer/providers/CodeExplorerProvider.js +2 -162
  26. package/dist/features/code-explorer/utils/fileIcons.js +7 -4
  27. package/dist/features/debug/components/PipelineFlowViewer.js +46 -45
  28. package/dist/features/debug/components/pipeline-flow/WorkflowGraph.js +19 -19
  29. package/dist/features/documents/DocumentRenderer.js +20 -15
  30. package/dist/features/documents/components/DocumentList.js +5 -1
  31. package/dist/features/documents/renderers/AiMessage.js +11 -11
  32. package/dist/features/documents/renderers/ClaudeMessage.js +96 -0
  33. package/dist/features/documents/renderers/DocumentFormRenderer.js +17 -11
  34. package/dist/features/workbench/Workbench.js +64 -80
  35. package/dist/features/workbench/WorkflowItem.js +5 -5
  36. package/dist/features/workbench/components/RemoteFileTabsBar.js +18 -0
  37. package/dist/features/workbench/components/RemoteFileTree.js +90 -0
  38. package/dist/features/workbench/components/WorkbenchFilesPanel.js +67 -0
  39. package/dist/features/workbench/components/WorkbenchFloatingPanel.js +57 -49
  40. package/dist/features/workbench/components/WorkbenchFlowPanel.js +2 -2
  41. package/dist/features/workbench/components/WorkbenchIconSidebar.js +48 -28
  42. package/dist/features/workbench/components/WorkbenchSecretsPanel.js +182 -0
  43. package/dist/features/workbench/hooks/useWorkflowData.js +4 -4
  44. package/dist/features/workbench/providers/RemoteFileExplorerProvider.js +160 -0
  45. package/dist/features/workbench/providers/WorkbenchLayoutProvider.js +46 -43
  46. package/dist/features/workspaces/components/PipelineForm.js +1 -1
  47. package/dist/features/workspaces/components/WorkspaceHomePage.js +93 -0
  48. package/dist/hooks/index.js +1 -1
  49. package/dist/hooks/query-keys.js +41 -34
  50. package/dist/hooks/useFiles.js +1 -43
  51. package/dist/hooks/useSecrets.js +69 -0
  52. package/dist/index.d.ts +49 -0
  53. package/dist/index.js +3 -2
  54. package/dist/node_modules/@xyflow/react/dist/esm/index.js +1 -1
  55. package/dist/pages/DashboardPage.js +87 -35
  56. package/dist/pages/EmbedWorkbenchPage.js +43 -39
  57. package/dist/pages/PipelineDebugPage.js +1 -1
  58. package/dist/pages/PreviewWorkbenchPage.js +167 -70
  59. package/dist/pages/WorkspacePage.js +102 -50
  60. package/dist/pages/WorkspaceRunsPage.js +71 -0
  61. package/dist/routing/LocalRouter.js +6 -0
  62. package/dist/types/ai.types.js +13 -0
  63. package/package.json +2 -3
  64. package/dist/node_modules/@ai-sdk/provider/dist/index.js +0 -65
  65. package/dist/node_modules/@ai-sdk/provider-utils/dist/index.js +0 -1008
  66. package/dist/node_modules/ai/dist/index.js +0 -1083
  67. package/dist/node_modules/zod/v3/ZodError.js +0 -79
  68. package/dist/node_modules/zod/v3/errors.js +0 -6
  69. package/dist/node_modules/zod/v3/helpers/errorUtil.js +0 -5
  70. package/dist/node_modules/zod/v3/helpers/parseUtil.js +0 -90
  71. package/dist/node_modules/zod/v3/helpers/util.js +0 -72
  72. package/dist/node_modules/zod/v3/locales/en.js +0 -58
  73. package/dist/node_modules/zod/v3/types.js +0 -2425
  74. package/dist/node_modules/zod/v4/classic/errors.js +0 -21
  75. package/dist/node_modules/zod/v4/classic/iso.js +0 -29
  76. package/dist/node_modules/zod/v4/classic/parse.js +0 -4
  77. package/dist/node_modules/zod/v4/classic/schemas.js +0 -392
  78. package/dist/node_modules/zod/v4/core/api.js +0 -532
  79. package/dist/node_modules/zod/v4/core/checks.js +0 -283
  80. package/dist/node_modules/zod/v4/core/core.js +0 -44
  81. package/dist/node_modules/zod/v4/core/doc.js +0 -21
  82. package/dist/node_modules/zod/v4/core/errors.js +0 -40
  83. package/dist/node_modules/zod/v4/core/json-schema-processors.js +0 -305
  84. package/dist/node_modules/zod/v4/core/parse.js +0 -66
  85. package/dist/node_modules/zod/v4/core/regexes.js +0 -28
  86. package/dist/node_modules/zod/v4/core/registries.js +0 -38
  87. package/dist/node_modules/zod/v4/core/schemas.js +0 -863
  88. package/dist/node_modules/zod/v4/core/to-json-schema.js +0 -220
  89. package/dist/node_modules/zod/v4/core/util.js +0 -267
  90. package/dist/node_modules/zod/v4/core/versions.js +0 -6
@@ -6,16 +6,16 @@ import React from "react";
6
6
  import { jsx, jsxs } from "react/jsx-runtime";
7
7
  import { Controller } from "react-hook-form";
8
8
  const SelectField = (m) => {
9
- let h = c(22), { name: g, schema: _, ui: v, required: y, form: b, disabled: x } = m, S = useFieldConfig(g, _, v, x), C;
10
- h[0] !== _.enum || h[1] !== _.enumOptions ? (C = _.enumOptions && _.enumOptions.length > 0 ? _.enumOptions : _.enum || [], h[0] = _.enum, h[1] = _.enumOptions, h[2] = C) : C = h[2];
11
- let w = C, T;
12
- h[3] === w ? T = h[4] : (T = w.map(_temp), h[3] = w, h[4] = T);
9
+ let h = c(22), { name: g, schema: _, ui: v, required: y, form: b, disabled: x } = m, S = useFieldConfig(g, _, v, x), C = v, w = C?.enumOptions ?? _.enumOptions, T;
10
+ h[0] !== w || h[1] !== _ ? (T = w && w.length > 0 ? w : _.enum || [], h[0] = w, h[1] = _, h[2] = T) : T = h[2];
13
11
  let E = T, D;
14
- h[5] === w ? D = h[6] : (D = w.map(_temp2), h[5] = w, h[6] = D);
15
- let O = D, k = _.placeholder || `Select ${S.fieldLabel}`, A = S.defaultValue || "", j = y ? "This field is required" : void 0, M;
16
- h[7] === j ? M = h[8] : (M = { required: j }, h[7] = j, h[8] = M);
17
- let N;
18
- h[9] !== S || h[10] !== E || h[11] !== O || h[12] !== g || h[13] !== k || h[14] !== y ? (N = (f) => {
12
+ h[3] === E ? D = h[4] : (D = E.map(_temp), h[3] = E, h[4] = D);
13
+ let O = D, k;
14
+ h[5] === E ? k = h[6] : (k = E.map(_temp2), h[5] = E, h[6] = k);
15
+ let A = k, j = C?.placeholder || _.placeholder || `Select ${S.fieldLabel}`, M = S.defaultValue || "", N = y ? "This field is required" : void 0, P;
16
+ h[7] === N ? P = h[8] : (P = { required: N }, h[7] = N, h[8] = P);
17
+ let F;
18
+ h[9] !== S || h[10] !== O || h[11] !== A || h[12] !== g || h[13] !== j || h[14] !== y ? (F = (f) => {
19
19
  let { field: p } = f;
20
20
  return /* @__PURE__ */ jsx(BaseFieldWrapper, {
21
21
  name: g,
@@ -33,23 +33,23 @@ const SelectField = (m) => {
33
33
  id: g,
34
34
  className: S.error ? "border-destructive" : "",
35
35
  ...S.getAriaProps(),
36
- children: /* @__PURE__ */ jsx(SelectValue, { placeholder: k })
37
- }), /* @__PURE__ */ jsx(SelectContent, { children: O.map((t, d) => /* @__PURE__ */ jsx(SelectItem, {
36
+ children: /* @__PURE__ */ jsx(SelectValue, { placeholder: j })
37
+ }), /* @__PURE__ */ jsx(SelectContent, { children: A.map((t, d) => /* @__PURE__ */ jsx(SelectItem, {
38
38
  value: t.toString(),
39
39
  disabled: S.isDisabled,
40
- children: E[d]?.toString() || t.toString()
40
+ children: O[d]?.toString() || t.toString()
41
41
  }, `${t}-${d}`)) })]
42
42
  })
43
43
  });
44
- }, h[9] = S, h[10] = E, h[11] = O, h[12] = g, h[13] = k, h[14] = y, h[15] = N) : N = h[15];
45
- let P;
46
- return h[16] !== b.control || h[17] !== g || h[18] !== A || h[19] !== M || h[20] !== N ? (P = /* @__PURE__ */ jsx(Controller, {
44
+ }, h[9] = S, h[10] = O, h[11] = A, h[12] = g, h[13] = j, h[14] = y, h[15] = F) : F = h[15];
45
+ let I;
46
+ return h[16] !== b.control || h[17] !== g || h[18] !== M || h[19] !== P || h[20] !== F ? (I = /* @__PURE__ */ jsx(Controller, {
47
47
  name: g,
48
48
  control: b.control,
49
- defaultValue: A,
50
- rules: M,
51
- render: N
52
- }), h[16] = b.control, h[17] = g, h[18] = A, h[19] = M, h[20] = N, h[21] = P) : P = h[21], P;
49
+ defaultValue: M,
50
+ rules: P,
51
+ render: F
52
+ }), h[16] = b.control, h[17] = g, h[18] = M, h[19] = P, h[20] = F, h[21] = I) : I = h[21], I;
53
53
  };
54
54
  function _temp(t) {
55
55
  return typeof t == "string" || typeof t == "number" ? t : t.label;
@@ -8,9 +8,9 @@ import React from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { Controller } from "react-hook-form";
10
10
  const TextareaField = (d) => {
11
- let f = c(25), { name: p, schema: m, ui: h, required: g, form: _, disabled: v, viewOnly: y } = d, b = useFieldConfig(p, m, h, v), x = m.placeholder || m.examples?.[0] || "", S = m.rows || 4, C;
12
- f[0] !== g || f[1] !== m ? (C = buildTextValidationRules(m, g), f[0] = g, f[1] = m, f[2] = C) : C = f[2];
13
- let w = C;
11
+ let f = c(25), { name: p, schema: m, ui: h, required: g, form: _, disabled: v, viewOnly: y } = d, b = useFieldConfig(p, m, h, v), x = h, S = x?.placeholder || m.placeholder || m.examples?.[0] || "", C = x?.rows || m.rows || 4, w;
12
+ f[0] !== g || f[1] !== m ? (w = buildTextValidationRules(m, g), f[0] = g, f[1] = m, f[2] = w) : w = f[2];
13
+ let T = w;
14
14
  if (y) {
15
15
  let o;
16
16
  f[3] === b.fieldLabel ? o = f[4] : (o = /* @__PURE__ */ jsx(Label, {
@@ -26,12 +26,12 @@ const TextareaField = (d) => {
26
26
  }), f[5] = _.control, f[6] = p, f[7] = s, f[8] = l) : l = f[8];
27
27
  let u;
28
28
  return f[9] !== o || f[10] !== l ? (u = /* @__PURE__ */ jsxs("div", {
29
- className: "mt-4 mb-8 block",
29
+ className: "mb-4 block",
30
30
  children: [o, l]
31
31
  }), f[9] = o, f[10] = l, f[11] = u) : u = f[11], u;
32
32
  }
33
- let T = b.defaultValue || "", E;
34
- f[12] !== b || f[13] !== p || f[14] !== x || f[15] !== g || f[16] !== S || f[17] !== m.maxLength ? (E = (r) => {
33
+ let E = b.defaultValue || "", D;
34
+ f[12] !== b || f[13] !== p || f[14] !== S || f[15] !== g || f[16] !== C || f[17] !== m.maxLength ? (D = (r) => {
35
35
  let { field: s } = r;
36
36
  return /* @__PURE__ */ jsx(BaseFieldWrapper, {
37
37
  name: p,
@@ -44,28 +44,28 @@ const TextareaField = (d) => {
44
44
  ...s,
45
45
  id: p,
46
46
  onChange: b.isReadOnly ? void 0 : s.onChange,
47
- rows: S,
48
- placeholder: x,
47
+ rows: C,
48
+ placeholder: S,
49
49
  disabled: b.isDisabled,
50
50
  readOnly: b.isReadOnly,
51
51
  maxLength: m.maxLength,
52
52
  className: b.error ? "border-destructive focus-visible:ring-destructive" : "",
53
53
  style: {
54
- minHeight: S ? `${S * 1.5}em` : void 0,
55
- resize: S ? "vertical" : "none"
54
+ minHeight: C ? `${C * 1.5}em` : void 0,
55
+ resize: C ? "vertical" : "none"
56
56
  },
57
57
  ...b.getAriaProps()
58
58
  })
59
59
  });
60
- }, f[12] = b, f[13] = p, f[14] = x, f[15] = g, f[16] = S, f[17] = m.maxLength, f[18] = E) : E = f[18];
61
- let D;
62
- return f[19] !== _.control || f[20] !== p || f[21] !== T || f[22] !== E || f[23] !== w ? (D = /* @__PURE__ */ jsx(Controller, {
60
+ }, f[12] = b, f[13] = p, f[14] = S, f[15] = g, f[16] = C, f[17] = m.maxLength, f[18] = D) : D = f[18];
61
+ let O;
62
+ return f[19] !== _.control || f[20] !== p || f[21] !== E || f[22] !== D || f[23] !== T ? (O = /* @__PURE__ */ jsx(Controller, {
63
63
  name: p,
64
64
  control: _.control,
65
- defaultValue: T,
66
- rules: w,
67
- render: E
68
- }), f[19] = _.control, f[20] = p, f[21] = T, f[22] = E, f[23] = w, f[24] = D) : D = f[24], D;
65
+ defaultValue: E,
66
+ rules: T,
67
+ render: D
68
+ }), f[19] = _.control, f[20] = p, f[21] = E, f[22] = D, f[23] = T, f[24] = O) : O = f[24], O;
69
69
  };
70
70
  function _temp(r) {
71
71
  let { field: o } = r;
@@ -1,42 +1,29 @@
1
- import { Separator } from "../ui/separator.js";
2
- import { SidebarTrigger, useSidebar } from "../ui/sidebar.js";
3
1
  import PageBreadcrumbs_default from "../page/PageBreadcrumbs.js";
4
2
  import { c } from "react/compiler-runtime";
5
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
- var SidebarTriggerSafe = () => {
7
- try {
8
- return useSidebar(), /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(SidebarTrigger, { className: "-ml-1" }), /* @__PURE__ */ jsx(Separator, {
9
- orientation: "vertical",
10
- className: "mr-2 data-[orientation=vertical]:h-4"
11
- })] });
12
- } catch {
13
- return null;
14
- }
15
- }, MainLayout_default = (e) => {
16
- let o = c(11), { children: s, breadcrumbsData: l, headerMenu: u } = e, d;
17
- o[0] === Symbol.for("react.memo_cache_sentinel") ? (d = /* @__PURE__ */ jsx(SidebarTriggerSafe, {}), o[0] = d) : d = o[0];
18
- let f;
19
- o[1] === l ? f = o[2] : (f = /* @__PURE__ */ jsxs("div", {
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ var MainLayout_default = (i) => {
5
+ let a = c(10), { children: o, breadcrumbsData: s, headerMenu: l } = i, u;
6
+ a[0] === s ? u = a[1] : (u = /* @__PURE__ */ jsx("div", {
20
7
  className: "flex items-center gap-2",
21
- children: [d, /* @__PURE__ */ jsx(PageBreadcrumbs_default, { breadcrumbData: l })]
22
- }), o[1] = l, o[2] = f);
23
- let p;
24
- o[3] !== u || o[4] !== f ? (p = /* @__PURE__ */ jsxs("div", {
8
+ children: /* @__PURE__ */ jsx(PageBreadcrumbs_default, { breadcrumbData: s })
9
+ }), a[0] = s, a[1] = u);
10
+ let d;
11
+ a[2] !== l || a[3] !== u ? (d = /* @__PURE__ */ jsxs("div", {
25
12
  className: "border-b flex h-12 shrink-0 items-center justify-between gap-2 px-4",
26
- children: [f, u]
27
- }), o[3] = u, o[4] = f, o[5] = p) : p = o[5];
28
- let m;
29
- o[6] === s ? m = o[7] : (m = /* @__PURE__ */ jsx("div", {
13
+ children: [u, l]
14
+ }), a[2] = l, a[3] = u, a[4] = d) : d = a[4];
15
+ let f;
16
+ a[5] === o ? f = a[6] : (f = /* @__PURE__ */ jsx("div", {
30
17
  className: "flex-1 overflow-auto p-4",
31
18
  children: /* @__PURE__ */ jsx("div", {
32
19
  className: "space-y-6",
33
- children: s
20
+ children: o
34
21
  })
35
- }), o[6] = s, o[7] = m);
36
- let h;
37
- return o[8] !== p || o[9] !== m ? (h = /* @__PURE__ */ jsxs("div", {
22
+ }), a[5] = o, a[6] = f);
23
+ let p;
24
+ return a[7] !== d || a[8] !== f ? (p = /* @__PURE__ */ jsxs("div", {
38
25
  className: "flex h-full flex-col",
39
- children: [p, m]
40
- }), o[8] = p, o[9] = m, o[10] = h) : h = o[10], h;
26
+ children: [d, f]
27
+ }), a[7] = d, a[8] = f, a[9] = p) : p = a[9], p;
41
28
  };
42
29
  export { MainLayout_default as default };
@@ -1,165 +1,225 @@
1
1
  import { useStudio, useStudioOptional } from "../../providers/StudioProvider.js";
2
2
  import { useFilterPipelines } from "../../hooks/usePipelines.js";
3
3
  import { useComponentOverrides } from "../../providers/ComponentOverridesProvider.js";
4
- import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarTrigger, useSidebar } from "../ui/sidebar.js";
4
+ import { cn } from "../../lib/utils.js";
5
+ import { Button } from "../ui/button.js";
6
+ import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, useSidebar } from "../ui/sidebar.js";
7
+ import { motion } from "../../node_modules/motion/dist/es/react.js";
5
8
  import { c } from "react/compiler-runtime";
6
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ import { useState } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
11
  import { Link, useLocation } from "react-router-dom";
8
- import { CircleAlert, Info, LayoutDashboard, LayoutGrid, Play, Workflow } from "lucide-react";
12
+ import { CircleAlert, Info, LayoutDashboard, LayoutGrid, PanelLeftIcon, Play, Workflow } from "lucide-react";
9
13
  var DefaultSidebarHeader = () => {
10
- let e = c(5), { state: u } = useSidebar(), d;
11
- e[0] === u ? d = e[1] : (d = u === "expanded" && /* @__PURE__ */ jsxs("div", {
12
- className: "flex items-center gap-2 px-1.5",
14
+ let e = c(18), { state: l, toggleSidebar: u } = useSidebar(), [d, m] = useState(!1), h = l === "collapsed" ? "justify-center" : "justify-between", g;
15
+ e[0] === h ? g = e[1] : (g = cn("border-sidebar-border h-12 w-full flex-row items-center border-b px-1.5 py-0", h), e[0] = h, e[1] = g);
16
+ let _;
17
+ e[2] === l ? _ = e[3] : (_ = l === "expanded" && /* @__PURE__ */ jsxs("div", {
18
+ className: "flex items-center gap-2 overflow-hidden px-1.5",
13
19
  children: [/* @__PURE__ */ jsx("img", {
14
20
  src: "/loopstack.svg",
15
21
  alt: "Loopstack",
16
22
  className: "h-6 w-6"
17
- }), /* @__PURE__ */ jsx("span", {
18
- className: "text-sm font-semibold",
23
+ }), /* @__PURE__ */ jsx(motion.span, {
24
+ className: "whitespace-nowrap text-sm font-semibold",
25
+ initial: {
26
+ opacity: 0,
27
+ x: -6
28
+ },
29
+ animate: {
30
+ opacity: 1,
31
+ x: 0
32
+ },
33
+ transition: {
34
+ opacity: {
35
+ duration: .18,
36
+ delay: .12,
37
+ ease: "easeOut"
38
+ },
39
+ x: {
40
+ duration: .18,
41
+ delay: .12,
42
+ ease: "easeOut"
43
+ }
44
+ },
19
45
  children: "Loopstack Studio"
20
46
  })]
21
- }), e[0] = u, e[1] = d);
22
- let f;
23
- e[2] === Symbol.for("react.memo_cache_sentinel") ? (f = /* @__PURE__ */ jsx(SidebarTrigger, { className: "hover:cursor-pointer" }), e[2] = f) : f = e[2];
24
- let p;
25
- return e[3] === d ? p = e[4] : (p = /* @__PURE__ */ jsxs(SidebarHeader, {
26
- className: "border-sidebar-border h-12 w-full flex-row items-center justify-between border-b px-1.5 py-0",
27
- children: [d, f]
28
- }), e[3] = d, e[4] = p), p;
47
+ }), e[2] = l, e[3] = _);
48
+ let v;
49
+ e[4] === Symbol.for("react.memo_cache_sentinel") ? (v = cn("relative size-10 text-muted-foreground hover:cursor-pointer hover:bg-accent/50 hover:text-accent-foreground"), e[4] = v) : v = e[4];
50
+ let y, x;
51
+ e[5] === Symbol.for("react.memo_cache_sentinel") ? (y = () => m(!0), x = () => m(!1), e[5] = y, e[6] = x) : (y = e[5], x = e[6]);
52
+ let S;
53
+ e[7] !== d || e[8] !== l ? (S = l === "collapsed" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(motion.img, {
54
+ src: "/loopstack.svg",
55
+ alt: "Loopstack",
56
+ className: "absolute top-1/2 left-1/2 h-5 w-5 -translate-x-1/2 -translate-y-1/2",
57
+ initial: { opacity: 1 },
58
+ animate: { opacity: d ? 0 : 1 },
59
+ transition: { duration: .2 }
60
+ }), /* @__PURE__ */ jsx(motion.div, {
61
+ className: "absolute top-1/2 left-1/2 flex -translate-x-1/2 -translate-y-1/2 items-center justify-center",
62
+ initial: { opacity: 0 },
63
+ animate: { opacity: d ? 1 : 0 },
64
+ transition: { duration: .2 },
65
+ children: /* @__PURE__ */ jsx(PanelLeftIcon, { className: "size-5" })
66
+ })] }) : /* @__PURE__ */ jsx(PanelLeftIcon, { className: "size-5" }), e[7] = d, e[8] = l, e[9] = S) : S = e[9];
67
+ let C;
68
+ e[10] === Symbol.for("react.memo_cache_sentinel") ? (C = /* @__PURE__ */ jsx("span", {
69
+ className: "sr-only",
70
+ children: "Toggle Sidebar"
71
+ }), e[10] = C) : C = e[10];
72
+ let w;
73
+ e[11] !== S || e[12] !== u ? (w = /* @__PURE__ */ jsxs(Button, {
74
+ "data-sidebar": "trigger",
75
+ "data-slot": "sidebar-trigger",
76
+ variant: "ghost",
77
+ size: "icon",
78
+ className: v,
79
+ onClick: u,
80
+ onMouseEnter: y,
81
+ onMouseLeave: x,
82
+ children: [S, C]
83
+ }), e[11] = S, e[12] = u, e[13] = w) : w = e[13];
84
+ let k;
85
+ return e[14] !== g || e[15] !== _ || e[16] !== w ? (k = /* @__PURE__ */ jsxs(SidebarHeader, {
86
+ className: g,
87
+ children: [_, w]
88
+ }), e[14] = g, e[15] = _, e[16] = w, e[17] = k) : k = e[17], k;
29
89
  }, RunsNav = () => {
30
- let u = c(26), f = useLocation(), { router: p } = useStudio(), m = p.getRuns(), h;
31
- u[0] === p ? h = u[1] : (h = p.getRunsActionRequired(), u[0] = p, u[1] = h);
32
- let y = h, C;
33
- u[2] === Symbol.for("react.memo_cache_sentinel") ? (C = {
90
+ let l = c(26), d = useLocation(), { router: f } = useStudio(), p = f.getRuns(), m;
91
+ l[0] === f ? m = l[1] : (m = f.getRunsActionRequired(), l[0] = f, l[1] = m);
92
+ let h = m, g;
93
+ l[2] === Symbol.for("react.memo_cache_sentinel") ? (g = {
34
94
  parentId: null,
35
95
  status: "paused"
36
- }, u[2] = C) : C = u[2];
37
- let w = useFilterPipelines(void 0, C, "createdAt", "DESC", 0, 1).data?.total ?? 0, T;
38
- u[3] === Symbol.for("react.memo_cache_sentinel") ? (T = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Runs" }), u[3] = T) : T = u[3];
39
- let E = f.pathname === m || f.pathname === m + "/", D, O;
40
- u[4] === Symbol.for("react.memo_cache_sentinel") ? (D = /* @__PURE__ */ jsx(Play, {}), O = /* @__PURE__ */ jsx("span", { children: "Overview" }), u[4] = D, u[5] = O) : (D = u[4], O = u[5]);
41
- let k;
42
- u[6] === m ? k = u[7] : (k = /* @__PURE__ */ jsxs(Link, {
43
- to: m,
44
- children: [D, O]
45
- }), u[6] = m, u[7] = k);
96
+ }, l[2] = g) : g = l[2];
97
+ let b = useFilterPipelines(void 0, g, "createdAt", "DESC", 0, 1).data?.total ?? 0, T;
98
+ l[3] === Symbol.for("react.memo_cache_sentinel") ? (T = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Runs" }), l[3] = T) : T = l[3];
99
+ let E = d.pathname === p || d.pathname === p + "/", D, O;
100
+ l[4] === Symbol.for("react.memo_cache_sentinel") ? (D = /* @__PURE__ */ jsx(Play, {}), O = /* @__PURE__ */ jsx("span", { children: "Overview" }), l[4] = D, l[5] = O) : (D = l[4], O = l[5]);
46
101
  let A;
47
- u[8] !== E || u[9] !== k ? (A = /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
102
+ l[6] === p ? A = l[7] : (A = /* @__PURE__ */ jsxs(Link, {
103
+ to: p,
104
+ children: [D, O]
105
+ }), l[6] = p, l[7] = A);
106
+ let j;
107
+ l[8] !== E || l[9] !== A ? (j = /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
48
108
  asChild: !0,
49
109
  isActive: E,
50
110
  tooltip: "Overview",
51
- children: k
52
- }) }), u[8] = E, u[9] = k, u[10] = A) : A = u[10];
53
- let j = f.pathname === y, M, N;
54
- u[11] === Symbol.for("react.memo_cache_sentinel") ? (N = /* @__PURE__ */ jsx(CircleAlert, {}), M = /* @__PURE__ */ jsx("span", { children: "Action Required" }), u[11] = M, u[12] = N) : (M = u[11], N = u[12]);
55
- let P;
56
- u[13] === y ? P = u[14] : (P = /* @__PURE__ */ jsxs(Link, {
57
- to: y,
58
- children: [N, M]
59
- }), u[13] = y, u[14] = P);
111
+ children: A
112
+ }) }), l[8] = E, l[9] = A, l[10] = j) : j = l[10];
113
+ let M = d.pathname === h, N, P;
114
+ l[11] === Symbol.for("react.memo_cache_sentinel") ? (P = /* @__PURE__ */ jsx(CircleAlert, {}), N = /* @__PURE__ */ jsx("span", { children: "Action Required" }), l[11] = N, l[12] = P) : (N = l[11], P = l[12]);
60
115
  let F;
61
- u[15] !== P || u[16] !== j ? (F = /* @__PURE__ */ jsx(SidebarMenuButton, {
116
+ l[13] === h ? F = l[14] : (F = /* @__PURE__ */ jsxs(Link, {
117
+ to: h,
118
+ children: [P, N]
119
+ }), l[13] = h, l[14] = F);
120
+ let I;
121
+ l[15] !== F || l[16] !== M ? (I = /* @__PURE__ */ jsx(SidebarMenuButton, {
62
122
  asChild: !0,
63
- isActive: j,
123
+ isActive: M,
64
124
  tooltip: "Action Required",
65
- children: P
66
- }), u[15] = P, u[16] = j, u[17] = F) : F = u[17];
67
- let I;
68
- u[18] === w ? I = u[19] : (I = w > 0 && /* @__PURE__ */ jsx(SidebarMenuBadge, { children: w }), u[18] = w, u[19] = I);
125
+ children: F
126
+ }), l[15] = F, l[16] = M, l[17] = I) : I = l[17];
69
127
  let L;
70
- u[20] !== F || u[21] !== I ? (L = /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [F, I] }), u[20] = F, u[21] = I, u[22] = L) : L = u[22];
128
+ l[18] === b ? L = l[19] : (L = b > 0 && /* @__PURE__ */ jsx(SidebarMenuBadge, { children: b }), l[18] = b, l[19] = L);
71
129
  let R;
72
- return u[23] !== L || u[24] !== A ? (R = /* @__PURE__ */ jsxs(SidebarGroup, { children: [T, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsxs(SidebarMenu, { children: [A, L] }) })] }), u[23] = L, u[24] = A, u[25] = R) : R = u[25], R;
130
+ l[20] !== I || l[21] !== L ? (R = /* @__PURE__ */ jsxs(SidebarMenuItem, { children: [I, L] }), l[20] = I, l[21] = L, l[22] = R) : R = l[22];
131
+ let z;
132
+ return l[23] !== R || l[24] !== j ? (z = /* @__PURE__ */ jsxs(SidebarGroup, { children: [T, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsxs(SidebarMenu, { children: [j, R] }) })] }), l[23] = R, l[24] = j, l[25] = z) : z = l[25], z;
73
133
  }, WorkspacesNav = () => {
74
- let u = c(11), d = useLocation(), { router: f } = useStudio(), p = f.getWorkspaces(), m;
75
- u[0] === Symbol.for("react.memo_cache_sentinel") ? (m = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Workspaces" }), u[0] = m) : m = u[0];
76
- let h;
77
- u[1] !== d.pathname || u[2] !== p ? (h = d.pathname === p || d.pathname.startsWith(p + "/"), u[1] = d.pathname, u[2] = p, u[3] = h) : h = u[3];
78
- let y, x;
79
- u[4] === Symbol.for("react.memo_cache_sentinel") ? (y = /* @__PURE__ */ jsx(LayoutGrid, {}), x = /* @__PURE__ */ jsx("span", { children: "My Workspaces" }), u[4] = y, u[5] = x) : (y = u[4], x = u[5]);
80
- let C;
81
- u[6] === p ? C = u[7] : (C = /* @__PURE__ */ jsxs(Link, {
82
- to: p,
83
- children: [y, x]
84
- }), u[6] = p, u[7] = C);
85
- let w;
86
- return u[8] !== h || u[9] !== C ? (w = /* @__PURE__ */ jsxs(SidebarGroup, { children: [m, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
134
+ let l = c(11), u = useLocation(), { router: d } = useStudio(), f = d.getWorkspaces(), p;
135
+ l[0] === Symbol.for("react.memo_cache_sentinel") ? (p = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Workspaces" }), l[0] = p) : p = l[0];
136
+ let m;
137
+ l[1] !== u.pathname || l[2] !== f ? (m = u.pathname === f || u.pathname.startsWith(f + "/"), l[1] = u.pathname, l[2] = f, l[3] = m) : m = l[3];
138
+ let h, g;
139
+ l[4] === Symbol.for("react.memo_cache_sentinel") ? (h = /* @__PURE__ */ jsx(LayoutGrid, {}), g = /* @__PURE__ */ jsx("span", { children: "My Workspaces" }), l[4] = h, l[5] = g) : (h = l[4], g = l[5]);
140
+ let b;
141
+ l[6] === f ? b = l[7] : (b = /* @__PURE__ */ jsxs(Link, {
142
+ to: f,
143
+ children: [h, g]
144
+ }), l[6] = f, l[7] = b);
145
+ let S;
146
+ return l[8] !== m || l[9] !== b ? (S = /* @__PURE__ */ jsxs(SidebarGroup, { children: [p, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
87
147
  asChild: !0,
88
- isActive: h,
148
+ isActive: m,
89
149
  tooltip: "My Workspaces",
90
- children: C
91
- }) }) }) })] }), u[8] = h, u[9] = C, u[10] = w) : w = u[10], w;
150
+ children: b
151
+ }) }) }) })] }), l[8] = m, l[9] = b, l[10] = S) : S = l[10], S;
92
152
  }, InsightsNav = () => {
93
- let u = c(15), d = useLocation(), { router: f } = useStudio(), p;
94
- u[0] === f ? p = u[1] : (p = f.getDashboard(), u[0] = f, u[1] = p);
95
- let m;
96
- u[2] === p ? m = u[3] : (m = {
153
+ let l = c(15), u = useLocation(), { router: d } = useStudio(), f;
154
+ l[0] === d ? f = l[1] : (f = d.getDashboard(), l[0] = d, l[1] = f);
155
+ let p;
156
+ l[2] === f ? p = l[3] : (p = {
97
157
  label: "Dashboard",
98
- href: p,
158
+ href: f,
99
159
  icon: LayoutDashboard
100
- }, u[2] = p, u[3] = m);
160
+ }, l[2] = f, l[3] = p);
161
+ let m;
162
+ l[4] === d ? m = l[5] : (m = d.getDebugWorkflows(), l[4] = d, l[5] = m);
101
163
  let h;
102
- u[4] === f ? h = u[5] : (h = f.getDebugWorkflows(), u[4] = f, u[5] = h);
103
- let y;
104
- u[6] === h ? y = u[7] : (y = {
164
+ l[6] === m ? h = l[7] : (h = {
105
165
  label: "Workflows",
106
- href: h,
166
+ href: m,
107
167
  icon: Workflow
108
- }, u[6] = h, u[7] = y);
109
- let x;
110
- u[8] !== m || u[9] !== y ? (x = [m, y], u[8] = m, u[9] = y, u[10] = x) : x = u[10];
111
- let C = x, w;
112
- u[11] === Symbol.for("react.memo_cache_sentinel") ? (w = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Insights" }), u[11] = w) : w = u[11];
168
+ }, l[6] = m, l[7] = h);
169
+ let g;
170
+ l[8] !== p || l[9] !== h ? (g = [p, h], l[8] = p, l[9] = h, l[10] = g) : g = l[10];
171
+ let b = g, S;
172
+ l[11] === Symbol.for("react.memo_cache_sentinel") ? (S = /* @__PURE__ */ jsx(SidebarGroupLabel, { children: "Insights" }), l[11] = S) : S = l[11];
113
173
  let T;
114
- return u[12] !== d || u[13] !== C ? (T = /* @__PURE__ */ jsxs(SidebarGroup, { children: [w, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: C.map((e) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
174
+ return l[12] !== u || l[13] !== b ? (T = /* @__PURE__ */ jsxs(SidebarGroup, { children: [S, /* @__PURE__ */ jsx(SidebarGroupContent, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: b.map((e) => /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
115
175
  asChild: !0,
116
- isActive: d.pathname === e.href,
176
+ isActive: u.pathname === e.href,
117
177
  tooltip: e.label,
118
178
  children: /* @__PURE__ */ jsxs(Link, {
119
179
  to: e.href,
120
180
  children: [/* @__PURE__ */ jsx(e.icon, {}), /* @__PURE__ */ jsx("span", { children: e.label })]
121
181
  })
122
- }) }, e.href)) }) })] }), u[12] = d, u[13] = C, u[14] = T) : T = u[14], T;
182
+ }) }, e.href)) }) })] }), l[12] = u, l[13] = b, l[14] = T) : T = l[14], T;
123
183
  }, DefaultSidebarFooter = () => {
124
- let u = c(9), d = useLocation(), { router: f } = useStudio(), p;
125
- u[0] === f ? p = u[1] : (p = f.getEnvironmentInfo(), u[0] = f, u[1] = p);
126
- let m = p, g = d.pathname === m, _, v;
127
- u[2] === Symbol.for("react.memo_cache_sentinel") ? (_ = /* @__PURE__ */ jsx(Info, {}), v = /* @__PURE__ */ jsx("span", { children: "Info" }), u[2] = _, u[3] = v) : (_ = u[2], v = u[3]);
184
+ let l = c(9), u = useLocation(), { router: d } = useStudio(), f;
185
+ l[0] === d ? f = l[1] : (f = d.getEnvironmentInfo(), l[0] = d, l[1] = f);
186
+ let p = f, m = u.pathname === p, h, _;
187
+ l[2] === Symbol.for("react.memo_cache_sentinel") ? (h = /* @__PURE__ */ jsx(Info, {}), _ = /* @__PURE__ */ jsx("span", { children: "Info" }), l[2] = h, l[3] = _) : (h = l[2], _ = l[3]);
188
+ let v;
189
+ l[4] === p ? v = l[5] : (v = /* @__PURE__ */ jsxs(Link, {
190
+ to: p,
191
+ children: [h, _]
192
+ }), l[4] = p, l[5] = v);
128
193
  let y;
129
- u[4] === m ? y = u[5] : (y = /* @__PURE__ */ jsxs(Link, {
130
- to: m,
131
- children: [_, v]
132
- }), u[4] = m, u[5] = y);
133
- let x;
134
- return u[6] !== g || u[7] !== y ? (x = /* @__PURE__ */ jsx(SidebarFooter, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
194
+ return l[6] !== m || l[7] !== v ? (y = /* @__PURE__ */ jsx(SidebarFooter, { children: /* @__PURE__ */ jsx(SidebarMenu, { children: /* @__PURE__ */ jsx(SidebarMenuItem, { children: /* @__PURE__ */ jsx(SidebarMenuButton, {
135
195
  asChild: !0,
136
- isActive: g,
196
+ isActive: m,
137
197
  size: "sm",
138
198
  tooltip: "Info",
139
- children: y
140
- }) }) }) }), u[6] = g, u[7] = y, u[8] = x) : x = u[8], x;
199
+ children: v
200
+ }) }) }) }), l[6] = m, l[7] = v, l[8] = y) : y = l[8], y;
141
201
  };
142
202
  const StudioSidebar = () => {
143
- let e = c(13), d = useComponentOverrides(), h = useStudioOptional(), g = d.SidebarHeader ?? DefaultSidebarHeader, _ = d.SidebarFooter ?? DefaultSidebarFooter, v;
144
- e[0] === g ? v = e[1] : (v = /* @__PURE__ */ jsx(g, {}), e[0] = g, e[1] = v);
145
- let y;
146
- e[2] === h ? y = e[3] : (y = h && /* @__PURE__ */ jsxs(Fragment, { children: [
203
+ let e = c(13), u = useComponentOverrides(), f = useStudioOptional(), p = u.SidebarHeader ?? DefaultSidebarHeader, g = u.SidebarFooter ?? DefaultSidebarFooter, _;
204
+ e[0] === p ? _ = e[1] : (_ = /* @__PURE__ */ jsx(p, {}), e[0] = p, e[1] = _);
205
+ let v;
206
+ e[2] === f ? v = e[3] : (v = f && /* @__PURE__ */ jsxs(Fragment$1, { children: [
147
207
  /* @__PURE__ */ jsx(RunsNav, {}),
148
208
  /* @__PURE__ */ jsx(WorkspacesNav, {}),
149
209
  /* @__PURE__ */ jsx(InsightsNav, {})
150
- ] }), e[2] = h, e[3] = y);
210
+ ] }), e[2] = f, e[3] = v);
211
+ let y;
212
+ e[4] === v ? y = e[5] : (y = /* @__PURE__ */ jsx(SidebarContent, { children: v }), e[4] = v, e[5] = y);
151
213
  let b;
152
- e[4] === y ? b = e[5] : (b = /* @__PURE__ */ jsx(SidebarContent, { children: y }), e[4] = y, e[5] = b);
214
+ e[6] !== g || e[7] !== f ? (b = f && /* @__PURE__ */ jsx(g, {}), e[6] = g, e[7] = f, e[8] = b) : b = e[8];
153
215
  let x;
154
- e[6] !== _ || e[7] !== h ? (x = h && /* @__PURE__ */ jsx(_, {}), e[6] = _, e[7] = h, e[8] = x) : x = e[8];
155
- let S;
156
- return e[9] !== v || e[10] !== b || e[11] !== x ? (S = /* @__PURE__ */ jsxs(Sidebar, {
216
+ return e[9] !== _ || e[10] !== y || e[11] !== b ? (x = /* @__PURE__ */ jsxs(Sidebar, {
157
217
  collapsible: "icon",
158
218
  children: [
159
- v,
160
- b,
161
- x
219
+ _,
220
+ y,
221
+ b
162
222
  ]
163
- }), e[9] = v, e[10] = b, e[11] = x, e[12] = S) : S = e[12], S;
223
+ }), e[9] = _, e[10] = y, e[11] = b, e[12] = x) : x = e[12], x;
164
224
  };
165
225
  export { StudioSidebar };