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:
Trey t
2026-01-12 22:43:33 -06:00
parent f8204007e6
commit c0f1645434
21 changed files with 544 additions and 460 deletions

View File

@@ -0,0 +1,37 @@
//
// LoadingPlaceholderTests.swift
// SportsTimeTests
//
import Testing
import SwiftUI
@testable import SportsTime
struct LoadingPlaceholderTests {
@Test func rectangleHasCorrectDimensions() {
let rect = LoadingPlaceholder.rectangle(width: 100, height: 20)
#expect(rect.width == 100)
#expect(rect.height == 20)
}
@Test func circleHasCorrectDiameter() {
let circle = LoadingPlaceholder.circle(diameter: 40)
#expect(circle.diameter == 40)
}
@Test func capsuleHasCorrectDimensions() {
let capsule = LoadingPlaceholder.capsule(width: 80, height: 24)
#expect(capsule.width == 80)
#expect(capsule.height == 24)
}
@Test func animationCycleDurationIsCorrect() {
#expect(LoadingPlaceholder.animationDuration == 1.2)
}
@Test func opacityRangeIsSubtle() {
#expect(LoadingPlaceholder.minOpacity == 0.3)
#expect(LoadingPlaceholder.maxOpacity == 0.5)
}
}