// ============================================
// DEMO RENDERER - Generic rendering for command and skill demos
// ============================================
import { getCommandDemo } from './demos/commands/index.js';
import { getSkillDemo } from './demos/skills/index.js';
/**
* Render a command demo with split-screen comparison
*/
export function renderCommandDemo(commandId) {
const demo = getCommandDemo(commandId);
if (!demo) {
return `
Visual demo for /${commandId} coming soon
`;
}
// Use split-screen comparison
return `
${demo.after || demo.before}
${demo.caption}
`;
}
/**
* Render a skill demo (with tabs if multiple demos)
*/
export function renderSkillDemo(skillId) {
const skill = getSkillDemo(skillId);
if (!skill || !skill.tabs || skill.tabs.length === 0) {
return `
Demo for ${skillId.replace(/-/g, ' ')} coming soon
`;
}
const showTabs = skill.tabs.length > 1;
const tabs = showTabs ? skill.tabs.map((tab, i) => `
`).join('') : '';
const panels = skill.tabs.map((tab, i) => `
${renderSkillTabDemo(skillId, tab)}
`).join('');
return `
${showTabs ? `
${tabs}
` : ''}
${panels}
`;
}
/**
* Render a single skill tab demo
*/
function renderSkillTabDemo(skillId, tab) {
const hasToggle = tab.hasToggle !== false;
const demoId = `${skillId}-${tab.id}`;
return `
${tab.before}
${tab.caption}
`;
}
/**
* Setup demo tab switching
*/
export function setupDemoTabs() {
document.querySelectorAll('.demo-tab').forEach(tab => {
tab.addEventListener('click', () => {
const tabId = tab.dataset.demoTab;
const container = tab.closest('.demo-tabbed-container');
container.querySelectorAll('.demo-tab').forEach(t => t.classList.remove('active'));
tab.classList.add('active');
container.querySelectorAll('.demo-panel').forEach(p => p.classList.remove('active'));
container.querySelector(`[data-demo-panel="${tabId}"]`)?.classList.add('active');
});
});
}