feat(ui): replace loading indicators with Apple-style LoadingSpinner
- Add LoadingSpinner component with small/medium/large sizes using system gray color - Add LoadingPlaceholder for skeleton loading states - Add LoadingSheet for full-screen blocking overlays - Replace ThemedSpinner/ThemedSpinnerCompact across all views - Remove deprecated loading components from AnimatedComponents.swift - Delete LoadingTextGenerator.swift - Fix PhotoImportView layout to fill full width Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -420,7 +420,7 @@ struct TripCreationView: View {
|
||||
ThemedSection(title: "Select Games") {
|
||||
if viewModel.isLoadingGames || viewModel.availableGames.isEmpty {
|
||||
HStack(spacing: Theme.Spacing.sm) {
|
||||
ThemedSpinnerCompact(size: 20)
|
||||
LoadingSpinner(size: .small)
|
||||
Text("Loading games...")
|
||||
.font(.body)
|
||||
.foregroundStyle(Theme.textSecondary(colorScheme))
|
||||
@@ -865,14 +865,7 @@ struct TripCreationView: View {
|
||||
}
|
||||
|
||||
private var planningOverlay: some View {
|
||||
ZStack {
|
||||
Color.black.opacity(0.5)
|
||||
.ignoresSafeArea()
|
||||
|
||||
PlanningProgressView()
|
||||
.padding(40)
|
||||
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 24))
|
||||
}
|
||||
LoadingSheet(label: "Planning trip")
|
||||
}
|
||||
|
||||
private var planButton: some View {
|
||||
@@ -1219,7 +1212,7 @@ struct LazyTeamSection: View {
|
||||
Spacer()
|
||||
|
||||
if isLoading {
|
||||
ThemedSpinnerCompact(size: 14)
|
||||
LoadingSpinner(size: .small)
|
||||
} else if selectedCount > 0 {
|
||||
Text("\(selectedCount)")
|
||||
.font(.caption2)
|
||||
@@ -1245,7 +1238,7 @@ struct LazyTeamSection: View {
|
||||
if isExpanded {
|
||||
if isLoading {
|
||||
HStack {
|
||||
ThemedSpinnerCompact(size: 16)
|
||||
LoadingSpinner(size: .small)
|
||||
Text("Loading games...")
|
||||
.font(.caption)
|
||||
.foregroundStyle(Theme.textMuted(colorScheme))
|
||||
@@ -1407,7 +1400,7 @@ struct LocationSearchSheet: View {
|
||||
.textFieldStyle(.plain)
|
||||
.autocorrectionDisabled()
|
||||
if isSearching {
|
||||
ThemedSpinnerCompact(size: 16)
|
||||
LoadingSpinner(size: .small)
|
||||
} else if !searchText.isEmpty {
|
||||
Button {
|
||||
searchText = ""
|
||||
@@ -2032,7 +2025,7 @@ struct TripOptionCard: View {
|
||||
.transition(.opacity)
|
||||
} else if isLoadingDescription {
|
||||
HStack(spacing: 4) {
|
||||
ThemedSpinnerCompact(size: 12)
|
||||
LoadingSpinner(size: .small)
|
||||
Text("Generating...")
|
||||
.font(.caption2)
|
||||
.foregroundStyle(Theme.textMuted(colorScheme))
|
||||
|
||||
Reference in New Issue
Block a user