From a7b62162f4bdffaffb19955ca72b4e0cf563b700 Mon Sep 17 00:00:00 2001 From: y-minion Date: Tue, 25 Nov 2025 18:17:39 +0900 Subject: [PATCH 1/4] =?UTF-8?q?CI/CD=20=ED=8A=B8=EA=B8=B0=EB=9F=AC=20?= =?UTF-8?q?=EB=B8=8C=EB=9E=9C=EC=B9=98=20=EC=9D=B4=EB=A6=84=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 4 ++-- .github/workflows/deploy.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41010e6..9481f4b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,10 +4,10 @@ name: CI Pipeline # 워크플로우 실행 조건 on: pull_request: - branches: ["main", "dev"] + branches: ["main", "develop"] push: - branches: ["main", "dev", "feature/*"] + branches: ["main", "develop", "feature/*"] # 실행될 작업(Job)들 jobs: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d643ea3..60d4c38 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -4,7 +4,7 @@ on: push: branches: - main - - dev + - develop jobs: build: From bf701ba61ff8d5045a949aee2258a5995b79aebc Mon Sep 17 00:00:00 2001 From: y-minion Date: Tue, 25 Nov 2025 18:27:45 +0900 Subject: [PATCH 2/4] =?UTF-8?q?pnpm=20=EB=B2=84=EC=A0=84=20=EC=A4=91?= =?UTF-8?q?=EB=B3=B5=20=EB=AC=B8=EC=A0=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/ci.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9481f4b..8435939 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -25,9 +25,6 @@ jobs: # 1. pnpm 설치 (모노레포 필수) - name: Install pnpm uses: pnpm/action-setup@v4 - with: - version: 10 - run_install: false # 2. Node.js 환경 설정 - name: Setup Node.js From 292a6a814444363860dd0ff5dbe79a3102955b22 Mon Sep 17 00:00:00 2001 From: y-minion Date: Tue, 25 Nov 2025 18:32:35 +0900 Subject: [PATCH 3/4] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20turborepo=20=EC=84=A4?= =?UTF-8?q?=EC=A0=95=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 기존의 pipeline키의 이름이 tasks로 수정됨에 따라 키 이름 변경완료 --- turbo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/turbo.json b/turbo.json index c1020c3..bbc4d57 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,6 @@ { "$schema": "https://turbo.build/schema.json", - "pipeline": { + "tasks": { "build": { "outputs": [".next/**", "!.next/cache/**"] }, From 963aaeee3db020da4a0688a120f70d9c6c6e863e Mon Sep 17 00:00:00 2001 From: y-minion Date: Tue, 25 Nov 2025 18:43:44 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=ED=83=80=EC=9E=85=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/editor/package.json | 3 +- .../_click_to_edit_engine/mock.tsx | 244 ------------------ .../_click_to_edit_engine/util/readNodeId.ts | 14 - .../src/app/test_click_to_edit/page.tsx | 10 - package.json | 5 +- packages/ui/package.json | 3 + turbo.json | 4 + 7 files changed, 12 insertions(+), 271 deletions(-) delete mode 100644 apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/mock.tsx delete mode 100644 apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/util/readNodeId.ts delete mode 100644 apps/editor/src/app/test_click_to_edit/page.tsx diff --git a/apps/editor/package.json b/apps/editor/package.json index 20a9c44..355ba28 100644 --- a/apps/editor/package.json +++ b/apps/editor/package.json @@ -7,7 +7,8 @@ "build": "next build --turbopack", "start": "next start", "lint": "next lint", - "lint:fix": "eslint . --ext ts,tsx --fix" + "lint:fix": "eslint . --ext ts,tsx --fix", + "type-check": "tsc --noEmit" }, "dependencies": { "@repo/ui": "workspace:*", diff --git a/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/mock.tsx b/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/mock.tsx deleted file mode 100644 index ab7aec3..0000000 --- a/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/mock.tsx +++ /dev/null @@ -1,244 +0,0 @@ -"use client"; - -import React from "react"; -import readNodeId from "./util/readNodeId"; - -/** - * NODE (id: 1001) 데이터 - */ -const node1001_props = { - heading: "WebCreator-X에 오신 것을 환영합니다", - subheading: "세상에 하나뿐인 당신의 웹사이트를 만들어보세요.", - button: { text: "시작하기", link: "/signup" }, - backgroundImage: { - url: "https://images.example.com/hero-bg.jpg", - alt: "추상적인 배경 이미지", - }, -}; -const node1001_style = { - layout: { - display: "flex", - flexDirection: "column", - alignItems: "center", - justifyContent: "center", - gap: "20px", - }, - dimensions: { minHeight: "500px", padding: "80px 24px" }, - background: { - backgroundColor: "#111827", - backgroundSize: "cover", - backgroundPosition: "center", - }, - typography: { color: "#FFFFFF", textAlign: "center" }, - className: "hero-container-main", -}; - -/** - * NODE (id: 1002) 데이터 - 컨테이너 (1003, 1004의 부모) - */ -const node1002_style = { - layout: { display: "block" }, - dimensions: { padding: "50px 24px", maxWidth: "1200px", margin: "0 auto" }, - background: { backgroundColor: "#FFFFFF" }, - className: "content-section", -}; - -/** - * NODE (id: 1003) 데이터 - 1002의 자식 - */ -const node1003_props = { text: "주요 기능 소개", level: "h2" }; -const node1003_style = { - typography: { color: "#111827", fontSize: "36px", textAlign: "center" }, - dimensions: { marginBottom: "30px" }, -}; - -/** - * NODE (id: 1004) 데이터 - 1002의 자식 - */ -const node1004_props = { - text: "직관적인 드래그 앤 드롭 인터페이스로 코딩 없이 웹사이트를 완성하세요. 모든 컴포넌트는 사용자가 원하는 대로 커스터마이징할 수 있습니다.", -}; -const node1004_style = { - typography: { - color: "#374151", - fontSize: "18px", - lineHeight: 1.6, - textAlign: "center", - }, - dimensions: { maxWidth: "800px", margin: "0 auto" }, -}; - -/** - * NODE (id: 1005) 데이터 - 컨테이너 (1006, 1007, 1008, 1009의 부모) - */ -const node1005_style = { - layout: { display: "grid", gridTemplateColumns: "1fr 1fr", gap: "20px" }, - dimensions: { padding: "50px 24px", maxWidth: "1200px", margin: "0 auto" }, - background: { backgroundColor: "#F9FAFB" }, - className: "gallery-section", -}; - -/** - * NODE (id: 1006) 데이터 - 1005의 자식 (이미지) - */ -const node1006_props = { - src: "https://images.example.com/gallery-1.jpg", - alt: "갤러리 이미지 1", -}; -const node1006_style = { - dimensions: { width: "100%", height: "300px", objectFit: "cover" }, - effects: { borderRadius: "8px" }, -}; - -/** - * NODE (id: 1007) 데이터 - 1005의 자식 (이미지) - */ -const node1007_props = { - src: "https://images.example.com/gallery-2.jpg", - alt: "갤러리 이미지 2", -}; -const node1007_style = { - dimensions: { width: "100%", height: "300px", objectFit: "cover" }, - effects: { borderRadius: "8px" }, -}; - -/** - * NODE (id: 1008) 데이터 - 1005의 자식 (텍스트) - */ -const node1008_props = { text: "이미지 설명 1" }; -const node1008_style = { - typography: { textAlign: "center", fontSize: "14px", color: "#6B7280" }, - dimensions: { marginTop: "10px" }, -}; - -/** - * NODE (id: 1009) 데이터 - 1005의 자식 (텍스트) - */ -const node1009_props = { text: "이미지 설명 2" }; -const node1009_style = { - typography: { textAlign: "center", fontSize: "14px", color: "#6B7280" }, - dimensions: { marginTop: "10px" }, -}; - -/** - * NODE (id: 1010) 데이터 (버튼) - */ -const node1010_props = { text: "더 알아보기", link: "/features" }; -const node1010_style = { - layout: { display: "block", margin: "40px auto" }, - dimensions: { padding: "15px 30px", width: "200px" }, - background: { backgroundColor: "#3B82F6" }, - typography: { - color: "#FFFFFF", - fontSize: "16px", - fontWeight: "bold", - textAlign: "center", - }, - effects: { borderRadius: "5px", cursor: "pointer" }, -}; - -// --- 스타일 헬퍼 --- -// 모든 스타일 하위 객체(layout, dimensions 등)를 병합하여 -// React의 inline style prop으로 변환합니다. -function applyStyles(styleData, bgImageUrl = null) { - const combinedStyles = {}; - - // styleData의 모든 키(layout, dimensions, background...)를 순회하며 - // 하위 객체들을 combinedStyles로 병합합니다. - for (const key in styleData) { - if (key !== "className" && typeof styleData[key] === "object") { - Object.assign(combinedStyles, styleData[key]); - } - } - - if (bgImageUrl) { - combinedStyles.backgroundImage = `url(${bgImageUrl})`; - } - - return combinedStyles; -} - -// --- 10개 노드를 렌더링하는 하드코딩된 테스트 캔버스 --- - -function HardcodedTestCanvas() { - // 여기에 EditorCanvas.jsx에 만드셨던 - // handleClick 이벤트 핸들러를 붙여서 테스트하시면 됩니다. - - return ( -
- {/* --- Node 1001 (Hero) --- */} -
-

{node1001_props.heading}

-

{node1001_props.subheading}

- - {node1001_props.button.text} - -
- - {/* --- Node 1002 (Container) --- */} -
- {/* --- Node 1003 (Child of 1002) --- */} -
-

{node1003_props.text}

-
- - {/* --- Node 1004 (Child of 1002) --- */} -
-

{node1004_props.text}

-
-
- - {/* --- Node 1005 (Container) --- */} -
- {/* --- Node 1006 (Child of 1005) --- */} -
- {node1006_props.alt} -
- - {/* --- Node 1007 (Child of 1005) --- */} -
- {node1007_props.alt} -
- - {/* --- Node 1008 (Child of 1005) --- */} -
-

{node1008_props.text}

-
- - {/* --- Node 1009 (Child of 1005) --- */} -
-

{node1009_props.text}

-
-
- - {/* --- Node 1010 (Button) --- */} - -
- ); -} - -export default HardcodedTestCanvas; diff --git a/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/util/readNodeId.ts b/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/util/readNodeId.ts deleted file mode 100644 index e032271..0000000 --- a/apps/editor/src/app/test_click_to_edit/_click_to_edit_engine/util/readNodeId.ts +++ /dev/null @@ -1,14 +0,0 @@ -//에디터의 최상단에서 이벤트 위임으로 클릭된 node의 ID를 알아내는 함수 - -export default function readNodeId(e: React.MouseEvent) { - const clickedElement = (e.target as HTMLElement).closest( - "[data-component-id]", - ); - if (!clickedElement) { - console.log("이곳은 땅끝마을 해남입니다"); - return; - } - e.stopPropagation(); - const componentId = clickedElement.dataset.componentId; - console.log(`현재 클릭된 ID -> ${componentId}`); -} diff --git a/apps/editor/src/app/test_click_to_edit/page.tsx b/apps/editor/src/app/test_click_to_edit/page.tsx deleted file mode 100644 index b0543d5..0000000 --- a/apps/editor/src/app/test_click_to_edit/page.tsx +++ /dev/null @@ -1,10 +0,0 @@ -import HardcodedTestCanvas from "./_click_to_edit_engine/mock"; - -export default function Page() { - return ( -
-

테스트 환경

- -
- ); -} diff --git a/package.json b/package.json index 79b438d..350f5f1 100644 --- a/package.json +++ b/package.json @@ -3,10 +3,11 @@ "private": true, "scripts": { "dev": "turbo dev", - "build": "turbo build" + "build": "turbo build", + "type-check": "turbo run type-check" }, "devDependencies": { "turbo": "^2.6.1" }, "packageManager": "pnpm@9.15.4" -} \ No newline at end of file +} diff --git a/packages/ui/package.json b/packages/ui/package.json index 9917f22..1c42cde 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -4,6 +4,9 @@ "exports": { "./renderer": "./src/renderer/NodeRenderer.tsx" }, + "scripts": { + "type-check": "tsc --noEmit" + }, "peerDependencies": { "next": "15.5.6", "react": "19.1.0" diff --git a/turbo.json b/turbo.json index bbc4d57..f4ba296 100644 --- a/turbo.json +++ b/turbo.json @@ -7,6 +7,10 @@ "dev": { "cache": false }, + "type-check": { + "dependsOn": ["^build"], + "cache": false + }, "lint": {}, "test": {}