import type { Locale } from '../i18n/I18n'; /** Age group brackets */ export type AgeGroup = '6-8' | '9-11' | '12-14' | '15+'; /** Kid-mode difficulty presets */ export type KidDifficulty = 'explorer' | 'creator' | 'inventor' | 'master'; /** Visual block categories (Scratch-inspired) */ export type BlockCategory = 'motion' | 'looks' | 'events' | 'control' | 'sensing' | 'operators' | 'variables' | 'sounds'; /** A visual programming block */ export interface VisualBlock { id: string; category: BlockCategory; /** Emoji icon for the block */ emoji: string; /** Block label per locale */ label: Partial>; /** Description per locale */ description: Partial>; /** Parameters this block accepts */ params: BlockParam[]; /** What this block generates (engine code concept) */ generatesAction: string; /** Minimum age group */ minAge: AgeGroup; } /** Parameter on a visual block */ export interface BlockParam { name: string; type: 'number' | 'string' | 'dropdown' | 'color' | 'entity' | 'boolean'; /** Label per locale */ label: Partial>; defaultValue: string | number | boolean; /** For dropdown: available options */ options?: Array<{ value: string; label: Partial>; }>; /** Min/max for number params */ min?: number; max?: number; } /** Sprite library item for kids */ export interface KidSprite { id: string; name: Partial>; /** Category for browsing */ category: 'animals' | 'people' | 'vehicles' | 'nature' | 'food' | 'fantasy' | 'space' | 'sports' | 'buildings' | 'effects'; /** Emoji preview */ emoji: string; /** Asset URL pattern */ assetPath: string; /** Number of animation frames */ frameCount: number; /** Safe for all ages */ ageAppropriate: AgeGroup; /** Tags for search */ tags: string[]; } /** Gamification badge */ export interface KidBadge { id: string; emoji: string; name: Partial>; description: Partial>; /** Condition to earn */ condition: BadgeCondition; } export type BadgeCondition = { type: 'tutorials_completed'; count: number; } | { type: 'games_created'; count: number; } | { type: 'blocks_used'; count: number; } | { type: 'days_active'; count: number; } | { type: 'quiz_score'; minPercent: number; } | { type: 'custom'; id: string; }; /** Kid profile / progress */ export interface KidProfile { name: string; avatarEmoji: string; ageGroup: AgeGroup; locale: Locale; stars: number; streak: number; lastActiveDate: string; earnedBadges: string[]; completedTutorials: string[]; createdProjects: string[]; totalBlocksUsed: number; totalPlayTime: number; } /** Parent dashboard settings */ export interface ParentConfig { /** Maximum play time per day (minutes). 0 = unlimited */ dailyTimeLimitMinutes: number; /** Allow sharing creations online */ allowSharing: boolean; /** Content filter level */ contentFilter: 'strict' | 'moderate' | 'off'; /** Enable chat in classroom mode */ allowChat: boolean; /** Required password for settings access */ settingsPin: string; /** Allowed categories for sprites */ allowedSpriteCategories: KidSprite['category'][]; /** Enable sound effects */ enableSounds: boolean; } /** Classroom mode config */ export interface ClassroomConfig { /** Class name */ className: string; /** Teacher name */ teacherName: string; /** Students in the class */ students: KidProfile[]; /** Currently assigned tutorial */ currentAssignment?: string; /** Due date for assignment */ dueDate?: string; /** Show leaderboard */ showLeaderboard: boolean; /** Allow peer collaboration */ allowCollaboration: boolean; } export interface KidModeConfig { enabled: boolean; ageGroup: AgeGroup; parentConfig: ParentConfig; classroom?: ClassroomConfig; } export declare const DEFAULT_KID_MODE_CONFIG: KidModeConfig; export declare class KidModeManager { private config; private profile; private sessionStartTime; private sessionPlayTime; private readonly storageKey; constructor(config?: Partial); isEnabled(): boolean; enable(ageGroup?: AgeGroup): void; disable(): void; getAgeGroup(): AgeGroup; setAgeGroup(age: AgeGroup): void; getProfile(): KidProfile | null; createProfile(name: string, avatarEmoji: string, ageGroup: AgeGroup, locale: Locale): KidProfile; /** Award stars (gamification) */ awardStars(count: number): number; /** Check and update streak */ updateStreak(): number; /** Mark tutorial as completed, award stars */ completeTutorial(tutorialId: string): number; /** Check if a badge is earned */ checkBadge(badge: KidBadge): boolean; /** Get remaining play time in minutes. -1 = unlimited. */ getRemainingTime(): number; /** Check if time limit is exceeded */ isTimeLimitExceeded(): boolean; /** Check if a sprite is appropriate for current settings */ isSpriteAllowed(sprite: KidSprite): boolean; /** Filter blocks by age group */ getAvailableBlocks(allBlocks: VisualBlock[]): VisualBlock[]; /** Map kid difficulty to engine concepts */ getDifficultySettings(difficulty: KidDifficulty): KidDifficultySettings; getParentConfig(): ParentConfig; updateParentConfig(updates: Partial): void; getClassroom(): ClassroomConfig | undefined; setClassroom(classroom: ClassroomConfig): void; /** Get leaderboard sorted by stars */ getLeaderboard(): Array<{ name: string; emoji: string; stars: number; }>; private saveProfile; private loadProfile; dispose(): void; } export interface KidDifficultySettings { label: Partial>; emoji: string; /** Which block categories are available */ enabledCategories: BlockCategory[]; /** Max entities in scene */ maxEntities: number; /** Show code view (advanced toggle) */ showCodeView: boolean; /** Show property inspector */ showInspector: boolean; /** Enable physics */ enablePhysics: boolean; /** Enable scripting */ enableScripting: boolean; } export declare const KID_DIFFICULTY_PRESETS: Record; export declare const VISUAL_BLOCKS: VisualBlock[]; export declare const KID_BADGES: KidBadge[]; export declare const KID_SPRITES: KidSprite[];