diff --git a/Images/appstore.png b/Images/appstore.png deleted file mode 100644 index 2beabe0..0000000 Binary files a/Images/appstore.png and /dev/null differ diff --git a/NearFuture.xcodeproj/project.pbxproj b/NearFuture.xcodeproj/project.pbxproj index 9f7e251..514e7b7 100644 --- a/NearFuture.xcodeproj/project.pbxproj +++ b/NearFuture.xcodeproj/project.pbxproj @@ -11,18 +11,20 @@ A920C28C2D24011400E4F9B1 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = A920C28B2D24011400E4F9B1 /* Item.swift */; }; A920C28E2D24011A00E4F9B1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A920C28D2D24011A00E4F9B1 /* Assets.xcassets */; }; A920C2922D24011A00E4F9B1 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A920C2912D24011A00E4F9B1 /* Preview Assets.xcassets */; }; - A920C2B82D2401A300E4F9B1 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A920C2B42D2401A100E4F9B1 /* SettingsView.swift */; }; - A920C2BB2D2401A400E4F9B1 /* AddEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A920C2B72D2401A300E4F9B1 /* AddEventView.swift */; }; A920C2BE2D24021A00E4F9B1 /* SFSymbolsPicker in Frameworks */ = {isa = PBXBuildFile; productRef = A920C2BD2D24021A00E4F9B1 /* SFSymbolsPicker */; }; - A920C2C12D2403CA00E4F9B1 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A920C2C02D2403CA00E4F9B1 /* ContentView.swift */; }; - A93BC0942D2B18A3002E8BBD /* StatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A93BC0932D2B18A3002E8BBD /* StatsView.swift */; }; - A949F8022DCAA0440064DCA0 /* NearFutureIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = A949F8012DCAA0440064DCA0 /* NearFutureIcon.png */; }; - A973B26C2DC551310028F8A2 /* ImportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A973B26B2DC551310028F8A2 /* ImportView.swift */; }; - A973B2702DC552EB0028F8A2 /* ExportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A973B26F2DC552EB0028F8A2 /* ExportView.swift */; }; - A973B2712DC553050028F8A2 /* ExportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A973B26F2DC552EB0028F8A2 /* ExportView.swift */; }; - A977CC922DBBB48000DED8C0 /* ArchiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977CC912DBBB48000DED8C0 /* ArchiveView.swift */; }; - A977CC9A2DBD74FE00DED8C0 /* HelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A977CC992DBD74FE00DED8C0 /* HelpView.swift */; }; - A979F57F2D26B1300094C0B3 /* EditEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A979F57E2D26B1300094C0B3 /* EditEventView.swift */; }; + A949F8322DCAAA8A0064DCA0 /* NearFutureIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = A949F8312DCAAA8A0064DCA0 /* NearFutureIcon.png */; }; + A949F84B2DCAABE00064DCA0 /* ArchiveView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F83A2DCAABE00064DCA0 /* ArchiveView.swift */; }; + A949F84C2DCAABE00064DCA0 /* AddEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F83C2DCAABE00064DCA0 /* AddEventView.swift */; }; + A949F84D2DCAABE00064DCA0 /* EditEventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F83D2DCAABE00064DCA0 /* EditEventView.swift */; }; + A949F84E2DCAABE00064DCA0 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F83F2DCAABE00064DCA0 /* ContentView.swift */; }; + A949F84F2DCAABE00064DCA0 /* EventListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8402DCAABE00064DCA0 /* EventListView.swift */; }; + A949F8502DCAABE00064DCA0 /* HelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8412DCAABE00064DCA0 /* HelpView.swift */; }; + A949F8512DCAABE00064DCA0 /* ExportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8432DCAABE00064DCA0 /* ExportView.swift */; }; + A949F8522DCAABE00064DCA0 /* iCloudSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8442DCAABE00064DCA0 /* iCloudSettingsView.swift */; }; + A949F8532DCAABE00064DCA0 /* ImportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8452DCAABE00064DCA0 /* ImportView.swift */; }; + A949F8542DCAABE00064DCA0 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8462DCAABE00064DCA0 /* SettingsView.swift */; }; + A949F8552DCAABE00064DCA0 /* StatsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8482DCAABE00064DCA0 /* StatsView.swift */; }; + A949F8562DCAABE00064DCA0 /* ExportView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A949F8432DCAABE00064DCA0 /* ExportView.swift */; }; A979F6052D270AF00094C0B3 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A979F6042D270AF00094C0B3 /* WidgetKit.framework */; }; A979F6072D270AF00094C0B3 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A979F6062D270AF00094C0B3 /* SwiftUI.framework */; }; A979F60A2D270AF00094C0B3 /* NearFutureWidgetsBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = A979F6092D270AF00094C0B3 /* NearFutureWidgetsBundle.swift */; }; @@ -30,8 +32,6 @@ A979F6102D270AF90094C0B3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A979F60F2D270AF80094C0B3 /* Assets.xcassets */; }; A979F6142D270AF90094C0B3 /* NearFutureWidgetsExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = A979F6022D270AF00094C0B3 /* NearFutureWidgetsExtension.appex */; platformFilter = ios; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; A979F6182D2714310094C0B3 /* Item.swift in Sources */ = {isa = PBXBuildFile; fileRef = A920C28B2D24011400E4F9B1 /* Item.swift */; }; - A985104E2DB256430013D5FF /* iCloudSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A985104D2DB256430013D5FF /* iCloudSettingsView.swift */; }; - A98510502DB263F00013D5FF /* EventListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A985104F2DB263F00013D5FF /* EventListView.swift */; }; A9FC7EEA2D2823920020D75B /* NearFutureWidgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9FC7EE92D28238A0020D75B /* NearFutureWidgets.swift */; }; /* End PBXBuildFile section */ @@ -74,16 +74,21 @@ A920C28D2D24011A00E4F9B1 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; A920C28F2D24011A00E4F9B1 /* NearFuture.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NearFuture.entitlements; sourceTree = ""; }; A920C2912D24011A00E4F9B1 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; - A920C2B42D2401A100E4F9B1 /* SettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - A920C2B72D2401A300E4F9B1 /* AddEventView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AddEventView.swift; sourceTree = ""; }; - A920C2C02D2403CA00E4F9B1 /* ContentView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - A93BC0932D2B18A3002E8BBD /* StatsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsView.swift; sourceTree = ""; }; - A949F8012DCAA0440064DCA0 /* NearFutureIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NearFutureIcon.png; path = NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png; sourceTree = SOURCE_ROOT; }; - A973B26B2DC551310028F8A2 /* ImportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportView.swift; sourceTree = ""; }; - A973B26F2DC552EB0028F8A2 /* ExportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportView.swift; sourceTree = ""; }; - A977CC912DBBB48000DED8C0 /* ArchiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchiveView.swift; sourceTree = ""; }; - A977CC992DBD74FE00DED8C0 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = ""; }; - A979F57E2D26B1300094C0B3 /* EditEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditEventView.swift; sourceTree = ""; }; + A949F82E2DCAAA640064DCA0 /* NearFutureIcon.pxd */ = {isa = PBXFileReference; lastKnownFileType = file; path = NearFutureIcon.pxd; sourceTree = ""; }; + A949F82F2DCAAA640064DCA0 /* NearFutureIconDark.pxd */ = {isa = PBXFileReference; lastKnownFileType = file; path = NearFutureIconDark.pxd; sourceTree = ""; }; + A949F8302DCAAA640064DCA0 /* NearFutureIconTint.pxd */ = {isa = PBXFileReference; lastKnownFileType = file; path = NearFutureIconTint.pxd; sourceTree = ""; }; + A949F8312DCAAA8A0064DCA0 /* NearFutureIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = NearFutureIcon.png; path = Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png; sourceTree = ""; }; + A949F83A2DCAABE00064DCA0 /* ArchiveView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchiveView.swift; sourceTree = ""; }; + A949F83C2DCAABE00064DCA0 /* AddEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddEventView.swift; sourceTree = ""; }; + A949F83D2DCAABE00064DCA0 /* EditEventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditEventView.swift; sourceTree = ""; }; + A949F83F2DCAABE00064DCA0 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + A949F8402DCAABE00064DCA0 /* EventListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventListView.swift; sourceTree = ""; }; + A949F8412DCAABE00064DCA0 /* HelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HelpView.swift; sourceTree = ""; }; + A949F8432DCAABE00064DCA0 /* ExportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportView.swift; sourceTree = ""; }; + A949F8442DCAABE00064DCA0 /* iCloudSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iCloudSettingsView.swift; sourceTree = ""; }; + A949F8452DCAABE00064DCA0 /* ImportView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImportView.swift; sourceTree = ""; }; + A949F8462DCAABE00064DCA0 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; + A949F8482DCAABE00064DCA0 /* StatsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsView.swift; sourceTree = ""; }; A979F58B2D2700680094C0B3 /* NearFutureWidgetsBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearFutureWidgetsBundle.swift; sourceTree = ""; }; A979F58D2D2700680094C0B3 /* NearFutureWidgetsLiveActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearFutureWidgetsLiveActivity.swift; sourceTree = ""; }; A979F58F2D2700680094C0B3 /* NearFutureWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearFutureWidgets.swift; sourceTree = ""; }; @@ -99,8 +104,6 @@ A979F6112D270AF90094C0B3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A980FC302D920097006A778F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; A980FC372D93FB2B006A778F /* NearFutureTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NearFutureTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - A985104D2DB256430013D5FF /* iCloudSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iCloudSettingsView.swift; sourceTree = ""; }; - A985104F2DB263F00013D5FF /* EventListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventListView.swift; sourceTree = ""; }; A9C05E412D2805D7007DC497 /* NearFutureWidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NearFutureWidgetsExtension.entitlements; sourceTree = ""; }; A9FC7EE92D28238A0020D75B /* NearFutureWidgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NearFutureWidgets.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -165,19 +168,8 @@ children = ( A920C2872D24011400E4F9B1 /* NearFutureApp.swift */, A920C28B2D24011400E4F9B1 /* Item.swift */, - A920C2C02D2403CA00E4F9B1 /* ContentView.swift */, - A985104F2DB263F00013D5FF /* EventListView.swift */, - A920C2B72D2401A300E4F9B1 /* AddEventView.swift */, - A979F57E2D26B1300094C0B3 /* EditEventView.swift */, - A977CC912DBBB48000DED8C0 /* ArchiveView.swift */, - A93BC0932D2B18A3002E8BBD /* StatsView.swift */, - A977CC992DBD74FE00DED8C0 /* HelpView.swift */, - A920C2B42D2401A100E4F9B1 /* SettingsView.swift */, - A973B26B2DC551310028F8A2 /* ImportView.swift */, - A973B26F2DC552EB0028F8A2 /* ExportView.swift */, - A985104D2DB256430013D5FF /* iCloudSettingsView.swift */, + A949F84A2DCAABE00064DCA0 /* Views */, A980FC302D920097006A778F /* Info.plist */, - A920C28D2D24011A00E4F9B1 /* Assets.xcassets */, A920C28F2D24011A00E4F9B1 /* NearFuture.entitlements */, A920C2902D24011A00E4F9B1 /* Preview Content */, ); @@ -196,11 +188,73 @@ A949F8002DCAA0340064DCA0 /* Resources */ = { isa = PBXGroup; children = ( - A949F8012DCAA0440064DCA0 /* NearFutureIcon.png */, + A949F8312DCAAA8A0064DCA0 /* NearFutureIcon.png */, + A920C28D2D24011A00E4F9B1 /* Assets.xcassets */, + A949F82E2DCAAA640064DCA0 /* NearFutureIcon.pxd */, + A949F82F2DCAAA640064DCA0 /* NearFutureIconDark.pxd */, + A949F8302DCAAA640064DCA0 /* NearFutureIconTint.pxd */, ); path = Resources; sourceTree = ""; }; + A949F83B2DCAABE00064DCA0 /* Archive */ = { + isa = PBXGroup; + children = ( + A949F83A2DCAABE00064DCA0 /* ArchiveView.swift */, + ); + path = Archive; + sourceTree = ""; + }; + A949F83E2DCAABE00064DCA0 /* Events */ = { + isa = PBXGroup; + children = ( + A949F83C2DCAABE00064DCA0 /* AddEventView.swift */, + A949F83D2DCAABE00064DCA0 /* EditEventView.swift */, + ); + path = Events; + sourceTree = ""; + }; + A949F8422DCAABE00064DCA0 /* Home */ = { + isa = PBXGroup; + children = ( + A949F83F2DCAABE00064DCA0 /* ContentView.swift */, + A949F8402DCAABE00064DCA0 /* EventListView.swift */, + A949F8412DCAABE00064DCA0 /* HelpView.swift */, + ); + path = Home; + sourceTree = ""; + }; + A949F8472DCAABE00064DCA0 /* Settings */ = { + isa = PBXGroup; + children = ( + A949F8432DCAABE00064DCA0 /* ExportView.swift */, + A949F8442DCAABE00064DCA0 /* iCloudSettingsView.swift */, + A949F8452DCAABE00064DCA0 /* ImportView.swift */, + A949F8462DCAABE00064DCA0 /* SettingsView.swift */, + ); + path = Settings; + sourceTree = ""; + }; + A949F8492DCAABE00064DCA0 /* Stats */ = { + isa = PBXGroup; + children = ( + A949F8482DCAABE00064DCA0 /* StatsView.swift */, + ); + path = Stats; + sourceTree = ""; + }; + A949F84A2DCAABE00064DCA0 /* Views */ = { + isa = PBXGroup; + children = ( + A949F83B2DCAABE00064DCA0 /* Archive */, + A949F83E2DCAABE00064DCA0 /* Events */, + A949F8422DCAABE00064DCA0 /* Home */, + A949F8472DCAABE00064DCA0 /* Settings */, + A949F8492DCAABE00064DCA0 /* Stats */, + ); + path = Views; + sourceTree = ""; + }; A979F58A2D2700680094C0B3 /* NearFutureWidgets */ = { isa = PBXGroup; children = ( @@ -352,7 +406,7 @@ buildActionMask = 2147483647; files = ( A920C2922D24011A00E4F9B1 /* Preview Assets.xcassets in Resources */, - A949F8022DCAA0440064DCA0 /* NearFutureIcon.png in Resources */, + A949F8322DCAAA8A0064DCA0 /* NearFutureIcon.png in Resources */, A920C28E2D24011A00E4F9B1 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -379,19 +433,19 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A920C2BB2D2401A400E4F9B1 /* AddEventView.swift in Sources */, - A973B26C2DC551310028F8A2 /* ImportView.swift in Sources */, - A98510502DB263F00013D5FF /* EventListView.swift in Sources */, - A920C2C12D2403CA00E4F9B1 /* ContentView.swift in Sources */, - A973B2712DC553050028F8A2 /* ExportView.swift in Sources */, - A920C2B82D2401A300E4F9B1 /* SettingsView.swift in Sources */, - A977CC9A2DBD74FE00DED8C0 /* HelpView.swift in Sources */, A920C28C2D24011400E4F9B1 /* Item.swift in Sources */, + A949F84B2DCAABE00064DCA0 /* ArchiveView.swift in Sources */, + A949F84C2DCAABE00064DCA0 /* AddEventView.swift in Sources */, + A949F84D2DCAABE00064DCA0 /* EditEventView.swift in Sources */, + A949F84E2DCAABE00064DCA0 /* ContentView.swift in Sources */, + A949F84F2DCAABE00064DCA0 /* EventListView.swift in Sources */, + A949F8502DCAABE00064DCA0 /* HelpView.swift in Sources */, + A949F8512DCAABE00064DCA0 /* ExportView.swift in Sources */, + A949F8522DCAABE00064DCA0 /* iCloudSettingsView.swift in Sources */, + A949F8532DCAABE00064DCA0 /* ImportView.swift in Sources */, + A949F8542DCAABE00064DCA0 /* SettingsView.swift in Sources */, + A949F8552DCAABE00064DCA0 /* StatsView.swift in Sources */, A920C2882D24011400E4F9B1 /* NearFutureApp.swift in Sources */, - A93BC0942D2B18A3002E8BBD /* StatsView.swift in Sources */, - A977CC922DBBB48000DED8C0 /* ArchiveView.swift in Sources */, - A979F57F2D26B1300094C0B3 /* EditEventView.swift in Sources */, - A985104E2DB256430013D5FF /* iCloudSettingsView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -410,7 +464,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A973B2702DC552EB0028F8A2 /* ExportView.swift in Sources */, + A949F8562DCAABE00064DCA0 /* ExportView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/NearFuture/EventListView.swift b/NearFuture/Home/EventListView.swift similarity index 100% rename from NearFuture/EventListView.swift rename to NearFuture/Home/EventListView.swift diff --git a/NearFuture/HelpView.swift b/NearFuture/Misc/HelpView.swift similarity index 100% rename from NearFuture/HelpView.swift rename to NearFuture/Misc/HelpView.swift diff --git a/NearFuture/ArchiveView.swift b/NearFuture/Views/Archive/ArchiveView.swift similarity index 100% rename from NearFuture/ArchiveView.swift rename to NearFuture/Views/Archive/ArchiveView.swift diff --git a/NearFuture/AddEventView.swift b/NearFuture/Views/Events/AddEventView.swift similarity index 100% rename from NearFuture/AddEventView.swift rename to NearFuture/Views/Events/AddEventView.swift diff --git a/NearFuture/EditEventView.swift b/NearFuture/Views/Events/EditEventView.swift similarity index 100% rename from NearFuture/EditEventView.swift rename to NearFuture/Views/Events/EditEventView.swift diff --git a/NearFuture/ContentView.swift b/NearFuture/Views/Home/ContentView.swift similarity index 100% rename from NearFuture/ContentView.swift rename to NearFuture/Views/Home/ContentView.swift diff --git a/NearFuture/Views/Home/EventListView.swift b/NearFuture/Views/Home/EventListView.swift new file mode 100644 index 0000000..49d576c --- /dev/null +++ b/NearFuture/Views/Home/EventListView.swift @@ -0,0 +1,169 @@ +// +// EventListView.swift +// NearFuture +// +// Created by neon443 on 18/04/2025. +// + +import SwiftUI +import SwiftData + +struct EventListView: View { + @ObservedObject var viewModel: EventViewModel + @State var event: Event + + var body: some View { + NavigationLink() { + EditEventView( + viewModel: viewModel, + event: $event + ) + } label: { + ZStack { + HStack { + RoundedRectangle(cornerRadius: 5) + .frame(width: 7) + .foregroundStyle( + event.color.color.opacity( + event.complete ? 0.5 : 1 + ) + ) + VStack(alignment: .leading) { + HStack { + Image(systemName: event.symbol) + .resizable() + .scaledToFit() + .frame(width: 20, height: 20) + .shadow(radius: 5) + .foregroundStyle( + .one.opacity( + event.complete ? 0.5 : 1 + ) + ) + Text("\(event.name)") + .font(.headline) + .foregroundStyle(.one) + .strikethrough(event.complete) + .multilineTextAlignment(.leading) + } + if !event.notes.isEmpty { + Text(event.notes) + .font(.subheadline) + .foregroundStyle(.one.opacity(0.8)) + .multilineTextAlignment(.leading) + } + Text( + event.date.formatted( + date: .long, + time: .shortened + ) + ) + .font(.subheadline) + .foregroundStyle( + .one.opacity( + event.complete ? 0.5 : 1 + ) + ) + if event.recurrence != .none { + Text("Occurs \(event.recurrence.rawValue)") + .font(.subheadline) + .foregroundStyle( + .one.opacity(event.complete ? 0.5 : 1)) + } + } + Spacer() + VStack { + Text("\(daysUntilEvent(event.date).long)") + .font(.subheadline) + .foregroundStyle(.one) + } + Button() { + withAnimation { + event.complete.toggle() + } + let eventToModify = viewModel.events.firstIndex() { currEvent in + currEvent.id == event.id + } + if let eventToModify = eventToModify { + viewModel.events[eventToModify] = event + viewModel.saveEvents() + } + } label: { + if event.complete { + ZStack { + Circle() + .foregroundStyle(.green) + Image(systemName: "checkmark") + .resizable() + .foregroundStyle(.white) + .scaledToFit() + .bold() + .frame(width: 15) + } + } else { + Image(systemName: "circle") + .resizable() + .scaledToFit() + .foregroundStyle(event.color.color) + } + } + .buttonStyle(.borderless) + .frame(maxWidth: 25, maxHeight: 25) + .shadow(radius: 5) + .padding(.trailing, 5) + } + .padding(.vertical, 5) + .background(.ultraThinMaterial) + .overlay( + RoundedRectangle(cornerRadius: 10) + .stroke( + .one.opacity(appearance == .dark ? 0.5 : 1), + lineWidth: 1 + ) + ) + .clipShape( + RoundedRectangle(cornerRadius: 10) + ) + .fixedSize(horizontal: false, vertical: true) + } + .contextMenu() { + Button(role: .destructive) { + let eventToModify = viewModel.events.firstIndex() { currEvent in + currEvent.id == event.id + } + if let eventToModify = eventToModify { + viewModel.events.remove(at: eventToModify) + viewModel.saveEvents() + } + } label: { + Label("Delete", systemImage: "trash") + } + } + } + } +} + +#Preview("EventListView") { + let vm = dummyEventViewModel() + ZStack { + Color.black + VStack { + ForEach(0..<50) { _ in + Rectangle() + .foregroundStyle(randomColor().opacity(0.5)) + .padding(-10) + } + .ignoresSafeArea(.all) + .blur(radius: 5) + } + VStack { + ForEach(vm.events) { event in + EventListView( + viewModel: vm, + event: event + ) + } + } + .padding(.horizontal, 10) + } +} diff --git a/NearFuture/Views/Home/HelpView.swift b/NearFuture/Views/Home/HelpView.swift new file mode 100644 index 0000000..24d4909 --- /dev/null +++ b/NearFuture/Views/Home/HelpView.swift @@ -0,0 +1,112 @@ +// +// ArchiveHelp.swift +// NearFuture +// +// Created by neon443 on 26/04/2025. +// + + +import SwiftUI + +enum HelpType { + case Search + case Archive +} + +struct HelpView: View { + /// initialises a Search HelpView + /// + init(searchInput: Binding, focusedField: Field?) { + _searchInput = searchInput + self.helpType = .Search + _showAddEvent = .constant(false) + } + + /// initialises an Archive HelpView + /// + init(showAddEvent: Binding) { + _showAddEvent = showAddEvent + self.helpType = .Archive + _searchInput = .constant("") + self.focusedField = nil + } + + @Binding var searchInput: String + @FocusState var focusedField: Field? + + @Binding var showAddEvent: Bool + + var helpType: HelpType + var details: ( + symbol: String, + title: String, + body: String, + buttonAction: () -> (), + buttonSymbol: String, + buttonText: String + ) { + switch helpType { + case .Search: + return ( + symbol: "questionmark.app.dashed", + title: "Looking for something?", + body: "Tip: The Search bar searches event names and notes.", + buttonAction: { + searchInput = "" + focusedField = nil + }, + buttonSymbol: "xmark", + buttonText: "Clear Filters" + ) + case .Archive: + return ( + symbol: "eyes", + title: "Nothing to see here...", + body: "The Archive contains events that have been marked as complete.", + buttonAction: { + showAddEvent.toggle() + }, + buttonSymbol: "plus", + buttonText: "Create an event" + ) + } + } + var body: some View { + List { + ZStack { + Color(.tintColor) + .opacity(0.4) + .padding(.horizontal, -15) + .blur(radius: 5) + HStack { + Image(systemName: details.symbol) + .resizable() + .scaledToFit() + .frame(width: 30, height: 30) + .padding(.trailing) + Text(details.title) + .bold() + .font(.title2) + } + } + .listRowSeparator(.hidden) + Text(details.body) + Button() { + details.buttonAction() + } label: { + HStack { + Image(systemName: details.buttonSymbol) + .bold() + Text(details.buttonText) + } + .foregroundStyle(Color.accentColor) + } + } + .scrollContentBackground(.hidden) + } +} + +#Preview { + HelpView(searchInput: .constant(""), focusedField: nil) + HelpView(showAddEvent: .constant(false)) +} diff --git a/NearFuture/ExportView.swift b/NearFuture/Views/Settings/ExportView.swift similarity index 100% rename from NearFuture/ExportView.swift rename to NearFuture/Views/Settings/ExportView.swift diff --git a/NearFuture/ImportView.swift b/NearFuture/Views/Settings/ImportView.swift similarity index 100% rename from NearFuture/ImportView.swift rename to NearFuture/Views/Settings/ImportView.swift diff --git a/NearFuture/SettingsView.swift b/NearFuture/Views/Settings/SettingsView.swift similarity index 100% rename from NearFuture/SettingsView.swift rename to NearFuture/Views/Settings/SettingsView.swift diff --git a/NearFuture/iCloudSettingsView.swift b/NearFuture/Views/Settings/iCloudSettingsView.swift similarity index 100% rename from NearFuture/iCloudSettingsView.swift rename to NearFuture/Views/Settings/iCloudSettingsView.swift diff --git a/NearFuture/StatsView.swift b/NearFuture/Views/Stats/StatsView.swift similarity index 100% rename from NearFuture/StatsView.swift rename to NearFuture/Views/Stats/StatsView.swift diff --git a/NearFuture/Assets.xcassets/AccentColor.colorset/Contents.json b/Resources/Assets.xcassets/AccentColor.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/AccentColor.colorset/Contents.json rename to Resources/Assets.xcassets/AccentColor.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/AppIcon.appiconset/Contents.json b/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Resources/Assets.xcassets/AppIcon.appiconset/Contents.json diff --git a/NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png b/Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png similarity index 100% rename from NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png rename to Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIcon.png diff --git a/NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIconDark.png b/Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIconDark.png similarity index 100% rename from NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIconDark.png rename to Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIconDark.png diff --git a/NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIconTint.png b/Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIconTint.png similarity index 100% rename from NearFuture/Assets.xcassets/AppIcon.appiconset/NearFutureIconTint.png rename to Resources/Assets.xcassets/AppIcon.appiconset/NearFutureIconTint.png diff --git a/NearFuture/Assets.xcassets/Contents.json b/Resources/Assets.xcassets/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/Contents.json rename to Resources/Assets.xcassets/Contents.json diff --git a/NearFuture/Assets.xcassets/bgTop.colorset/Contents.json b/Resources/Assets.xcassets/bgTop.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/bgTop.colorset/Contents.json rename to Resources/Assets.xcassets/bgTop.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/one.colorset/Contents.json b/Resources/Assets.xcassets/one.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/one.colorset/Contents.json rename to Resources/Assets.xcassets/one.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/two.colorset/Contents.json b/Resources/Assets.xcassets/two.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/two.colorset/Contents.json rename to Resources/Assets.xcassets/two.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/Contents.json b/Resources/Assets.xcassets/uiColors/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/Contents.json rename to Resources/Assets.xcassets/uiColors/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/basic.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/basic.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/basic.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/basic.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/blue.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/blue.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/blue.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/blue.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/green.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/green.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/green.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/green.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/indigo.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/indigo.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/indigo.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/indigo.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/orange.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/orange.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/orange.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/orange.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/pink.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/pink.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/pink.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/pink.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/red.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/red.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/red.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/red.colorset/Contents.json diff --git a/NearFuture/Assets.xcassets/uiColors/yellow.colorset/Contents.json b/Resources/Assets.xcassets/uiColors/yellow.colorset/Contents.json similarity index 100% rename from NearFuture/Assets.xcassets/uiColors/yellow.colorset/Contents.json rename to Resources/Assets.xcassets/uiColors/yellow.colorset/Contents.json diff --git a/Images/NearFutureIcon.pxd b/Resources/NearFutureIcon.pxd similarity index 100% rename from Images/NearFutureIcon.pxd rename to Resources/NearFutureIcon.pxd diff --git a/Images/NearFutureIconDark.pxd b/Resources/NearFutureIconDark.pxd similarity index 100% rename from Images/NearFutureIconDark.pxd rename to Resources/NearFutureIconDark.pxd diff --git a/Images/NearFutureIconTint.pxd b/Resources/NearFutureIconTint.pxd similarity index 100% rename from Images/NearFutureIconTint.pxd rename to Resources/NearFutureIconTint.pxd