39910-vm/src/lib/types.ts
2026-05-06 09:19:27 +00:00

192 lines
3.7 KiB
TypeScript

export type UserRole = 'teacher' | 'para' | 'office' | 'director' | 'superintendent';
export type CampusId = 'tigers' | 'gators' | 'hawks' | 'owls' | 'wildcats' | 'grizzlies';
export interface CampusInfo {
id: CampusId;
mascot: string;
fullName: string;
color: string;
bgGradient: string;
borderColor: string;
textColor: string;
bgLight: string;
description: string;
isOnline?: boolean;
}
export interface User {
name: string;
role: UserRole;
avatar: string;
campus: string;
}
export interface StaffProfile {
id: string;
full_name: string;
role: UserRole;
campus: string;
avatar_url: string | null;
personality_type?: string | null;
created_at?: string;
updated_at?: string;
}
export interface FrameEntry {
id: string;
weekOf: string;
postedDate: string;
formal: string;
recognition: string;
application: string;
management: string;
emotional: string;
author: string;
}
export interface Strategy {
id: string;
title: string;
description: string;
category: 'visual-support' | 'transition' | 'sensory' | 'communication' | 'behavior' | 'social';
ageGroup: 'K-2' | '3-5' | '6-8' | 'All';
zone: 'blue' | 'green' | 'yellow' | 'red';
image: string;
isFavorite?: boolean;
}
export interface QuizQuestion {
id: string;
question: string;
options: string[];
correctIndex: number;
explanation: string;
}
export interface SafetyQuiz {
id: string;
title: string;
focus: 'physical-management' | 'de-escalation' | 'safety-reminders';
questions: QuizQuestion[];
weekOf: string;
}
export interface SignVideoStep {
step: number;
instruction: string;
duration: number; // seconds
}
export interface SignItem {
id: string;
word: string;
category: 'basic-needs' | 'emotional' | 'classroom';
description: string;
image: string;
tip: string;
videoUrl: string; // YouTube embed URL for the sign demonstration
gifUrl: string; // Animated GIF URL showing the sign demonstration (always works)
videoSteps: SignVideoStep[];
}
export interface Event {
id: string;
title: string;
date: string;
type: 'meeting' | 'drill' | 'event' | 'deadline';
roles: UserRole[];
}
export interface AttendanceRecord {
date: string;
status: 'present' | 'late' | 'absent';
note?: string;
}
export interface ParentMessage {
id: string;
template: string;
category: 'behavior' | 'event' | 'progress' | 'general';
lastSent?: string;
}
export type ZoneColor = 'blue' | 'green' | 'yellow' | 'red';
export interface ZoneInfo {
color: ZoneColor;
name: string;
description: string;
behaviors: string[];
strategies: string[];
signs: string[];
bgClass: string;
textClass: string;
borderClass: string;
}
export type ModuleId =
| 'dashboard'
| 'frame'
| 'classroom'
| 'timer'
| 'qbs'
| 'ei'
| 'zones'
| 'signs'
| 'attendance'
| 'parent-comm'
| 'internal-comm'
| 'safety'
| 'handbook'
| 'director'
| 'community'
| 'vocational'
| 'esa'
| 'walkthrough';
export interface WalkthroughCheckin {
id: string;
teacher_name: string;
classroom: string;
director_name: string;
check_in_date: string;
check_in_time: string;
attitude_rating: number;
attitude_comment?: string;
classroom_management_rating: number;
classroom_management_comment?: string;
cleanliness_rating: number;
cleanliness_comment?: string;
vibes_rating: number;
vibes_comment?: string;
team_dynamics_rating: number;
team_dynamics_comment?: string;
emergency_exit_rating: number;
emergency_exit_comment?: string;
lesson_plan_rating: number;
lesson_plan_comment?: string;
overall_notes?: string;
created_at?: string;
}
export interface Module {
id: ModuleId;
name: string;
icon: string;
roles: UserRole[];
color: string;
}