package templates import ( "time" "github.com/a-h/templ" ) type User struct { ID string Username string Email string Role string Theme string FirstName string LastName string CreatedAt time.Time Token string Timezone string } type PageData struct { User User CurrentPage string } type CollectionData struct { ID string Name string Description string Color string Icon string IsSystem bool } type LibraryData struct { ID string Name string Description string TypeName string TypeValue string MediaCount int64 FolderCount int } type FolderData struct { FolderPath string } type DirEntry struct { Name string Path string } type UserVisibilityData struct { UserID string Username string Email string IsVisible bool } type AdminStats struct { LibraryCount int MediaCount int UserCount int DeviceCount int } type ScanSettingsData struct { AutoScanEnabled bool ScanPollIntervalSeconds int } // SettingEntry mirrors database.SettingEntry for the admin UI. Kept as a // template-local type so the templates package does not import database. type SettingEntry struct { Key string Value string Type string Min string Max string RequiresRestart bool Category string Group string Description string IsDefault bool } // SettingGroup is a labeled cluster of related settings rendered as a // sub-section within a tunable-settings card. type SettingGroup struct { Name string Entries []SettingEntry } type SeriesCardData struct { Name string BookCount int64 TotalInSeries int CoverPaths []string } type PendingRegistrationData struct { RegistrationID string DeviceName string DeviceType string ExpiresAt string } type ConflictData struct { ID string MediaItemID string MediaItemTitle string ConflictType string ResolutionStatus string CreatedAt string ResolutionData map[string]interface{} ResolvedBy string ResolvedAt string } type QueueItemData struct { ID string DeviceID string DeviceName string DeviceType string SyncType string Status string Priority int32 Attempts int32 CreatedAt string } type DeviceShelfMappingData struct { ID string CollectionID string CollectionName string DeviceShelfName string SyncDirection string CreatedAt string } type UnlinkedBookData struct { ProgressID string DeviceID string DeviceType string DeviceName string FilePath string SHA256 string TitleFromDevice string LastSyncTime string ConfidenceScore float64 PotentialMatches []PotentialMatchData } type PotentialMatchData struct { MediaItemID string Title string Author string CoverImagePath string MatchMethod string Confidence float64 } // Documentation types type Navigation struct { Sections []NavSection } type NavSection struct { Title string Items []NavItem Collapsed bool } type NavItem struct { Title string URL string Icon string } type Document struct { Title string Content string TOC []TOCItem Breadcrumb []BreadcrumbItem Category string SourceFile string } type TOCItem struct { Level int Title string Anchor string } type BreadcrumbItem struct { Title string URL string } // UnsafeHTML is used for rendering raw HTML (like rendered markdown) type UnsafeHTML string // ToComponent converts UnsafeHTML to a templ Component func (u UnsafeHTML) ToComponent() templ.Component { return templ.Raw(string(u)) } // Reader types type ReaderMetadata struct { MediaItemID string `json:"media_item_id"` Title string `json:"title"` Author string `json:"author"` CoverImagePath string `json:"cover_image_path"` LibraryType string `json:"library_type"` MimeType string `json:"mime_type"` FilePath string `json:"file_path"` TotalPages int `json:"total_pages"` ChapterCount int `json:"chapter_count"` FormatGroup string `json:"format_group"` MangaType string `json:"manga_type"` ReadingDirection string `json:"reading_direction"` FileURL string `json:"file_url"` LibraryID string `json:"library_id"` TotalCharacters int64 `json:"total_characters"` EstimatedPages int `json:"estimated_pages"` } type ReadingProgress struct { ID string MediaItemID string UserID string CurrentPage int TotalPages int Percentage float64 EpubCfi string LastReadAt time.Time Chapter int ChapterProgress float64 FormatGroup string } type Bookmark struct { ID string MediaItemID string UserID string PageNumber *int ChapterNumber *int CfiPosition string Title string Position string Notes string CreatedAt time.Time } // ProcessingIssueData - Processing issue types type ProcessingIssueData struct { ID string MediaItemID string Title string FilePath string FormatGroup string LibraryTypeName string IssueType string IssueDescription string Severity string CreatedAt time.Time } type IssueStats struct { ErrorCount int64 WarningCount int64 InfoCount int64 }