Skip to content

Commit e4d262e

Browse files
authored
Merge pull request #471 from davila7/claude/skills-slide-presentation-5JOPn
Add slide presentation view for skill documentation
2 parents e6313a4 + db8aa4d commit e4d262e

2 files changed

Lines changed: 448 additions & 3 deletions

File tree

‎dashboard/src/components/SkillExplorer.tsx‎

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { useState, useEffect, useRef, useMemo, useCallback } from 'react';
22
import { marked } from 'marked';
3+
import SkillSlideView from './SkillSlideView';
34

45
interface Heading {
56
level: number;
@@ -135,7 +136,7 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
135136
const [fileContent, setFileContent] = useState(skillContent);
136137
const [loading, setLoading] = useState(false);
137138
const [error, setError] = useState('');
138-
const [mode, setMode] = useState<'code' | 'preview'>('preview');
139+
const [mode, setMode] = useState<'code' | 'preview' | 'slides'>('preview');
139140
const [expanded, setExpanded] = useState(false);
140141
const [activeHeading, setActiveHeading] = useState('');
141142
const [searchQuery, setSearchQuery] = useState('');
@@ -290,7 +291,7 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
290291

291292
const handleFileClick = (path: string) => {
292293
setSelectedFile(path);
293-
setMode('preview');
294+
if (mode === 'slides') setMode('preview');
294295
setSearchOpen(false);
295296
setSearchQuery('');
296297
setExpanded(false);
@@ -374,6 +375,15 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
374375
</svg>
375376
Preview
376377
</button>
378+
{selectedFile === 'SKILL.md' && (
379+
<button onClick={() => setMode('slides')}
380+
className={`flex items-center gap-1.5 px-3 py-1.5 rounded-md text-xs font-medium transition-colors ${mode === 'slides' ? 'bg-surface-2 text-text-primary shadow-sm' : 'text-text-tertiary hover:text-text-secondary'}`}>
381+
<svg className="w-3.5 h-3.5" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
382+
<path strokeLinecap="round" strokeLinejoin="round" d="M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5" />
383+
</svg>
384+
Slides
385+
</button>
386+
)}
377387
</div>
378388
)}
379389
{isMarkdown && (
@@ -397,7 +407,7 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
397407
</div>
398408

399409
{/* Search bar */}
400-
{searchOpen && isMarkdown && (
410+
{searchOpen && isMarkdown && mode !== 'slides' && (
401411
<div className="mb-3 relative">
402412
<div className="relative">
403413
<svg className="absolute left-3 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-[var(--color-text-tertiary)] pointer-events-none" fill="none" viewBox="0 0 24 24" stroke="currentColor" strokeWidth={2}>
@@ -452,6 +462,11 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
452462
</div>
453463
)}
454464

465+
{/* Slides mode */}
466+
{mode === 'slides' && selectedFile === 'SKILL.md' ? (
467+
<SkillSlideView content={skillContent} skillName={skillName} />
468+
) : (
469+
<>
455470
{/* Content + TOC — identical layout to MarkdownViewer */}
456471
<div className="flex gap-0 items-stretch">
457472
{/* File tree panel */}
@@ -532,6 +547,8 @@ export default function SkillExplorer({ skillContent, skillName, skillPath, refe
532547
)}
533548
</div>
534549
</div>
550+
</>
551+
)}
535552
</div>
536553
);
537554
}

0 commit comments

Comments
 (0)