@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.
Files changed (236) hide show
  1. package/README.md +1 -5
  2. package/dist/index.browser.js +224 -0
  3. package/dist/index.browser.js.map +1 -0
  4. package/dist/index.d.ts +349 -321
  5. package/dist/index.js +293 -186
  6. package/dist/index.js.map +1 -1
  7. package/package.json +30 -23
  8. package/src/assets.ts +6 -0
  9. package/src/{api/entities → entities}/logs.ts +2 -2
  10. package/src/index.browser.ts +11 -0
  11. package/src/index.shared.ts +15 -0
  12. package/src/index.ts +11 -37
  13. package/src/{api/providers → providers}/DevToolsMetadataProvider.ts +84 -47
  14. package/src/providers/DevToolsProvider.ts +280 -0
  15. package/src/{api/schemas → schemas}/DevActionMetadata.ts +8 -0
  16. package/src/{api/schemas → schemas}/DevEntityMetadata.ts +3 -0
  17. package/src/{api/schemas → schemas}/DevMetadata.ts +13 -2
  18. package/src/{api/schemas → schemas}/DevPageMetadata.ts +3 -0
  19. package/src/{api/schemas → schemas}/DevTopicMetadata.ts +1 -0
  20. package/src/ui/AppRouter.tsx +55 -59
  21. package/src/ui/components/DevLayout.tsx +104 -84
  22. package/src/ui/components/configuration/ConfigAtoms.page.tsx +5 -0
  23. package/src/ui/components/configuration/ConfigAtoms.tsx +511 -0
  24. package/src/ui/components/configuration/ConfigEnv.page.tsx +5 -0
  25. package/src/ui/components/configuration/ConfigEnv.tsx +230 -0
  26. package/src/ui/components/configuration/DevConfiguration.tsx +36 -0
  27. package/src/ui/components/configuration/index.ts +3 -0
  28. package/src/ui/components/dashboard/DevDashboard.tsx +482 -0
  29. package/src/ui/components/database/DatabaseEditor.page.tsx +23 -0
  30. package/src/ui/components/database/DatabaseEditor.tsx +399 -0
  31. package/src/ui/components/database/DatabaseErd.page.tsx +28 -0
  32. package/src/ui/components/database/DatabaseErd.tsx +107 -0
  33. package/src/ui/components/database/DevDatabase.tsx +36 -0
  34. package/src/ui/components/database/EntityNode.tsx +83 -0
  35. package/src/ui/components/explorer/DevExplorer.tsx +351 -0
  36. package/src/ui/components/explorer/ExplorerTree.tsx +178 -0
  37. package/src/ui/components/explorer/panels/DevPanelAction.tsx +499 -0
  38. package/src/ui/components/explorer/panels/DevPanelCache.tsx +73 -0
  39. package/src/ui/components/explorer/panels/DevPanelPage.tsx +96 -0
  40. package/src/ui/components/explorer/panels/DevPanelQueue.tsx +51 -0
  41. package/src/ui/components/explorer/panels/DevPanelTopic.tsx +56 -0
  42. package/src/ui/components/explorer/panels/index.ts +5 -0
  43. package/src/ui/components/graph/DevDependencyGraph.tsx +35 -60
  44. package/src/ui/components/graph/GraphControls.tsx +10 -11
  45. package/src/ui/components/graph/NodeDetails.tsx +22 -29
  46. package/src/ui/components/graph/ProviderNode.tsx +4 -4
  47. package/src/ui/components/graph/helpers.ts +1 -1
  48. package/src/ui/components/logs/DevLogs.tsx +661 -0
  49. package/src/ui/components/logs/index.ts +1 -0
  50. package/src/ui/components/shared/TreeView.tsx +189 -0
  51. package/src/ui/main.css +17 -0
  52. package/src/ui/main.ts +2 -6
  53. package/LICENSE +0 -21
  54. package/assets/devtools/actions.html +0 -21
  55. package/assets/devtools/actions.html.br +0 -0
  56. package/assets/devtools/actions.html.gz +0 -0
  57. package/assets/devtools/asset.BZV40eAE.css +0 -1
  58. package/assets/devtools/asset.BZV40eAE.css.br +0 -0
  59. package/assets/devtools/asset.BZV40eAE.css.gz +0 -0
  60. package/assets/devtools/asset.CBnMq2vO.css +0 -1
  61. package/assets/devtools/asset.CBnMq2vO.css.br +0 -0
  62. package/assets/devtools/asset.CBnMq2vO.css.gz +0 -0
  63. package/assets/devtools/atoms.html +0 -21
  64. package/assets/devtools/atoms.html.br +0 -0
  65. package/assets/devtools/atoms.html.gz +0 -0
  66. package/assets/devtools/caches.html +0 -21
  67. package/assets/devtools/caches.html.br +0 -0
  68. package/assets/devtools/caches.html.gz +0 -0
  69. package/assets/devtools/chunk.6INqNjF0.js +0 -1
  70. package/assets/devtools/chunk.6INqNjF0.js.br +0 -0
  71. package/assets/devtools/chunk.6INqNjF0.js.gz +0 -0
  72. package/assets/devtools/chunk.9vpWpXSF.js +0 -1
  73. package/assets/devtools/chunk.9vpWpXSF.js.br +0 -0
  74. package/assets/devtools/chunk.9vpWpXSF.js.gz +0 -0
  75. package/assets/devtools/chunk.B4peH6PS.js +0 -1
  76. package/assets/devtools/chunk.B4peH6PS.js.br +0 -0
  77. package/assets/devtools/chunk.B4peH6PS.js.gz +0 -0
  78. package/assets/devtools/chunk.B8CNjZzU.js +0 -1
  79. package/assets/devtools/chunk.B8CNjZzU.js.br +0 -0
  80. package/assets/devtools/chunk.B8CNjZzU.js.gz +0 -0
  81. package/assets/devtools/chunk.Bgd10SVI.js +0 -1
  82. package/assets/devtools/chunk.Bgd10SVI.js.br +0 -0
  83. package/assets/devtools/chunk.Bgd10SVI.js.gz +0 -0
  84. package/assets/devtools/chunk.BjFrJKj1.js +0 -1
  85. package/assets/devtools/chunk.BjFrJKj1.js.br +0 -2
  86. package/assets/devtools/chunk.BjFrJKj1.js.gz +0 -0
  87. package/assets/devtools/chunk.BlqFPyLh.js +0 -1
  88. package/assets/devtools/chunk.BlqFPyLh.js.br +0 -0
  89. package/assets/devtools/chunk.BlqFPyLh.js.gz +0 -0
  90. package/assets/devtools/chunk.BqBNmfN9.js +0 -1
  91. package/assets/devtools/chunk.BqBNmfN9.js.br +0 -0
  92. package/assets/devtools/chunk.BqBNmfN9.js.gz +0 -0
  93. package/assets/devtools/chunk.Bt0_vkJm.js +0 -2
  94. package/assets/devtools/chunk.Bt0_vkJm.js.br +0 -0
  95. package/assets/devtools/chunk.Bt0_vkJm.js.gz +0 -0
  96. package/assets/devtools/chunk.C3GuU4pz.js +0 -2
  97. package/assets/devtools/chunk.C3GuU4pz.js.br +0 -0
  98. package/assets/devtools/chunk.C3GuU4pz.js.gz +0 -0
  99. package/assets/devtools/chunk.CGwoN_Mo.js +0 -1
  100. package/assets/devtools/chunk.CGwoN_Mo.js.br +0 -0
  101. package/assets/devtools/chunk.CGwoN_Mo.js.gz +0 -0
  102. package/assets/devtools/chunk.CJCvhHA7.js +0 -1
  103. package/assets/devtools/chunk.CJCvhHA7.js.br +0 -2
  104. package/assets/devtools/chunk.CJCvhHA7.js.gz +0 -0
  105. package/assets/devtools/chunk.CKr2VE6v.js +0 -1
  106. package/assets/devtools/chunk.CKr2VE6v.js.br +0 -0
  107. package/assets/devtools/chunk.CKr2VE6v.js.gz +0 -0
  108. package/assets/devtools/chunk.CLvTwbkw.js +0 -1
  109. package/assets/devtools/chunk.CLvTwbkw.js.br +0 -0
  110. package/assets/devtools/chunk.CLvTwbkw.js.gz +0 -0
  111. package/assets/devtools/chunk.CR13dZhE.js +0 -7
  112. package/assets/devtools/chunk.CR13dZhE.js.br +0 -0
  113. package/assets/devtools/chunk.CR13dZhE.js.gz +0 -0
  114. package/assets/devtools/chunk.C_C-cVqs.js +0 -1
  115. package/assets/devtools/chunk.C_C-cVqs.js.br +0 -1
  116. package/assets/devtools/chunk.C_C-cVqs.js.gz +0 -0
  117. package/assets/devtools/chunk.CjevPbPy.js +0 -1
  118. package/assets/devtools/chunk.CjevPbPy.js.br +0 -0
  119. package/assets/devtools/chunk.CjevPbPy.js.gz +0 -0
  120. package/assets/devtools/chunk.CkNMZqAe.js +0 -1
  121. package/assets/devtools/chunk.CkNMZqAe.js.br +0 -0
  122. package/assets/devtools/chunk.CkNMZqAe.js.gz +0 -0
  123. package/assets/devtools/chunk.Cl1Mlnqx.js +0 -1
  124. package/assets/devtools/chunk.Cl1Mlnqx.js.br +0 -0
  125. package/assets/devtools/chunk.Cl1Mlnqx.js.gz +0 -0
  126. package/assets/devtools/chunk.CyY8OGdZ.js +0 -1
  127. package/assets/devtools/chunk.CyY8OGdZ.js.br +0 -0
  128. package/assets/devtools/chunk.CyY8OGdZ.js.gz +0 -0
  129. package/assets/devtools/chunk.Cyx9kLqD.js +0 -1
  130. package/assets/devtools/chunk.Cyx9kLqD.js.br +0 -0
  131. package/assets/devtools/chunk.Cyx9kLqD.js.gz +0 -0
  132. package/assets/devtools/chunk.D1MGgxUI.js +0 -1
  133. package/assets/devtools/chunk.D1MGgxUI.js.br +0 -0
  134. package/assets/devtools/chunk.D1MGgxUI.js.gz +0 -0
  135. package/assets/devtools/chunk.D5Ci-dwk.js +0 -1
  136. package/assets/devtools/chunk.D5Ci-dwk.js.br +0 -0
  137. package/assets/devtools/chunk.D5Ci-dwk.js.gz +0 -0
  138. package/assets/devtools/chunk.DFrWQW5x.js +0 -9
  139. package/assets/devtools/chunk.DFrWQW5x.js.br +0 -0
  140. package/assets/devtools/chunk.DFrWQW5x.js.gz +0 -0
  141. package/assets/devtools/chunk.DaVlli3f.js +0 -1
  142. package/assets/devtools/chunk.DaVlli3f.js.br +0 -0
  143. package/assets/devtools/chunk.DaVlli3f.js.gz +0 -0
  144. package/assets/devtools/chunk.DdyBCs50.js +0 -1
  145. package/assets/devtools/chunk.DdyBCs50.js.br +0 -0
  146. package/assets/devtools/chunk.DdyBCs50.js.gz +0 -0
  147. package/assets/devtools/chunk.Dl0THvrP.js +0 -1
  148. package/assets/devtools/chunk.Dl0THvrP.js.br +0 -0
  149. package/assets/devtools/chunk.Dl0THvrP.js.gz +0 -0
  150. package/assets/devtools/chunk.DwUNDm68.js +0 -1
  151. package/assets/devtools/chunk.DwUNDm68.js.br +0 -0
  152. package/assets/devtools/chunk.DwUNDm68.js.gz +0 -0
  153. package/assets/devtools/chunk.DzDkh4C6.js +0 -1
  154. package/assets/devtools/chunk.DzDkh4C6.js.br +0 -0
  155. package/assets/devtools/chunk.DzDkh4C6.js.gz +0 -0
  156. package/assets/devtools/chunk.QTExp4CY.js +0 -1
  157. package/assets/devtools/chunk.QTExp4CY.js.br +0 -0
  158. package/assets/devtools/chunk.QTExp4CY.js.gz +0 -0
  159. package/assets/devtools/chunk.ReCPcJln.js +0 -1
  160. package/assets/devtools/chunk.ReCPcJln.js.br +0 -0
  161. package/assets/devtools/chunk.ReCPcJln.js.gz +0 -0
  162. package/assets/devtools/chunk.UEhIKOMY.js +0 -1
  163. package/assets/devtools/chunk.UEhIKOMY.js.br +0 -0
  164. package/assets/devtools/chunk.UEhIKOMY.js.gz +0 -0
  165. package/assets/devtools/chunk.mWQqK3dU.js +0 -1
  166. package/assets/devtools/chunk.mWQqK3dU.js.br +0 -0
  167. package/assets/devtools/chunk.mWQqK3dU.js.gz +0 -0
  168. package/assets/devtools/chunk.uyVen0u2.js +0 -1
  169. package/assets/devtools/chunk.uyVen0u2.js.br +0 -0
  170. package/assets/devtools/chunk.uyVen0u2.js.gz +0 -0
  171. package/assets/devtools/chunk.yLRX_cUF.js +0 -1
  172. package/assets/devtools/chunk.yLRX_cUF.js.br +0 -0
  173. package/assets/devtools/chunk.yLRX_cUF.js.gz +0 -0
  174. package/assets/devtools/chunk.zuZxBYZg.js +0 -1
  175. package/assets/devtools/chunk.zuZxBYZg.js.br +0 -0
  176. package/assets/devtools/chunk.zuZxBYZg.js.gz +0 -0
  177. package/assets/devtools/db.html +0 -21
  178. package/assets/devtools/db.html.br +0 -0
  179. package/assets/devtools/db.html.gz +0 -0
  180. package/assets/devtools/entry.Cry3rxEI.js +0 -79
  181. package/assets/devtools/entry.Cry3rxEI.js.br +0 -0
  182. package/assets/devtools/entry.Cry3rxEI.js.gz +0 -0
  183. package/assets/devtools/env.html +0 -21
  184. package/assets/devtools/env.html.br +0 -0
  185. package/assets/devtools/env.html.gz +0 -0
  186. package/assets/devtools/graph.html +0 -22
  187. package/assets/devtools/graph.html.br +0 -0
  188. package/assets/devtools/graph.html.gz +0 -0
  189. package/assets/devtools/index.html +0 -21
  190. package/assets/devtools/index.html.br +0 -0
  191. package/assets/devtools/index.html.gz +0 -0
  192. package/assets/devtools/logs.html +0 -21
  193. package/assets/devtools/logs.html.br +0 -0
  194. package/assets/devtools/logs.html.gz +0 -0
  195. package/assets/devtools/queues.html +0 -21
  196. package/assets/devtools/queues.html.br +0 -0
  197. package/assets/devtools/queues.html.gz +0 -0
  198. package/assets/devtools/topics.html +0 -21
  199. package/assets/devtools/topics.html.br +0 -0
  200. package/assets/devtools/topics.html.gz +0 -0
  201. package/src/api/DevToolsProvider.ts +0 -157
  202. package/src/api/providers/DevToolsDatabaseProvider.ts +0 -27
  203. package/src/api/repositories/LogRepository.ts +0 -8
  204. package/src/api/schemas/DevCommandMetadata.ts +0 -9
  205. package/src/ui/components/DevAtomsViewer.tsx +0 -637
  206. package/src/ui/components/DevCacheInspector.tsx +0 -423
  207. package/src/ui/components/DevDashboard.tsx +0 -38
  208. package/src/ui/components/DevEnvExplorer.tsx +0 -462
  209. package/src/ui/components/DevLogViewer.tsx +0 -252
  210. package/src/ui/components/DevQueueMonitor.tsx +0 -51
  211. package/src/ui/components/DevTopicsViewer.tsx +0 -686
  212. package/src/ui/components/actions/ActionGroup.tsx +0 -37
  213. package/src/ui/components/actions/ActionItem.tsx +0 -138
  214. package/src/ui/components/actions/DevActionsExplorer.tsx +0 -132
  215. package/src/ui/components/actions/MethodBadge.tsx +0 -18
  216. package/src/ui/components/actions/SchemaViewer.tsx +0 -21
  217. package/src/ui/components/actions/TryItPanel.tsx +0 -140
  218. package/src/ui/components/actions/constants.ts +0 -7
  219. package/src/ui/components/actions/helpers.ts +0 -18
  220. package/src/ui/components/actions/index.ts +0 -8
  221. package/src/ui/components/db/ColumnBadge.tsx +0 -55
  222. package/src/ui/components/db/DevDbStudio.tsx +0 -485
  223. package/src/ui/components/db/constants.ts +0 -11
  224. package/src/ui/components/db/index.ts +0 -4
  225. package/src/ui/components/db/types.ts +0 -7
  226. package/src/ui/styles.css +0 -1
  227. /package/src/{api/schemas → schemas}/DevAtomMetadata.ts +0 -0
  228. /package/src/{api/schemas → schemas}/DevBucketMetadata.ts +0 -0
  229. /package/src/{api/schemas → schemas}/DevCacheMetadata.ts +0 -0
  230. /package/src/{api/schemas → schemas}/DevEnvMetadata.ts +0 -0
  231. /package/src/{api/schemas → schemas}/DevModuleMetadata.ts +0 -0
  232. /package/src/{api/schemas → schemas}/DevProviderMetadata.ts +0 -0
  233. /package/src/{api/schemas → schemas}/DevQueueMetadata.ts +0 -0
  234. /package/src/{api/schemas → schemas}/DevRealmMetadata.ts +0 -0
  235. /package/src/{api/schemas → schemas}/DevRouteMetadata.ts +0 -0
  236. /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("/devtools/api/metadata", {
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
- <Stack
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
- <Tooltip label="Zoom in" position="right">
348
- <ActionIcon size="sm" variant="subtle" onClick={() => zoomIn()}>
349
- <IconPlus size={14} />
350
- </ActionIcon>
351
- </Tooltip>
352
- <Tooltip label="Zoom out" position="right">
353
- <ActionIcon size="sm" variant="subtle" onClick={() => zoomOut()}>
354
- <IconMinus size={14} />
355
- </ActionIcon>
356
- </Tooltip>
357
- <Tooltip label="Fit view" position="right">
358
- <ActionIcon
359
- size="sm"
360
- variant="subtle"
361
- onClick={() => fitView({ padding: 0.2 })}
362
- >
363
- <IconFocusCentered size={14} />
364
- </ActionIcon>
365
- </Tooltip>
366
- <Tooltip label={isLocked ? "Unlock" : "Lock"} position="right">
367
- <ActionIcon
368
- size="sm"
369
- variant="subtle"
370
- onClick={() => setIsLocked(!isLocked)}
371
- >
372
- {isLocked ? <IconLock size={14} /> : <IconLockOpen size={14} />}
373
- </ActionIcon>
374
- </Tooltip>
375
- </Stack>
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
- <Group gap={4}>
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
- </Group>
156
+ </Flex>
160
157
 
161
- <Tooltip label="Export as PNG">
162
- <ActionIcon size="sm" variant="subtle" onClick={onExport}>
163
- <IconDownload size={14} />
164
- </ActionIcon>
165
- </Tooltip>
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
- <Box style={{ flex: 1 }}>
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
- </Box>
77
- <ActionIcon size="sm" variant="subtle" onClick={onClose}>
78
- <IconX size={14} />
79
- </ActionIcon>
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
- <Stack gap={2}>
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
- </Stack>
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
- <Stack gap="xs">
115
+ <Flex direction="column" gap="xs">
123
116
  {data.dependencies.length > 0 && (
124
- <Box>
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
- <Stack gap={2}>
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
- </Stack>
145
- </Box>
137
+ </Flex>
138
+ </Flex>
146
139
  )}
147
140
 
148
141
  {data.dependents.length > 0 && (
149
- <Box>
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
- <Stack gap={2}>
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
- </Stack>
169
- </Box>
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
- </Stack>
170
+ </Flex>
178
171
  </ScrollArea>
179
172
  </Paper>
180
173
  );
@@ -1,5 +1,5 @@
1
- import { ui } from "@alepha/ui";
2
- import { Badge, Box, Flex, Text } from "@mantine/core";
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
- <Box
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
- </Box>
95
+ </Flex>
96
96
  );
97
97
  };
@@ -1,4 +1,4 @@
1
- import type { DevProviderMetadata } from "../../../api/schemas/DevProviderMetadata.ts";
1
+ import type { DevProviderMetadata } from "@alepha/devtools";
2
2
  import type {
3
3
  GraphFilters,
4
4
  LayoutType,