diff --git a/.DS_Store b/.DS_Store index 8cbffa7..138dd63 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate b/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate index c7b2795..805a307 100644 Binary files a/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate and b/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Cuckoo_swiftUI/.DS_Store b/Cuckoo_swiftUI/.DS_Store new file mode 100644 index 0000000..d4a5af8 Binary files /dev/null and b/Cuckoo_swiftUI/.DS_Store differ diff --git a/Cuckoo_swiftUI/Cuckoo/.DS_Store b/Cuckoo_swiftUI/Cuckoo/.DS_Store new file mode 100644 index 0000000..d4a5af8 Binary files /dev/null and b/Cuckoo_swiftUI/Cuckoo/.DS_Store differ diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.pbxproj b/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.pbxproj index 58922fa..2c470ce 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.pbxproj +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.pbxproj @@ -16,7 +16,11 @@ 7A7F87A02AEF559E00F14B11 /* CuckooUITestsLaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A7F879F2AEF559E00F14B11 /* CuckooUITestsLaunchTests.swift */; }; A82451F02AFE69A600EB4F54 /* AddMemoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82451EF2AFE69A600EB4F54 /* AddMemoView.swift */; }; A82451F22B09F2B300EB4F54 /* NavView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82451F12B09F2B300EB4F54 /* NavView.swift */; }; +<<<<<<< Updated upstream A82451F42B09F4CE00EB4F54 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82451F32B09F4CE00EB4F54 /* SettingsView.swift */; }; +======= + A82451F62B1563B000EB4F54 /* AlarmView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A82451F52B1563B000EB4F54 /* AlarmView.swift */; }; +>>>>>>> Stashed changes A8BC238F2AFA013B00A2F87F /* MainContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BC238E2AFA013B00A2F87F /* MainContainerView.swift */; }; A8BC23912AFA014B00A2F87F /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A8BC23902AFA014B00A2F87F /* MainView.swift */; }; /* End PBXBuildFile section */ @@ -51,7 +55,11 @@ 7A7F879F2AEF559E00F14B11 /* CuckooUITestsLaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CuckooUITestsLaunchTests.swift; sourceTree = ""; }; A82451EF2AFE69A600EB4F54 /* AddMemoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddMemoView.swift; sourceTree = ""; }; A82451F12B09F2B300EB4F54 /* NavView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavView.swift; sourceTree = ""; }; +<<<<<<< Updated upstream A82451F32B09F4CE00EB4F54 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; +======= + A82451F52B1563B000EB4F54 /* AlarmView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmView.swift; sourceTree = ""; }; +>>>>>>> Stashed changes A8BC238E2AFA013B00A2F87F /* MainContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainContainerView.swift; sourceTree = ""; }; A8BC23902AFA014B00A2F87F /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -81,6 +89,78 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ +<<<<<<< Updated upstream +======= + 00652D9D2B144047004C3345 /* SettingViews */ = { + isa = PBXGroup; + children = ( + 00652D952B143E70004C3345 /* SettingTagView.swift */, + 00652D972B143E84004C3345 /* SettingView.swift */, + 00652D992B143F73004C3345 /* SettingAlarmPeriodView.swift */, + 00652D9B2B143FAE004C3345 /* SettingProfileView.swift */, + ); + path = SettingViews; + sourceTree = ""; + }; + 00652D9E2B14408B004C3345 /* Components */ = { + isa = PBXGroup; + children = ( + 00A73E0E2B0C583900B59084 /* ViewComponents.swift */, + 00652D9F2B1440BC004C3345 /* Dummy.swift */, + 00652DA12B1443AB004C3345 /* functions.swift */, + ); + path = Components; + sourceTree = ""; + }; + 00A73DF72B0C301200B59084 /* Views */ = { + isa = PBXGroup; + children = ( + 00652D9E2B14408B004C3345 /* Components */, + 00652D9D2B144047004C3345 /* SettingViews */, + 00A73E0C2B0C519100B59084 /* InitialViews */, + A8BC23902AFA014B00A2F87F /* MainView.swift */, + A82451EF2AFE69A600EB4F54 /* AddMemoView.swift */, + A8BC238E2AFA013B00A2F87F /* MainContainerView.swift */, + A82451F12B09F2B300EB4F54 /* NavView.swift */, + 00652D932B143E51004C3345 /* MemoDetailView.swift */, + A82451F52B1563B000EB4F54 /* AlarmView.swift */, + ); + path = Views; + sourceTree = ""; + }; + 00A73DF82B0C318600B59084 /* ViewModels */ = { + isa = PBXGroup; + children = ( + 00A73DFA2B0C31D700B59084 /* AddMemoViewModel.swift */, + 00A73E022B0C35F300B59084 /* MainContainerViewModel.swift */, + ); + path = ViewModels; + sourceTree = ""; + }; + 00A73DF92B0C319800B59084 /* Models */ = { + isa = PBXGroup; + children = ( + 00A73DFC2B0C323800B59084 /* Memo.swift */, + 00A73DFE2B0C324200B59084 /* User.swift */, + 00A73E002B0C35D300B59084 /* Tag.swift */, + 00A73E042B0C37A600B59084 /* MemoRepository.swift */, + 00A73E062B0C37CB00B59084 /* UserRepository.swift */, + 00A73E082B0C37DC00B59084 /* TagRepository.swift */, + ); + path = Models; + sourceTree = ""; + }; + 00A73E0C2B0C519100B59084 /* InitialViews */ = { + isa = PBXGroup; + children = ( + 00A73E0A2B0C40B700B59084 /* 1_Init_AddNameAndTagView.swift */, + 00652D8F2B12E2DB004C3345 /* 2_Init_AddAlarmPresetView.swift */, + 00652D912B12FA1A004C3345 /* 3_Init_AddInfoConfirmView.swift */, + ); + path = InitialViews; + sourceTree = ""; + }; +>>>>>>> Stashed changes 7A7F87762AEF559C00F14B11 = { isa = PBXGroup; children = ( @@ -275,6 +355,11 @@ A82451F22B09F2B300EB4F54 /* NavView.swift in Sources */, 7A7F87852AEF559C00F14B11 /* ContentView.swift in Sources */, A8BC23912AFA014B00A2F87F /* MainView.swift in Sources */, +<<<<<<< Updated upstream +======= + 00652DA22B1443AB004C3345 /* functions.swift in Sources */, + A82451F62B1563B000EB4F54 /* AlarmView.swift in Sources */, +>>>>>>> Stashed changes A82451F02AFE69A600EB4F54 /* AddMemoView.swift in Sources */, A82451F42B09F4CE00EB4F54 /* SettingsView.swift in Sources */, A8BC238F2AFA013B00A2F87F /* MainContainerView.swift in Sources */, @@ -455,7 +540,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = softwarestudio2.Cuckoo; + PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.hyu2023.Cuckoo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; @@ -484,7 +569,7 @@ "@executable_path/Frameworks", ); MARKETING_VERSION = 1.0; - PRODUCT_BUNDLE_IDENTIFIER = softwarestudio2.Cuckoo; + PRODUCT_BUNDLE_IDENTIFIER = com.codershigh.hyu2023.Cuckoo; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate b/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate index 5939aa3..0cc72fb 100644 Binary files a/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate and b/Cuckoo_swiftUI/Cuckoo/Cuckoo.xcodeproj/project.xcworkspace/xcuserdata/jjangddu.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/CuckooApp.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/CuckooApp.swift index 7443610..7358ed6 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo/CuckooApp.swift +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/CuckooApp.swift @@ -11,7 +11,7 @@ import SwiftUI struct CuckooApp: App { var body: some Scene { WindowGroup { - NavView() + MainView() } } } diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainContainerView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainContainerView.swift index 395db24..8147a83 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainContainerView.swift +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainContainerView.swift @@ -9,19 +9,39 @@ import SwiftUI struct MainContainerView: View { let title: String - let details: [String] + let detail: String + let tag: String + let timeAgo: String + let memoURL: String let imageName: String var body: some View { HStack { - VStack(alignment: .leading, spacing: 8) { + VStack(alignment: .leading, spacing: 5) { Text(title) - .font(.headline) - .fontWeight(.bold) - ForEach(details, id: \.self) { detail in - Text(detail) - .font(.subheadline) + .font(.system(size:14, weight:.bold)) + .frame(maxWidth: 133, alignment: .leading) + Text(detail) + .font(.system(size:12, weight: .regular)) + .frame(maxWidth: 133,maxHeight: 60, alignment: .topLeading) + .foregroundColor(Color(red: 0.70, green: 0.70, blue: 0.70)) + VStack(alignment: .leading, spacing: 0){ + HStack(spacing:0){ + Text(tag) + .font(.system(size: 8, weight:.light)) + .foregroundColor(Color(red: 0.70, green: 0.70, blue: 0.70)) + Text(timeAgo) + .font(.system(size: 8, weight:.light)) + .foregroundColor(Color(red: 0.70, green: 0.70, blue: 0.70)) + } + Text(memoURL) + .font(.system(size: 8, weight:.light)) + .underline() + .foregroundColor(Color(red: 0.70, green: 0.70, blue: 0.70)) + .frame(maxWidth:133, alignment:.leading) } + + } Spacer() Image(systemName: imageName) @@ -36,6 +56,11 @@ struct MainContainerView: View { struct Item { let title: String - let details: [String] + let detail: String + let tag: String + let timeAgo: String + let memoURL: String let imageName: String } + + diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainView.swift index 594e164..e40f74c 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainView.swift +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/MainView.swift @@ -15,8 +15,10 @@ struct MainView: View { @State private var text = "Initial Text" @State private var isEditing = false @State private var isPresentingMemoSheet = false + @State private var isPresentingSettingSheet = false @State private var newMemoTitle = "" @State private var newMemoDetails = "" + //메모들을 위한 item @@ -56,7 +58,7 @@ struct MainView: View { Text("\(itemCount)개의 메모") .frame(width:110) .padding([.leading],10) - + } } @@ -67,23 +69,26 @@ struct MainView: View { .resizable() .foregroundColor(.gray) .frame(width: 30, height: 30) - + } Menu { - Button("Cancel", action: {}) - Button("Add Memo", action: { - isPresentingMemoSheet.toggle() - }) + Button("Settings", action: { + self.isPresentingSettingSheet.toggle() + }) } label: { Image(systemName: "ellipsis") .frame(width:100) .padding([.leading],65) .padding([.trailing],0) } + .sheet(isPresented: $isPresentingSettingSheet) { + // Memo entry view + SettingsView() + } .sheet(isPresented: $isPresentingMemoSheet) { - // Memo entry view - AddMemoView() - } + // Memo entry view + AddMemoView() + } } Section{ List{ @@ -114,10 +119,29 @@ struct MainView: View { .padding(.bottom, 16) } } - } - .tabItem { - Image(systemName: "1.circle") - Text("Main") + .overlay( + // Floating Action Button + Button(action: { + // Add your button action here + isPresentingMemoSheet.toggle() + }) { + Image(systemName: "pencil") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 30, height: 30) + .foregroundColor(.white) + .padding() + } + .background(Color.gray) + .clipShape(Circle()) + .padding() + .padding(.bottom, 16) // Adjust the bottom padding as needed + , alignment: .bottomTrailing + ) +// .tabItem { +// Image(systemName: "1.circle") +// Text("Main") +// } } } } @@ -127,3 +151,8 @@ struct MainView_PreViews: PreviewProvider { MainView() } } + + +#Preview { + MainView() +} diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/NavView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/NavView.swift index e2f9dfe..1c88d58 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo/NavView.swift +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/NavView.swift @@ -5,30 +5,30 @@ // Created by 장동우 on 2023/11/19. // -import SwiftUI - -struct NavView: View { - //@Binding var showMenu: Bool - var body: some View { - TabView { - MainView() - .tabItem { - Image(systemName: "1.circle") - Text("Main") - } - - AddMemoView() - .tabItem { - Image(systemName: "2.circle") - Text("ADD") - } - - SettingsView() - .tabItem { - Image(systemName: "3.circle") - Text("Final") - } - } - } -} - +//import SwiftUI +// +//struct NavView: View { +// //@Binding var showMenu: Bool +// var body: some View { +// TabView { +// MainView() +// .tabItem { +// Image(systemName: "1.circle") +// Text("Main") +// } +// +// AddMemoView() +// .tabItem { +// Image(systemName: "2.circle") +// Text("ADD") +// } +// +// SettingsView() +// .tabItem { +// Image(systemName: "3.circle") +// Text("Final") +// } +// } +// } +//} +// diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/SettingsView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/SettingsView.swift index 0bdc553..c640ad2 100644 --- a/Cuckoo_swiftUI/Cuckoo/Cuckoo/SettingsView.swift +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/SettingsView.swift @@ -13,10 +13,10 @@ struct SettingsView: View { Text("Settings View") .font(.largeTitle) } - .tabItem { - Image(systemName: "3.circle") - Text("Settings") - } +// .tabItem { +// Image(systemName: "3.circle") +// Text("Settings") +// } } } diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/AlarmView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/AlarmView.swift new file mode 100644 index 0000000..e566165 --- /dev/null +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/AlarmView.swift @@ -0,0 +1,18 @@ +// +// AlarmView.swift +// Cuckoo +// +// Created by 장동우 on 2023/11/28. +// + +import SwiftUI + +struct AlarmView: View { + var body: some View { + Text("AlarmALARMAlarmALARMAlarmALARMAlarmALARMAlarmALARMAlarmALARM") + } +} + +#Preview { + AlarmView() +} diff --git a/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/MainView.swift b/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/MainView.swift new file mode 100644 index 0000000..db6acbb --- /dev/null +++ b/Cuckoo_swiftUI/Cuckoo/Cuckoo/Views/MainView.swift @@ -0,0 +1,186 @@ +// +// MainView.swift +// Cuckoo +// +// Created by 장동우 on 2023/11/07. +// + +import SwiftUI + +let paddingView = UIView(frame: CGRect(x:0,y:0, width:30,height:0)) + +struct MainView: View { + + //title 수정용 + @State private var text = "Initial Text" + @State private var isEditing = false + @State private var isPresentingMemoSheet = false + @State private var newMemoTitle = "" + @State private var newMemoDetails = "" + @State private var searchContent: String = "" // 사용자가 입력할 내용을 저장할 상태 변수입니다. + + //메모들을 위한 item + let items: [Item] = [ + Item(title: "Item 1", detail: "manywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanywordmanyword",tag: "Tech",timeAgo: "·2 days ago", memoURL: "www.naver.com", imageName: "arrow.right.circle"), + Item(title: "Item 2", detail: "Detail A", tag: "Tech",timeAgo: "·2 days ago", memoURL: "www.naver.com",imageName: "arrow.right.circle"), + Item(title: "Item 3", detail: "Detail A\nDetail B\nDetail C",tag: "Tech",timeAgo: "·2 days ago", memoURL: "www.naver.com", imageName: "arrow.right.circle"), + Item(title: "Item 4", detail: "Detail A\nDetail B\nDetail C",tag: "Tech",timeAgo: "·2 days ago", memoURL: "www.naver.com", imageName: "arrow.right.circle"), + Item(title: "Item 5", detail: "Detail A\nDetail B\nDetail C",tag: "Tech",timeAgo: "·2 days ago", memoURL: "www.naver.com", imageName: "arrow.right.circle"), + // Add more items as needed + ] + + + var itemCount: Int { + return items.count + } + + var body: some View { + NavigationView{ + VStack(spacing:10){ + HStack{ + Spacer() + NavigationLink(destination:SettingView()){ + Image(systemName:"gearshape.circle.fill") + .resizable() + .frame(width: 45,height: 45) + .foregroundColor(.gray) + .padding(.trailing,10) + } + NavigationLink(destination: AlarmView()){ + Image(systemName:"bell.circle.fill") + .resizable() + .frame(width: 45,height: 45) + .foregroundColor(.gray) + } + } + + + //Title + VStack{ + HStack(spacing:0) { + if isEditing { + TextField("Edit text", text: $text) + .border(Color.gray, width: 1) + .padding() + } else { + VStack(alignment: .leading,spacing: 0){ + Text("득수의 메모장") + .font(.system(size: 30, weight: .heavy)) + .lineSpacing(130) + .kerning(-0.03) + .multilineTextAlignment(.leading) + Text("\(itemCount)개의 메모") + .font(.system(size:12, weight: .regular)) + .lineSpacing(52) + .kerning(0) + .multilineTextAlignment(.leading) + .foregroundColor(Color(red: 0.70, green: 0.70, blue: 0.70)) + } + + } + Spacer() + } + } + Spacer() + CardContent { + // TextEditor의 스크롤 가능한 영역 설정 + HStack(spacing: 0){ + TextField("", text: $searchContent, axis: .vertical) + .font(.system(size: 12, weight: .medium)) + .padding(.leading, 25) + .padding(10) + .frame(minWidth: 0, maxWidth: .infinity, minHeight: 36, alignment: .top) // 가로길이 고정을 위해 최소 너비를 0, 최대 너비를 무한으로 설정합니다. + .background(.black.opacity(0.1)) // 배경색 설정 + .cornerRadius(10) // 코너 반경 설정 + + + + } + .overlay(Image(systemName: "magnifyingglass") + .padding(.leading, 10) + .foregroundColor(.gray) + , alignment: .leading) + + + } + Spacer() + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 10) { + ForEach(0..<10) { index in + CardContent { + HStack { + TypeBubble("메모", "#b2b2b2") + TypeBubble("기록", "#b2b2b2") + } + } + } + } + } +<<<<<<< Updated upstream + } + Spacer() + ScrollView(){ + ForEach(items, id: \.title) { item in + MainContainerView(title: item.title, detail: item.detail, tag: item.tag, timeAgo: item.timeAgo, memoURL: item.memoURL, imageName: item.imageName) + .padding(.bottom, 16) + } + } + .scrollIndicators(.hidden) + .overlay( + // Floating Action Button + Button(action: { + // Add your button action here + isPresentingMemoSheet.toggle() + }) { + Image(systemName: "pencil") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 30, height: 30) + .foregroundColor(.white) + .padding() + } + .background(Color.gray) + .clipShape(Circle()) + .padding() + .padding(.bottom, 16) // Adjust the bottom padding as needed + , alignment: .bottomTrailing + ) + + }.padding(.horizontal, 30) +======= + Spacer() + + ScrollView{ + ForEach(items, id: \.title) { item in + MainContainerView(title: item.title, detail: item.detail, tag: item.tag, timeAgo: item.timeAgo, memoURL: item.memoURL, imageName: item.imageName) + .padding(.bottom, 16) + } + } + .scrollIndicators(.hidden) + .overlay( + // Floating Action Button + NavigationLink(destination: AddMemoView()) { + Image(systemName: "pencil") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 30, height: 30) + .foregroundColor(.white) + .padding() + } + .background(Color.gray) + .clipShape(Circle()) + .padding(.bottom, 16),alignment: .bottomTrailing // Adjust the bottom padding as needed + ) + }.padding(.horizontal, 30) + } +>>>>>>> Stashed changes + } +} + + + +struct MainView_PreViews: PreviewProvider { + static var previews: some View { + MainView() + } +}