@loopstack/loopstack-studio 0.21.2 → 0.22.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 (89) hide show
  1. package/dist/api/auth.js +10 -0
  2. package/dist/api/client.js +13 -0
  3. package/dist/api/config.js +10 -0
  4. package/dist/api/dashboard.js +4 -0
  5. package/dist/api/documents.js +7 -0
  6. package/dist/api/index.js +24 -0
  7. package/dist/api/namespaces.js +7 -0
  8. package/dist/api/pipelines.js +13 -0
  9. package/dist/api/processor.js +4 -0
  10. package/dist/api/workflows.js +8 -0
  11. package/dist/api/workspaces.js +12 -0
  12. package/dist/app/EnvironmentEmbedRoot.js +33 -0
  13. package/dist/components/data-table/DataTableFilters.js +74 -63
  14. package/dist/components/layout/MainLayout.js +7 -4
  15. package/dist/components/page/PageBreadcrumbs.js +1 -1
  16. package/dist/components/ui/input.js +1 -1
  17. package/dist/components/ui/select.js +1 -1
  18. package/dist/components/ui/sidebar.js +359 -359
  19. package/dist/components/ui/textarea.js +1 -1
  20. package/dist/components/ui-widgets/UiActions.js +22 -15
  21. package/dist/components/ui-widgets/UiWidget.js +31 -26
  22. package/dist/components/ui-widgets/widgets/AiPromptInput.js +27 -27
  23. package/dist/components/ui-widgets/widgets/ButtonFullWidth.js +12 -12
  24. package/dist/components/ui-widgets/widgets/SandboxRun.js +32 -0
  25. package/dist/components/ui-widgets/widgets/SubmitButton.js +11 -11
  26. package/dist/features/code-explorer/utils/fileIcons.js +4 -7
  27. package/dist/features/oauth/OAuthPromptRenderer.js +1 -1
  28. package/dist/features/runs/Runs.js +197 -0
  29. package/dist/features/workbench/NavigationItems.js +1 -1
  30. package/dist/features/workbench/Workbench.js +109 -75
  31. package/dist/features/workbench/WorkflowItem.js +8 -11
  32. package/dist/features/workbench/WorkflowList.js +29 -20
  33. package/dist/features/workbench/components/DocumentList.js +20 -20
  34. package/dist/features/workbench/components/NewRunDialog.js +328 -0
  35. package/dist/features/workbench/components/WorkbenchFloatingPanel.js +88 -0
  36. package/dist/features/workbench/components/WorkbenchFlowPanel.js +48 -0
  37. package/dist/features/workbench/components/WorkbenchIconSidebar.js +68 -0
  38. package/dist/features/workbench/components/WorkbenchPreviewPanel.js +128 -0
  39. package/dist/features/workbench/components/WorkflowForms.js +7 -6
  40. package/dist/features/workbench/components/WorkflowHistoryItem.js +68 -63
  41. package/dist/features/workbench/components/buttons/WorkflowButtons.js +79 -61
  42. package/dist/features/workbench/components/document-renderer/DocumentFormRenderer.js +6 -5
  43. package/dist/features/workbench/providers/WorkbenchLayoutProvider.js +77 -0
  44. package/dist/features/workspaces/Workspaces.js +2 -2
  45. package/dist/features/workspaces/components/CreateWorkspace.js +164 -81
  46. package/dist/features/workspaces/components/EnvironmentSlotSelector.js +63 -0
  47. package/dist/features/workspaces/components/ExecutionTimeline.js +69 -68
  48. package/dist/features/workspaces/components/PipelineForm.js +4 -4
  49. package/dist/hooks/index.js +2 -0
  50. package/dist/hooks/useApi.js +9 -33
  51. package/dist/hooks/useAuth.js +18 -38
  52. package/dist/hooks/useConfig.js +31 -33
  53. package/dist/hooks/useDashboard.js +1 -4
  54. package/dist/hooks/useDocuments.js +4 -8
  55. package/dist/hooks/useFiles.js +31 -41
  56. package/dist/hooks/useNamespaces.js +5 -8
  57. package/dist/hooks/usePipelines.js +98 -108
  58. package/dist/hooks/useProcessor.js +1 -4
  59. package/dist/hooks/useWorkflows.js +25 -41
  60. package/dist/hooks/useWorkspaces.js +45 -72
  61. package/dist/index.d.ts +266 -48
  62. package/dist/index.js +10 -2
  63. package/dist/packages/contracts/dist/enums/index.js +25 -0
  64. package/dist/packages/contracts/dist/enums/pipeline-state.js +10 -0
  65. package/dist/packages/contracts/dist/enums/registry.enum.js +20 -0
  66. package/dist/packages/contracts/dist/enums/sort-order.enum.js +10 -0
  67. package/dist/packages/contracts/dist/enums/user-type.enum.js +10 -0
  68. package/dist/packages/contracts/dist/enums/workflow-state.enum.js +10 -0
  69. package/dist/pages/DebugPage.js +12 -14
  70. package/dist/pages/DebugWorkflowDetailsPage.js +1 -1
  71. package/dist/pages/DebugWorkflowsPage.js +3 -4
  72. package/dist/pages/EmbedWorkbenchPage.js +4 -3
  73. package/dist/pages/PipelineDebugPage.js +2 -2
  74. package/dist/pages/PreviewWorkbenchPage.js +416 -0
  75. package/dist/pages/RunsListPage.js +36 -0
  76. package/dist/pages/RunsPage.js +49 -0
  77. package/dist/pages/StudioLandingPage.js +145 -0
  78. package/dist/pages/WorkbenchPage.js +75 -51
  79. package/dist/providers/InvalidationEventsProvider.js +7 -7
  80. package/dist/providers/QueryProvider.js +21 -0
  81. package/dist/routing/LocalRouter.js +9 -0
  82. package/dist/services/createApiClient.js +4 -10
  83. package/dist/services/index.js +1 -1
  84. package/package.json +2 -3
  85. package/dist/features/code-explorer/CodeExplorer.js +0 -69
  86. package/dist/features/code-explorer/components/CodeExplorerTree.js +0 -43
  87. package/dist/features/code-explorer/components/CodeExplorerTreeNode.js +0 -82
  88. package/dist/features/workbench/components/WorkbenchSidebar.js +0 -109
  89. package/dist/features/workbench/providers/WorkbenchContextProvider.js +0 -3
@@ -0,0 +1,10 @@
1
+ function createAuthApi(e) {
2
+ return {
3
+ me: () => e.get("/api/v1/auth/me").then((e) => e.data),
4
+ getInfo: () => e.get("/api/v1/auth/worker/health").then((e) => e.data),
5
+ hubLogin: (t) => e.post("/api/v1/auth/oauth/hub", t.hubLoginRequestDto).then((e) => e.data),
6
+ refresh: () => e.post("/api/v1/auth/refresh").then((e) => e.data),
7
+ logout: () => e.post("/api/v1/auth/logout").then((e) => e.data)
8
+ };
9
+ }
10
+ export { createAuthApi };
@@ -0,0 +1,13 @@
1
+ import { ApiClientEvents } from "../events/api-client-events.js";
2
+ import { eventBus } from "../services/eventEmitter.js";
3
+ import "../services/index.js";
4
+ import axios from "axios";
5
+ function createAxiosClient(r, i) {
6
+ let a = axios.create({
7
+ baseURL: r,
8
+ withCredentials: !0,
9
+ headers: { "Content-Type": "application/json" }
10
+ });
11
+ return a.interceptors.response.use((e) => e, (n) => (n.response?.status && [401, 403].includes(n.response.status) && eventBus.emit(ApiClientEvents.UNAUTHORIZED, i), n.code === "ERR_NETWORK" && (console.error("Connection refused - server may be down"), eventBus.emit(ApiClientEvents.ERR_NETWORK, i)), Promise.reject(n))), a;
12
+ }
13
+ export { createAxiosClient };
@@ -0,0 +1,10 @@
1
+ function createConfigApi(e) {
2
+ return {
3
+ getWorkspaceTypes: () => e.get("/api/v1/config/workspaces").then((e) => e.data),
4
+ getPipelineTypesByWorkspace: (t) => e.get(`/api/v1/config/workspaces/${encodeURIComponent(t.workspaceBlockName)}/pipelines`).then((e) => e.data),
5
+ getPipelineConfigByName: (t) => e.get(`/api/v1/config/workspaces/${encodeURIComponent(t.workspaceBlockName)}/pipelines/${encodeURIComponent(t.pipelineName)}`).then((e) => e.data),
6
+ getPipelineSourceByName: (t) => e.get(`/api/v1/config/workspaces/${encodeURIComponent(t.workspaceBlockName)}/pipelines/${encodeURIComponent(t.pipelineName)}/source`).then((e) => e.data),
7
+ getAvailableEnvironments: () => e.get("/api/v1/config/environments").then((e) => e.data)
8
+ };
9
+ }
10
+ export { createConfigApi };
@@ -0,0 +1,4 @@
1
+ function createDashboardApi(e) {
2
+ return { getStats: () => e.get("/api/v1/dashboard").then((e) => e.data) };
3
+ }
4
+ export { createDashboardApi };
@@ -0,0 +1,7 @@
1
+ function createDocumentsApi(e) {
2
+ return {
3
+ getById: (t) => e.get(`/api/v1/documents/${t.id}`).then((e) => e.data),
4
+ getAll: (t) => e.get("/api/v1/documents", { params: t }).then((e) => e.data)
5
+ };
6
+ }
7
+ export { createDocumentsApi };
@@ -0,0 +1,24 @@
1
+ import { createAuthApi } from "./auth.js";
2
+ import { createConfigApi } from "./config.js";
3
+ import { createDashboardApi } from "./dashboard.js";
4
+ import { createDocumentsApi } from "./documents.js";
5
+ import { createNamespacesApi } from "./namespaces.js";
6
+ import { createPipelinesApi } from "./pipelines.js";
7
+ import { createProcessorApi } from "./processor.js";
8
+ import { createWorkflowsApi } from "./workflows.js";
9
+ import { createWorkspacesApi } from "./workspaces.js";
10
+ import { createAxiosClient } from "./client.js";
11
+ function createApi(u) {
12
+ return {
13
+ auth: createAuthApi(u),
14
+ config: createConfigApi(u),
15
+ dashboard: createDashboardApi(u),
16
+ documents: createDocumentsApi(u),
17
+ namespaces: createNamespacesApi(u),
18
+ pipelines: createPipelinesApi(u),
19
+ processor: createProcessorApi(u),
20
+ workflows: createWorkflowsApi(u),
21
+ workspaces: createWorkspacesApi(u)
22
+ };
23
+ }
24
+ export { createApi };
@@ -0,0 +1,7 @@
1
+ function createNamespacesApi(e) {
2
+ return {
3
+ getById: (t) => e.get(`/api/v1/namespaces/${t.id}`).then((e) => e.data),
4
+ getAll: (t) => e.get("/api/v1/namespaces", { params: t }).then((e) => e.data)
5
+ };
6
+ }
7
+ export { createNamespacesApi };
@@ -0,0 +1,13 @@
1
+ function createPipelinesApi(e) {
2
+ return {
3
+ getById: (t) => e.get(`/api/v1/pipelines/${t.id}`).then((e) => e.data),
4
+ getAll: (t) => e.get("/api/v1/pipelines", { params: t }).then((e) => e.data),
5
+ create: (t) => e.post("/api/v1/pipelines", t.pipelineCreateDto).then((e) => e.data),
6
+ update: (t) => e.put(`/api/v1/pipelines/${t.id}`, t.pipelineUpdateDto).then((e) => e.data),
7
+ delete: (t) => e.delete(`/api/v1/pipelines/id/${t.id}`).then((e) => e.data),
8
+ batchDelete: (t) => e.delete("/api/v1/pipelines/batch", { data: { ids: t.ids } }).then((e) => e.data),
9
+ getFileTree: (t) => e.get(`/api/v1/pipelines/${t.pipelineId}/files`).then((e) => e.data),
10
+ getFileContent: (t) => e.get(`/api/v1/pipelines/${t.pipelineId}/files/${t.filePath}`).then((e) => e.data)
11
+ };
12
+ }
13
+ export { createPipelinesApi };
@@ -0,0 +1,4 @@
1
+ function createProcessorApi(e) {
2
+ return { runPipeline: (t) => e.post(`/api/v1/processor/run/${t.pipelineId}`, t.runPipelinePayloadDto, t.force === void 0 ? void 0 : { params: { force: t.force } }).then((e) => e.data) };
3
+ }
4
+ export { createProcessorApi };
@@ -0,0 +1,8 @@
1
+ function createWorkflowsApi(e) {
2
+ return {
3
+ getById: (t) => e.get(`/api/v1/workflows/${t.id}`).then((e) => e.data),
4
+ getAll: (t) => e.get("/api/v1/workflows", { params: t }).then((e) => e.data),
5
+ delete: (t) => e.delete(`/api/v1/workflows/${t.id}`).then((e) => e.data)
6
+ };
7
+ }
8
+ export { createWorkflowsApi };
@@ -0,0 +1,12 @@
1
+ function createWorkspacesApi(e) {
2
+ return {
3
+ getById: (t) => e.get(`/api/v1/workspaces/${t.id}`).then((e) => e.data),
4
+ getAll: (t) => e.get("/api/v1/workspaces", { params: t }).then((e) => e.data),
5
+ create: (t) => e.post("/api/v1/workspaces", t.workspaceCreateDto).then((e) => e.data),
6
+ update: (t) => e.put(`/api/v1/workspaces/${t.id}`, t.workspaceUpdateDto).then((e) => e.data),
7
+ delete: (t) => e.delete(`/api/v1/workspaces/id/${t.id}`).then((e) => e.data),
8
+ batchDelete: (t) => e.delete("/api/v1/workspaces/batch", { data: { ids: t.ids } }).then((e) => e.data),
9
+ setFavourite: (t) => e.patch(`/api/v1/workspaces/${t.id}/favourite`, t.workspaceFavouriteDto).then((e) => e.data)
10
+ };
11
+ }
12
+ export { createWorkspacesApi };
@@ -0,0 +1,33 @@
1
+ import { StudioProvider } from "../providers/StudioProvider.js";
2
+ import { SseProvider } from "../providers/SseProvider.js";
3
+ import { InvalidationEventsProvider } from "../providers/InvalidationEventsProvider.js";
4
+ import { useRouter } from "../routing/LocalRouter.js";
5
+ import { QueryProvider } from "../providers/QueryProvider.js";
6
+ import { c } from "react/compiler-runtime";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Outlet, useSearchParams } from "react-router-dom";
9
+ function EnvironmentEmbedRoot() {
10
+ let d = c(13), [f] = useSearchParams(), p;
11
+ d[0] === f ? p = d[1] : (p = f.get("url") ?? "http://localhost:3080", d[0] = f, d[1] = p);
12
+ let m = p, h;
13
+ d[2] === f ? h = d[3] : (h = f.get("name") ?? "Preview Environment", d[2] = f, d[3] = h);
14
+ let g = h, _;
15
+ d[4] !== g || d[5] !== m ? (_ = {
16
+ id: "preview-env",
17
+ name: g,
18
+ url: m
19
+ }, d[4] = g, d[5] = m, d[6] = _) : _ = d[6];
20
+ let v = _, y = useRouter(v.id), b, x, S;
21
+ d[7] === Symbol.for("react.memo_cache_sentinel") ? (b = /* @__PURE__ */ jsx(SseProvider, {}), x = /* @__PURE__ */ jsx(InvalidationEventsProvider, {}), S = /* @__PURE__ */ jsx(Outlet, {}), d[7] = b, d[8] = x, d[9] = S) : (b = d[7], x = d[8], S = d[9]);
22
+ let C;
23
+ return d[10] !== v || d[11] !== y ? (C = /* @__PURE__ */ jsx(QueryProvider, { children: /* @__PURE__ */ jsxs(StudioProvider, {
24
+ router: y,
25
+ environment: v,
26
+ children: [
27
+ b,
28
+ x,
29
+ S
30
+ ]
31
+ }) }), d[10] = v, d[11] = y, d[12] = C) : C = d[12], C;
32
+ }
33
+ export { EnvironmentEmbedRoot as default };
@@ -4,80 +4,91 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from ".
4
4
  import { c } from "react/compiler-runtime";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { X } from "lucide-react";
7
- var DataTableFilters_default = (m) => {
8
- let h = c(21), { filters: g, filterConfig: _, onFiltersChange: v, isOpen: y } = m;
9
- if (!y) return null;
10
- let b;
11
- h[0] !== g || h[1] !== v ? (b = (e, u) => {
12
- let d = { ...g };
13
- u === "all" ? delete d[e] : d[e] = u, v?.(d);
14
- }, h[0] = g, h[1] = v, h[2] = b) : b = h[2];
15
- let x = b, S;
16
- h[3] === v ? S = h[4] : (S = () => {
17
- v?.({});
18
- }, h[3] = v, h[4] = S);
7
+ function getOptionValue(e) {
8
+ return typeof e == "string" ? e : e.value;
9
+ }
10
+ function getOptionLabel(e) {
11
+ return typeof e == "string" ? e : e.label;
12
+ }
13
+ var DataTableFilters_default = (g) => {
14
+ let _ = c(20), { filters: v, filterConfig: y, onFiltersChange: b, isOpen: x } = g;
15
+ if (!x) return null;
16
+ let S;
17
+ _[0] !== v || _[1] !== b ? (S = (e, d) => {
18
+ let f = { ...v };
19
+ d === "all" ? delete f[e] : f[e] = d, b?.(f);
20
+ }, _[0] = v, _[1] = b, _[2] = S) : S = _[2];
19
21
  let C = S, w;
20
- h[5] === g ? w = h[6] : (w = Object.entries(g).filter(_temp), h[5] = g, h[6] = w);
21
- let T = w, E;
22
- h[7] !== _ || h[8] !== g || h[9] !== x ? (E = Object.entries(_).map((e) => {
23
- let [u, p] = e;
24
- return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Select, {
25
- value: g[u] || "all",
26
- onValueChange: (e) => x(u, e),
27
- children: [/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: `Select ${u}` }) }), /* @__PURE__ */ jsxs(SelectContent, { children: [/* @__PURE__ */ jsxs(SelectItem, {
28
- value: "all",
29
- children: ["All ", u]
30
- }), p.map(_temp2)] })]
31
- }) }, u);
32
- }), h[7] = _, h[8] = g, h[9] = x, h[10] = E) : E = h[10];
33
- let D;
34
- h[11] !== T || h[12] !== x ? (D = T.length > 0 && /* @__PURE__ */ jsx("div", {
35
- className: "flex flex-wrap gap-2",
36
- children: T.map((e) => {
37
- let [d, f] = e;
38
- return /* @__PURE__ */ jsxs(Badge, {
39
- variant: "secondary",
40
- className: "flex items-center gap-1",
41
- children: [
42
- d,
43
- ": ",
44
- f,
45
- /* @__PURE__ */ jsx("button", {
46
- onClick: () => {
47
- x(d, "all");
48
- },
49
- children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3 cursor-pointer" })
50
- })
51
- ]
52
- }, d);
53
- })
54
- }), h[11] = T, h[12] = x, h[13] = D) : D = h[13];
55
- let O;
56
- h[14] !== T.length || h[15] !== C ? (O = T.length > 0 && /* @__PURE__ */ jsx(Button, {
22
+ _[3] === b ? w = _[4] : (w = () => {
23
+ b?.({});
24
+ }, _[3] = b, _[4] = w);
25
+ let T = w, E, D, O, k;
26
+ if (_[5] !== y || _[6] !== v || _[7] !== C) {
27
+ E = Object.entries(v).filter(_temp);
28
+ let e = (e, d) => {
29
+ let f = y[e];
30
+ if (!f) return d;
31
+ let p = f.find((e) => getOptionValue(e) === d);
32
+ return p ? getOptionLabel(p) : d;
33
+ };
34
+ D = "flex flex-wrap gap-4", O = Object.entries(y).map((e) => {
35
+ let [d, h] = e;
36
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsxs(Select, {
37
+ value: v[d] || "all",
38
+ onValueChange: (e) => C(d, e),
39
+ children: [/* @__PURE__ */ jsx(SelectTrigger, { children: /* @__PURE__ */ jsx(SelectValue, { placeholder: `Select ${d}` }) }), /* @__PURE__ */ jsxs(SelectContent, { children: [/* @__PURE__ */ jsxs(SelectItem, {
40
+ value: "all",
41
+ children: ["All ", d]
42
+ }), h.map(_temp2)] })]
43
+ }) }, d);
44
+ }), k = E.length > 0 && /* @__PURE__ */ jsx("div", {
45
+ className: "flex flex-wrap gap-2",
46
+ children: E.map((f) => {
47
+ let [p, m] = f;
48
+ return /* @__PURE__ */ jsxs(Badge, {
49
+ variant: "secondary",
50
+ className: "flex items-center gap-1",
51
+ children: [
52
+ p,
53
+ ": ",
54
+ e(p, m),
55
+ /* @__PURE__ */ jsx("button", {
56
+ onClick: () => {
57
+ C(p, "all");
58
+ },
59
+ children: /* @__PURE__ */ jsx(X, { className: "h-3 w-3 cursor-pointer" })
60
+ })
61
+ ]
62
+ }, p);
63
+ })
64
+ }), _[5] = y, _[6] = v, _[7] = C, _[8] = E, _[9] = D, _[10] = O, _[11] = k;
65
+ } else E = _[8], D = _[9], O = _[10], k = _[11];
66
+ let A;
67
+ _[12] !== E.length || _[13] !== T ? (A = E.length > 0 && /* @__PURE__ */ jsx(Button, {
57
68
  variant: "outline",
58
69
  size: "sm",
59
- onClick: C,
70
+ onClick: T,
60
71
  className: "ml-auto",
61
72
  children: "Clear All"
62
- }), h[14] = T.length, h[15] = C, h[16] = O) : O = h[16];
63
- let k;
64
- return h[17] !== E || h[18] !== D || h[19] !== O ? (k = /* @__PURE__ */ jsxs("div", {
65
- className: "flex flex-wrap gap-4",
73
+ }), _[12] = E.length, _[13] = T, _[14] = A) : A = _[14];
74
+ let j;
75
+ return _[15] !== D || _[16] !== O || _[17] !== k || _[18] !== A ? (j = /* @__PURE__ */ jsxs("div", {
76
+ className: D,
66
77
  children: [
67
- E,
68
- D,
69
- O
78
+ O,
79
+ k,
80
+ A
70
81
  ]
71
- }), h[17] = E, h[18] = D, h[19] = O, h[20] = k) : k = h[20], k;
82
+ }), _[15] = D, _[16] = O, _[17] = k, _[18] = A, _[19] = j) : j = _[19], j;
72
83
  };
73
84
  function _temp(e) {
74
- let [, u] = e;
75
- return u;
85
+ let [, d] = e;
86
+ return d;
76
87
  }
77
88
  function _temp2(e) {
78
89
  return /* @__PURE__ */ jsx(SelectItem, {
79
- value: e,
80
- children: e
81
- }, e);
90
+ value: getOptionValue(e),
91
+ children: getOptionLabel(e)
92
+ }, getOptionValue(e));
82
93
  }
83
94
  export { DataTableFilters_default as default };
@@ -6,17 +6,20 @@ var MainLayout_default = (i) => {
6
6
  a[0] === s ? u = a[1] : (u = /* @__PURE__ */ jsx(PageBreadcrumbs_default, { breadcrumbData: s }), a[0] = s, a[1] = u);
7
7
  let d;
8
8
  a[2] !== l || a[3] !== u ? (d = /* @__PURE__ */ jsxs("div", {
9
- className: "flex min-h-[60px] items-center justify-between",
9
+ className: "border-b flex h-12 shrink-0 items-center justify-between",
10
10
  children: [u, l]
11
11
  }), a[2] = l, a[3] = u, a[4] = d) : d = a[4];
12
12
  let f;
13
13
  a[5] === o ? f = a[6] : (f = /* @__PURE__ */ jsx("div", {
14
- className: "space-y-6",
15
- children: o
14
+ className: "flex-1 overflow-auto p-4",
15
+ children: /* @__PURE__ */ jsx("div", {
16
+ className: "space-y-6",
17
+ children: o
18
+ })
16
19
  }), a[5] = o, a[6] = f);
17
20
  let p;
18
21
  return a[7] !== d || a[8] !== f ? (p = /* @__PURE__ */ jsxs("div", {
19
- className: "px-4",
22
+ className: "flex h-full flex-col",
20
23
  children: [d, f]
21
24
  }), a[7] = d, a[8] = f, a[9] = p) : p = a[9], p;
22
25
  };
@@ -10,7 +10,7 @@ var PageBreadcrumbs_default = (p) => {
10
10
  e.preventDefault(), _(d);
11
11
  }, m[0] = _, m[1] = v);
12
12
  let y = v, b;
13
- m[2] === g ? b = m[3] : (b = cn("ml-3 mb-2", g), m[2] = g, m[3] = b);
13
+ m[2] === g ? b = m[3] : (b = cn("ml-3", g), m[2] = g, m[3] = b);
14
14
  let x;
15
15
  if (m[4] !== h || m[5] !== y) {
16
16
  let e;
@@ -6,7 +6,7 @@ function Input(r) {
6
6
  let i = c(10), a, o, s;
7
7
  i[0] === r ? (a = i[1], o = i[2], s = i[3]) : ({className: a, type: s, ...o} = r, i[0] = r, i[1] = a, i[2] = o, i[3] = s);
8
8
  let l;
9
- i[4] === a ? l = i[5] : (l = cn("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", a), i[4] = a, i[5] = l);
9
+ i[4] === a ? l = i[5] : (l = cn("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-background px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", a), i[4] = a, i[5] = l);
10
10
  let u;
11
11
  return i[6] !== o || i[7] !== l || i[8] !== s ? (u = /* @__PURE__ */ jsx("input", {
12
12
  type: s,
@@ -36,7 +36,7 @@ function SelectTrigger(s) {
36
36
  let u = c(13), d, f, p, m;
37
37
  u[0] === s ? (d = u[1], f = u[2], p = u[3], m = u[4]) : ({className: f, size: m, children: d, ...p} = s, u[0] = s, u[1] = d, u[2] = f, u[3] = p, u[4] = m);
38
38
  let h = m === void 0 ? "default" : m, g;
39
- u[5] === f ? g = u[6] : (g = cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", f), u[5] = f, u[6] = g);
39
+ u[5] === f ? g = u[6] : (g = cn("border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit cursor-pointer items-center justify-between gap-2 rounded-md border bg-background px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", f), u[5] = f, u[6] = g);
40
40
  let _;
41
41
  u[7] === Symbol.for("react.memo_cache_sentinel") ? (_ = /* @__PURE__ */ jsx(SelectPrimitive.Icon, {
42
42
  asChild: !0,