diff --git a/apps/web_v1/scripts/structure-check.mjs b/apps/web_v1/scripts/structure-check.mjs index 13bef57..40beb3e 100644 --- a/apps/web_v1/scripts/structure-check.mjs +++ b/apps/web_v1/scripts/structure-check.mjs @@ -42,6 +42,11 @@ for (const forbidden of ['森林Agent', 'SenlinAI Workbench']) { } } +const projectRailSource = readFileSync('src/pages/projects/project-rail.tsx', 'utf8') +if (!projectRailSource.includes('projectNameLabel(project.name)')) { + failures.push('project rail labels must derive from the project name') +} + if (existsSync('src/App.tsx')) { failures.push('legacy src/App.tsx should be removed after page split') } diff --git a/apps/web_v1/src/App.css b/apps/web_v1/src/App.css index 74b45ea..a14a2d7 100644 --- a/apps/web_v1/src/App.css +++ b/apps/web_v1/src/App.css @@ -360,11 +360,14 @@ .project-button { width: 48px; height: 48px; + padding: 0 4px; border: 1px solid var(--senlin-border); border-radius: 8px; background: color-mix(in srgb, var(--project-color) 9%, white); color: var(--project-color); + font-size: 12px; font-weight: 700; + overflow: hidden; cursor: pointer; } diff --git a/apps/web_v1/src/pages/projects/project-rail.tsx b/apps/web_v1/src/pages/projects/project-rail.tsx index 0d8bb10..7e0f0b0 100644 --- a/apps/web_v1/src/pages/projects/project-rail.tsx +++ b/apps/web_v1/src/pages/projects/project-rail.tsx @@ -47,7 +47,7 @@ export function ProjectRail({ style={{ '--project-color': project.color } as CSSProperties} title={project.name} > - {project.short} + {projectNameLabel(project.name)} ))} @@ -56,3 +56,9 @@ export function ProjectRail({ ) } + +function projectNameLabel(name: string) { + const characters = Array.from(name.trim()) + const limit = characters.some((character) => /\p{Script=Han}/u.test(character)) ? 2 : 4 + return characters.slice(0, limit).join('') +}