import type { MoonData } from "../../components/MoonCard"; import type { Ritual } from "../../components/DailyRitualCard"; import type { ReactNode } from "react"; import type { CalendarItem, CalendarDateRange, CalendarViewMode, CalendarStatusFilter } from "./components/HomeCalendar"; import type { ProfileCompletenessData } from "../../components/molecules/ProfileCompletenessCard"; import type { GamificationSummary } from "../../components/molecules/GamificationCard"; /** * Represents a Terreiro (spiritual house/temple) in the application. * Used for displaying and selecting terreiros in the HomePage. */ export interface Terreiro { /** Unique identifier for the terreiro */ id: string; /** Display name of the terreiro */ name: string; /** Optional URL to the terreiro's image/logo */ imageUrl?: string | null; /** Badge tier for profile verification */ badgeTier?: "STARTER" | "BASIC" | "ACTIVE" | "VERIFIED"; /** Completeness score percentage (0-100) */ completenessScore?: number; } export type ProfileSelectorEntryPoint = "top_bar_avatar" | "bottom_nav_logo"; export type ProfileSelectorOpenPayload = { entryPoint: ProfileSelectorEntryPoint; availableProfileCount: number; }; export type ProfileSelectorSelectPayload = ProfileSelectorOpenPayload & { selectedProfileType: "personal" | "terreiro"; selectedTerreiroId: string | null; selectedIndex: number; isSameAsCurrent: boolean; }; /** * Props for the HomePage component. * Contains all data and callbacks needed to render the main dashboard. */ export interface HomePageProps { /** Whether the current user has admin privileges */ isAdmin: boolean; /** Whether the user is viewing from a personal (non-terreiro) profile */ isPersonalProfile?: boolean; /** Show the Ingressos quick action (terreiro + event.publish + ticketing chat flag) */ canPublishTickets?: boolean; /** Current user information including profile, address, and contact */ user?: { profile: { /** User's first name */ firstName: string; /** User's last name */ lastName: string; /** URL to user's avatar image */ avatarUrl: string; /** Type of identification document */ documentType: "CPF" | "RG"; /** Document number */ document: string; /** User's address information */ address?: { id: string; street: string; number: string; complement?: string; neighborhood: string; city: string; state: string; zipCode: string; country: string; }; /** User's contact information */ contact?: { phone: string; contact_person?: string; }; }; }; /** Dashboard statistics to display */ stats?: HomePageStat[]; /** Quick action buttons for common tasks */ quickActions?: QuickAction[]; /** List of upcoming events */ upcomingEvents?: EventItem[]; /** Recent activities and notifications */ recentActivities?: HomePageRecentActivity[]; /** Callback when navigation is requested */ onNavigate?: (route: string) => void; /** Callback when profile is clicked */ onProfileClick?: () => void; /** Callback when notifications are clicked */ onNotificationClick?: () => void; /** Number of unread notifications to show on the bell icon badge */ notificationCount?: number; /** Brief notification items for bell quick panel (max 3 shown) */ notificationItems?: Array<{ id: string; type: string; message: string; read: boolean; timestamp: string | Date; terreiroId?: string; }>; /** Callback when "Ver todas" is clicked in bell panel (falls back to onNotificationClick) */ onViewAllNotifications?: () => void; /** Callback when search is clicked */ onSearchClick?: () => void; /** Callback when settings are clicked */ onSettingsClick?: () => void; /** Callback when onboarding intro icon in top bar is clicked */ onOnboardingInfoClick?: () => void; /** Optional custom icon for onboarding intro action in top bar */ onboardingInfoIcon?: ReactNode; /** Share URL used by the top bar invite action; falls back to the app origin when omitted */ inviteShareUrl?: string; /** Callback when refresh is requested */ onRefresh?: () => void; /** Callback when rejection dialog should be shown */ onRejectedDialog: () => void; /** Callback when approved alert should be shown */ onApprovedAlert: () => void; /** Current medium approval status */ mediumStatus?: MediumStatus; /** Message explaining why the medium was rejected */ rejectionMessage?: string; /** * Optional default selected terreiro. When provided, the hook will * initialize and sync the selected terreiro to this value if it exists * in the `terreiros` list. */ defaultTerreiro?: Terreiro | null; /** List of available terreiros for selection */ terreiros?: (Terreiro | null)[]; /** Callback when terreiro selection changes */ onTerreiroChange?: (terreiro: Terreiro | null) => void; /** Callback when the profile selector drawer is opened */ onProfileSelectorOpen?: (payload: ProfileSelectorOpenPayload) => void; /** Callback when a profile option is selected in the drawer */ onProfileSelectorSelect?: (payload: ProfileSelectorSelectPayload) => void; /** Moon phase data for display */ moonData?: MoonData; /** Callback when moon card is clicked */ onMoonCardClick?: () => void; /** Loading state for moon data */ isLoadingMoonData?: boolean; /** Ritual bath recommendations */ rituals?: Ritual[]; /** Callback when explore rituals is clicked */ onRitualExploreClick?: () => void; /** Callback when a specific ritual is clicked */ onRitualClick?: (ritualId: string) => void; /** Callback when quick actions layout changes */ onLayoutChange?: (layout: "grid" | "horizontal") => void; /** Calendar activities to display */ calendarActivities?: CalendarItem[]; /** Calendar events to display (only shown when user is medium AND terreiro admin) */ calendarEvents?: CalendarItem[]; /** Calendar ritual baths to display */ calendarRitualBaths?: CalendarItem[]; /** Loading state for daily ritual recommendations */ isLoadingRituals?: boolean; /** Selected calendar date for daily ritual display */ selectedRitualDate?: string; calendarViewMode?: CalendarViewMode; /** Current calendar status filter */ calendarStatusFilter?: CalendarStatusFilter; /** Loading state for calendar data */ isLoadingCalendar?: boolean; /** Callback when calendar view mode changes - should be used to fetch new data */ onCalendarViewModeChange?: (dateRange: CalendarDateRange) => void; /** Callback when a calendar item is clicked */ onCalendarItemClick?: (item: CalendarItem) => void; /** Callback when a calendar date is selected */ onCalendarDateSelect?: (date: string) => void; /** Callback when calendar status filter changes */ onCalendarStatusFilterChange?: (status: CalendarStatusFilter) => void; /** Profile completeness data for verification badge card */ profileCompletenessData?: ProfileCompletenessData; /** Whether the profile completeness card is in compact mode */ profileCompletenessCompact?: boolean; /** Loading state for profile completeness */ isLoadingProfileCompleteness?: boolean; /** Callback when user clicks to complete profile */ onCompleteProfile?: () => void; /** Callback when user clicks to complete a specific section */ onCompleteSection?: (section: string) => void; /** Callback when profile completeness card compact state changes */ onProfileCompletenessCompactChange?: (compact: boolean) => void; /** Terreiro completeness data for organization verification badge card */ terreiroCompletenessData?: ProfileCompletenessData; /** Whether the terreiro completeness card is in compact mode */ terreiroCompletenessCompact?: boolean; /** Loading state for terreiro completeness */ isLoadingTerreiroCompleteness?: boolean; /** Callback when admin clicks to complete terreiro profile */ onCompleteTerreiroProfile?: () => void; /** Callback when admin clicks to complete a specific terreiro section */ onCompleteTerreiroSection?: (section: string) => void; /** Callback when terreiro completeness card compact state changes */ onTerreiroCompletenessCompactChange?: (compact: boolean) => void; /** Gamification summary data for the current medium */ gamificationData?: GamificationSummary | null; /** Loading state for gamification data */ isLoadingGamification?: boolean; /** Whether to show the gamification card */ showGamificationCard?: boolean; /** Callback when user clicks to view full leaderboard */ onViewLeaderboard?: () => void; /** Callback when user clicks to view all badges */ onViewBadges?: () => void; /** Callback when user clicks to learn how gamification works */ onLearnGamification?: () => void; /** Whether to display the attendance insights section */ showAttendanceInsights?: boolean; /** Aggregated attendance insights for the selected period */ attendanceInsightsData?: AttendanceInsightsData | null; /** Loading state for attendance insights */ isLoadingAttendanceInsights?: boolean; /** Current attendance period filter */ attendancePeriod?: AttendanceInsightsPeriod; /** Callback for changing attendance period */ onAttendancePeriodChange?: (period: AttendanceInsightsPeriod) => void; /** Callback for navigating to the full medium list/ranking */ onAttendanceViewAll?: () => void; /** Whether to display the supply plan card */ showSupplyPlanCard?: boolean; /** Summary data for the supply plan card */ supplyPlanData?: SupplyPlanSummary | null; /** Loading state for supply plan */ isLoadingSupplyPlan?: boolean; /** Navigate to full supply plan page */ onSupplyPlanViewAll?: () => void; /** Navigate to supply plan with missions focus (e.g. ?focus=missions) */ onSupplyPlanMissions?: () => void; /** Weekly engagement tasks already filtered by the app layer */ weeklyTasks?: WeeklyTask[]; /** Loading state for weekly tasks */ isLoadingWeeklyTasks?: boolean; /** Navigate to a weekly task. Omit to hide task CTAs. */ onWeeklyTaskClick?: (taskId: string, route: string) => void; } export type WeeklyTaskFeature = "events" | "activities" | "participation" | "financial" | "baths" | "mediums" | "inventory" | "requests" | "academy" | "spiritual"; export interface WeeklyTask { id: string; title: string; description: string; feature: WeeklyTaskFeature; route: string; completed: boolean; ctaLabel?: string; } export interface SupplyPlanSummary { stock: { totalItems: number; totalUnits: number; lowStockCount: number; outOfStockCount: number; }; demand: { activityCount: number; eventCount: number; distinctItemCount: number; }; costs?: { totalEstimatedCost: number; itemsWithCostCount: number; itemsWithoutCostCount: number; coveragePercent: number; formatted: { totalEstimatedCost: string; }; }; itemsToBuyCount: number; readinessSummary?: string; missionsCount?: number; showCostMissionsTeaser?: boolean; coveragePercent?: number; itemsWithoutCostCount?: number; topItems: Array<{ id: string; name: string; toBuyQuantity: number; unit: string; estimatedCost?: number; imageUrl?: string | null; costSource?: "purchase_history" | "manual" | null; }>; } export type AttendanceInsightsPeriod = "WEEKLY" | "MONTHLY" | "YEARLY"; export interface AttendanceInsightsMedium { mediumId: string; mediumName: string; mediumAvatarUrl?: string | null; invites: number; confirmed: number; present: number; absent: number; declined: number; confirmationRate: number; presenceRate: number; absenceGap: number; } export interface AttendanceInsightsData { terreiroId: string; period: { month: number; year: number; start: string; end: string; }; summary: { invites: number; confirmed: number; present: number; absent: number; declined: number; confirmationRate: number; presenceRate: number; absenceGap: number; }; mediums: AttendanceInsightsMedium[]; } /** * Possible approval statuses for a medium in the terreiro. * - PENDING: Awaiting approval from terreiro admin * - APPROVED: Medium has been approved * - REJECTED: Medium application was rejected */ export type MediumStatus = "PENDING" | "APPROVED" | "REJECTED" | undefined; /** * Represents a quick action button on the HomePage. * Quick actions provide shortcuts to common tasks. */ export type QuickAction = { /** Unique identifier for the action */ id: string; /** Display title for the action button */ title: string; /** Navigation route when clicked */ route: string; /** Theme color for the action button */ color: string; /** Optional icon (emoji or icon name) */ icon?: string; /** Optional badge to show on the action (e.g., notification count) */ badge?: number | string; }; /** * Represents an event item in the upcoming events list. */ export type EventItem = { /** Unique identifier for the event */ id: string | number; /** Current status of the event */ status: string; /** Event name/title */ name: string; /** Item kind for mixed feed */ type?: "event" | "activity"; /** Date in YYYY-MM-DD format */ date?: string; /** Event time (formatted string, HH:MM) */ time?: string; /** End time (formatted string, HH:MM) */ endTime?: string; /** Event/activity address or location */ address?: string; /** Number of participants */ participantsCount?: number; /** Optional event image URL */ imageUrl?: string; /** Minutes before start time when the check-in QR window opens */ qrReleaseOffsetMinutes?: number | null; /** Minutes after start time when the check-in QR window closes */ qrCheckinGraceMinutes?: number | null; /** Alias for qrReleaseOffsetMinutes (form state naming) */ checkinStartWindowMinutes?: number | null; /** Alias for qrCheckinGraceMinutes (form state naming) */ checkinEndWindowMinutes?: number | null; }; /** * Data structure returned by the useHomePage hook. * Contains processed/computed data for rendering the HomePage. */ export interface HomePageData { /** Personalized greeting message */ greeting: string; /** Formatted current date string */ currentDate: string; /** Processed user data */ user?: { profile: { firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; document: string; user?: { email: string; created_at?: string; }; contact?: { phone?: string; }; }; }; /** List of quick actions to display */ quickActions: QuickAction[]; /** Upcoming events list */ upcomingEvents?: EventItem[]; /** Function to format event time for display */ formatEventTime: (t: string) => string; /** Current medium approval status */ mediumStatus?: MediumStatus; /** Rejection message if medium was rejected */ rejectionMessage?: string; /** Whether to show calendar events (user is medium AND terreiro admin) */ showCalendarEvents: boolean; /** Calendar activities */ calendarActivities: CalendarItem[]; /** Calendar events */ calendarEvents: CalendarItem[]; /** Calendar ritual baths */ calendarRitualBaths: CalendarItem[]; /** Loading state for daily rituals */ isLoadingRituals: boolean; /** Selected date for daily ritual card */ selectedRitualDate?: string; /** Current calendar view mode */ calendarViewMode: CalendarViewMode; /** Current calendar status filter */ calendarStatusFilter: CalendarStatusFilter; /** Loading state for calendar */ isLoadingCalendar: boolean; } import * as z from "zod"; /** * Zod schema for dashboard statistics. * Validates stat cards displayed on the HomePage. */ export declare const HomePageStatSchema: z.ZodObject<{ /** Stat title/label */ title: z.ZodString; /** Stat value to display */ value: z.ZodString; /** Icon identifier (emoji or icon name) */ icon: z.ZodString; /** Theme color for the stat card */ color: z.ZodEnum<["primary", "secondary", "success", "warning", "error", "info"]>; }, "strip", z.ZodTypeAny, { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }, { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }>; /** * Zod schema for quick action buttons. * Validates quick action items displayed on the HomePage. */ export declare const HomePageQuickActionSchema: z.ZodObject<{ /** Unique identifier */ id: z.ZodString; /** Display title */ title: z.ZodString; /** Action description */ description: z.ZodString; /** Icon identifier */ icon: z.ZodString; /** Navigation route */ route: z.ZodString; /** Theme color */ color: z.ZodEnum<["primary", "secondary", "success", "warning", "error", "info"]>; /** Optional badge text */ badge: z.ZodOptional; }, "strip", z.ZodTypeAny, { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }, { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }>; /** * Zod schema for upcoming events. * Validates event items in the upcoming events list. */ export declare const HomePageUpcomingEventSchema: z.ZodObject<{ /** Unique event identifier */ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>; /** Event name */ name: z.ZodString; /** Item kind for mixed feed */ type: z.ZodOptional>; /** Event date (YYYY-MM-DD) */ date: z.ZodOptional; /** Event time (formatted string) */ time: z.ZodOptional; /** Event end time (formatted string) */ endTime: z.ZodOptional; /** Event/activity address */ address: z.ZodOptional; /** Number of participants */ participantsCount: z.ZodOptional; /** Event status */ status: z.ZodString; /** Minutes before start time when the check-in QR window opens */ qrReleaseOffsetMinutes: z.ZodOptional>; /** Minutes after start time when the check-in QR window closes */ qrCheckinGraceMinutes: z.ZodOptional>; /** Alias for qrReleaseOffsetMinutes */ checkinStartWindowMinutes: z.ZodOptional>; /** Alias for qrCheckinGraceMinutes */ checkinEndWindowMinutes: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }, { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }>; /** * Zod schema for recent activities. * Validates activity items in the recent activities feed. */ export declare const HomePageRecentActivitySchema: z.ZodObject<{ /** Unique activity identifier */ id: z.ZodNumber; /** Activity title */ title: z.ZodString; /** Activity type category */ type: z.ZodEnum<["event", "financial", "inventory", "member"]>; /** Activity description */ description: z.ZodString; /** Activity timestamp */ timestamp: z.ZodDate; /** Icon identifier */ icon: z.ZodString; }, "strip", z.ZodTypeAny, { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }, { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }>; /** * Zod schema for user profile information. * Validates the complete user profile including address, contact, and medium data. */ export declare const HomePageUserProfileProfileSchema: z.ZodObject<{ /** User's first name */ firstName: z.ZodString; /** User's last name */ lastName: z.ZodString; /** Birth date as ISO date string */ birthDate: z.ZodOptional; /** URL to user's avatar image */ avatarUrl: z.ZodString; /** Type of identification document */ documentType: z.ZodEnum<["CPF", "RG"]>; /** Document number */ document: z.ZodString; /** Creation date as ISO string */ created_at: z.ZodOptional; /** Last update date as ISO string */ updated_at: z.ZodOptional; /** Associated user account data */ user: z.ZodOptional>; }, "strip", z.ZodTypeAny, { email: string; created_at?: string | null | undefined; }, { email: string; created_at?: string | null | undefined; }>>; /** User address information */ address: z.ZodOptional; neighborhood: z.ZodString; city: z.ZodString; state: z.ZodString; zipCode: z.ZodString; country: z.ZodString; }, "strip", z.ZodTypeAny, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }>>; /** User contact information */ contact: z.ZodOptional>; }, "strip", z.ZodTypeAny, { phone: string; contact_person?: string | null | undefined; }, { phone: string; contact_person?: string | null | undefined; }>>; /** Medium-specific data (if user is a medium) */ medium: z.ZodOptional; /** Medium's rank in the hierarchy */ rank: z.ZodObject<{ id: z.ZodString; name: z.ZodString; level: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; level: number; }, { id: string; name: string; level: number; }>; /** Medium's role/function */ role: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; name: string; }, { id: string; name: string; }>; }, "strip", z.ZodTypeAny, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }>>; }, "strip", z.ZodTypeAny, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }>; /** * Zod schema for the complete user object. * Wraps the profile schema for validation. */ export declare const HomePageUser: z.ZodObject<{ /** User profile data */ profile: z.ZodObject<{ /** User's first name */ firstName: z.ZodString; /** User's last name */ lastName: z.ZodString; /** Birth date as ISO date string */ birthDate: z.ZodOptional; /** URL to user's avatar image */ avatarUrl: z.ZodString; /** Type of identification document */ documentType: z.ZodEnum<["CPF", "RG"]>; /** Document number */ document: z.ZodString; /** Creation date as ISO string */ created_at: z.ZodOptional; /** Last update date as ISO string */ updated_at: z.ZodOptional; /** Associated user account data */ user: z.ZodOptional>; }, "strip", z.ZodTypeAny, { email: string; created_at?: string | null | undefined; }, { email: string; created_at?: string | null | undefined; }>>; /** User address information */ address: z.ZodOptional; neighborhood: z.ZodString; city: z.ZodString; state: z.ZodString; zipCode: z.ZodString; country: z.ZodString; }, "strip", z.ZodTypeAny, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }>>; /** User contact information */ contact: z.ZodOptional>; }, "strip", z.ZodTypeAny, { phone: string; contact_person?: string | null | undefined; }, { phone: string; contact_person?: string | null | undefined; }>>; /** Medium-specific data (if user is a medium) */ medium: z.ZodOptional; /** Medium's rank in the hierarchy */ rank: z.ZodObject<{ id: z.ZodString; name: z.ZodString; level: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; level: number; }, { id: string; name: string; level: number; }>; /** Medium's role/function */ role: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; name: string; }, { id: string; name: string; }>; }, "strip", z.ZodTypeAny, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }>>; }, "strip", z.ZodTypeAny, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }>; }, "strip", z.ZodTypeAny, { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; }, { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; }>; /** * Zod schema for HomePage props validation. * Used for runtime validation of component props. */ export declare const HomePagePropsSchema: z.ZodObject<{ /** User data */ user: z.ZodOptional; /** URL to user's avatar image */ avatarUrl: z.ZodString; /** Type of identification document */ documentType: z.ZodEnum<["CPF", "RG"]>; /** Document number */ document: z.ZodString; /** Creation date as ISO string */ created_at: z.ZodOptional; /** Last update date as ISO string */ updated_at: z.ZodOptional; /** Associated user account data */ user: z.ZodOptional>; }, "strip", z.ZodTypeAny, { email: string; created_at?: string | null | undefined; }, { email: string; created_at?: string | null | undefined; }>>; /** User address information */ address: z.ZodOptional; neighborhood: z.ZodString; city: z.ZodString; state: z.ZodString; zipCode: z.ZodString; country: z.ZodString; }, "strip", z.ZodTypeAny, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }, { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; }>>; /** User contact information */ contact: z.ZodOptional>; }, "strip", z.ZodTypeAny, { phone: string; contact_person?: string | null | undefined; }, { phone: string; contact_person?: string | null | undefined; }>>; /** Medium-specific data (if user is a medium) */ medium: z.ZodOptional; /** Medium's rank in the hierarchy */ rank: z.ZodObject<{ id: z.ZodString; name: z.ZodString; level: z.ZodNumber; }, "strip", z.ZodTypeAny, { id: string; name: string; level: number; }, { id: string; name: string; level: number; }>; /** Medium's role/function */ role: z.ZodObject<{ id: z.ZodString; name: z.ZodString; }, "strip", z.ZodTypeAny, { id: string; name: string; }, { id: string; name: string; }>; }, "strip", z.ZodTypeAny, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }, { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; }>>; }, "strip", z.ZodTypeAny, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }, { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }>; }, "strip", z.ZodTypeAny, { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; }, { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; }>>; /** Dashboard statistics */ stats: z.ZodOptional; }, "strip", z.ZodTypeAny, { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }, { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }>, "many">>; /** Whether user is admin */ isAdmin: z.ZodDefault>; /** Whether the user is on a personal (non-terreiro) profile */ isPersonalProfile: z.ZodDefault>; /** Show the Ingressos quick action */ canPublishTickets: z.ZodDefault>; /** Quick action buttons */ quickActions: z.ZodOptional; /** Optional badge text */ badge: z.ZodOptional; }, "strip", z.ZodTypeAny, { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }, { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }>, "many">>; /** Upcoming events list */ upcomingEvents: z.ZodOptional; /** Event name */ name: z.ZodString; /** Item kind for mixed feed */ type: z.ZodOptional>; /** Event date (YYYY-MM-DD) */ date: z.ZodOptional; /** Event time (formatted string) */ time: z.ZodOptional; /** Event end time (formatted string) */ endTime: z.ZodOptional; /** Event/activity address */ address: z.ZodOptional; /** Number of participants */ participantsCount: z.ZodOptional; /** Event status */ status: z.ZodString; /** Minutes before start time when the check-in QR window opens */ qrReleaseOffsetMinutes: z.ZodOptional>; /** Minutes after start time when the check-in QR window closes */ qrCheckinGraceMinutes: z.ZodOptional>; /** Alias for qrReleaseOffsetMinutes */ checkinStartWindowMinutes: z.ZodOptional>; /** Alias for qrCheckinGraceMinutes */ checkinEndWindowMinutes: z.ZodOptional>; }, "strip", z.ZodTypeAny, { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }, { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }>, "many">>; /** Recent activities feed */ recentActivities: z.ZodOptional; /** Activity description */ description: z.ZodString; /** Activity timestamp */ timestamp: z.ZodDate; /** Icon identifier */ icon: z.ZodString; }, "strip", z.ZodTypeAny, { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }, { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }>, "many">>; /** Navigation callback */ onNavigate: z.ZodOptional, z.ZodVoid>>; /** Profile click callback */ onProfileClick: z.ZodOptional, z.ZodVoid>>; /** Notification click callback */ onNotificationClick: z.ZodOptional, z.ZodVoid>>; /** Number of unread notifications to show on the bell icon badge */ notificationCount: z.ZodOptional; /** Brief notification items for bell quick panel */ notificationItems: z.ZodOptional; terreiroId: z.ZodOptional; }, "strip", z.ZodTypeAny, { id: string; message: string; type: string; timestamp: string | Date; read: boolean; terreiroId?: string | undefined; }, { id: string; message: string; type: string; timestamp: string | Date; read: boolean; terreiroId?: string | undefined; }>, "many">>; /** Callback when "Ver todas" is clicked in bell panel */ onViewAllNotifications: z.ZodOptional, z.ZodVoid>>; /** Search click callback */ onSearchClick: z.ZodOptional, z.ZodVoid>>; /** Settings click callback */ onSettingsClick: z.ZodOptional, z.ZodVoid>>; /** Onboarding info click callback */ onOnboardingInfoClick: z.ZodOptional, z.ZodVoid>>; /** Optional custom onboarding info icon */ onboardingInfoIcon: z.ZodOptional>; /** Refresh callback */ onRefresh: z.ZodOptional, z.ZodVoid>>; }, "strip", z.ZodTypeAny, { isAdmin: boolean; isPersonalProfile: boolean; canPublishTickets: boolean; user?: { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; } | undefined; onRefresh?: (() => void) | undefined; onProfileClick?: (() => void) | undefined; onOnboardingInfoClick?: (() => void) | undefined; onboardingInfoIcon?: ReactNode; quickActions?: { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }[] | undefined; onNotificationClick?: (() => void) | undefined; notificationCount?: number | undefined; notificationItems?: { id: string; message: string; type: string; timestamp: string | Date; read: boolean; terreiroId?: string | undefined; }[] | undefined; onViewAllNotifications?: (() => void) | undefined; stats?: { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }[] | undefined; upcomingEvents?: { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }[] | undefined; recentActivities?: { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }[] | undefined; onNavigate?: ((args_0: string) => void) | undefined; onSearchClick?: (() => void) | undefined; onSettingsClick?: (() => void) | undefined; }, { isAdmin?: boolean | undefined; user?: { profile: { document: string; firstName: string; lastName: string; avatarUrl: string; documentType: "CPF" | "RG"; address?: { number: string; id: string; country: string; street: string; neighborhood: string; city: string; state: string; zipCode: string; complement?: string | undefined; } | undefined; medium?: { id: string; role: { id: string; name: string; }; status: "ACTIVE" | "WAITING_APPROVAL" | "INACTIVE" | "SUSPENDED" | "TRANSFERRED" | "DECEASED" | "RETIRED" | "ON_LEAVE" | "EXPELLED" | "INITIATING" | "VISITOR"; rank: { id: string; name: string; level: number; }; initiationDate: string; } | undefined; birthDate?: string | undefined; user?: { email: string; created_at?: string | null | undefined; } | undefined; contact?: { phone: string; contact_person?: string | null | undefined; } | undefined; created_at?: string | undefined; updated_at?: string | undefined; }; } | undefined; isPersonalProfile?: boolean | undefined; onRefresh?: (() => void) | undefined; onProfileClick?: (() => void) | undefined; onOnboardingInfoClick?: (() => void) | undefined; onboardingInfoIcon?: ReactNode; quickActions?: { title: string; id: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; icon: string; description: string; route: string; badge?: string | undefined; }[] | undefined; onNotificationClick?: (() => void) | undefined; notificationCount?: number | undefined; notificationItems?: { id: string; message: string; type: string; timestamp: string | Date; read: boolean; terreiroId?: string | undefined; }[] | undefined; onViewAllNotifications?: (() => void) | undefined; stats?: { title: string; color: "warning" | "primary" | "secondary" | "error" | "info" | "success"; value: string; icon: string; }[] | undefined; canPublishTickets?: boolean | undefined; upcomingEvents?: { id: string | number; status: string; name: string; address?: string | undefined; time?: string | undefined; type?: "event" | "activity" | undefined; date?: string | undefined; endTime?: string | undefined; qrReleaseOffsetMinutes?: number | null | undefined; qrCheckinGraceMinutes?: number | null | undefined; checkinStartWindowMinutes?: number | null | undefined; checkinEndWindowMinutes?: number | null | undefined; participantsCount?: number | undefined; }[] | undefined; recentActivities?: { title: string; id: number; type: "event" | "member" | "financial" | "inventory"; icon: string; description: string; timestamp: Date; }[] | undefined; onNavigate?: ((args_0: string) => void) | undefined; onSearchClick?: (() => void) | undefined; onSettingsClick?: (() => void) | undefined; }>; /** Type for dashboard statistics, inferred from schema */ export type HomePageStat = z.infer; /** Type for quick action buttons, inferred from schema */ export type HomePageQuickAction = z.infer; /** Type for upcoming events, inferred from schema */ export type HomePageUpcomingEvent = z.infer; /** Type for recent activities, inferred from schema */ export type HomePageRecentActivity = z.infer; /** Type for user object, inferred from schema */ export type HomePageUser = z.infer; /** Type for user profile, inferred from schema */ export type HomePageUserProfile = z.infer;