Reorganize targets into LuminateUI with Components and Utilities

This commit is contained in:
Brendan Szymanski 2026-06-15 22:36:41 -04:00
parent cd2c435a04
commit 662ec0caac
19 changed files with 56 additions and 63 deletions

View file

@ -59,26 +59,7 @@ let package = Package(
.product(name: "Adwaita", package: "adwaita-swift"), .product(name: "Adwaita", package: "adwaita-swift"),
] ]
), ),
.target(
name: "LuminateHome",
dependencies: [
"LuminateCore",
"LuminateDI",
"LuminateUI",
"LuminateObservationMacros",
.product(name: "Adwaita", package: "adwaita-swift"),
]
),
.target(
name: "LuminateLibrary",
dependencies: [
"LuminateCore",
"LuminateDI",
"LuminateUI",
"LuminateObservationMacros",
.product(name: "Adwaita", package: "adwaita-swift"),
]
),
.target( .target(
name: "LuminatePlayer", name: "LuminatePlayer",
dependencies: [ dependencies: [
@ -92,8 +73,6 @@ let package = Package(
.executableTarget( .executableTarget(
name: "Luminate", name: "Luminate",
dependencies: [ dependencies: [
"LuminateHome",
"LuminateLibrary",
"LuminatePlayer", "LuminatePlayer",
"LuminateUI", "LuminateUI",
"LuminateDI", "LuminateDI",

View file

@ -2,8 +2,6 @@ import Adwaita
import Foundation import Foundation
import LuminateCore import LuminateCore
import LuminateDI import LuminateDI
import LuminateHome
import LuminateLibrary
import LuminatePlayer import LuminatePlayer
import LuminateUI import LuminateUI
@ -20,6 +18,7 @@ struct Luminate: App {
if let store = try? SQLiteStore(dbURL: SQLiteStore.defaultDatabaseURL()) { if let store = try? SQLiteStore(dbURL: SQLiteStore.defaultDatabaseURL()) {
DIContainer.shared.register(\.persistence, value: store) DIContainer.shared.register(\.persistence, value: store)
} }
DIContainer.shared.register(\.imageService, value: ImageService())
DIContainer.shared.register(\.pageAnimationTracker, value: PageAnimationTracker()) DIContainer.shared.register(\.pageAnimationTracker, value: PageAnimationTracker())
} }
@ -41,9 +40,6 @@ struct Luminate: App {
ServerSetupView { client, id in ServerSetupView { client, id in
DIContainer.shared.register(\.client, value: client) DIContainer.shared.register(\.client, value: client)
DIContainer.shared.register(\.userId, value: id) DIContainer.shared.register(\.userId, value: id)
DIContainer.shared.register(\.imageService, value: ImageService())
DIContainer.shared.register(
\.pageAnimationTracker, value: PageAnimationTracker())
self.client = client self.client = client
self.userId = id self.userId = id
@ -75,8 +71,6 @@ struct Luminate: App {
DIContainer.shared.register(\.client, value: client) DIContainer.shared.register(\.client, value: client)
DIContainer.shared.register(\.userId, value: auth.userId) DIContainer.shared.register(\.userId, value: auth.userId)
DIContainer.shared.register(\.imageService, value: ImageService())
DIContainer.shared.register(\.pageAnimationTracker, value: PageAnimationTracker())
self.client = client self.client = client
self.userId = auth.userId self.userId = auth.userId

View file

@ -1,6 +1,7 @@
import Adwaita import Adwaita
import LuminateCore import LuminateCore
import LuminateDI import LuminateDI
import LuminateUI
public struct HomeView: View { public struct HomeView: View {

View file

@ -7,6 +7,7 @@
import Adwaita import Adwaita
import LuminateCore import LuminateCore
import LuminateUI
public struct LibraryPage: View { public struct LibraryPage: View {

View file

@ -1,24 +0,0 @@
import Adwaita
import Foundation
import LuminateCore
struct LibraryGrid: View {
var libraries: [Components.Schemas.BaseItemDto]
@Binding var navigation: NavigationStack<Page>
var title: String?
var view: Body {
VStack(spacing: 16) {
Text(title ?? "Libraries")
.title3()
.halign(.start)
.padding(10, .horizontal)
FlowBox(libraries) { library in
HomePosterCell(item: library)
}
.columnSpacing(16)
.rowSpacing(16)
}
}
}

View file

@ -1,4 +0,0 @@
import Adwaita
import LuminateCore
public struct LuminateLibrary {}

View file

@ -0,0 +1,34 @@
import Adwaita
import Foundation
import LuminateCore
public struct LibraryGrid: View {
public var libraries: [Components.Schemas.BaseItemDto]
@Binding public var navigation: NavigationStack<Page>
public var title: String?
public init(
libraries: [Components.Schemas.BaseItemDto],
navigation: Binding<NavigationStack<Page>>,
title: String? = nil
) {
self.libraries = libraries
_navigation = navigation
self.title = title
}
public var view: Body {
VStack(spacing: 16) {
Text(title ?? "Libraries")
.title3()
.halign(.start)
.padding(10, .horizontal)
FlowBox(libraries) { library in
HomePosterCell(item: library)
}
.columnSpacing(16)
.rowSpacing(16)
}
}
}

View file

@ -2,14 +2,26 @@ import Adwaita
import Foundation import Foundation
import LuminateCore import LuminateCore
struct MediaRow: View { public struct MediaRow: View {
var title: String public var title: String
var items: [Components.Schemas.BaseItemDto] public var items: [Components.Schemas.BaseItemDto]
@Binding var navigation: NavigationStack<Page> @Binding public var navigation: NavigationStack<Page>
var onSeeAll: (() -> Void)? public var onSeeAll: (() -> Void)?
var view: Body { public init(
title: String,
items: [Components.Schemas.BaseItemDto],
navigation: Binding<NavigationStack<Page>>,
onSeeAll: (() -> Void)? = nil
) {
self.title = title
self.items = items
_navigation = navigation
self.onSeeAll = onSeeAll
}
public var view: Body {
VStack(spacing: 16) { VStack(spacing: 16) {
HStack { HStack {
Text(title) Text(title)