@alepha/devtools 0.16.1 → 0.19.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.
- package/README.md +1 -5
- package/dist/index.browser.js +224 -0
- package/dist/index.browser.js.map +1 -0
- package/dist/index.d.ts +349 -321
- package/dist/index.js +293 -186
- package/dist/index.js.map +1 -1
- package/package.json +30 -23
- package/src/assets.ts +6 -0
- package/src/{api/entities → entities}/logs.ts +2 -2
- package/src/index.browser.ts +11 -0
- package/src/index.shared.ts +15 -0
- package/src/index.ts +11 -37
- package/src/{api/providers → providers}/DevToolsMetadataProvider.ts +84 -47
- package/src/providers/DevToolsProvider.ts +280 -0
- package/src/{api/schemas → schemas}/DevActionMetadata.ts +8 -0
- package/src/{api/schemas → schemas}/DevEntityMetadata.ts +3 -0
- package/src/{api/schemas → schemas}/DevMetadata.ts +13 -2
- package/src/{api/schemas → schemas}/DevPageMetadata.ts +3 -0
- package/src/{api/schemas → schemas}/DevTopicMetadata.ts +1 -0
- package/src/ui/AppRouter.tsx +55 -59
- package/src/ui/components/DevLayout.tsx +104 -84
- package/src/ui/components/configuration/ConfigAtoms.page.tsx +5 -0
- package/src/ui/components/configuration/ConfigAtoms.tsx +511 -0
- package/src/ui/components/configuration/ConfigEnv.page.tsx +5 -0
- package/src/ui/components/configuration/ConfigEnv.tsx +230 -0
- package/src/ui/components/configuration/DevConfiguration.tsx +36 -0
- package/src/ui/components/configuration/index.ts +3 -0
- package/src/ui/components/dashboard/DevDashboard.tsx +482 -0
- package/src/ui/components/database/DatabaseEditor.page.tsx +23 -0
- package/src/ui/components/database/DatabaseEditor.tsx +399 -0
- package/src/ui/components/database/DatabaseErd.page.tsx +28 -0
- package/src/ui/components/database/DatabaseErd.tsx +107 -0
- package/src/ui/components/database/DevDatabase.tsx +36 -0
- package/src/ui/components/database/EntityNode.tsx +83 -0
- package/src/ui/components/explorer/DevExplorer.tsx +351 -0
- package/src/ui/components/explorer/ExplorerTree.tsx +178 -0
- package/src/ui/components/explorer/panels/DevPanelAction.tsx +499 -0
- package/src/ui/components/explorer/panels/DevPanelCache.tsx +73 -0
- package/src/ui/components/explorer/panels/DevPanelPage.tsx +96 -0
- package/src/ui/components/explorer/panels/DevPanelQueue.tsx +51 -0
- package/src/ui/components/explorer/panels/DevPanelTopic.tsx +56 -0
- package/src/ui/components/explorer/panels/index.ts +5 -0
- package/src/ui/components/graph/DevDependencyGraph.tsx +35 -60
- package/src/ui/components/graph/GraphControls.tsx +10 -11
- package/src/ui/components/graph/NodeDetails.tsx +22 -29
- package/src/ui/components/graph/ProviderNode.tsx +4 -4
- package/src/ui/components/graph/helpers.ts +1 -1
- package/src/ui/components/logs/DevLogs.tsx +661 -0
- package/src/ui/components/logs/index.ts +1 -0
- package/src/ui/components/shared/TreeView.tsx +189 -0
- package/src/ui/main.css +17 -0
- package/src/ui/main.ts +2 -6
- package/LICENSE +0 -21
- package/assets/devtools/actions.html +0 -21
- package/assets/devtools/actions.html.br +0 -0
- package/assets/devtools/actions.html.gz +0 -0
- package/assets/devtools/asset.BZV40eAE.css +0 -1
- package/assets/devtools/asset.BZV40eAE.css.br +0 -0
- package/assets/devtools/asset.BZV40eAE.css.gz +0 -0
- package/assets/devtools/asset.CBnMq2vO.css +0 -1
- package/assets/devtools/asset.CBnMq2vO.css.br +0 -0
- package/assets/devtools/asset.CBnMq2vO.css.gz +0 -0
- package/assets/devtools/atoms.html +0 -21
- package/assets/devtools/atoms.html.br +0 -0
- package/assets/devtools/atoms.html.gz +0 -0
- package/assets/devtools/caches.html +0 -21
- package/assets/devtools/caches.html.br +0 -0
- package/assets/devtools/caches.html.gz +0 -0
- package/assets/devtools/chunk.6INqNjF0.js +0 -1
- package/assets/devtools/chunk.6INqNjF0.js.br +0 -0
- package/assets/devtools/chunk.6INqNjF0.js.gz +0 -0
- package/assets/devtools/chunk.9vpWpXSF.js +0 -1
- package/assets/devtools/chunk.9vpWpXSF.js.br +0 -0
- package/assets/devtools/chunk.9vpWpXSF.js.gz +0 -0
- package/assets/devtools/chunk.B4peH6PS.js +0 -1
- package/assets/devtools/chunk.B4peH6PS.js.br +0 -0
- package/assets/devtools/chunk.B4peH6PS.js.gz +0 -0
- package/assets/devtools/chunk.B8CNjZzU.js +0 -1
- package/assets/devtools/chunk.B8CNjZzU.js.br +0 -0
- package/assets/devtools/chunk.B8CNjZzU.js.gz +0 -0
- package/assets/devtools/chunk.Bgd10SVI.js +0 -1
- package/assets/devtools/chunk.Bgd10SVI.js.br +0 -0
- package/assets/devtools/chunk.Bgd10SVI.js.gz +0 -0
- package/assets/devtools/chunk.BjFrJKj1.js +0 -1
- package/assets/devtools/chunk.BjFrJKj1.js.br +0 -2
- package/assets/devtools/chunk.BjFrJKj1.js.gz +0 -0
- package/assets/devtools/chunk.BlqFPyLh.js +0 -1
- package/assets/devtools/chunk.BlqFPyLh.js.br +0 -0
- package/assets/devtools/chunk.BlqFPyLh.js.gz +0 -0
- package/assets/devtools/chunk.BqBNmfN9.js +0 -1
- package/assets/devtools/chunk.BqBNmfN9.js.br +0 -0
- package/assets/devtools/chunk.BqBNmfN9.js.gz +0 -0
- package/assets/devtools/chunk.Bt0_vkJm.js +0 -2
- package/assets/devtools/chunk.Bt0_vkJm.js.br +0 -0
- package/assets/devtools/chunk.Bt0_vkJm.js.gz +0 -0
- package/assets/devtools/chunk.C3GuU4pz.js +0 -2
- package/assets/devtools/chunk.C3GuU4pz.js.br +0 -0
- package/assets/devtools/chunk.C3GuU4pz.js.gz +0 -0
- package/assets/devtools/chunk.CGwoN_Mo.js +0 -1
- package/assets/devtools/chunk.CGwoN_Mo.js.br +0 -0
- package/assets/devtools/chunk.CGwoN_Mo.js.gz +0 -0
- package/assets/devtools/chunk.CJCvhHA7.js +0 -1
- package/assets/devtools/chunk.CJCvhHA7.js.br +0 -2
- package/assets/devtools/chunk.CJCvhHA7.js.gz +0 -0
- package/assets/devtools/chunk.CKr2VE6v.js +0 -1
- package/assets/devtools/chunk.CKr2VE6v.js.br +0 -0
- package/assets/devtools/chunk.CKr2VE6v.js.gz +0 -0
- package/assets/devtools/chunk.CLvTwbkw.js +0 -1
- package/assets/devtools/chunk.CLvTwbkw.js.br +0 -0
- package/assets/devtools/chunk.CLvTwbkw.js.gz +0 -0
- package/assets/devtools/chunk.CR13dZhE.js +0 -7
- package/assets/devtools/chunk.CR13dZhE.js.br +0 -0
- package/assets/devtools/chunk.CR13dZhE.js.gz +0 -0
- package/assets/devtools/chunk.C_C-cVqs.js +0 -1
- package/assets/devtools/chunk.C_C-cVqs.js.br +0 -1
- package/assets/devtools/chunk.C_C-cVqs.js.gz +0 -0
- package/assets/devtools/chunk.CjevPbPy.js +0 -1
- package/assets/devtools/chunk.CjevPbPy.js.br +0 -0
- package/assets/devtools/chunk.CjevPbPy.js.gz +0 -0
- package/assets/devtools/chunk.CkNMZqAe.js +0 -1
- package/assets/devtools/chunk.CkNMZqAe.js.br +0 -0
- package/assets/devtools/chunk.CkNMZqAe.js.gz +0 -0
- package/assets/devtools/chunk.Cl1Mlnqx.js +0 -1
- package/assets/devtools/chunk.Cl1Mlnqx.js.br +0 -0
- package/assets/devtools/chunk.Cl1Mlnqx.js.gz +0 -0
- package/assets/devtools/chunk.CyY8OGdZ.js +0 -1
- package/assets/devtools/chunk.CyY8OGdZ.js.br +0 -0
- package/assets/devtools/chunk.CyY8OGdZ.js.gz +0 -0
- package/assets/devtools/chunk.Cyx9kLqD.js +0 -1
- package/assets/devtools/chunk.Cyx9kLqD.js.br +0 -0
- package/assets/devtools/chunk.Cyx9kLqD.js.gz +0 -0
- package/assets/devtools/chunk.D1MGgxUI.js +0 -1
- package/assets/devtools/chunk.D1MGgxUI.js.br +0 -0
- package/assets/devtools/chunk.D1MGgxUI.js.gz +0 -0
- package/assets/devtools/chunk.D5Ci-dwk.js +0 -1
- package/assets/devtools/chunk.D5Ci-dwk.js.br +0 -0
- package/assets/devtools/chunk.D5Ci-dwk.js.gz +0 -0
- package/assets/devtools/chunk.DFrWQW5x.js +0 -9
- package/assets/devtools/chunk.DFrWQW5x.js.br +0 -0
- package/assets/devtools/chunk.DFrWQW5x.js.gz +0 -0
- package/assets/devtools/chunk.DaVlli3f.js +0 -1
- package/assets/devtools/chunk.DaVlli3f.js.br +0 -0
- package/assets/devtools/chunk.DaVlli3f.js.gz +0 -0
- package/assets/devtools/chunk.DdyBCs50.js +0 -1
- package/assets/devtools/chunk.DdyBCs50.js.br +0 -0
- package/assets/devtools/chunk.DdyBCs50.js.gz +0 -0
- package/assets/devtools/chunk.Dl0THvrP.js +0 -1
- package/assets/devtools/chunk.Dl0THvrP.js.br +0 -0
- package/assets/devtools/chunk.Dl0THvrP.js.gz +0 -0
- package/assets/devtools/chunk.DwUNDm68.js +0 -1
- package/assets/devtools/chunk.DwUNDm68.js.br +0 -0
- package/assets/devtools/chunk.DwUNDm68.js.gz +0 -0
- package/assets/devtools/chunk.DzDkh4C6.js +0 -1
- package/assets/devtools/chunk.DzDkh4C6.js.br +0 -0
- package/assets/devtools/chunk.DzDkh4C6.js.gz +0 -0
- package/assets/devtools/chunk.QTExp4CY.js +0 -1
- package/assets/devtools/chunk.QTExp4CY.js.br +0 -0
- package/assets/devtools/chunk.QTExp4CY.js.gz +0 -0
- package/assets/devtools/chunk.ReCPcJln.js +0 -1
- package/assets/devtools/chunk.ReCPcJln.js.br +0 -0
- package/assets/devtools/chunk.ReCPcJln.js.gz +0 -0
- package/assets/devtools/chunk.UEhIKOMY.js +0 -1
- package/assets/devtools/chunk.UEhIKOMY.js.br +0 -0
- package/assets/devtools/chunk.UEhIKOMY.js.gz +0 -0
- package/assets/devtools/chunk.mWQqK3dU.js +0 -1
- package/assets/devtools/chunk.mWQqK3dU.js.br +0 -0
- package/assets/devtools/chunk.mWQqK3dU.js.gz +0 -0
- package/assets/devtools/chunk.uyVen0u2.js +0 -1
- package/assets/devtools/chunk.uyVen0u2.js.br +0 -0
- package/assets/devtools/chunk.uyVen0u2.js.gz +0 -0
- package/assets/devtools/chunk.yLRX_cUF.js +0 -1
- package/assets/devtools/chunk.yLRX_cUF.js.br +0 -0
- package/assets/devtools/chunk.yLRX_cUF.js.gz +0 -0
- package/assets/devtools/chunk.zuZxBYZg.js +0 -1
- package/assets/devtools/chunk.zuZxBYZg.js.br +0 -0
- package/assets/devtools/chunk.zuZxBYZg.js.gz +0 -0
- package/assets/devtools/db.html +0 -21
- package/assets/devtools/db.html.br +0 -0
- package/assets/devtools/db.html.gz +0 -0
- package/assets/devtools/entry.Cry3rxEI.js +0 -79
- package/assets/devtools/entry.Cry3rxEI.js.br +0 -0
- package/assets/devtools/entry.Cry3rxEI.js.gz +0 -0
- package/assets/devtools/env.html +0 -21
- package/assets/devtools/env.html.br +0 -0
- package/assets/devtools/env.html.gz +0 -0
- package/assets/devtools/graph.html +0 -22
- package/assets/devtools/graph.html.br +0 -0
- package/assets/devtools/graph.html.gz +0 -0
- package/assets/devtools/index.html +0 -21
- package/assets/devtools/index.html.br +0 -0
- package/assets/devtools/index.html.gz +0 -0
- package/assets/devtools/logs.html +0 -21
- package/assets/devtools/logs.html.br +0 -0
- package/assets/devtools/logs.html.gz +0 -0
- package/assets/devtools/queues.html +0 -21
- package/assets/devtools/queues.html.br +0 -0
- package/assets/devtools/queues.html.gz +0 -0
- package/assets/devtools/topics.html +0 -21
- package/assets/devtools/topics.html.br +0 -0
- package/assets/devtools/topics.html.gz +0 -0
- package/src/api/DevToolsProvider.ts +0 -157
- package/src/api/providers/DevToolsDatabaseProvider.ts +0 -27
- package/src/api/repositories/LogRepository.ts +0 -8
- package/src/api/schemas/DevCommandMetadata.ts +0 -9
- package/src/ui/components/DevAtomsViewer.tsx +0 -637
- package/src/ui/components/DevCacheInspector.tsx +0 -423
- package/src/ui/components/DevDashboard.tsx +0 -38
- package/src/ui/components/DevEnvExplorer.tsx +0 -462
- package/src/ui/components/DevLogViewer.tsx +0 -252
- package/src/ui/components/DevQueueMonitor.tsx +0 -51
- package/src/ui/components/DevTopicsViewer.tsx +0 -686
- package/src/ui/components/actions/ActionGroup.tsx +0 -37
- package/src/ui/components/actions/ActionItem.tsx +0 -138
- package/src/ui/components/actions/DevActionsExplorer.tsx +0 -132
- package/src/ui/components/actions/MethodBadge.tsx +0 -18
- package/src/ui/components/actions/SchemaViewer.tsx +0 -21
- package/src/ui/components/actions/TryItPanel.tsx +0 -140
- package/src/ui/components/actions/constants.ts +0 -7
- package/src/ui/components/actions/helpers.ts +0 -18
- package/src/ui/components/actions/index.ts +0 -8
- package/src/ui/components/db/ColumnBadge.tsx +0 -55
- package/src/ui/components/db/DevDbStudio.tsx +0 -485
- package/src/ui/components/db/constants.ts +0 -11
- package/src/ui/components/db/index.ts +0 -4
- package/src/ui/components/db/types.ts +0 -7
- package/src/ui/styles.css +0 -1
- /package/src/{api/schemas → schemas}/DevAtomMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevBucketMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevCacheMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevEnvMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevModuleMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevProviderMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevQueueMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevRealmMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevRouteMetadata.ts +0 -0
- /package/src/{api/schemas → schemas}/DevSchedulerMetadata.ts +0 -0
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Flex, JsonViewer, ui } from "@alepha/ui";
|
|
2
|
+
import { Badge, Card, Text } from "@mantine/core";
|
|
3
|
+
|
|
4
|
+
export const DevPanelQueue = ({ queue }: { queue: any }) => {
|
|
5
|
+
return (
|
|
6
|
+
<Flex direction="column" gap="md">
|
|
7
|
+
<div>
|
|
8
|
+
<Text fz="lg" fw={600} mb="xs">
|
|
9
|
+
{queue.name}
|
|
10
|
+
</Text>
|
|
11
|
+
{queue.description && (
|
|
12
|
+
<Text fz="sm" c="dimmed">
|
|
13
|
+
{queue.description}
|
|
14
|
+
</Text>
|
|
15
|
+
)}
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<Flex gap="xs">
|
|
19
|
+
<Badge size="xs" variant="light" color="orange">
|
|
20
|
+
Queue
|
|
21
|
+
</Badge>
|
|
22
|
+
{queue.provider && (
|
|
23
|
+
<Badge size="xs" variant="outline" color="gray">
|
|
24
|
+
{queue.provider}
|
|
25
|
+
</Badge>
|
|
26
|
+
)}
|
|
27
|
+
</Flex>
|
|
28
|
+
|
|
29
|
+
{queue.schema && (
|
|
30
|
+
<div>
|
|
31
|
+
<Text fz="xs" c="dimmed" mb="xs" tt="uppercase" fw={600}>
|
|
32
|
+
Job Schema
|
|
33
|
+
</Text>
|
|
34
|
+
<Card
|
|
35
|
+
padding="sm"
|
|
36
|
+
style={{
|
|
37
|
+
background: ui.colors.surface,
|
|
38
|
+
border: `1px solid ${ui.colors.border}`,
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<JsonViewer
|
|
42
|
+
data={queue.schema}
|
|
43
|
+
defaultExpandedDepth={2}
|
|
44
|
+
size="xs"
|
|
45
|
+
/>
|
|
46
|
+
</Card>
|
|
47
|
+
</div>
|
|
48
|
+
)}
|
|
49
|
+
</Flex>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Flex, JsonViewer, ui } from "@alepha/ui";
|
|
2
|
+
import { Badge, Card, Text } from "@mantine/core";
|
|
3
|
+
|
|
4
|
+
export const DevPanelTopic = ({ topic }: { topic: any }) => {
|
|
5
|
+
return (
|
|
6
|
+
<Flex direction="column" gap="md">
|
|
7
|
+
<div>
|
|
8
|
+
<Text fz="lg" fw={600} mb="xs">
|
|
9
|
+
{topic.name}
|
|
10
|
+
</Text>
|
|
11
|
+
{topic.description && (
|
|
12
|
+
<Text fz="sm" c="dimmed">
|
|
13
|
+
{topic.description}
|
|
14
|
+
</Text>
|
|
15
|
+
)}
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<Flex gap="xs">
|
|
19
|
+
<Badge size="xs" variant="light" color="pink">
|
|
20
|
+
Topic
|
|
21
|
+
</Badge>
|
|
22
|
+
{topic.provider && (
|
|
23
|
+
<Badge size="xs" variant="outline" color="gray">
|
|
24
|
+
{topic.provider}
|
|
25
|
+
</Badge>
|
|
26
|
+
)}
|
|
27
|
+
{topic.subscribers > 0 && (
|
|
28
|
+
<Badge size="xs" variant="light" color="gray">
|
|
29
|
+
{topic.subscribers} subscriber{topic.subscribers !== 1 ? "s" : ""}
|
|
30
|
+
</Badge>
|
|
31
|
+
)}
|
|
32
|
+
</Flex>
|
|
33
|
+
|
|
34
|
+
{topic.schema && (
|
|
35
|
+
<div>
|
|
36
|
+
<Text fz="xs" c="dimmed" mb="xs" tt="uppercase" fw={600}>
|
|
37
|
+
Message Schema
|
|
38
|
+
</Text>
|
|
39
|
+
<Card
|
|
40
|
+
padding="sm"
|
|
41
|
+
style={{
|
|
42
|
+
background: ui.colors.surface,
|
|
43
|
+
border: `1px solid ${ui.colors.border}`,
|
|
44
|
+
}}
|
|
45
|
+
>
|
|
46
|
+
<JsonViewer
|
|
47
|
+
data={topic.schema}
|
|
48
|
+
defaultExpandedDepth={2}
|
|
49
|
+
size="xs"
|
|
50
|
+
/>
|
|
51
|
+
</Card>
|
|
52
|
+
</div>
|
|
53
|
+
)}
|
|
54
|
+
</Flex>
|
|
55
|
+
);
|
|
56
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { DevPanelAction } from "./DevPanelAction.tsx";
|
|
2
|
+
export { DevPanelCache } from "./DevPanelCache.tsx";
|
|
3
|
+
export { DevPanelPage } from "./DevPanelPage.tsx";
|
|
4
|
+
export { DevPanelQueue } from "./DevPanelQueue.tsx";
|
|
5
|
+
export { DevPanelTopic } from "./DevPanelTopic.tsx";
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import { ui, useDialog } from "@alepha/ui";
|
|
2
|
-
import {
|
|
3
|
-
ActionIcon,
|
|
4
|
-
Alert,
|
|
5
|
-
Badge,
|
|
6
|
-
Flex,
|
|
7
|
-
Group,
|
|
8
|
-
Loader,
|
|
9
|
-
Stack,
|
|
10
|
-
Text,
|
|
11
|
-
Tooltip,
|
|
12
|
-
} from "@mantine/core";
|
|
1
|
+
import { ActionButton, Flex, ui, useDialog } from "@alepha/ui";
|
|
2
|
+
import { Alert, Badge, Loader, Text } from "@mantine/core";
|
|
13
3
|
import {
|
|
14
4
|
IconAlertTriangle,
|
|
15
5
|
IconFocusCentered,
|
|
@@ -17,7 +7,6 @@ import {
|
|
|
17
7
|
IconLockOpen,
|
|
18
8
|
IconMinus,
|
|
19
9
|
IconPlus,
|
|
20
|
-
IconTopologyRing,
|
|
21
10
|
} from "@tabler/icons-react";
|
|
22
11
|
import {
|
|
23
12
|
Background,
|
|
@@ -31,9 +20,9 @@ import {
|
|
|
31
20
|
} from "@xyflow/react";
|
|
32
21
|
import { useAction, useInject } from "alepha/react";
|
|
33
22
|
import "@xyflow/react/dist/style.css";
|
|
23
|
+
import { devMetadataSchema } from "@alepha/devtools";
|
|
34
24
|
import { HttpClient } from "alepha/server";
|
|
35
25
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
36
|
-
import { devMetadataSchema } from "../../../api/schemas/DevMetadata.ts";
|
|
37
26
|
import { getModuleColor } from "./constants.ts";
|
|
38
27
|
import { GraphControls } from "./GraphControls.tsx";
|
|
39
28
|
import {
|
|
@@ -76,7 +65,7 @@ export const DevDependencyGraph = () => {
|
|
|
76
65
|
{
|
|
77
66
|
runOnInit: true,
|
|
78
67
|
handler: () =>
|
|
79
|
-
http.fetch("/
|
|
68
|
+
http.fetch("/__devtools/api/metadata", {
|
|
80
69
|
schema: { response: devMetadataSchema },
|
|
81
70
|
}),
|
|
82
71
|
},
|
|
@@ -218,21 +207,6 @@ export const DevDependencyGraph = () => {
|
|
|
218
207
|
|
|
219
208
|
return (
|
|
220
209
|
<Flex p="xl" direction="column" gap="md" w="100%" h="100%" flex={1} mih={0}>
|
|
221
|
-
<Group justify="space-between" wrap="nowrap">
|
|
222
|
-
<Group gap="sm">
|
|
223
|
-
<Flex
|
|
224
|
-
bdrs={"sm"}
|
|
225
|
-
h={"20px"}
|
|
226
|
-
w={"4px"}
|
|
227
|
-
bg={"var(--mantine-primary-color-filled)"}
|
|
228
|
-
/>
|
|
229
|
-
<IconTopologyRing size={24} opacity={0.7} />
|
|
230
|
-
<Text size="lg" fw={500}>
|
|
231
|
-
Dependency Graph
|
|
232
|
-
</Text>
|
|
233
|
-
</Group>
|
|
234
|
-
</Group>
|
|
235
|
-
|
|
236
210
|
<GraphControls
|
|
237
211
|
filters={filters}
|
|
238
212
|
onFiltersChange={setFilters}
|
|
@@ -331,7 +305,8 @@ const FlowControls = () => {
|
|
|
331
305
|
const [isLocked, setIsLocked] = useState(false);
|
|
332
306
|
|
|
333
307
|
return (
|
|
334
|
-
<
|
|
308
|
+
<Flex
|
|
309
|
+
direction="column"
|
|
335
310
|
gap={4}
|
|
336
311
|
style={{
|
|
337
312
|
position: "absolute",
|
|
@@ -344,34 +319,34 @@ const FlowControls = () => {
|
|
|
344
319
|
padding: 4,
|
|
345
320
|
}}
|
|
346
321
|
>
|
|
347
|
-
<
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
</
|
|
322
|
+
<ActionButton
|
|
323
|
+
size="sm"
|
|
324
|
+
variant="subtle"
|
|
325
|
+
tooltip="Zoom in"
|
|
326
|
+
onClick={() => zoomIn()}
|
|
327
|
+
icon={<IconPlus size={14} />}
|
|
328
|
+
/>
|
|
329
|
+
<ActionButton
|
|
330
|
+
size="sm"
|
|
331
|
+
variant="subtle"
|
|
332
|
+
tooltip="Zoom out"
|
|
333
|
+
onClick={() => zoomOut()}
|
|
334
|
+
icon={<IconMinus size={14} />}
|
|
335
|
+
/>
|
|
336
|
+
<ActionButton
|
|
337
|
+
size="sm"
|
|
338
|
+
variant="subtle"
|
|
339
|
+
tooltip="Fit view"
|
|
340
|
+
onClick={() => fitView({ padding: 0.2 })}
|
|
341
|
+
icon={<IconFocusCentered size={14} />}
|
|
342
|
+
/>
|
|
343
|
+
<ActionButton
|
|
344
|
+
size="sm"
|
|
345
|
+
variant="subtle"
|
|
346
|
+
tooltip={isLocked ? "Unlock" : "Lock"}
|
|
347
|
+
onClick={() => setIsLocked(!isLocked)}
|
|
348
|
+
icon={isLocked ? <IconLock size={14} /> : <IconLockOpen size={14} />}
|
|
349
|
+
/>
|
|
350
|
+
</Flex>
|
|
376
351
|
);
|
|
377
352
|
};
|
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
import { ui } from "@alepha/ui";
|
|
1
|
+
import { ActionButton, Flex, ui } from "@alepha/ui";
|
|
2
2
|
import {
|
|
3
|
-
ActionIcon,
|
|
4
3
|
Badge,
|
|
5
4
|
Checkbox,
|
|
6
|
-
Flex,
|
|
7
|
-
Group,
|
|
8
5
|
SegmentedControl,
|
|
9
6
|
Select,
|
|
10
7
|
TextInput,
|
|
@@ -149,20 +146,22 @@ export const GraphControls = ({
|
|
|
149
146
|
]}
|
|
150
147
|
/>
|
|
151
148
|
|
|
152
|
-
<
|
|
149
|
+
<Flex gap={4}>
|
|
153
150
|
<Badge size="xs" variant="light" color="gray">
|
|
154
151
|
{nodeCount} {isModuleView ? "modules" : "services"}
|
|
155
152
|
</Badge>
|
|
156
153
|
<Badge size="xs" variant="light" color="gray">
|
|
157
154
|
{edgeCount} edges
|
|
158
155
|
</Badge>
|
|
159
|
-
</
|
|
156
|
+
</Flex>
|
|
160
157
|
|
|
161
|
-
<
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
158
|
+
<ActionButton
|
|
159
|
+
size="sm"
|
|
160
|
+
variant="subtle"
|
|
161
|
+
tooltip="Export as PNG"
|
|
162
|
+
onClick={onExport}
|
|
163
|
+
icon={<IconDownload size={14} />}
|
|
164
|
+
/>
|
|
166
165
|
</Flex>
|
|
167
166
|
);
|
|
168
167
|
};
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
import { ui } from "@alepha/ui";
|
|
2
|
-
import {
|
|
3
|
-
ActionIcon,
|
|
4
|
-
Badge,
|
|
5
|
-
Box,
|
|
6
|
-
Divider,
|
|
7
|
-
Flex,
|
|
8
|
-
Paper,
|
|
9
|
-
ScrollArea,
|
|
10
|
-
Stack,
|
|
11
|
-
Text,
|
|
12
|
-
} from "@mantine/core";
|
|
1
|
+
import { ActionButton, Flex, ui } from "@alepha/ui";
|
|
2
|
+
import { Badge, Divider, Paper, ScrollArea, Text } from "@mantine/core";
|
|
13
3
|
import {
|
|
14
4
|
IconArrowDown,
|
|
15
5
|
IconArrowUp,
|
|
@@ -51,7 +41,7 @@ export const NodeDetails = ({
|
|
|
51
41
|
}}
|
|
52
42
|
>
|
|
53
43
|
<Flex justify="space-between" align="start" mb="sm">
|
|
54
|
-
<
|
|
44
|
+
<Flex style={{ flex: 1 }}>
|
|
55
45
|
<Text size="sm" fw={600} style={{ wordBreak: "break-word" }}>
|
|
56
46
|
{data.label}
|
|
57
47
|
</Text>
|
|
@@ -73,10 +63,13 @@ export const NodeDetails = ({
|
|
|
73
63
|
{data.providerCount} services
|
|
74
64
|
</Text>
|
|
75
65
|
)}
|
|
76
|
-
</
|
|
77
|
-
<
|
|
78
|
-
|
|
79
|
-
|
|
66
|
+
</Flex>
|
|
67
|
+
<ActionButton
|
|
68
|
+
size="sm"
|
|
69
|
+
variant="subtle"
|
|
70
|
+
onClick={onClose}
|
|
71
|
+
icon={<IconX size={14} />}
|
|
72
|
+
/>
|
|
80
73
|
</Flex>
|
|
81
74
|
|
|
82
75
|
{!isModule && data.aliases && data.aliases.length > 0 && (
|
|
@@ -105,13 +98,13 @@ export const NodeDetails = ({
|
|
|
105
98
|
</Text>
|
|
106
99
|
</Flex>
|
|
107
100
|
<ScrollArea h={100}>
|
|
108
|
-
<
|
|
101
|
+
<Flex direction="column" gap={2}>
|
|
109
102
|
{data.providers.map((provider) => (
|
|
110
103
|
<Text key={provider} size="xs">
|
|
111
104
|
{provider.split(".").pop()}
|
|
112
105
|
</Text>
|
|
113
106
|
))}
|
|
114
|
-
</
|
|
107
|
+
</Flex>
|
|
115
108
|
</ScrollArea>
|
|
116
109
|
</>
|
|
117
110
|
)}
|
|
@@ -119,9 +112,9 @@ export const NodeDetails = ({
|
|
|
119
112
|
<Divider my="xs" />
|
|
120
113
|
|
|
121
114
|
<ScrollArea h={isModule ? 120 : 200}>
|
|
122
|
-
<
|
|
115
|
+
<Flex direction="column" gap="xs">
|
|
123
116
|
{data.dependencies.length > 0 && (
|
|
124
|
-
<
|
|
117
|
+
<Flex>
|
|
125
118
|
<Flex align="center" gap={4} mb={4}>
|
|
126
119
|
<IconArrowDown size={12} opacity={0.5} />
|
|
127
120
|
<Text size="xs" c="dimmed">
|
|
@@ -129,7 +122,7 @@ export const NodeDetails = ({
|
|
|
129
122
|
{data.dependencies.length})
|
|
130
123
|
</Text>
|
|
131
124
|
</Flex>
|
|
132
|
-
<
|
|
125
|
+
<Flex direction="column" gap={2}>
|
|
133
126
|
{data.dependencies.map((dep) => (
|
|
134
127
|
<Text
|
|
135
128
|
key={dep}
|
|
@@ -141,19 +134,19 @@ export const NodeDetails = ({
|
|
|
141
134
|
{dep}
|
|
142
135
|
</Text>
|
|
143
136
|
))}
|
|
144
|
-
</
|
|
145
|
-
</
|
|
137
|
+
</Flex>
|
|
138
|
+
</Flex>
|
|
146
139
|
)}
|
|
147
140
|
|
|
148
141
|
{data.dependents.length > 0 && (
|
|
149
|
-
<
|
|
142
|
+
<Flex>
|
|
150
143
|
<Flex align="center" gap={4} mb={4}>
|
|
151
144
|
<IconArrowUp size={12} opacity={0.5} />
|
|
152
145
|
<Text size="xs" c="dimmed">
|
|
153
146
|
Used by ({data.dependents.length})
|
|
154
147
|
</Text>
|
|
155
148
|
</Flex>
|
|
156
|
-
<
|
|
149
|
+
<Flex direction="column" gap={2}>
|
|
157
150
|
{data.dependents.map((dep) => (
|
|
158
151
|
<Text
|
|
159
152
|
key={dep}
|
|
@@ -165,8 +158,8 @@ export const NodeDetails = ({
|
|
|
165
158
|
{dep}
|
|
166
159
|
</Text>
|
|
167
160
|
))}
|
|
168
|
-
</
|
|
169
|
-
</
|
|
161
|
+
</Flex>
|
|
162
|
+
</Flex>
|
|
170
163
|
)}
|
|
171
164
|
|
|
172
165
|
{data.dependencies.length === 0 && data.dependents.length === 0 && (
|
|
@@ -174,7 +167,7 @@ export const NodeDetails = ({
|
|
|
174
167
|
No dependencies
|
|
175
168
|
</Text>
|
|
176
169
|
)}
|
|
177
|
-
</
|
|
170
|
+
</Flex>
|
|
178
171
|
</ScrollArea>
|
|
179
172
|
</Paper>
|
|
180
173
|
);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ui } from "@alepha/ui";
|
|
2
|
-
import { Badge,
|
|
1
|
+
import { Flex, ui } from "@alepha/ui";
|
|
2
|
+
import { Badge, Text } from "@mantine/core";
|
|
3
3
|
import { Handle, Position } from "@xyflow/react";
|
|
4
4
|
import { getModuleColor } from "./constants.ts";
|
|
5
5
|
import type { ProviderNodeData } from "./types.ts";
|
|
@@ -15,7 +15,7 @@ export const ProviderNode = ({ data, selected }: ProviderNodeProps) => {
|
|
|
15
15
|
const isModule = data.isModule;
|
|
16
16
|
|
|
17
17
|
return (
|
|
18
|
-
<
|
|
18
|
+
<Flex
|
|
19
19
|
p="xs"
|
|
20
20
|
style={{
|
|
21
21
|
borderRadius: isModule ? 12 : 8,
|
|
@@ -92,6 +92,6 @@ export const ProviderNode = ({ data, selected }: ProviderNodeProps) => {
|
|
|
92
92
|
border: "none",
|
|
93
93
|
}}
|
|
94
94
|
/>
|
|
95
|
-
</
|
|
95
|
+
</Flex>
|
|
96
96
|
);
|
|
97
97
|
};
|