Skip to content

Commit 3553d54

Browse files
Copilotmikebarkmin
andcommitted
Add welcome message for empty roadmap
- Created WelcomeMessage component with title and local storage notice - Added translations for welcome message (English and German) - Integrated welcome message into LearningMapEditor - Shows when no nodes or edges exist in the roadmap - Provides buttons for: Open File, Add Topic, and Help - Welcome message automatically disappears when content is added - Fixed z-index and pointer-events for proper dialog interaction Co-authored-by: mikebarkmin <2592379+mikebarkmin@users.noreply.github.com>
1 parent 794207f commit 3553d54

File tree

4 files changed

+122
-0
lines changed

4 files changed

+122
-0
lines changed

packages/learningmap/src/LearningMapEditor.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ import { Info, Redo, Undo, RotateCw, ShieldAlert } from "lucide-react";
3737
import useUndoable from "./useUndoable";
3838
import { MultiNodePanel } from "./MultiNodePanel";
3939
import { getTranslations } from "./translations";
40+
import { WelcomeMessage } from "./WelcomeMessage";
4041

4142
const nodeTypes = {
4243
topic: TopicNode,
@@ -629,6 +630,14 @@ export function LearningMapEditor({
629630
backgroundColor: settings?.background?.color || "#ffffff",
630631
}}
631632
>
633+
{nodes.length === 0 && edges.filter(e => !e.id.startsWith("debug-")).length === 0 && (
634+
<WelcomeMessage
635+
onOpenFile={handleOpen}
636+
onAddTopic={() => addNewNode("topic")}
637+
onShowHelp={() => setHelpOpen(true)}
638+
language={effectiveLanguage}
639+
/>
640+
)}
632641
<ReactFlow
633642
nodes={nodes.map(n => {
634643
const className = [];
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import React from "react";
2+
import { FolderOpen, Plus, Info } from "lucide-react";
3+
import { getTranslations } from "./translations";
4+
5+
interface WelcomeMessageProps {
6+
onOpenFile: () => void;
7+
onAddTopic: () => void;
8+
onShowHelp: () => void;
9+
language?: string;
10+
}
11+
12+
export const WelcomeMessage: React.FC<WelcomeMessageProps> = ({
13+
onOpenFile,
14+
onAddTopic,
15+
onShowHelp,
16+
language = "en",
17+
}) => {
18+
const t = getTranslations(language);
19+
20+
return (
21+
<div className="welcome-message">
22+
<div className="welcome-content">
23+
<h1 className="welcome-title">{t.welcomeTitle}</h1>
24+
<p className="welcome-subtitle">{t.welcomeSubtitle}</p>
25+
<div className="welcome-actions">
26+
<button onClick={onOpenFile} className="primary-button">
27+
<FolderOpen size={18} />
28+
{t.welcomeOpenFile}
29+
</button>
30+
<button onClick={onAddTopic} className="primary-button">
31+
<Plus size={18} />
32+
{t.welcomeAddTopic}
33+
</button>
34+
<button onClick={onShowHelp} className="secondary-button">
35+
<Info size={18} />
36+
{t.welcomeHelp}
37+
</button>
38+
</div>
39+
</div>
40+
</div>
41+
);
42+
};

packages/learningmap/src/index.css

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -693,3 +693,53 @@ dialog.help[open] {
693693
margin-top: 4px;
694694
}
695695
}
696+
697+
/* Welcome Message */
698+
.welcome-message {
699+
position: absolute;
700+
top: 0;
701+
left: 0;
702+
width: 100%;
703+
height: 100%;
704+
display: flex;
705+
align-items: center;
706+
justify-content: center;
707+
background: #ffffff;
708+
z-index: 1;
709+
pointer-events: none;
710+
}
711+
712+
.welcome-content {
713+
text-align: center;
714+
max-width: 500px;
715+
padding: 40px;
716+
pointer-events: auto;
717+
}
718+
719+
.welcome-title {
720+
font-size: 48px;
721+
font-weight: 700;
722+
color: #1f2937;
723+
margin: 0 0 16px 0;
724+
}
725+
726+
.welcome-subtitle {
727+
font-size: 16px;
728+
color: #6b7280;
729+
margin: 0 0 32px 0;
730+
}
731+
732+
.welcome-actions {
733+
display: flex;
734+
flex-direction: column;
735+
gap: 12px;
736+
align-items: center;
737+
}
738+
739+
.welcome-actions button {
740+
width: 100%;
741+
max-width: 280px;
742+
justify-content: center;
743+
font-size: 16px;
744+
padding: 12px 24px;
745+
}

packages/learningmap/src/translations.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,13 @@ export interface Translations {
158158
languageLabel: string;
159159
languageEnglish: string;
160160
languageGerman: string;
161+
162+
// Welcome message
163+
welcomeTitle: string;
164+
welcomeSubtitle: string;
165+
welcomeOpenFile: string;
166+
welcomeAddTopic: string;
167+
welcomeHelp: string;
161168
}
162169

163170
const en: Translations = {
@@ -321,6 +328,13 @@ const en: Translations = {
321328
languageLabel: "Language",
322329
languageEnglish: "English",
323330
languageGerman: "German",
331+
332+
// Welcome message
333+
welcomeTitle: "Learningmap",
334+
welcomeSubtitle: "All data is stored locally in your browser",
335+
welcomeOpenFile: "Open File",
336+
welcomeAddTopic: "Add Topic",
337+
welcomeHelp: "Help",
324338
};
325339

326340
const de: Translations = {
@@ -486,6 +500,13 @@ const de: Translations = {
486500
languageLabel: "Sprache",
487501
languageEnglish: "Englisch",
488502
languageGerman: "Deutsch",
503+
504+
// Welcome message
505+
welcomeTitle: "Learningmap",
506+
welcomeSubtitle: "Alle Daten werden lokal in Ihrem Browser gespeichert",
507+
welcomeOpenFile: "Datei öffnen",
508+
welcomeAddTopic: "Thema hinzufügen",
509+
welcomeHelp: "Hilfe",
489510
};
490511

491512
export const translations: Record<string, Translations> = {

0 commit comments

Comments
 (0)