feat(org-chart): implement expandable layout and multi-company navigation

Integrate P5-1B through P5-4 shared Core layout, collapse, zoom/pan/fit, company roots and keyboard accessibility. Include React/HTML examples, virtual 20/100/300 employee fixtures, focused checks and the additive data contract.
This commit is contained in:
shkim4 committed 2026-10-12 21:59:09 +09:00
1 parent a92913d6bc
commit 064517ec46
30 files changed
+7532 -183

No files matched your search

+320 -27
View File
@@ -1,43 +1,336 @@
{
"schemaVersion": "0.1-draft",
"organizations": [
{ "id": "general-planning", "parentId": null, "name": "총괄기획실", "type": "root", "leaderId": "expanded-representative", "displayOrder": 0 },
{ "id": "business-management", "parentId": "general-planning", "name": "사업관리", "type": "office", "leaderId": "expanded-leader-01", "displayOrder": 0 },
{ "id": "business-planning", "parentId": "general-planning", "name": "경영기획", "type": "office", "leaderId": "expanded-leader-02", "displayOrder": 1 },
{ "id": "talent-growth", "parentId": "general-planning", "name": "인재성장", "type": "office", "leaderId": "expanded-leader-03", "displayOrder": 2 }
{
"id": "general-planning",
"parentId": null,
"name": "총괄기획실",
"type": "root",
"leaderId": "expanded-representative",
"displayOrder": 0
},
{
"id": "business-management",
"parentId": "general-planning",
"name": "사업관리",
"type": "office",
"leaderId": "expanded-leader-01",
"displayOrder": 0
},
{
"id": "business-planning",
"parentId": "general-planning",
"name": "경영기획",
"type": "office",
"leaderId": "expanded-leader-02",
"displayOrder": 1
},
{
"id": "talent-growth",
"parentId": "general-planning",
"name": "인재성장",
"type": "office",
"leaderId": "expanded-leader-03",
"displayOrder": 2
},
{
"id": "business-control",
"parentId": "business-management",
"name": "사업관리 셀",
"type": "cell",
"leaderId": "expanded-cell-leader-01",
"displayOrder": 0
},
{
"id": "project-support",
"parentId": "business-management",
"name": "사업지원 셀",
"type": "cell",
"leaderId": null,
"displayOrder": 1
},
{
"id": "finance",
"parentId": "business-planning",
"name": "재무 셀",
"type": "cell",
"leaderId": "expanded-cell-leader-02",
"displayOrder": 2
},
{
"id": "planning-support",
"parentId": "business-planning",
"name": "기획지원 셀",
"type": "cell",
"leaderId": null,
"displayOrder": 3
},
{
"id": "people-support",
"parentId": "talent-growth",
"name": "성장지원 셀",
"type": "cell",
"leaderId": null,
"displayOrder": 4
},
{
"id": "project-review",
"parentId": "business-control",
"name": "사업검토 팀",
"type": "cell",
"leaderId": "expanded-team-leader-01",
"displayOrder": 5
},
{
"id": "review-support",
"parentId": "project-review",
"name": "검토지원 파트",
"type": "cell",
"leaderId": null,
"displayOrder": 6
}
],
"employees": [
{ "id": "expanded-representative", "organizationId": "general-planning", "affiliationId": "hanmac", "name": "홍길동", "position": "대표이사", "jobTitle": "대표이사", "profileImage": null, "workStatus": "active" },
{ "id": "expanded-leader-01", "organizationId": "business-management", "affiliationId": "hanmac", "name": "이도윤", "position": "수석", "jobTitle": "팀장", "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-01", "organizationId": "business-management", "affiliationId": "saman", "name": "김하린", "position": "책임", "jobTitle": null, "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-02", "organizationId": "business-management", "affiliationId": "jangheon-industry", "name": "박서준", "position": "선임", "jobTitle": null, "profileImage": null, "workStatus": "active" },
{ "id": "expanded-leader-02", "organizationId": "business-planning", "affiliationId": "jangheon", "name": "정지우", "position": "수석", "jobTitle": "팀장", "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-03", "organizationId": "business-planning", "affiliationId": "ptc", "name": "최유진", "position": "책임", "jobTitle": null, "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-04", "organizationId": "business-planning", "affiliationId": "hanmac", "name": "윤서아", "position": "연구", "jobTitle": null, "profileImage": null, "workStatus": "active" },
{ "id": "expanded-leader-03", "organizationId": "talent-growth", "affiliationId": "halla", "name": "강민준", "position": "수석", "jobTitle": "팀장", "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-05", "organizationId": "talent-growth", "affiliationId": "baron", "name": "한예린", "position": "책임", "jobTitle": null, "profileImage": null, "workStatus": "active" },
{ "id": "expanded-employee-06", "organizationId": "talent-growth", "affiliationId": "saman", "name": "오하준", "position": "선임", "jobTitle": null, "profileImage": null, "workStatus": "active" }
{
"id": "expanded-representative",
"organizationId": "general-planning",
"affiliationId": "hanmac",
"name": "홍길동",
"position": "대표이사",
"jobTitle": "대표이사",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-leader-01",
"organizationId": "business-management",
"affiliationId": "hanmac",
"name": "이도윤",
"position": "수석",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-01",
"organizationId": "business-management",
"affiliationId": "saman",
"name": "김하린",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-02",
"organizationId": "business-management",
"affiliationId": "jangheon-industry",
"name": "박서준",
"position": "선임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-leader-02",
"organizationId": "business-planning",
"affiliationId": "jangheon",
"name": "정지우",
"position": "수석",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-03",
"organizationId": "business-planning",
"affiliationId": "ptc",
"name": "최유진",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-04",
"organizationId": "business-planning",
"affiliationId": "hanmac",
"name": "윤서아",
"position": "연구",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-leader-03",
"organizationId": "talent-growth",
"affiliationId": "halla",
"name": "강민준",
"position": "수석",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-05",
"organizationId": "talent-growth",
"affiliationId": "baron",
"name": "한예린",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-employee-06",
"organizationId": "talent-growth",
"affiliationId": "saman",
"name": "오하준",
"position": "선임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-cell-leader-01",
"organizationId": "business-control",
"affiliationId": "hanmac",
"name": "김민준",
"position": "팀장",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-cell-leader-02",
"organizationId": "finance",
"affiliationId": "hanmac",
"name": "김민준",
"position": "팀장",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-team-leader-01",
"organizationId": "project-review",
"affiliationId": "hanmac",
"name": "김민준",
"position": "팀장",
"jobTitle": "팀장",
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-nested-1",
"organizationId": "business-control",
"affiliationId": "hanmac",
"name": "서지우",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-nested-2",
"organizationId": "business-control",
"affiliationId": "hanmac",
"name": "서지우",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-nested-3",
"organizationId": "finance",
"affiliationId": "hanmac",
"name": "서지우",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-nested-4",
"organizationId": "project-review",
"affiliationId": "hanmac",
"name": "서지우",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
},
{
"id": "expanded-nested-5",
"organizationId": "review-support",
"affiliationId": "hanmac",
"name": "서지우",
"position": "책임",
"jobTitle": null,
"profileImage": null,
"workStatus": "active"
}
],
"affiliations": [
{ "id": "hanmac", "name": "(주)한맥기술" },
{ "id": "saman", "name": "(주)삼안" },
{ "id": "jangheon", "name": "(주)장헌" },
{ "id": "jangheon-industry", "name": "장헌산업" },
{ "id": "ptc", "name": "PTC" },
{ "id": "halla", "name": "한라산업개발" },
{ "id": "baron", "name": "바론컨설턴트" }
{
"id": "hanmac",
"name": "(주)한맥기술"
},
{
"id": "saman",
"name": "(주)삼안"
},
{
"id": "jangheon",
"name": "(주)장헌"
},
{
"id": "jangheon-industry",
"name": "장헌산업"
},
{
"id": "ptc",
"name": "PTC"
},
{
"id": "halla",
"name": "한라산업개발"
},
{
"id": "baron",
"name": "바론컨설턴트"
}
],
"relations": [],
"presentation": {
"title": "확장형 조직도 · P5-1A",
"description": "대표자와 1Depth 그룹 초기 표시 · 자동 계층 배치 미구현 · 가상 직원 정보",
"title": "확장형 조직도",
"description": "자동 계층 배치 · 가상 직원 정보",
"hubText": null,
"groups": { "showEmployees": true, "showSummary": false, "showDispatched": false, "showOnLeave": false, "showAffiliations": false },
"organizationOrder": ["general-planning", "business-management", "business-planning", "talent-growth"]
"groups": {
"showEmployees": true,
"showSummary": false,
"showDispatched": false,
"showOnLeave": false,
"showAffiliations": false
},
"organizationOrder": [
"general-planning",
"business-management",
"business-planning",
"talent-growth",
"business-control",
"project-support",
"finance",
"planning-support",
"people-support",
"project-review",
"review-support"
]
},
"metadata": {
"asOfDate": "2026-10-12",
"dataVersion": "p5-1a-expanded-initial-v1",
"updateNote": "P5-1A 초기 1Depth 구성 · 운영 HR 정보와 무관한 가상 데이터"
"dataVersion": "p5-1b-expanded-hierarchy-v1",
"updateNote": "P5-1B 최소 재귀 계층 데이터 · 운영 HR 정보와 무관"
}
}