Scaffold project structure with vite. src/ types.ts ← Node, Connection, ParseResult, PaletteEntry, BlockInfo, AppState parser.ts ← parsePuml() colors.ts ← PALETTE, guessColor() svg.ts ← makeBlock(), makeArrow(), makeLine() (pure SVG helpers) main.ts ← state, drawLevel(), updateNav(), render(), setBugData(), event wiring style.css ← all styles index.html ← shell + default PlantUML example in textarea package.json ← vite + typescript devDeps tsconfig.json ← strict mode, ESNext, bundler resolution
19 lines
847 B
TypeScript
19 lines
847 B
TypeScript
import type { Node, PaletteEntry } from './types.ts';
|
|
|
|
export const PALETTE: Record<string, PaletteEntry> = {
|
|
ecu: { t: '--top-gray', l: '--left-gray', r: '--right-gray' },
|
|
conn: { t: '--top-teal', l: '--left-teal', r: '--right-teal' },
|
|
adp: { t: '--top-amber', l: '--left-amber', r: '--right-amber' },
|
|
logic: { t: '--top-purple', l: '--left-purple', r: '--right-purple' },
|
|
seq: { t: '--top-coral', l: '--left-coral', r: '--right-coral' },
|
|
};
|
|
|
|
export function guessColor(node: Node): PaletteEntry {
|
|
const l = node.label.toLowerCase();
|
|
if (l.startsWith('connector')) return PALETTE['conn']!;
|
|
if (l.startsWith('adapter')) return PALETTE['adp']!;
|
|
if (l === 'logic' || l === 'logic component') return PALETTE['logic']!;
|
|
if (node.label.length <= 2) return PALETTE['seq']!;
|
|
return PALETTE['ecu']!;
|
|
}
|