Skip to content

Commit ac4e935

Browse files
committed
temp
1 parent cc15d1a commit ac4e935

File tree

25 files changed

+3563
-3757
lines changed

25 files changed

+3563
-3757
lines changed

package-lock.json

Lines changed: 2973 additions & 2948 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"@mui/icons-material": "^6.3.0",
1919
"@mui/material": "^6.3.0",
2020
"eventemitter3": "^5.0.1",
21+
"lodash-es": "^4.17.21",
2122
"memoize-one": "^6.0.0",
2223
"mnemonist": "^0.39.8",
2324
"nullthrows": "^1.1.1",
@@ -31,6 +32,7 @@
3132
"devDependencies": {
3233
"@biomejs/biome": "^1.9.4",
3334
"@tsconfig/strictest": "^2.0.5",
35+
"@types/lodash-es": "^4.17.12",
3436
"@types/react": "^19.0.2",
3537
"@types/react-dom": "^19.0.2",
3638
"@vitejs/plugin-react": "^4.3.4",

src/common/theme.ts

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import { createTheme } from "@mui/material";
22

33
// See https://www.figma.com/file/M3dC0Gk98IGSGlxY901rBh/
4-
export const blackColor = "#000000";
5-
export const whiteColor = "#ffffff";
6-
export const primaryColor = "#009966";
7-
export const errorColor = "#ff0000";
8-
export const editorBackgroundColor = "#fafafa";
9-
export const editorGridColor = "#dddddd";
4+
export const theme = {
5+
palette: {
6+
black: "#000000",
7+
white: "#ffffff",
8+
textPrimary: "#444444",
9+
primary: "#009966",
10+
error: "#ff0000",
11+
editorBackground: "#fafafa",
12+
editorGrid: "#dddddd",
13+
},
14+
};
1015

11-
export const theme = createTheme({
16+
export const muiTheme = createTheme({
1217
palette: {
13-
primary: { main: primaryColor },
18+
primary: { main: theme.palette.primary },
1419
},
1520
});

src/components/GlobalHeader.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { AppBar } from "@mui/material";
22
import type { CSSProperties } from "react";
3-
import { whiteColor } from "../common/theme";
3+
import { theme } from "../common/theme";
44

55
export type GlobalHeaderProps = {
66
style: CSSProperties;
@@ -15,7 +15,7 @@ export default function GlobalHeader({ style }: GlobalHeaderProps) {
1515
style={style}
1616
sx={{
1717
p: 2,
18-
background: whiteColor,
18+
background: theme.palette.white,
1919
borderBottom: "1px solid",
2020
borderColor: "divider",
2121
}}

src/main.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ import React from "react";
33
import ReactDOM from "react-dom/client";
44
import App from "./App";
55
import "./index.css";
6-
import { theme } from "./common/theme";
6+
import { muiTheme } from "./common/theme";
77
import { StoreProvider } from "./store/react";
88

99
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
1010
<React.StrictMode>
1111
<StoreProvider>
12-
<ThemeProvider theme={theme}>
12+
<ThemeProvider theme={muiTheme}>
1313
<App />
1414
</ThemeProvider>
1515
</StoreProvider>

src/pages/edit/Editor/components/Grid.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import type { ReactElement } from "react";
2+
import { theme } from "../../../../common/theme";
23
import { vector2 } from "../../../../common/vector2";
34
import { useComponentEditorStore } from "../store";
45

@@ -8,7 +9,7 @@ export default function CCComponentEditorGrid() {
89
const canvasOriginPosition = componentEditorState.fromStageToCanvas(
910
vector2.zero,
1011
);
11-
const canvasGridSize = 100 * 2 ** (Math.ceil(logScale) - logScale);
12+
const canvasGridSize = 80 * 2 ** (Math.ceil(logScale) - logScale);
1213

1314
const elements: ReactElement[] = [];
1415
let i = 0;
@@ -26,7 +27,7 @@ export default function CCComponentEditorGrid() {
2627
left: 0,
2728
width: "1px",
2829
height: "100%",
29-
backgroundColor: "rgba(0, 0, 0, 0.1)",
30+
backgroundColor: theme.palette.editorGrid,
3031
transform: `translateX(${x}px)`,
3132
}}
3233
/>,
@@ -47,7 +48,7 @@ export default function CCComponentEditorGrid() {
4748
left: 0,
4849
width: "100%",
4950
height: "1px",
50-
backgroundColor: "rgba(0, 0, 0, 0.1)",
51+
backgroundColor: theme.palette.editorGrid,
5152
transform: `translateY(${y}px)`,
5253
}}
5354
/>,
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { useRef, type PointerEvent } from "react";
2+
import type { Vector2 } from "../../../../common/vector2";
3+
import { useComponentEditorStore } from "../store";
4+
5+
export type UseDraggableProps = {
6+
onClick?(e: PointerEvent): void;
7+
onDragStart(e: PointerEvent): Vector2;
8+
onDrag(e: PointerEvent): void;
9+
};
10+
11+
export function useDraggable(props: UseDraggableProps) {
12+
const { onClick, onDragStart, onDrag } = props;
13+
14+
const perspective = useComponentEditorStore()((state) => state.perspective);
15+
const dragStateRef = useRef<{
16+
pointerId: number;
17+
initialPosition: Vector2;
18+
} | null>(null);
19+
20+
return {
21+
onPointerDown: (e: PointerEvent) => {
22+
if (!(e.buttons & 1)) return;
23+
dragStateRef.current = {
24+
pointerId: e.pointerId,
25+
initialPosition: { x: e.nativeEvent.clientX, y: e.nativeEvent.clientY },
26+
};
27+
onDragStart(e);
28+
e.currentTarget.setPointerCapture(e.pointerId);
29+
},
30+
onPointerMove: (e: PointerEvent) => {
31+
if (!dragStateRef.current) return;
32+
},
33+
onPointerUp: (e: PointerEvent) => {
34+
e.currentTarget.releasePointerCapture(e.pointerId);
35+
},
36+
};
37+
}

src/pages/edit/Editor/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Box } from "@mui/material";
22
import nullthrows from "nullthrows";
33
import { useState } from "react";
4-
import { editorBackgroundColor } from "../../../common/theme";
4+
import { theme } from "../../../common/theme";
55
import { ComponentPropertyDialog } from "../../../components/ComponentPropertyDialog";
66
import type { CCComponentId } from "../../../store/component";
77
import { useStore } from "../../../store/react";
@@ -33,7 +33,7 @@ function CCComponentEditorContent({
3333
sx={{
3434
position: "relative",
3535
overflow: "hidden",
36-
backgroundColor: editorBackgroundColor,
36+
backgroundColor: theme.palette.editorBackground,
3737
}}
3838
>
3939
<CCComponentEditorGrid />

src/pages/edit/Editor/renderer/Background.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ export default function CCComponentEditorRendererBackground() {
1515
const { currentTarget } = pointerDownEvent;
1616
const startPerspective = componentEditorState.perspective;
1717
const startPoint = vector2.fromDomEvent(pointerDownEvent.nativeEvent);
18+
19+
pointerDownEvent.currentTarget.setPointerCapture(
20+
pointerDownEvent.pointerId
21+
);
1822
const onPointerMove = (pointerMoveEvent: PointerEvent) => {
1923
const endPoint = vector2.fromDomEvent(pointerMoveEvent);
2024
componentEditorState.setPerspective({
@@ -23,31 +27,32 @@ export default function CCComponentEditorRendererBackground() {
2327
startPerspective.center,
2428
vector2.mul(
2529
vector2.sub(endPoint, startPoint),
26-
startPerspective.scale,
27-
),
30+
startPerspective.scale
31+
)
2832
),
2933
});
3034
};
31-
currentTarget.addEventListener("pointermove", onPointerMove);
3235
const onPointerUp = () => {
3336
currentTarget.removeEventListener("pointermove", onPointerMove);
3437
currentTarget.removeEventListener("pointerup", onPointerUp);
38+
pointerDownEvent.currentTarget.releasePointerCapture(pointerDownEvent.pointerId);
3539
};
40+
currentTarget.addEventListener("pointermove", onPointerMove);
3641
currentTarget.addEventListener("pointerup", onPointerUp);
3742
}}
3843
onWheel={(wheelEvent) => {
3944
const scaleDelta = Math.exp(wheelEvent.deltaY / 256);
4045
const scaleCenter = componentEditorState.fromCanvasToStage(
41-
vector2.fromDomEvent(wheelEvent.nativeEvent),
46+
vector2.fromDomEvent(wheelEvent.nativeEvent)
4247
);
4348
componentEditorState.setPerspective({
4449
scale: componentEditorState.perspective.scale * scaleDelta,
4550
center: vector2.add(
4651
scaleCenter,
4752
vector2.mul(
4853
vector2.sub(componentEditorState.perspective.center, scaleCenter),
49-
scaleDelta,
50-
),
54+
scaleDelta
55+
)
5156
),
5257
});
5358
}}

src/pages/edit/Editor/renderer/Connection.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import nullthrows from "nullthrows";
2+
import { theme } from "../../../../common/theme";
23
import type { CCConnectionId } from "../../../../store/connection";
34
import { useStore } from "../../../../store/react";
45
import ensureStoreItem from "../../../../store/react/error";
@@ -31,7 +32,7 @@ export function CCComponentEditorRendererConnectionCore({
3132
].join(" ")}`,
3233
`h ${straightGap * direction}`,
3334
].join(" ")}
34-
stroke="black"
35+
stroke={theme.palette.textPrimary}
3536
strokeWidth="2"
3637
fill="none"
3738
/>

0 commit comments

Comments
 (0)