diff --git a/web/templates/watch.templ b/web/templates/watch.templ
index 716b801..eca0765 100644
--- a/web/templates/watch.templ
+++ b/web/templates/watch.templ
@@ -1,52 +1,16 @@
package templates
import (
- "encoding/json"
"fmt"
- "mal/internal/jikan"
- "mal/internal/shared/ui"
- "net/url"
- "strconv"
+ "mal/integrations/jikan"
+ "mal/web/components"
+ "mal/web/components/ui"
+ "mal/web/components/watch"
+ "mal/web/components/watchlist"
+ "mal/web/shared"
)
-// WatchPageData holds the data needed for the watch page
-type WatchPageData struct {
- MalID int
- Title string
- TitleEnglish string
- TitleJapanese string
- ImageURL string
- Airing bool
- CurrentEpisode string
- TotalEpisodes int
- StartTimeSeconds float64
- CurrentStatus string
- InitialMode string
- AvailableModes []string
- ModeSources map[string]ModeSource
- Segments []SkipSegment
-}
-
-// ModeSource represents a stream source for a specific mode (dub/sub)
-type ModeSource struct {
- Token string `json:"token"`
- Subtitles []SubtitleItem `json:"subtitles"`
-}
-
-// SubtitleItem represents a subtitle track
-type SubtitleItem struct {
- Lang string `json:"lang"`
- Token string `json:"token"`
-}
-
-// SkipSegment represents a skippable segment (intro/outro)
-type SkipSegment struct {
- Type string `json:"type"`
- Start float64 `json:"start"`
- End float64 `json:"end"`
-}
-
-templ WatchPage(anime jikan.Anime, data WatchPageData) {
+templ WatchPage(anime jikan.Anime, data shared.WatchPageData) {
@Layout(fmt.Sprintf("%s - episode %s", anime.DisplayTitle(), data.CurrentEpisode), true) {
@@ -61,18 +25,18 @@ templ WatchPage(anime jikan.Anime, data WatchPageData) {
hx-trigger="load"
class="overflow-y-auto flex-1 [&::-webkit-scrollbar]:hidden"
>
- @LoadingIndicatorSmall()
+ @ui.LoadingIndicatorSmall()