| |
| |
| |
| |
| |
| |
|
|
| import { nanoid } from 'nanoid'; |
| import type { |
| Scene, |
| SceneType, |
| SceneContent, |
| SlideContent, |
| QuizContent, |
| InteractiveContent, |
| PBLContent, |
| } from '@/lib/types/stage'; |
|
|
| |
|
|
| |
| |
| |
| export function generateId(prefix?: string): string { |
| return prefix ? `${prefix}_${nanoid(10)}` : nanoid(10); |
| } |
|
|
| |
| |
| |
| export function validateSceneId(scenes: Scene[], sceneId: string): boolean { |
| return scenes.some((s) => s.id === sceneId); |
| } |
|
|
| |
| |
| |
| export function getScene(scenes: Scene[], sceneId: string): Scene | null { |
| return scenes.find((s) => s.id === sceneId) || null; |
| } |
|
|
| |
| |
| |
| export function createDefaultSlideContent(): SlideContent { |
| return { |
| type: 'slide', |
| canvas: { |
| id: generateId('slide'), |
| viewportSize: 1000, |
| viewportRatio: 0.5625, |
| theme: { |
| backgroundColor: '#ffffff', |
| themeColors: ['#5b9bd5', '#ed7d31', '#a5a5a5', '#ffc000', '#4472c4'], |
| fontColor: '#333333', |
| fontName: 'Microsoft YaHei', |
| outline: { |
| color: '#d14424', |
| width: 2, |
| style: 'solid', |
| }, |
| shadow: { |
| h: 0, |
| v: 0, |
| blur: 10, |
| color: '#000000', |
| }, |
| }, |
| elements: [], |
| }, |
| }; |
| } |
|
|
| |
| |
| |
| export function createDefaultQuizContent(): QuizContent { |
| return { |
| type: 'quiz', |
| questions: [], |
| }; |
| } |
|
|
| |
| |
| |
| export function createDefaultInteractiveContent(): InteractiveContent { |
| return { |
| type: 'interactive', |
| url: '', |
| }; |
| } |
|
|
| |
| |
| |
| export function createDefaultPBLContent(): PBLContent { |
| return { |
| type: 'pbl', |
| projectConfig: { |
| projectInfo: { title: '', description: '' }, |
| agents: [], |
| issueboard: { agent_ids: [], issues: [], current_issue_id: null }, |
| chat: { messages: [] }, |
| }, |
| }; |
| } |
|
|
| |
| |
| |
| export function createDefaultContent(type: SceneType): SceneContent { |
| switch (type) { |
| case 'slide': |
| return createDefaultSlideContent(); |
| case 'quiz': |
| return createDefaultQuizContent(); |
| case 'interactive': |
| return createDefaultInteractiveContent(); |
| case 'pbl': |
| return createDefaultPBLContent(); |
| default: |
| throw new Error(`Unknown scene type: ${type}`); |
| } |
| } |
|
|