feat(itinerary): add custom itinerary items with drag-to-reorder

- Add CustomItineraryItem domain model with sortOrder for ordering
- Add CKCustomItineraryItem CloudKit wrapper for persistence
- Create CustomItemService for CRUD operations
- Create CustomItemSubscriptionService for real-time sync
- Add AppDelegate for push notification handling
- Add AddItemSheet for creating/editing items
- Add CustomItemRow with drag handle
- Update TripDetailView with continuous vertical timeline
- Enable drag-to-reorder using .draggable/.dropDestination
- Add inline "Add" buttons after games and travel segments

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-16 00:31:44 -06:00
parent b534ca771b
commit 495ef88303
13 changed files with 1302 additions and 33 deletions

View File

@@ -315,7 +315,7 @@ struct SavedTripCard: View {
var body: some View {
NavigationLink {
TripDetailView(trip: trip)
TripDetailView(trip: trip, games: savedTrip.games, allowCustomItems: true)
} label: {
HStack(spacing: Theme.Spacing.md) {
// Route preview icon
@@ -555,7 +555,7 @@ struct SavedTripsListView: View {
ForEach(Array(sortedTrips.enumerated()), id: \.element.id) { index, savedTrip in
if let trip = savedTrip.trip {
NavigationLink {
TripDetailView(trip: trip)
TripDetailView(trip: trip, games: savedTrip.games, allowCustomItems: true)
} label: {
SavedTripListRow(trip: trip)
}