Canvas: Center icons on details panel

Change-Id: I8ef607f3bf756e028ddab00f79e4ec17bd4582bd
diff --git a/apps/canvas/back/eslint.config.js b/apps/canvas/back/eslint.config.mjs
similarity index 100%
rename from apps/canvas/back/eslint.config.js
rename to apps/canvas/back/eslint.config.mjs
diff --git a/apps/canvas/back/package.json b/apps/canvas/back/package.json
index 4de4561..16bc055 100644
--- a/apps/canvas/back/package.json
+++ b/apps/canvas/back/package.json
@@ -3,7 +3,7 @@
   "version": "1.0.0",
   "description": "",
   "main": "index.js",
-  "type": "module",
+  "type": "commonjs",
   "scripts": {
     "build": "tsc",
     "format": "prettier --write src/**/*.{js,ts,jsx,tsx}",
diff --git a/apps/canvas/back/src/index.ts b/apps/canvas/back/src/index.ts
index 624f8fe..d5c1b2d 100644
--- a/apps/canvas/back/src/index.ts
+++ b/apps/canvas/back/src/index.ts
@@ -202,7 +202,10 @@
 
 				if (p.githubToken && r.data.deployKey) {
 					const stateObj = JSON.parse(JSON.parse(state.toString()));
-					const githubNodes = stateObj.nodes.filter((n) => n.type === "github" && n.data?.repository?.id);
+					const githubNodes = stateObj.nodes.filter(
+						// eslint-disable-next-line @typescript-eslint/no-explicit-any
+						(n: any) => n.type === "github" && n.data?.repository?.id,
+					);
 
 					const github = new GithubClient(p.githubToken);
 					for (const node of githubNodes) {
@@ -480,7 +483,8 @@
 				try {
 					const updateEndpoint = `${workerAddress}/update`;
 					await axios.post(updateEndpoint);
-				} catch (error) {
+					// eslint-disable-next-line @typescript-eslint/no-explicit-any
+				} catch (error: any) {
 					console.log(`Failed to update worker ${workerAddress}: ${error.message || "Unknown error"}`);
 				}
 			}),
diff --git a/apps/canvas/front/src/components/details.tsx b/apps/canvas/front/src/components/details.tsx
index cb7d7fe..b7a0049 100644
--- a/apps/canvas/front/src/components/details.tsx
+++ b/apps/canvas/front/src/components/details.tsx
@@ -48,8 +48,8 @@
 					{index > 0 && <Separator className="my-2" />}
 					<AccordionItem key={n.id} value={n.id} className="px-3">
 						<AccordionTrigger>
-							<div className="flex flex-row space-x-2">
-								{Icon(n.type)}
+							<div className="flex flex-row space-x-2 items-center">
+								<Icon type={n.type} />
 								<span>{nodeLabel(n)}</span>
 							</div>
 						</AccordionTrigger>
diff --git a/apps/canvas/front/src/components/icon.tsx b/apps/canvas/front/src/components/icon.tsx
index a615d79..c56a69e 100644
--- a/apps/canvas/front/src/components/icon.tsx
+++ b/apps/canvas/front/src/components/icon.tsx
@@ -7,24 +7,29 @@
 import { PiNetwork } from "react-icons/pi";
 import { AiOutlineGlobal } from "react-icons/ai";
 
-export function Icon(type: NodeType | undefined): ReactElement {
+type Props = {
+	type: NodeType | undefined;
+	className?: string;
+};
+
+export function Icon({ type, className }: Props): ReactElement {
 	switch (type) {
 		case "app":
-			return <GrServices />;
+			return <GrServices className={className} />;
 		case "github":
-			return <SiGithub />;
+			return <SiGithub className={className} />;
 		case "gateway-https":
-			return <TbWorldWww />;
+			return <TbWorldWww className={className} />;
 		case "gateway-tcp":
-			return <PiNetwork />;
+			return <PiNetwork className={className} />;
 		case "mongodb":
-			return <SiMongodb />;
+			return <SiMongodb className={className} />;
 		case "postgresql":
-			return <SiPostgresql />;
+			return <SiPostgresql className={className} />;
 		case "volume":
-			return <GoFileDirectoryFill />;
+			return <GoFileDirectoryFill className={className} />;
 		case "network":
-			return <AiOutlineGlobal />;
+			return <AiOutlineGlobal className={className} />;
 		default:
 			throw new Error(`MUST NOT REACH! ${type}`);
 	}
diff --git a/apps/canvas/front/src/components/node-rect.tsx b/apps/canvas/front/src/components/node-rect.tsx
index 257353e..362dc54 100644
--- a/apps/canvas/front/src/components/node-rect.tsx
+++ b/apps/canvas/front/src/components/node-rect.tsx
@@ -47,7 +47,9 @@
 	}, [selected, hasFatal, hasWarning, state, setClasses, setStateClasses]);
 	return (
 		<div className={classes.join(" ")}>
-			<div style={{ position: "absolute", top: "5px", left: "5px" }}>{Icon(p.type)}</div>
+			<div style={{ position: "absolute", top: "5px", left: "5px" }}>
+				<Icon type={p.type} />
+			</div>
 			<div
 				style={{
 					position: "absolute",
diff --git a/apps/canvas/front/src/components/resources.tsx b/apps/canvas/front/src/components/resources.tsx
index a07eb86..715f878 100644
--- a/apps/canvas/front/src/components/resources.tsx
+++ b/apps/canvas/front/src/components/resources.tsx
@@ -45,7 +45,7 @@
 										onClick={onResourceAdd(item)}
 										style={{ justifyContent: "flex-start" }}
 									>
-										{Icon(item.type)}
+										<Icon type={item.type} />
 										{item.title}
 									</Button>
 								))}