feat(org-chart): add core cards and fixed-layout integration

This commit is contained in:
shkim4 committed 2026-10-12 17:58:30 +09:00
1 parent d18e3c3380
commit 61c6f8d1f1
161 files changed
+13044 -1

No files matched your search

@@ -0,0 +1,45 @@
import hanmac from '../assets/affiliations/hanmac.png?inline';
import saman from '../assets/affiliations/saman.png?inline';
import jangheon from '../assets/affiliations/jangheon.png?inline';
import jangheonIndustry from '../assets/affiliations/jangheon-industry.png?inline';
import ptc from '../assets/affiliations/ptc.png?inline';
import halla from '../assets/affiliations/halla.png?inline';
import baron from '../assets/affiliations/baron.png?inline';
// Asset mapping is an internal presentation concern; the employee/affiliation
// JSON contract continues to use only its existing id and name fields.
const logos = new Map<string, string>([
['hanmac', hanmac], ['saman', saman], ['jangheon', jangheon],
['jangheon-industry', jangheonIndustry], ['ptc', ptc], ['halla', halla], ['baron', baron],
]);
/** Shared by employee cards and the affiliation summary footer. */
export function createAffiliationMark(
document: Document, affiliationId: string, name: string, signal?: AbortSignal,
): HTMLElement {
const mark = document.createElement('span');
mark.className = 'hm-orgchart-affiliation-mark';
mark.dataset.affiliationId = affiliationId;
mark.setAttribute('role', 'img');
mark.setAttribute('aria-label', `관계사 ${name}`);
mark.title = name;
const fallback = document.createElement('span');
fallback.className = 'hm-orgchart-affiliation-fallback';
fallback.textContent = Array.from(name.trim()).slice(0, 2).join('') || '?';
mark.append(fallback);
const logo = logos.get(affiliationId);
mark.dataset.logoAvailable = String(Boolean(logo));
if (logo) {
const image = document.createElement('img');
image.alt = '';
image.decoding = 'async';
image.addEventListener('error', () => {
image.remove();
mark.dataset.logoAvailable = 'false';
}, { once: true, ...(signal ? { signal } : {}) });
image.src = logo;
mark.append(image);
}
return mark;
}