Create WidgetsKit package

This commit is contained in:
Marcin Czachursk 2023-04-07 16:59:18 +02:00
parent 65a1806374
commit 93c4128a50
92 changed files with 346 additions and 270 deletions

View File

@ -6,6 +6,7 @@
import Foundation
import CoreData
import EnvironmentKit
class ApplicationSettingsHandler {
public static let shared = ApplicationSettingsHandler()

View File

@ -5,6 +5,7 @@
//
import CoreData
import EnvironmentKit
public class CoreDataHandler {
public static let shared = CoreDataHandler()

9
EnvironmentKit/.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
.DS_Store
/.build
/Packages
/*.xcodeproj
xcuserdata/
DerivedData/
.swiftpm/config/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
.netrc

View File

@ -0,0 +1,33 @@
// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "EnvironmentKit",
platforms: [
.iOS(.v16),
.macOS(.v12),
.watchOS(.v8)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "EnvironmentKit",
targets: ["EnvironmentKit"])
],
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(name: "ClientKit", path: "../ClientKit")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "EnvironmentKit",
dependencies: ["ClientKit"]),
.testTarget(
name: "EnvironmentKitTests",
dependencies: ["EnvironmentKit"])
]
)

View File

@ -24,70 +24,70 @@ public class ApplicationState: ObservableObject {
private static let defaults = Defaults()
/// Actual signed in account.
@Published private(set) var account: AccountModel?
@Published public private(set) var account: AccountModel?
/// The maximum number of allowed characters per status.
@Published private(set) var statusMaxCharacters = defaults.statusMaxCharacters
@Published public private(set) var statusMaxCharacters = defaults.statusMaxCharacters
/// The maximum number of media attachments that can be added to a status.
@Published private(set) var statusMaxMediaAttachments = defaults.statusMaxMediaAttachments
@Published public private(set) var statusMaxMediaAttachments = defaults.statusMaxMediaAttachments
/// Each URL in a status will be assumed to be exactly this many characters.
@Published private(set) var statusCharactersReservedPerUrl = defaults.statusCharactersReservedPerUrl
@Published public private(set) var statusCharactersReservedPerUrl = defaults.statusCharactersReservedPerUrl
/// Last status seen by the user.
@Published var lastSeenStatusId: String?
@Published public var lastSeenStatusId: String?
/// Amount of new statuses which are not displayed yet to the user.
@Published var amountOfNewStatuses = 0
@Published public var amountOfNewStatuses = 0
/// Model for newly created comment.
@Published var newComment: CommentModel?
@Published public var newComment: CommentModel?
/// Active icon name.
@Published var activeIcon = "Default"
@Published public var activeIcon = "Default"
/// Tint color in whole application.
@Published var tintColor = TintColor.accentColor2
@Published public var tintColor = TintColor.accentColor2
/// Application theme.
@Published var theme = Theme.system
@Published public var theme = Theme.system
/// Avatar shape.
@Published var avatarShape = AvatarShape.circle
@Published public var avatarShape = AvatarShape.circle
/// Status id for showed interaction row.
@Published var showInteractionStatusId = String.empty()
@Published public var showInteractionStatusId = ""
/// Should we fire haptic when user change tabs.
@Published var hapticTabSelectionEnabled = true
@Published public var hapticTabSelectionEnabled = true
/// Should we fire haptic when user refresh list.
@Published var hapticRefreshEnabled = true
@Published public var hapticRefreshEnabled = true
/// Should we fire haptic when user tap button.
@Published var hapticButtonPressEnabled = true
@Published public var hapticButtonPressEnabled = true
/// Should we fire haptic when animation is finished.
@Published var hapticAnimationEnabled = true
@Published public var hapticAnimationEnabled = true
/// Should we fire haptic when notification occures.
@Published var hapticNotificationEnabled = true
@Published public var hapticNotificationEnabled = true
/// Should sensitive photos without mask.
@Published var showSensitive = false
@Published public var showSensitive = false
/// Should photo description for visually impaired be displayed.
@Published var showPhotoDescription = false
@Published public var showPhotoDescription = false
/// Status which should be shown from URL.
@Published var showStatusId: String?
@Published public var showStatusId: String?
/// Updated user profile.
@Published var updatedProfile: Account?
@Published public var updatedProfile: Account?
/// Information which menu should be shown (top or bottom).
@Published var menuPosition = MenuPosition.top
@Published public var menuPosition = MenuPosition.top
public func changeApplicationState(accountModel: AccountModel, instance: Instance?, lastSeenStatusId: String?) {
self.account = accountModel

View File

@ -7,7 +7,7 @@
import Foundation
import SwiftUI
extension AvatarShape {
public extension AvatarShape {
func shape() -> some Shape {
switch self {
case .circle:

View File

@ -6,7 +6,7 @@
import SwiftUI
extension Color {
public extension Color {
// MARK: - Text Colors
static let dangerColor = Color("DangerColor")
@ -28,7 +28,7 @@ extension Color {
static let accentColor10 = Color("AccentColor10")
}
extension Color {
public extension Color {
func toUIColor() -> UIColor {
UIColor(self)
}

View File

@ -6,7 +6,7 @@
import SwiftUI
extension Color {
public extension Color {
// MARK: - Text Colors
static let lightText = Color(UIColor.lightText)

View File

@ -7,8 +7,8 @@
import Foundation
import SwiftUI
extension Theme {
public func colorScheme() -> ColorScheme? {
public extension Theme {
func colorScheme() -> ColorScheme? {
switch self {
case .system:
return nil

View File

@ -7,8 +7,8 @@
import Foundation
import SwiftUI
extension TintColor {
public func color() -> Color {
public extension TintColor {
func color() -> Color {
switch self {
case .accentColor1:
return Color.accentColor1
@ -33,7 +33,7 @@ extension TintColor {
}
}
public func uiColor() -> UIColor {
func uiColor() -> UIColor {
return self.color().toUIColor()
}
}

View File

@ -0,0 +1,11 @@
import XCTest
@testable import EnvironmentKit
final class EnvironmentKitTests: XCTestCase {
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct
// results.
// XCTAssertEqual(EnvironmentKit().text, "Hello, World!")
}
}

View File

@ -110,6 +110,8 @@
"userProfile.error.block" = "Block/unblock action failed.";
"userProfile.error.relationship" = "Relationship action failed.";
"userProfile.title.edit" = "Edit";
"userProfile.title.muted" = "Muted";
"userProfile.title.blocked" = "Blocked";
// Mark: Notifications view.
"notifications.navigationBar.title" = "Notifications";

View File

@ -110,6 +110,8 @@
"userProfile.error.block" = "Blokeatu/Blokeatzeari uzteak huts egin du.";
"userProfile.error.relationship" = "Harreman ekintzak huts egin du.";
"userProfile.title.edit" = "Editatu";
"userProfile.title.muted" = "Muted";
"userProfile.title.blocked" = "Blocked";
// Mark: Notifications view.
"notifications.navigationBar.title" = "Jakinarazpenak";

View File

@ -110,6 +110,8 @@
"userProfile.error.block" = "Błąd podczas blokowania/odblokowywania użytkownika.";
"userProfile.error.relationship" = "Błąd podczas zmiany relacji z użytkownikiem.";
"userProfile.title.edit" = "Edytuj";
"userProfile.title.muted" = "Wyciszony";
"userProfile.title.blocked" = "Zablokowany";
// Mark: Notifications view.
"notifications.navigationBar.title" = "Powiadomienia";

View File

@ -18,17 +18,17 @@ let package = Package(
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
.package(url: "https://github.com/omaralbeik/Drops", .upToNextMajor(from: "1.6.1")),
.package(url: "https://github.com/kean/Nuke", .upToNextMajor(from: "12.0.0")),
.package(name: "PixelfedKit", path: "../PixelfedKit")
.package(name: "PixelfedKit", path: "../PixelfedKit"),
.package(name: "EnvironmentKit", path: "../EnvironmentKit")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "ServicesKit",
dependencies: ["Drops", "Nuke", "PixelfedKit"]),
dependencies: ["Drops", "Nuke", "PixelfedKit", "EnvironmentKit"]),
.testTarget(
name: "ServicesKitTests",
dependencies: ["ServicesKit"])

View File

@ -6,6 +6,7 @@
import CoreHaptics
import UIKit
import EnvironmentKit
public class HapticService {
public static let shared: HapticService = .init()

View File

@ -23,21 +23,15 @@
F8210DD92966BB7E001D9973 /* NukeUI in Frameworks */ = {isa = PBXBuildFile; productRef = F8210DD82966BB7E001D9973 /* NukeUI */; };
F8210DDD2966CF17001D9973 /* StatusData+Status.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DDC2966CF17001D9973 /* StatusData+Status.swift */; };
F8210DDF2966CFC7001D9973 /* AttachmentData+Attachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DDE2966CFC7001D9973 /* AttachmentData+Attachment.swift */; };
F8210DE52966E160001D9973 /* Color+SystemColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DE42966E160001D9973 /* Color+SystemColors.swift */; };
F8210DE72966E1D1001D9973 /* Color+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DE62966E1D1001D9973 /* Color+Assets.swift */; };
F8210DEA2966E4F9001D9973 /* AnimatePlaceholderModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DE92966E4F9001D9973 /* AnimatePlaceholderModifier.swift */; };
F835082329BEF9C400DE3247 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F835082629BEF9C400DE3247 /* Localizable.strings */; };
F835082429BEF9C400DE3247 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F835082629BEF9C400DE3247 /* Localizable.strings */; };
F83901A6295D8EC000456AE2 /* LabelIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83901A5295D8EC000456AE2 /* LabelIcon.swift */; };
F83CBEFB298298A1002972C8 /* ImageCarouselPicture.swift in Sources */ = {isa = PBXBuildFile; fileRef = F83CBEFA298298A1002972C8 /* ImageCarouselPicture.swift */; };
F83E00ED29A2237C005D25A3 /* PixelfedKit in Frameworks */ = {isa = PBXBuildFile; productRef = F83E00EC29A2237C005D25A3 /* PixelfedKit */; };
F857F9FD297D8ED3002C109C /* ActionMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F857F9FC297D8ED3002C109C /* ActionMenu.swift */; };
F85D4971296402DC00751DF7 /* AuthorizationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4970296402DC00751DF7 /* AuthorizationService.swift */; };
F85D4973296406E700751DF7 /* BottomRight.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4972296406E700751DF7 /* BottomRight.swift */; };
F85D4975296407F100751DF7 /* HomeTimelineService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4974296407F100751DF7 /* HomeTimelineService.swift */; };
F85D497729640A5200751DF7 /* ImageRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D497629640A5200751DF7 /* ImageRow.swift */; };
F85D497929640B9D00751DF7 /* ImagesCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D497829640B9D00751DF7 /* ImagesCarousel.swift */; };
F85D497B29640C8200751DF7 /* UsernameRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D497A29640C8200751DF7 /* UsernameRow.swift */; };
F85D497D29640D5900751DF7 /* InteractionRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D497C29640D5900751DF7 /* InteractionRow.swift */; };
F85D497F296416C800751DF7 /* CommentsSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D497E296416C800751DF7 /* CommentsSectionView.swift */; };
F85D498329642FAC00751DF7 /* AttachmentData+Comperable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D498229642FAC00751DF7 /* AttachmentData+Comperable.swift */; };
@ -45,9 +39,7 @@
F85D49872964334100751DF7 /* String+Date.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D49862964334100751DF7 /* String+Date.swift */; };
F85D4DFE29B78C8400345267 /* HashtagModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85D4DFD29B78C8400345267 /* HashtagModel.swift */; };
F85DBF8F296732E20069BF89 /* AccountsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F85DBF8E296732E20069BF89 /* AccountsView.swift */; };
F85E132529741F05006A051D /* ActivityIndicatorView in Frameworks */ = {isa = PBXBuildFile; productRef = F85E132429741F05006A051D /* ActivityIndicatorView */; };
F86167C6297FE6CC004D1F67 /* AvatarShapesSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86167C5297FE6CC004D1F67 /* AvatarShapesSectionView.swift */; };
F86167C8297FE781004D1F67 /* AvatarShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86167C7297FE781004D1F67 /* AvatarShape.swift */; };
F864F75F29BB91B400B13921 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F864F75E29BB91B400B13921 /* WidgetKit.framework */; };
F864F76129BB91B400B13921 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F864F76029BB91B400B13921 /* SwiftUI.framework */; };
F864F76429BB91B400B13921 /* VernissageWidgetBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F76329BB91B400B13921 /* VernissageWidgetBundle.swift */; };
@ -72,13 +64,6 @@
F864F78A29BB9A8000B13921 /* ApplicationSettingsHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F866F6A429604194002E8F88 /* ApplicationSettingsHandler.swift */; };
F864F78B29BB9A8300B13921 /* StatusDataHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80048072961E6DE00E6868A /* StatusDataHandler.swift */; };
F864F78C29BB9A8500B13921 /* AttachmentDataHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F80048092961EA1900E6868A /* AttachmentDataHandler.swift */; };
F864F78E29BB9B2F00B13921 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C3E29716E41001DA3D4 /* Theme.swift */; };
F864F78F29BB9B3100B13921 /* AvatarShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86167C7297FE781004D1F67 /* AvatarShape.swift */; };
F864F79029BB9B3300B13921 /* TintColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CC95CD2970761D00C9C2AC /* TintColor.swift */; };
F864F79D29BB9D3400B13921 /* AppConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87AEB932986C51B00434FB6 /* AppConstants.swift */; };
F864F79F29BB9E6A00B13921 /* TintColor+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F79E29BB9E6A00B13921 /* TintColor+Color.swift */; };
F864F7A129BB9E8F00B13921 /* AvatarShape+Shape.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F7A029BB9E8F00B13921 /* AvatarShape+Shape.swift */; };
F864F7A329BB9EC700B13921 /* Theme+ColorScheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F7A229BB9EC700B13921 /* Theme+ColorScheme.swift */; };
F864F7A529BBA01D00B13921 /* CoreDataError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F7A429BBA01D00B13921 /* CoreDataError.swift */; };
F864F7A629BBA01D00B13921 /* CoreDataError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F864F7A429BBA01D00B13921 /* CoreDataError.swift */; };
F866F6A0296040A8002E8F88 /* ApplicationSettings+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F866F69E296040A8002E8F88 /* ApplicationSettings+CoreDataClass.swift */; };
@ -96,24 +81,15 @@
F86A4307299AA5E900DF7645 /* ThanksView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86A4306299AA5E900DF7645 /* ThanksView.swift */; };
F86B7214296BFDCE00EE59EC /* UserProfileHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7213296BFDCE00EE59EC /* UserProfileHeaderView.swift */; };
F86B7216296BFFDA00EE59EC /* UserProfileStatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7215296BFFDA00EE59EC /* UserProfileStatusesView.swift */; };
F86B7218296C27C100EE59EC /* ActionButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7217296C27C100EE59EC /* ActionButton.swift */; };
F86B721E296C458700EE59EC /* BlurredImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B721D296C458700EE59EC /* BlurredImage.swift */; };
F86B7221296C49A300EE59EC /* EmptyButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7220296C49A300EE59EC /* EmptyButtonStyle.swift */; };
F86B7223296C4BF500EE59EC /* ContentWarning.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86B7222296C4BF500EE59EC /* ContentWarning.swift */; };
F86FB555298BF83F000131F0 /* FavouriteTouch.swift in Sources */ = {isa = PBXBuildFile; fileRef = F86FB554298BF83F000131F0 /* FavouriteTouch.swift */; };
F873F14C29BDB67300DE72D1 /* UIImage+Rounded.swift in Sources */ = {isa = PBXBuildFile; fileRef = F873F14B29BDB67300DE72D1 /* UIImage+Rounded.swift */; };
F8742FC429990AFB00E9642B /* ClientError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8742FC329990AFB00E9642B /* ClientError.swift */; };
F8764187298ABB520057D362 /* ViewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8764186298ABB520057D362 /* ViewState.swift */; };
F8764189298ABEC80057D362 /* ErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8764188298ABEC80057D362 /* ErrorView.swift */; };
F876418B298AC1B80057D362 /* NoDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876418A298AC1B80057D362 /* NoDataView.swift */; };
F876418D298AE5020057D362 /* PaginableStatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F876418C298AE5020057D362 /* PaginableStatusesView.swift */; };
F878842229A4A4E3003CFAD2 /* AppMetadataService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F878842129A4A4E3003CFAD2 /* AppMetadataService.swift */; };
F87AEB922986C44E00434FB6 /* AuthorizationSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87AEB912986C44E00434FB6 /* AuthorizationSession.swift */; };
F87AEB942986C51B00434FB6 /* AppConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87AEB932986C51B00434FB6 /* AppConstants.swift */; };
F87AEB972986D16D00434FB6 /* AuthorisationError.swift in Sources */ = {isa = PBXBuildFile; fileRef = F87AEB962986D16D00434FB6 /* AuthorisationError.swift */; };
F883402029B62AE900C3E096 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F883401F29B62AE900C3E096 /* SearchView.swift */; };
F8864CE929ACAF820020C534 /* TextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CE829ACAF820020C534 /* TextView.swift */; };
F8864CEB29ACBAA80020C534 /* TextModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CEA29ACBAA80020C534 /* TextModel.swift */; };
F8864CEF29ACE90B0020C534 /* UIFont+Font.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CEE29ACE90B0020C534 /* UIFont+Font.swift */; };
F8864CF129ACFFB80020C534 /* View+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CF029ACFFB80020C534 /* View+Keyboard.swift */; };
F88AB05329B3613900345EDE /* PhotoUrl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88AB05229B3613900345EDE /* PhotoUrl.swift */; };
@ -128,12 +104,12 @@
F88BC51B29E0350300CE6141 /* ClientKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC51A29E0350300CE6141 /* ClientKit */; };
F88BC51D29E0377B00CE6141 /* AccountData+AccountModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88BC51C29E0377B00CE6141 /* AccountData+AccountModel.swift */; };
F88BC51F29E03ED300CE6141 /* ClientKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC51E29E03ED300CE6141 /* ClientKit */; };
F88BC52029E03F2300CE6141 /* TextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CE829ACAF820020C534 /* TextView.swift */; };
F88BC52129E03F2600CE6141 /* TextModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CEA29ACBAA80020C534 /* TextModel.swift */; };
F88BC52229E03F6D00CE6141 /* View+Keyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8864CF029ACFFB80020C534 /* View+Keyboard.swift */; };
F88BC52329E03F9D00CE6141 /* Color+SystemColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DE42966E160001D9973 /* Color+SystemColors.swift */; };
F88BC52429E03FA600CE6141 /* Color+Assets.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8210DE62966E1D1001D9973 /* Color+Assets.swift */; };
F88BC52729E0431D00CE6141 /* ServicesKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC52629E0431D00CE6141 /* ServicesKit */; };
F88BC52A29E046D700CE6141 /* WidgetsKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC52929E046D700CE6141 /* WidgetsKit */; };
F88BC52D29E04BB600CE6141 /* EnvironmentKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC52C29E04BB600CE6141 /* EnvironmentKit */; };
F88BC52F29E04C5F00CE6141 /* EnvironmentKit in Frameworks */ = {isa = PBXBuildFile; productRef = F88BC52E29E04C5F00CE6141 /* EnvironmentKit */; };
F88BC53029E0672000CE6141 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = F835082629BEF9C400DE3247 /* Localizable.strings */; };
F88C246C295C37B80006098B /* VernissageApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88C246B295C37B80006098B /* VernissageApp.swift */; };
F88C246E295C37B80006098B /* MainView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88C246D295C37B80006098B /* MainView.swift */; };
F88C2470295C37BB0006098B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F88C246F295C37BB0006098B /* Assets.xcassets */; };
@ -145,23 +121,15 @@
F88E4D48297E90CD0057491A /* TrendStatusesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88E4D47297E90CD0057491A /* TrendStatusesView.swift */; };
F88E4D4A297EA0490057491A /* RouterPath.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88E4D49297EA0490057491A /* RouterPath.swift */; };
F88E4D4D297EA4290057491A /* EmojiText in Frameworks */ = {isa = PBXBuildFile; productRef = F88E4D4C297EA4290057491A /* EmojiText */; };
F88E4D54297EA7EE0057491A /* MarkdownFormattedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88E4D53297EA7EE0057491A /* MarkdownFormattedText.swift */; };
F88E4D56297EAD6E0057491A /* AppRouteur.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88E4D55297EAD6E0057491A /* AppRouteur.swift */; };
F88FAD21295F3944009B20C9 /* HomeFeedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD20295F3944009B20C9 /* HomeFeedView.swift */; };
F88FAD27295F400E009B20C9 /* NotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD26295F400E009B20C9 /* NotificationsView.swift */; };
F88FAD2A295F43B8009B20C9 /* AccountData+CoreDataClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD28295F43B8009B20C9 /* AccountData+CoreDataClass.swift */; };
F88FAD2B295F43B8009B20C9 /* AccountData+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD29295F43B8009B20C9 /* AccountData+CoreDataProperties.swift */; };
F88FAD2D295F4AD7009B20C9 /* ApplicationState.swift in Sources */ = {isa = PBXBuildFile; fileRef = F88FAD2C295F4AD7009B20C9 /* ApplicationState.swift */; };
F8911A1729DE914D00770F44 /* NavigationMenu.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1629DE914D00770F44 /* NavigationMenu.swift */; };
F8911A1A29DEA0F500770F44 /* MenuPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1929DEA0F500770F44 /* MenuPosition.swift */; };
F8911A1B29DEA0F500770F44 /* MenuPosition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8911A1929DEA0F500770F44 /* MenuPosition.swift */; };
F891E7CE29C35BF50022C449 /* ImageRowItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = F891E7CD29C35BF50022C449 /* ImageRowItem.swift */; };
F891E7D029C368750022C449 /* ImageRowItemAsync.swift in Sources */ = {isa = PBXBuildFile; fileRef = F891E7CF29C368750022C449 /* ImageRowItemAsync.swift */; };
F897978829681B9C00B22335 /* UserAvatar.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897978729681B9C00B22335 /* UserAvatar.swift */; };
F897978A2968314A00B22335 /* LoadingIndicator.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89797892968314A00B22335 /* LoadingIndicator.swift */; };
F897978D2968369600B22335 /* HapticService.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897978C2968369600B22335 /* HapticService.swift */; };
F897978F29684BCB00B22335 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F897978E29684BCB00B22335 /* LoadingView.swift */; };
F8984E4D296B648000A2610F /* UIImage+Blurhash.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8984E4C296B648000A2610F /* UIImage+Blurhash.swift */; };
F898DE702972868A004B4A6A /* String+Empty.swift in Sources */ = {isa = PBXBuildFile; fileRef = F898DE6F2972868A004B4A6A /* String+Empty.swift */; };
F8996DEB2971D29D0043EEC6 /* View+Transition.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8996DEA2971D29D0043EEC6 /* View+Transition.swift */; };
F89992C9296D6DC7005994BF /* CommentBodyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89992C8296D6DC7005994BF /* CommentBodyView.swift */; };
@ -172,12 +140,10 @@
F89B5CC029D019B600549F2F /* HTMLString in Frameworks */ = {isa = PBXBuildFile; productRef = F89B5CBF29D019B600549F2F /* HTMLString */; };
F89B5CC229D01BF700549F2F /* InstanceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89B5CC129D01BF700549F2F /* InstanceView.swift */; };
F89CEB802984198600A1376F /* AttachmentData+HighestImage.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89CEB7F2984198600A1376F /* AttachmentData+HighestImage.swift */; };
F89D6C3F29716E41001DA3D4 /* Theme.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C3E29716E41001DA3D4 /* Theme.swift */; };
F89D6C4229717FDC001DA3D4 /* AccountsSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C4129717FDC001DA3D4 /* AccountsSectionView.swift */; };
F89D6C4429718092001DA3D4 /* AccentsSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C4329718092001DA3D4 /* AccentsSectionView.swift */; };
F89D6C4629718193001DA3D4 /* GeneralSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C4529718193001DA3D4 /* GeneralSectionView.swift */; };
F89D6C4A297196FF001DA3D4 /* ImageViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89D6C49297196FF001DA3D4 /* ImageViewer.swift */; };
F89F57AE29D1B82700001EE3 /* TagWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89F57AD29D1B82600001EE3 /* TagWidget.swift */; };
F89F57B029D1C11200001EE3 /* RelationshipModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F89F57AF29D1C11200001EE3 /* RelationshipModel.swift */; };
F8A93D7E2965FD89001D8331 /* UserProfileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8A93D7D2965FD89001D8331 /* UserProfileView.swift */; };
F8AD061329A565620042F111 /* String+Random.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8AD061229A565620042F111 /* String+Random.swift */; };
@ -191,7 +157,6 @@
F8C5E56229892CC300ADF6A7 /* FirstAppear.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C5E56129892CC300ADF6A7 /* FirstAppear.swift */; };
F8CAE63E29B8902D001E0372 /* ClearButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CAE63D29B8902D001E0372 /* ClearButton.swift */; };
F8CAE64029B8E6E1001E0372 /* UIApplication+Window.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CAE63F29B8E6E1001E0372 /* UIApplication+Window.swift */; };
F8CC95CE2970761D00C9C2AC /* TintColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CC95CD2970761D00C9C2AC /* TintColor.swift */; };
F8CEEDF829ABADDD00DBED66 /* UIImage+Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CEEDF729ABADDD00DBED66 /* UIImage+Size.swift */; };
F8CEEDFA29ABAFD200DBED66 /* ImageFileTranseferable.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CEEDF929ABAFD200DBED66 /* ImageFileTranseferable.swift */; };
F8D5444329D4066C002225D6 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8D5444229D4066C002225D6 /* AppDelegate.swift */; };
@ -209,7 +174,6 @@
F8FA9919299FA35A007AB130 /* PhotoAttachment.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FA9918299FA35A007AB130 /* PhotoAttachment.swift */; };
F8FA991C299FA8C2007AB130 /* ImageUploadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FA991B299FA8C2007AB130 /* ImageUploadView.swift */; };
F8FA991E299FAB92007AB130 /* PhotoEditorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FA991D299FAB92007AB130 /* PhotoEditorView.swift */; };
F8FA9920299FDDC3007AB130 /* TextInputField.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8FA991F299FDDC3007AB130 /* TextInputField.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@ -258,22 +222,16 @@
F8210DCE2966B600001D9973 /* ImageRowAsync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRowAsync.swift; sourceTree = "<group>"; };
F8210DDC2966CF17001D9973 /* StatusData+Status.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "StatusData+Status.swift"; sourceTree = "<group>"; };
F8210DDE2966CFC7001D9973 /* AttachmentData+Attachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttachmentData+Attachment.swift"; sourceTree = "<group>"; };
F8210DE42966E160001D9973 /* Color+SystemColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+SystemColors.swift"; sourceTree = "<group>"; };
F8210DE62966E1D1001D9973 /* Color+Assets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Color+Assets.swift"; sourceTree = "<group>"; };
F8210DE92966E4F9001D9973 /* AnimatePlaceholderModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnimatePlaceholderModifier.swift; sourceTree = "<group>"; };
F835082529BEF9C400DE3247 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
F835082729BEFA1E00DE3247 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = "<group>"; };
F837269429A221420098D3C4 /* PixelfedKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = PixelfedKit; sourceTree = "<group>"; };
F83901A5295D8EC000456AE2 /* LabelIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LabelIcon.swift; sourceTree = "<group>"; };
F83CBEFA298298A1002972C8 /* ImageCarouselPicture.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCarouselPicture.swift; sourceTree = "<group>"; };
F844F42429D2DC39000DD896 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
F857F9FC297D8ED3002C109C /* ActionMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionMenu.swift; sourceTree = "<group>"; };
F85D4970296402DC00751DF7 /* AuthorizationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationService.swift; sourceTree = "<group>"; };
F85D4972296406E700751DF7 /* BottomRight.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomRight.swift; sourceTree = "<group>"; };
F85D4974296407F100751DF7 /* HomeTimelineService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeTimelineService.swift; sourceTree = "<group>"; };
F85D497629640A5200751DF7 /* ImageRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRow.swift; sourceTree = "<group>"; };
F85D497829640B9D00751DF7 /* ImagesCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImagesCarousel.swift; sourceTree = "<group>"; };
F85D497A29640C8200751DF7 /* UsernameRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UsernameRow.swift; sourceTree = "<group>"; };
F85D497C29640D5900751DF7 /* InteractionRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InteractionRow.swift; sourceTree = "<group>"; };
F85D497E296416C800751DF7 /* CommentsSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentsSectionView.swift; sourceTree = "<group>"; };
F85D498229642FAC00751DF7 /* AttachmentData+Comperable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttachmentData+Comperable.swift"; sourceTree = "<group>"; };
@ -282,7 +240,6 @@
F85D4DFD29B78C8400345267 /* HashtagModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HashtagModel.swift; sourceTree = "<group>"; };
F85DBF8E296732E20069BF89 /* AccountsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsView.swift; sourceTree = "<group>"; };
F86167C5297FE6CC004D1F67 /* AvatarShapesSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarShapesSectionView.swift; sourceTree = "<group>"; };
F86167C7297FE781004D1F67 /* AvatarShape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AvatarShape.swift; sourceTree = "<group>"; };
F864F75D29BB91B400B13921 /* VernissageWidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = VernissageWidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
F864F75E29BB91B400B13921 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
F864F76029BB91B400B13921 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
@ -294,9 +251,6 @@
F864F77329BB929A00B13921 /* Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provider.swift; sourceTree = "<group>"; };
F864F77729BB930000B13921 /* WidgetEntry.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetEntry.swift; sourceTree = "<group>"; };
F864F77B29BB982100B13921 /* ImageFetcher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFetcher.swift; sourceTree = "<group>"; };
F864F79E29BB9E6A00B13921 /* TintColor+Color.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TintColor+Color.swift"; sourceTree = "<group>"; };
F864F7A029BB9E8F00B13921 /* AvatarShape+Shape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AvatarShape+Shape.swift"; sourceTree = "<group>"; };
F864F7A229BB9EC700B13921 /* Theme+ColorScheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Theme+ColorScheme.swift"; sourceTree = "<group>"; };
F864F7A429BBA01D00B13921 /* CoreDataError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataError.swift; sourceTree = "<group>"; };
F866F69E296040A8002E8F88 /* ApplicationSettings+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ApplicationSettings+CoreDataClass.swift"; sourceTree = "<group>"; };
F866F69F296040A8002E8F88 /* ApplicationSettings+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ApplicationSettings+CoreDataProperties.swift"; sourceTree = "<group>"; };
@ -314,24 +268,15 @@
F86A4306299AA5E900DF7645 /* ThanksView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThanksView.swift; sourceTree = "<group>"; };
F86B7213296BFDCE00EE59EC /* UserProfileHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileHeaderView.swift; sourceTree = "<group>"; };
F86B7215296BFFDA00EE59EC /* UserProfileStatusesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileStatusesView.swift; sourceTree = "<group>"; };
F86B7217296C27C100EE59EC /* ActionButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActionButton.swift; sourceTree = "<group>"; };
F86B721D296C458700EE59EC /* BlurredImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BlurredImage.swift; sourceTree = "<group>"; };
F86B7220296C49A300EE59EC /* EmptyButtonStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyButtonStyle.swift; sourceTree = "<group>"; };
F86B7222296C4BF500EE59EC /* ContentWarning.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentWarning.swift; sourceTree = "<group>"; };
F86FB554298BF83F000131F0 /* FavouriteTouch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavouriteTouch.swift; sourceTree = "<group>"; };
F873F14B29BDB67300DE72D1 /* UIImage+Rounded.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Rounded.swift"; sourceTree = "<group>"; };
F8742FC329990AFB00E9642B /* ClientError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClientError.swift; sourceTree = "<group>"; };
F8764186298ABB520057D362 /* ViewState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewState.swift; sourceTree = "<group>"; };
F8764188298ABEC80057D362 /* ErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorView.swift; sourceTree = "<group>"; };
F876418A298AC1B80057D362 /* NoDataView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoDataView.swift; sourceTree = "<group>"; };
F876418C298AE5020057D362 /* PaginableStatusesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaginableStatusesView.swift; sourceTree = "<group>"; };
F878842129A4A4E3003CFAD2 /* AppMetadataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppMetadataService.swift; sourceTree = "<group>"; };
F87AEB912986C44E00434FB6 /* AuthorizationSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorizationSession.swift; sourceTree = "<group>"; };
F87AEB932986C51B00434FB6 /* AppConstants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppConstants.swift; sourceTree = "<group>"; };
F87AEB962986D16D00434FB6 /* AuthorisationError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorisationError.swift; sourceTree = "<group>"; };
F883401F29B62AE900C3E096 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = "<group>"; };
F8864CE829ACAF820020C534 /* TextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextView.swift; sourceTree = "<group>"; };
F8864CEA29ACBAA80020C534 /* TextModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextModel.swift; sourceTree = "<group>"; };
F8864CEE29ACE90B0020C534 /* UIFont+Font.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Font.swift"; sourceTree = "<group>"; };
F8864CF029ACFFB80020C534 /* View+Keyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Keyboard.swift"; sourceTree = "<group>"; };
F88AB05229B3613900345EDE /* PhotoUrl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoUrl.swift; sourceTree = "<group>"; };
@ -348,6 +293,8 @@
F88BC51929E0344000CE6141 /* ClientKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = ClientKit; sourceTree = "<group>"; };
F88BC51C29E0377B00CE6141 /* AccountData+AccountModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountData+AccountModel.swift"; sourceTree = "<group>"; };
F88BC52529E0421F00CE6141 /* ServicesKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = ServicesKit; sourceTree = "<group>"; };
F88BC52829E0467400CE6141 /* WidgetsKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = WidgetsKit; sourceTree = "<group>"; };
F88BC52B29E04AC200CE6141 /* EnvironmentKit */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = EnvironmentKit; sourceTree = "<group>"; };
F88C2468295C37B80006098B /* Vernissage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Vernissage.app; sourceTree = BUILT_PRODUCTS_DIR; };
F88C246B295C37B80006098B /* VernissageApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VernissageApp.swift; sourceTree = "<group>"; };
F88C246D295C37B80006098B /* MainView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainView.swift; sourceTree = "<group>"; };
@ -359,23 +306,16 @@
F88E4D41297E69FD0057491A /* StatusesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusesView.swift; sourceTree = "<group>"; };
F88E4D47297E90CD0057491A /* TrendStatusesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrendStatusesView.swift; sourceTree = "<group>"; };
F88E4D49297EA0490057491A /* RouterPath.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RouterPath.swift; sourceTree = "<group>"; };
F88E4D53297EA7EE0057491A /* MarkdownFormattedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MarkdownFormattedText.swift; sourceTree = "<group>"; };
F88E4D55297EAD6E0057491A /* AppRouteur.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRouteur.swift; sourceTree = "<group>"; };
F88FAD20295F3944009B20C9 /* HomeFeedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeFeedView.swift; sourceTree = "<group>"; };
F88FAD26295F400E009B20C9 /* NotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationsView.swift; sourceTree = "<group>"; };
F88FAD28295F43B8009B20C9 /* AccountData+CoreDataClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountData+CoreDataClass.swift"; sourceTree = "<group>"; };
F88FAD29295F43B8009B20C9 /* AccountData+CoreDataProperties.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AccountData+CoreDataProperties.swift"; sourceTree = "<group>"; };
F88FAD2C295F4AD7009B20C9 /* ApplicationState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationState.swift; sourceTree = "<group>"; };
F8911A1629DE914D00770F44 /* NavigationMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationMenu.swift; sourceTree = "<group>"; };
F8911A1829DE9E5500770F44 /* Vernissage-007.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-007.xcdatamodel"; sourceTree = "<group>"; };
F8911A1929DEA0F500770F44 /* MenuPosition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuPosition.swift; sourceTree = "<group>"; };
F891E7CD29C35BF50022C449 /* ImageRowItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRowItem.swift; sourceTree = "<group>"; };
F891E7CF29C368750022C449 /* ImageRowItemAsync.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageRowItemAsync.swift; sourceTree = "<group>"; };
F897978729681B9C00B22335 /* UserAvatar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAvatar.swift; sourceTree = "<group>"; };
F89797892968314A00B22335 /* LoadingIndicator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingIndicator.swift; sourceTree = "<group>"; };
F897978C2968369600B22335 /* HapticService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HapticService.swift; sourceTree = "<group>"; };
F897978E29684BCB00B22335 /* LoadingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadingView.swift; sourceTree = "<group>"; };
F8984E4C296B648000A2610F /* UIImage+Blurhash.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Blurhash.swift"; sourceTree = "<group>"; };
F898DE6F2972868A004B4A6A /* String+Empty.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Empty.swift"; sourceTree = "<group>"; };
F8996DEA2971D29D0043EEC6 /* View+Transition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+Transition.swift"; sourceTree = "<group>"; };
F89992C8296D6DC7005994BF /* CommentBodyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommentBodyView.swift; sourceTree = "<group>"; };
@ -385,13 +325,11 @@
F89AC00629A208CC00F4159F /* PlaceSelectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaceSelectorView.swift; sourceTree = "<group>"; };
F89B5CC129D01BF700549F2F /* InstanceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InstanceView.swift; sourceTree = "<group>"; };
F89CEB7F2984198600A1376F /* AttachmentData+HighestImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AttachmentData+HighestImage.swift"; sourceTree = "<group>"; };
F89D6C3E29716E41001DA3D4 /* Theme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Theme.swift; sourceTree = "<group>"; };
F89D6C4129717FDC001DA3D4 /* AccountsSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsSectionView.swift; sourceTree = "<group>"; };
F89D6C4329718092001DA3D4 /* AccentsSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccentsSectionView.swift; sourceTree = "<group>"; };
F89D6C4529718193001DA3D4 /* GeneralSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSectionView.swift; sourceTree = "<group>"; };
F89D6C49297196FF001DA3D4 /* ImageViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageViewer.swift; sourceTree = "<group>"; };
F89F0605299139F6003DC875 /* Vernissage-002.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-002.xcdatamodel"; sourceTree = "<group>"; };
F89F57AD29D1B82600001EE3 /* TagWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TagWidget.swift; sourceTree = "<group>"; };
F89F57AF29D1C11200001EE3 /* RelationshipModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelationshipModel.swift; sourceTree = "<group>"; };
F8A93D7D2965FD89001D8331 /* UserProfileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserProfileView.swift; sourceTree = "<group>"; };
F8AD061229A565620042F111 /* String+Random.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Random.swift"; sourceTree = "<group>"; };
@ -411,7 +349,6 @@
F8CAE63D29B8902D001E0372 /* ClearButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ClearButton.swift; sourceTree = "<group>"; };
F8CAE63F29B8E6E1001E0372 /* UIApplication+Window.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIApplication+Window.swift"; sourceTree = "<group>"; };
F8CAE64129B8F1AF001E0372 /* Vernissage-005.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "Vernissage-005.xcdatamodel"; sourceTree = "<group>"; };
F8CC95CD2970761D00C9C2AC /* TintColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TintColor.swift; sourceTree = "<group>"; };
F8CEEDF729ABADDD00DBED66 /* UIImage+Size.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Size.swift"; sourceTree = "<group>"; };
F8CEEDF929ABAFD200DBED66 /* ImageFileTranseferable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageFileTranseferable.swift; sourceTree = "<group>"; };
F8D5444229D4066C002225D6 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@ -432,7 +369,6 @@
F8FA9918299FA35A007AB130 /* PhotoAttachment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoAttachment.swift; sourceTree = "<group>"; };
F8FA991B299FA8C2007AB130 /* ImageUploadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageUploadView.swift; sourceTree = "<group>"; };
F8FA991D299FAB92007AB130 /* PhotoEditorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoEditorView.swift; sourceTree = "<group>"; };
F8FA991F299FDDC3007AB130 /* TextInputField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextInputField.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -443,6 +379,7 @@
F864F76129BB91B400B13921 /* SwiftUI.framework in Frameworks */,
F864F77A29BB94A800B13921 /* PixelfedKit in Frameworks */,
F864F75F29BB91B400B13921 /* WidgetKit.framework in Frameworks */,
F88BC52F29E04C5F00CE6141 /* EnvironmentKit in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -466,9 +403,10 @@
F88E4D4D297EA4290057491A /* EmojiText in Frameworks */,
F8210DD72966BB7E001D9973 /* NukeExtensions in Frameworks */,
F83E00ED29A2237C005D25A3 /* PixelfedKit in Frameworks */,
F88BC52D29E04BB600CE6141 /* EnvironmentKit in Frameworks */,
F8210DD92966BB7E001D9973 /* NukeUI in Frameworks */,
F85E132529741F05006A051D /* ActivityIndicatorView in Frameworks */,
F89B5CC029D019B600549F2F /* HTMLString in Frameworks */,
F88BC52A29E046D700CE6141 /* WidgetsKit in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -547,18 +485,12 @@
F85D49862964334100751DF7 /* String+Date.swift */,
F898DE6F2972868A004B4A6A /* String+Empty.swift */,
F8AD061229A565620042F111 /* String+Random.swift */,
F8210DE42966E160001D9973 /* Color+SystemColors.swift */,
F8210DE62966E1D1001D9973 /* Color+Assets.swift */,
F8984E4C296B648000A2610F /* UIImage+Blurhash.swift */,
F8CEEDF729ABADDD00DBED66 /* UIImage+Size.swift */,
F8E6D03429CE161B00416CCA /* UIImage+Jpeg.swift */,
F8996DEA2971D29D0043EEC6 /* View+Transition.swift */,
F8864CEE29ACE90B0020C534 /* UIFont+Font.swift */,
F8864CF029ACFFB80020C534 /* View+Keyboard.swift */,
F8CAE63F29B8E6E1001E0372 /* UIApplication+Window.swift */,
F864F79E29BB9E6A00B13921 /* TintColor+Color.swift */,
F864F7A029BB9E8F00B13921 /* AvatarShape+Shape.swift */,
F864F7A229BB9EC700B13921 /* Theme+ColorScheme.swift */,
F873F14B29BDB67300DE72D1 /* UIImage+Rounded.swift */,
F8E9392029C0DA7E002BB3B8 /* LazyImageState+ImageResponse.swift */,
F88BC51C29E0377B00CE6141 /* AccountData+AccountModel.swift */,
@ -620,31 +552,16 @@
F83901A2295D863B00456AE2 /* Widgets */ = {
isa = PBXGroup;
children = (
F83901A5295D8EC000456AE2 /* LabelIcon.swift */,
F85D4972296406E700751DF7 /* BottomRight.swift */,
F85D497629640A5200751DF7 /* ImageRow.swift */,
F891E7CD29C35BF50022C449 /* ImageRowItem.swift */,
F8210DCE2966B600001D9973 /* ImageRowAsync.swift */,
F891E7CF29C368750022C449 /* ImageRowItemAsync.swift */,
F85D497829640B9D00751DF7 /* ImagesCarousel.swift */,
F83CBEFA298298A1002972C8 /* ImageCarouselPicture.swift */,
F89F57AD29D1B82600001EE3 /* TagWidget.swift */,
F85D497A29640C8200751DF7 /* UsernameRow.swift */,
F85D497C29640D5900751DF7 /* InteractionRow.swift */,
F897978729681B9C00B22335 /* UserAvatar.swift */,
F89797892968314A00B22335 /* LoadingIndicator.swift */,
F88AB05429B3626300345EDE /* ImageGrid.swift */,
F8AFF7C329B25EF40087D083 /* ImagesGrid.swift */,
F86B7217296C27C100EE59EC /* ActionButton.swift */,
F86B721D296C458700EE59EC /* BlurredImage.swift */,
F86B7222296C4BF500EE59EC /* ContentWarning.swift */,
F89D6C49297196FF001DA3D4 /* ImageViewer.swift */,
F857F9FC297D8ED3002C109C /* ActionMenu.swift */,
F88E4D53297EA7EE0057491A /* MarkdownFormattedText.swift */,
F8764188298ABEC80057D362 /* ErrorView.swift */,
F876418A298AC1B80057D362 /* NoDataView.swift */,
F86FB554298BF83F000131F0 /* FavouriteTouch.swift */,
F8FA991F299FDDC3007AB130 /* TextInputField.swift */,
);
path = Widgets;
sourceTree = "<group>";
@ -667,18 +584,6 @@
path = VernissageWidget;
sourceTree = "<group>";
};
F864F79C29BB9D2400B13921 /* Models */ = {
isa = PBXGroup;
children = (
F8CC95CD2970761D00C9C2AC /* TintColor.swift */,
F86167C7297FE781004D1F67 /* AvatarShape.swift */,
F89D6C3E29716E41001DA3D4 /* Theme.swift */,
F87AEB932986C51B00434FB6 /* AppConstants.swift */,
F8911A1929DEA0F500770F44 /* MenuPosition.swift */,
);
path = Models;
sourceTree = "<group>";
};
F86B721F296C498B00EE59EC /* Styles */ = {
isa = PBXGroup;
children = (
@ -747,15 +652,6 @@
path = Subviews;
sourceTree = "<group>";
};
F8864CF229AD05420020C534 /* TextView */ = {
isa = PBXGroup;
children = (
F8864CEA29ACBAA80020C534 /* TextModel.swift */,
F8864CE829ACAF820020C534 /* TextView.swift */,
);
path = TextView;
sourceTree = "<group>";
};
F88BC50329E02F3900CE6141 /* VernissageShareExtension */ = {
isa = PBXGroup;
children = (
@ -771,6 +667,8 @@
F88C245F295C37B80006098B = {
isa = PBXGroup;
children = (
F88BC52B29E04AC200CE6141 /* EnvironmentKit */,
F88BC52829E0467400CE6141 /* WidgetsKit */,
F88BC52529E0421F00CE6141 /* ServicesKit */,
F837269429A221420098D3C4 /* PixelfedKit */,
F88BC51929E0344000CE6141 /* ClientKit */,
@ -778,10 +676,8 @@
F844F42429D2DC39000DD896 /* LICENSE */,
F8B3699A29D86EB600BE3808 /* .swiftlint.yml */,
F8B3699B29D86EBD00BE3808 /* .gitignore */,
F8864CF229AD05420020C534 /* TextView */,
F8CB3DF029D80B1E00CDAE5A /* Resources */,
F835081F29BEF88600DE3247 /* Localization */,
F864F79C29BB9D2400B13921 /* Models */,
F8341F96295C6427009C8EE6 /* CoreData */,
F88C246A295C37B80006098B /* Vernissage */,
F864F76229BB91B400B13921 /* VernissageWidget */,
@ -808,7 +704,6 @@
F866F6A829604FFF002E8F88 /* Info.plist */,
F802884D297AEEAA000BDD51 /* Errors */,
F86B721F296C498B00EE59EC /* Styles */,
F897978B2968367E00B22335 /* Haptics */,
F8210DE82966E4D8001D9973 /* Modifiers */,
F88FAD30295F5010009B20C9 /* Services */,
F8C5E56029892C8A00ADF6A7 /* ViewModifiers */,
@ -849,14 +744,6 @@
path = Services;
sourceTree = "<group>";
};
F897978B2968367E00B22335 /* Haptics */ = {
isa = PBXGroup;
children = (
F897978C2968369600B22335 /* HapticService.swift */,
);
path = Haptics;
sourceTree = "<group>";
};
F89992C5296D3DF8005994BF /* Frameworks */ = {
isa = PBXGroup;
children = (
@ -897,7 +784,6 @@
F8B9B354298D4B88009CC69C /* EnvironmentObjects */ = {
isa = PBXGroup;
children = (
F88FAD2C295F4AD7009B20C9 /* ApplicationState.swift */,
F86A4302299A9AF500DF7645 /* TipsStore.swift */,
);
path = EnvironmentObjects;
@ -966,6 +852,7 @@
name = VernissageWidgetExtension;
packageProductDependencies = (
F864F77929BB94A800B13921 /* PixelfedKit */,
F88BC52E29E04C5F00CE6141 /* EnvironmentKit */,
);
productName = VernissageWidgetExtension;
productReference = F864F75D29BB91B400B13921 /* VernissageWidgetExtension.appex */;
@ -1013,12 +900,13 @@
F8210DD42966BB7E001D9973 /* Nuke */,
F8210DD62966BB7E001D9973 /* NukeExtensions */,
F8210DD82966BB7E001D9973 /* NukeUI */,
F85E132429741F05006A051D /* ActivityIndicatorView */,
F88E4D4C297EA4290057491A /* EmojiText */,
F83E00EC29A2237C005D25A3 /* PixelfedKit */,
F89B5CBF29D019B600549F2F /* HTMLString */,
F88BC51A29E0350300CE6141 /* ClientKit */,
F88BC52629E0431D00CE6141 /* ServicesKit */,
F88BC52929E046D700CE6141 /* WidgetsKit */,
F88BC52C29E04BB600CE6141 /* EnvironmentKit */,
);
productName = Vernissage;
productReference = F88C2468295C37B80006098B /* Vernissage.app */;
@ -1058,7 +946,6 @@
mainGroup = F88C245F295C37B80006098B;
packageReferences = (
F8210DD32966BB7E001D9973 /* XCRemoteSwiftPackageReference "Nuke" */,
F85E132329741F05006A051D /* XCRemoteSwiftPackageReference "ActivityIndicatorView" */,
F88E4D4B297EA4290057491A /* XCRemoteSwiftPackageReference "EmojiText" */,
F89B5CBE29D019B600549F2F /* XCRemoteSwiftPackageReference "HTMLString" */,
);
@ -1087,6 +974,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
F88BC53029E0672000CE6141 /* Localizable.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1132,21 +1020,16 @@
F864F77829BB930000B13921 /* WidgetEntry.swift in Sources */,
F864F77529BB92CE00B13921 /* Provider.swift in Sources */,
F864F77629BB92CE00B13921 /* VernissageWidgetEntryView.swift in Sources */,
F864F79D29BB9D3400B13921 /* AppConstants.swift in Sources */,
F864F77C29BB982100B13921 /* ImageFetcher.swift in Sources */,
F8F6E44229BC58F20004795E /* Vernissage.xcdatamodeld in Sources */,
F8F6E44C29BCC1F70004795E /* SmallWidgetView.swift in Sources */,
F864F76629BB91B400B13921 /* VernissageWidget.swift in Sources */,
F8F6E44D29BCC1F90004795E /* MediumWidgetView.swift in Sources */,
F864F79029BB9B3300B13921 /* TintColor.swift in Sources */,
F8F6E44E29BCC1FB0004795E /* LargeWidgetView.swift in Sources */,
F864F76429BB91B400B13921 /* VernissageWidgetBundle.swift in Sources */,
F864F78F29BB9B3100B13921 /* AvatarShape.swift in Sources */,
F864F78E29BB9B2F00B13921 /* Theme.swift in Sources */,
F864F77D29BB9A4600B13921 /* AttachmentData+CoreDataClass.swift in Sources */,
F864F7A629BBA01D00B13921 /* CoreDataError.swift in Sources */,
F864F77E29BB9A4900B13921 /* AttachmentData+CoreDataProperties.swift in Sources */,
F8911A1B29DEA0F500770F44 /* MenuPosition.swift in Sources */,
F864F78229BB9A6500B13921 /* StatusData+CoreDataClass.swift in Sources */,
F864F78329BB9A6800B13921 /* StatusData+CoreDataProperties.swift in Sources */,
F864F78429BB9A6E00B13921 /* ApplicationSettings+CoreDataClass.swift in Sources */,
@ -1168,11 +1051,7 @@
files = (
F88BC50529E02F3900CE6141 /* ShareViewController.swift in Sources */,
F88BC52229E03F6D00CE6141 /* View+Keyboard.swift in Sources */,
F88BC52429E03FA600CE6141 /* Color+Assets.swift in Sources */,
F88BC52129E03F2600CE6141 /* TextModel.swift in Sources */,
F88BC52029E03F2300CE6141 /* TextView.swift in Sources */,
F88BC51629E0307F00CE6141 /* NotificationsName.swift in Sources */,
F88BC52329E03F9D00CE6141 /* Color+SystemColors.swift in Sources */,
F88BC51329E02FD800CE6141 /* ComposeView.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -1189,14 +1068,9 @@
F89D6C4229717FDC001DA3D4 /* AccountsSectionView.swift in Sources */,
F80048082961E6DE00E6868A /* StatusDataHandler.swift in Sources */,
F866F6A0296040A8002E8F88 /* ApplicationSettings+CoreDataClass.swift in Sources */,
F8764189298ABEC80057D362 /* ErrorView.swift in Sources */,
F864F7A129BB9E8F00B13921 /* AvatarShape+Shape.swift in Sources */,
F8210DEA2966E4F9001D9973 /* AnimatePlaceholderModifier.swift in Sources */,
F8B08862299435C9002AB40A /* SupportView.swift in Sources */,
F8984E4D296B648000A2610F /* UIImage+Blurhash.swift in Sources */,
F8CAE64029B8E6E1001E0372 /* UIApplication+Window.swift in Sources */,
F897978A2968314A00B22335 /* LoadingIndicator.swift in Sources */,
F8210DE52966E160001D9973 /* Color+SystemColors.swift in Sources */,
F8CAE63E29B8902D001E0372 /* ClearButton.swift in Sources */,
F8B05ACB29B489B100857221 /* HapticsSectionView.swift in Sources */,
F88FAD2B295F43B8009B20C9 /* AccountData+CoreDataProperties.swift in Sources */,
@ -1213,47 +1087,36 @@
F88FAD2A295F43B8009B20C9 /* AccountData+CoreDataClass.swift in Sources */,
F85DBF8F296732E20069BF89 /* AccountsView.swift in Sources */,
F85D49872964334100751DF7 /* String+Date.swift in Sources */,
F897978829681B9C00B22335 /* UserAvatar.swift in Sources */,
F805DCF129DBEF83006A1FD9 /* ReportView.swift in Sources */,
F8B0886029943498002AB40A /* OtherSectionView.swift in Sources */,
F808641429756666009F035C /* NotificationRowView.swift in Sources */,
F8210DDD2966CF17001D9973 /* StatusData+Status.swift in Sources */,
F8210DCF2966B600001D9973 /* ImageRowAsync.swift in Sources */,
F85D498329642FAC00751DF7 /* AttachmentData+Comperable.swift in Sources */,
F85D497B29640C8200751DF7 /* UsernameRow.swift in Sources */,
F86A4305299AA12800DF7645 /* PurchaseError.swift in Sources */,
F8B05ACE29B48E2F00857221 /* MediaSettingsView.swift in Sources */,
F89D6C4429718092001DA3D4 /* AccentsSectionView.swift in Sources */,
F88E4D42297E69FD0057491A /* StatusesView.swift in Sources */,
F8E9391F29C0BCFA002BB3B8 /* ImageContextMenu.swift in Sources */,
F86FB555298BF83F000131F0 /* FavouriteTouch.swift in Sources */,
F878842229A4A4E3003CFAD2 /* AppMetadataService.swift in Sources */,
F85D497929640B9D00751DF7 /* ImagesCarousel.swift in Sources */,
F89D6C3F29716E41001DA3D4 /* Theme.swift in Sources */,
F8864CE929ACAF820020C534 /* TextView.swift in Sources */,
F89AC00529A1F9B500F4159F /* AppMetadata.swift in Sources */,
F8CC95CE2970761D00C9C2AC /* TintColor.swift in Sources */,
F80048052961850500E6868A /* StatusData+CoreDataClass.swift in Sources */,
F891E7CE29C35BF50022C449 /* ImageRowItem.swift in Sources */,
F86B7221296C49A300EE59EC /* EmptyButtonStyle.swift in Sources */,
F80048042961850500E6868A /* AttachmentData+CoreDataProperties.swift in Sources */,
F86B7223296C4BF500EE59EC /* ContentWarning.swift in Sources */,
F88E4D4A297EA0490057491A /* RouterPath.swift in Sources */,
F83901A6295D8EC000456AE2 /* LabelIcon.swift in Sources */,
F8FA991C299FA8C2007AB130 /* ImageUploadView.swift in Sources */,
F8CEEDF829ABADDD00DBED66 /* UIImage+Size.swift in Sources */,
F88E4D48297E90CD0057491A /* TrendStatusesView.swift in Sources */,
F800480A2961EA1900E6868A /* AttachmentDataHandler.swift in Sources */,
F80048032961850500E6868A /* AttachmentData+CoreDataClass.swift in Sources */,
F891E7D029C368750022C449 /* ImageRowItemAsync.swift in Sources */,
F897978D2968369600B22335 /* HapticService.swift in Sources */,
F89D6C4A297196FF001DA3D4 /* ImageViewer.swift in Sources */,
F8A93D7E2965FD89001D8331 /* UserProfileView.swift in Sources */,
F88C246E295C37B80006098B /* MainView.swift in Sources */,
F864F7A329BB9EC700B13921 /* Theme+ColorScheme.swift in Sources */,
F89AC00729A208CC00F4159F /* PlaceSelectorView.swift in Sources */,
F8AFF7C429B25EF40087D083 /* ImagesGrid.swift in Sources */,
F86B721E296C458700EE59EC /* BlurredImage.swift in Sources */,
F8FA9919299FA35A007AB130 /* PhotoAttachment.swift in Sources */,
F88C2478295C37BB0006098B /* Vernissage.xcdatamodeld in Sources */,
F8AD061329A565620042F111 /* String+Random.swift in Sources */,
@ -1262,24 +1125,18 @@
F89A46DE296EABA20062125F /* StatusPlaceholderView.swift in Sources */,
F88C2482295C3A4F0006098B /* StatusView.swift in Sources */,
F866F6A329604161002E8F88 /* AccountDataHandler.swift in Sources */,
F8911A1A29DEA0F500770F44 /* MenuPosition.swift in Sources */,
F8996DEB2971D29D0043EEC6 /* View+Transition.swift in Sources */,
F876418B298AC1B80057D362 /* NoDataView.swift in Sources */,
F8E9392129C0DA7E002BB3B8 /* LazyImageState+ImageResponse.swift in Sources */,
F89D6C4629718193001DA3D4 /* GeneralSectionView.swift in Sources */,
F85D497F296416C800751DF7 /* CommentsSectionView.swift in Sources */,
F866F6A529604194002E8F88 /* ApplicationSettingsHandler.swift in Sources */,
F857F9FD297D8ED3002C109C /* ActionMenu.swift in Sources */,
F8B0885E29942E31002AB40A /* ThirdPartyView.swift in Sources */,
F8E6D03329CDD52500416CCA /* EditProfileView.swift in Sources */,
F876418D298AE5020057D362 /* PaginableStatusesView.swift in Sources */,
F85D49852964301800751DF7 /* StatusData+Attachments.swift in Sources */,
F8764187298ABB520057D362 /* ViewState.swift in Sources */,
F864F79F29BB9E6A00B13921 /* TintColor+Color.swift in Sources */,
F8210DE72966E1D1001D9973 /* Color+Assets.swift in Sources */,
F88ABD9429687CA4004EF61E /* ComposeView.swift in Sources */,
F89CEB802984198600A1376F /* AttachmentData+HighestImage.swift in Sources */,
F87AEB942986C51B00434FB6 /* AppConstants.swift in Sources */,
F86B7214296BFDCE00EE59EC /* UserProfileHeaderView.swift in Sources */,
F85D497D29640D5900751DF7 /* InteractionRow.swift in Sources */,
F86167C6297FE6CC004D1F67 /* AvatarShapesSectionView.swift in Sources */,
@ -1297,32 +1154,24 @@
F89F57B029D1C11200001EE3 /* RelationshipModel.swift in Sources */,
F88AB05829B36B8200345EDE /* AccountsPhotoView.swift in Sources */,
F85D4971296402DC00751DF7 /* AuthorizationService.swift in Sources */,
F89F57AE29D1B82700001EE3 /* TagWidget.swift in Sources */,
F88AB05329B3613900345EDE /* PhotoUrl.swift in Sources */,
F88E4D56297EAD6E0057491A /* AppRouteur.swift in Sources */,
F88FAD27295F400E009B20C9 /* NotificationsView.swift in Sources */,
F86B7216296BFFDA00EE59EC /* UserProfileStatusesView.swift in Sources */,
F897978F29684BCB00B22335 /* LoadingView.swift in Sources */,
F89992C9296D6DC7005994BF /* CommentBodyView.swift in Sources */,
F88FAD2D295F4AD7009B20C9 /* ApplicationState.swift in Sources */,
F88E4D54297EA7EE0057491A /* MarkdownFormattedText.swift in Sources */,
F866F6A1296040A8002E8F88 /* ApplicationSettings+CoreDataProperties.swift in Sources */,
F8FA9920299FDDC3007AB130 /* TextInputField.swift in Sources */,
F86A4303299A9AF500DF7645 /* TipsStore.swift in Sources */,
F8C5E56229892CC300ADF6A7 /* FirstAppear.swift in Sources */,
F8DF38E629DDB98A0047F1AA /* SocialsSectionView.swift in Sources */,
F864F7A529BBA01D00B13921 /* CoreDataError.swift in Sources */,
F8864CEB29ACBAA80020C534 /* TextModel.swift in Sources */,
F83CBEFB298298A1002972C8 /* ImageCarouselPicture.swift in Sources */,
F89A46DC296EAACE0062125F /* SettingsView.swift in Sources */,
F866F6AE29606367002E8F88 /* ApplicationViewMode.swift in Sources */,
F85D4DFE29B78C8400345267 /* HashtagModel.swift in Sources */,
F866F6AA29605AFA002E8F88 /* SceneDelegate.swift in Sources */,
F86167C8297FE781004D1F67 /* AvatarShape.swift in Sources */,
F85D4973296406E700751DF7 /* BottomRight.swift in Sources */,
F8E6D03529CE161B00416CCA /* UIImage+Jpeg.swift in Sources */,
F898DE702972868A004B4A6A /* String+Empty.swift in Sources */,
F86B7218296C27C100EE59EC /* ActionButton.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -1713,14 +1562,6 @@
minimumVersion = 12.0.0;
};
};
F85E132329741F05006A051D /* XCRemoteSwiftPackageReference "ActivityIndicatorView" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/exyte/ActivityIndicatorView.git";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 1.0.0;
};
};
F88E4D4B297EA4290057491A /* XCRemoteSwiftPackageReference "EmojiText" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/divadretlaw/EmojiText";
@ -1759,11 +1600,6 @@
isa = XCSwiftPackageProductDependency;
productName = PixelfedKit;
};
F85E132429741F05006A051D /* ActivityIndicatorView */ = {
isa = XCSwiftPackageProductDependency;
package = F85E132329741F05006A051D /* XCRemoteSwiftPackageReference "ActivityIndicatorView" */;
productName = ActivityIndicatorView;
};
F864F77929BB94A800B13921 /* PixelfedKit */ = {
isa = XCSwiftPackageProductDependency;
productName = PixelfedKit;
@ -1784,6 +1620,18 @@
isa = XCSwiftPackageProductDependency;
productName = ServicesKit;
};
F88BC52929E046D700CE6141 /* WidgetsKit */ = {
isa = XCSwiftPackageProductDependency;
productName = WidgetsKit;
};
F88BC52C29E04BB600CE6141 /* EnvironmentKit */ = {
isa = XCSwiftPackageProductDependency;
productName = EnvironmentKit;
};
F88BC52E29E04C5F00CE6141 /* EnvironmentKit */ = {
isa = XCSwiftPackageProductDependency;
productName = EnvironmentKit;
};
F88E4D4C297EA4290057491A /* EmojiText */ = {
isa = XCSwiftPackageProductDependency;
package = F88E4D4B297EA4290057491A /* XCRemoteSwiftPackageReference "EmojiText" */;

View File

@ -6,6 +6,7 @@
import Foundation
import SwiftUI
import EnvironmentKit
extension UIImage {
func roundedAvatar(avatarShape: AvatarShape) -> UIImage {

View File

@ -7,6 +7,7 @@
import SwiftUI
import PixelfedKit
import OAuthSwift
import EnvironmentKit
class SceneDelegate: NSObject, UISceneDelegate {
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {

View File

@ -10,6 +10,7 @@ import ClientKit
import CoreData
import AuthenticationServices
import ServicesKit
import EnvironmentKit
/// Srvice responsible for login user into the Pixelfed account.
public class AuthorizationService {

View File

@ -8,6 +8,7 @@ import SwiftUI
import Nuke
import NukeUI
import ClientKit
import EnvironmentKit
@main
struct VernissageApp: App {

View File

@ -6,6 +6,7 @@
import Foundation
import SwiftUI
import EnvironmentKit
public extension View {
func navigationMenu<MenuItems>(menuPosition: Binding<MenuPosition>,

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import Foundation
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct AccountsPhotoView: View {
public enum ListType: Hashable {

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import Foundation
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct AccountsView: View {
public enum ListType: Hashable {

View File

@ -10,6 +10,8 @@ import PixelfedKit
import ClientKit
import UIKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct ComposeView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,8 @@
//
import SwiftUI
import ServicesKit
import WidgetsKit
struct ImageUploadView: View {
@EnvironmentObject public var routerPath: RouterPath

View File

@ -10,6 +10,8 @@ import PixelfedKit
import ClientKit
import HTMLString
import ServicesKit
import WidgetsKit
import EnvironmentKit
struct EditProfileView: View {
@EnvironmentObject private var applicationState: ApplicationState

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import Foundation
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct HashtagsView: View {
public enum ListType: Hashable {

View File

@ -6,6 +6,8 @@
import SwiftUI
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct HomeFeedView: View {
@Environment(\.managedObjectContext) private var viewContext

View File

@ -9,6 +9,8 @@ import Foundation
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct InstanceView: View {
@EnvironmentObject private var applicationState: ApplicationState

View File

@ -10,6 +10,7 @@ import CoreData
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
struct MainView: View {
@Environment(\.managedObjectContext) private var viewContext

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct NotificationsView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import NukeUI
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct NotificationRowView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct PaginableStatusesView: View {
public enum ListType: Hashable {

View File

@ -7,6 +7,7 @@
import SwiftUI
import ClientKit
import ServicesKit
import WidgetsKit
struct PhotoEditorView: View {
@EnvironmentObject var client: Client

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct PlaceSelectorView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -8,6 +8,7 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import WidgetsKit
struct ReportView: View {
@EnvironmentObject private var client: Client

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct SettingsView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct AccentsSectionView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -6,6 +6,8 @@
import SwiftUI
import ClientKit
import EnvironmentKit
import WidgetsKit
struct AccountsSectionView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct AvatarShapesSectionView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct GeneralSectionView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct HapticsSectionView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import EnvironmentKit
struct MediaSettingsView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -6,6 +6,7 @@
import SwiftUI
import StoreKit
import ServicesKit
struct SupportView: View {
@EnvironmentObject var tipsStore: TipsStore

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import ServicesKit
struct ThanksView: View {
@EnvironmentObject var routerPath: RouterPath

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import AuthenticationServices
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct SignInView: View {
@Environment(\.managedObjectContext) private var viewContext

View File

@ -7,6 +7,8 @@
import SwiftUI
import PixelfedKit
import NukeUI
import ServicesKit
import WidgetsKit
struct InstanceRowView: View {
@EnvironmentObject var routerPath: RouterPath

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import AVFoundation
import ServicesKit
import WidgetsKit
import EnvironmentKit
struct StatusView: View {
struct TappedAttachment: Identifiable {

View File

@ -7,6 +7,8 @@
import SwiftUI
import PixelfedKit
import ClientKit
import EnvironmentKit
import WidgetsKit
struct CommentBodyView: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct CommentsSectionView: View {
@Environment(\.colorScheme) var colorScheme

View File

@ -5,6 +5,7 @@
//
import SwiftUI
import WidgetsKit
struct StatusPlaceholderView: View {
@State var imageHeight: Double

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct StatusesView: View {
public enum ListType: Hashable {

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct TrendStatusesView: View {
@EnvironmentObject private var applicationState: ApplicationState

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import WidgetsKit
import EnvironmentKit
struct UserProfileHeaderView: View {
@EnvironmentObject private var applicationState: ApplicationState
@ -23,11 +25,11 @@ struct UserProfileHeaderView: View {
Spacer()
if self.relationship.muting == true {
TagWidget(value: "Muted", color: .accentColor, systemImage: "message.and.waveform.fill")
TagWidget(value: "userProfile.title.muted", color: .accentColor, systemImage: "message.and.waveform.fill")
}
if self.relationship.blocking == true {
TagWidget(value: "Blocked", color: .dangerColor, systemImage: "hand.raised.fill")
TagWidget(value: "userProfile.title.blocked", color: .dangerColor, systemImage: "hand.raised.fill")
}
}

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct UserProfileStatusesView: View {
@EnvironmentObject private var applicationState: ApplicationState

View File

@ -8,6 +8,8 @@ import SwiftUI
import PixelfedKit
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct UserProfileView: View {
@EnvironmentObject private var applicationState: ApplicationState

View File

@ -7,6 +7,7 @@
import SwiftUI
import ClientKit
import ServicesKit
import WidgetsKit
struct ImageCarouselPicture: View {
@ObservedObject public var attachment: AttachmentModel

View File

@ -6,6 +6,8 @@
import SwiftUI
import NukeUI
import EnvironmentKit
import WidgetsKit
struct ImageGrid: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -7,6 +7,8 @@
import SwiftUI
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct ImageRowItem: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -9,6 +9,8 @@ import PixelfedKit
import ClientKit
import NukeUI
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct ImageRowItemAsync: View {
@EnvironmentObject var applicationState: ApplicationState

View File

@ -6,6 +6,7 @@
import SwiftUI
import ClientKit
import ServicesKit
struct ImageViewer: View {
@Environment(\.dismiss) private var dismiss

View File

@ -9,6 +9,8 @@ import PixelfedKit
import Drops
import ClientKit
import ServicesKit
import EnvironmentKit
import WidgetsKit
struct InteractionRow: View {
typealias DeleteAction = () -> Void

View File

@ -6,6 +6,7 @@
import SwiftUI
import WidgetKit
import EnvironmentKit
struct LargeWidgetView: View {
var entry: Provider.Entry

View File

@ -6,6 +6,7 @@
import SwiftUI
import WidgetKit
import EnvironmentKit
struct MediumWidgetView: View {
var entry: Provider.Entry

View File

@ -6,6 +6,7 @@
import SwiftUI
import WidgetKit
import EnvironmentKit
struct SmallWidgetView: View {
var entry: Provider.Entry

9
WidgetsKit/.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
.DS_Store
/.build
/Packages
/*.xcodeproj
xcuserdata/
DerivedData/
.swiftpm/config/registries.json
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
.netrc

38
WidgetsKit/Package.swift Normal file
View File

@ -0,0 +1,38 @@
// swift-tools-version: 5.8
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "WidgetsKit",
platforms: [
.iOS(.v16),
.macOS(.v12),
.watchOS(.v8)
],
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "WidgetsKit",
targets: ["WidgetsKit"])
],
dependencies: [
// Dependencies declare other packages that this package depends on.
.package(url: "https://github.com/exyte/ActivityIndicatorView.git", .upToNextMajor(from: "1.0.0")),
.package(url: "https://github.com/divadretlaw/EmojiText", .upToNextMajor(from: "2.6.0")),
.package(name: "PixelfedKit", path: "../PixelfedKit"),
.package(name: "ClientKit", path: "../ClientKit"),
.package(name: "ServicesKit", path: "../ServicesKit"),
.package(name: "EnvironmentKit", path: "../EnvironmentKit")
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "WidgetsKit",
dependencies: ["ActivityIndicatorView", "EmojiText", "PixelfedKit", "ClientKit", "ServicesKit", "EnvironmentKit"]),
.testTarget(
name: "WidgetsKitTests",
dependencies: ["WidgetsKit"])
]
)

View File

@ -5,8 +5,9 @@
//
import SwiftUI
import ServicesKit
struct ActionButton<Label>: View where Label: View {
public struct ActionButton<Label>: View where Label: View {
@State public var showLoader: Bool
@State private var isDuringAction = false
@ -19,7 +20,7 @@ struct ActionButton<Label>: View where Label: View {
self.showLoader = showLoader
}
var body: some View {
public var body: some View {
Button {
Task {
HapticService.shared.fireHaptic(of: .buttonPress)

View File

@ -5,21 +5,22 @@
//
import SwiftUI
import ServicesKit
struct ActionMenu<Label: View, Content: View>: View {
public struct ActionMenu<Label: View, Content: View>: View {
@State private var isDuringAction = false
private let primaryAction: () async -> Void
private let label: () -> Label
private let content: () -> Content
init(@ViewBuilder content: @escaping () -> Content, @ViewBuilder label: @escaping () -> Label, primaryAction: @escaping () async -> Void) {
public init(@ViewBuilder content: @escaping () -> Content, @ViewBuilder label: @escaping () -> Label, primaryAction: @escaping () async -> Void) {
self.label = label
self.content = content
self.primaryAction = primaryAction
}
var body: some View {
public var body: some View {
Menu {
content()
} label: {

View File

@ -6,11 +6,16 @@
import SwiftUI
struct BlurredImage: View {
public struct BlurredImage: View {
@State var blurhash: String?
private let defaultBlurhash = "LFC6ZCso00OZ~q%29FNHE2tRr=RP"
var body: some View {
public init(blurhash: String? = nil) {
self.blurhash = blurhash
}
public var body: some View {
if let blurhash, let uiImage = UIImage(blurHash: blurhash, size: CGSize(width: 32, height: 32)) {
Image(uiImage: uiImage)
.resizable()

View File

@ -6,14 +6,14 @@
import SwiftUI
struct BottomRight<Content: View>: View {
public struct BottomRight<Content: View>: View {
let content: Content
init(@ViewBuilder content: () -> Content) {
public init(@ViewBuilder content: () -> Content) {
self.content = content()
}
var body: some View {
public var body: some View {
VStack(alignment: .trailing) {
Spacer()
HStack {

View File

@ -6,23 +6,23 @@
import SwiftUI
struct ContentWarning<Content: View, Blurred: View>: View {
public struct ContentWarning<Content: View, Blurred: View>: View {
private let spoilerText: String?
private let content: () -> Content
private let blurred: () -> Blurred
@State private var showSensitive = false
init(spoilerText: String?,
@ViewBuilder content: @escaping () -> Content,
@ViewBuilder blurred: @escaping () -> Blurred) {
public init(spoilerText: String?,
@ViewBuilder content: @escaping () -> Content,
@ViewBuilder blurred: @escaping () -> Blurred) {
self.spoilerText = spoilerText
self.content = content
self.blurred = blurred
}
var body: some View {
public var body: some View {
if self.showSensitive {
ZStack {
content()

View File

@ -6,11 +6,16 @@
import SwiftUI
struct ErrorView: View {
public struct ErrorView: View {
public var error: Error
public var refreshAction: (() async -> Void)?
var body: some View {
public init(error: Error, refreshAction: (() async -> Void)? = nil) {
self.error = error
self.refreshAction = refreshAction
}
public var body: some View {
VStack {
Image(systemName: "exclamationmark.triangle.fill")
.resizable()

View File

@ -8,7 +8,7 @@
import UIKit
extension UIImage {
public extension UIImage {
/// Code downloaded from: https://github.com/woltapp/blurhash/tree/master/Swift
public convenience init?(blurHash: String, size: CGSize, punch: Float = 1) {

View File

@ -6,18 +6,18 @@
import SwiftUI
struct FavouriteTouch: View {
public struct FavouriteTouch: View {
@State private var showThumb = 100
@State private var showCircle = 0
@State private var opacity = 1.0
private let finished: () -> Void
init(finished: @escaping () -> Void) {
public init(finished: @escaping () -> Void) {
self.finished = finished
}
var body: some View {
public var body: some View {
ZStack {
Circle()
.frame(width: 55, height: 55, alignment: .center)

View File

@ -6,11 +6,16 @@
import SwiftUI
struct LabelIcon: View {
public struct LabelIcon: View {
let iconName: String
let value: String?
var body: some View {
public init(iconName: String, value: String?) {
self.iconName = iconName
self.value = value
}
public var body: some View {
if let value, value.isEmpty == false {
HStack(alignment: .center) {
Image(systemName: iconName)

View File

@ -6,16 +6,17 @@
import SwiftUI
import ActivityIndicatorView
import EnvironmentKit
struct LoadingIndicator: View {
public struct LoadingIndicator: View {
@EnvironmentObject var applicationState: ApplicationState
@Binding var isVisible: Bool
init(isVisible: Binding<Bool> = .constant(true)) {
public init(isVisible: Binding<Bool> = .constant(true)) {
self._isVisible = isVisible
}
var body: some View {
public var body: some View {
ActivityIndicatorView(isVisible: $isVisible, type: .equalizer(count: 5))
.frame(width: 24.0, height: 16.0)
.foregroundColor(applicationState.tintColor.color())

View File

@ -7,19 +7,19 @@
import UIKit
import SwiftUI
import EmojiText
import HTML2Markdown
import EnvironmentKit
struct MarkdownFormattedText: View {
public struct MarkdownFormattedText: View {
@EnvironmentObject var applicationState: ApplicationState
private let markdown: String
private let textView = UITextView()
init(_ markdown: String) {
public init(_ markdown: String) {
self.markdown = markdown
}
var body: some View {
public var body: some View {
EmojiText(markdown: markdown, emojis: [])
}
}

View File

@ -6,17 +6,17 @@
import SwiftUI
struct NoDataView: View {
public struct NoDataView: View {
private let imageSystemName: String
private let text: LocalizedStringKey
init(imageSystemName: String, text: LocalizedStringKey) {
public init(imageSystemName: String, text: LocalizedStringKey) {
self.imageSystemName = imageSystemName
self.text = text
}
var body: some View {
public var body: some View {
VStack {
Image(systemName: self.imageSystemName)
.font(.largeTitle)

View File

@ -6,18 +6,18 @@
import SwiftUI
struct TagWidget: View {
private let value: String
public struct TagWidget: View {
private let value: LocalizedStringKey
private let color: Color
private let systemImage: String?
init(value: String, color: Color, systemImage: String? = nil) {
public init(value: LocalizedStringKey, color: Color, systemImage: String? = nil) {
self.value = value
self.color = color
self.systemImage = systemImage
}
var body: some View {
public var body: some View {
HStack {
if let systemImage {
Image(systemName: systemImage)
@ -25,7 +25,7 @@ struct TagWidget: View {
.font(.footnote)
}
Text(self.value)
Text(self.value, comment: "value")
.foregroundColor(.white)
.font(.footnote)
.fontWeight(.semibold)

View File

@ -7,16 +7,16 @@
import Foundation
import SwiftUI
struct TextInputField: View {
public struct TextInputField: View {
private var title: String
@Binding private var text: String
init(_ title: String, text: Binding<String>) {
public init(_ title: String, text: Binding<String>) {
self.title = title
self._text = text
}
var body: some View {
public var body: some View {
ZStack(alignment: .leading) {
Text(title)
.foregroundColor(text.isEmpty ? Color(.placeholderText) : .accentColor)

View File

@ -8,13 +8,14 @@ import Foundation
import SwiftUI
import PixelfedKit
import ClientKit
import EnvironmentKit
@MainActor
public class TextModel: NSObject, ObservableObject {
var client: Client?
var textView: UITextView?
public var client: Client?
public var textView: UITextView?
var selectedRange: NSRange {
public var selectedRange: NSRange {
get {
guard let textView else {
return .init(location: 0, length: 0)
@ -27,7 +28,7 @@ public class TextModel: NSObject, ObservableObject {
}
}
var markedTextRange: UITextRange? {
public var markedTextRange: UITextRange? {
guard let textView else {
return nil
}
@ -35,10 +36,10 @@ public class TextModel: NSObject, ObservableObject {
return textView.markedTextRange
}
@Published var mentionsSuggestions: [Account] = []
@Published var tagsSuggestions: [Tag] = []
@Published public var mentionsSuggestions: [Account] = []
@Published public var tagsSuggestions: [Tag] = []
@Published var text = NSMutableAttributedString(string: "") {
@Published public var text = NSMutableAttributedString(string: "") {
didSet {
let range = selectedRange
processText()
@ -169,19 +170,19 @@ public class TextModel: NSObject, ObservableObject {
currentSuggestionRange = nil
}
func selectMentionSuggestion(account: Account) {
public func selectMentionSuggestion(account: Account) {
if let range = currentSuggestionRange {
replaceTextWith(text: "@\(account.acct) ", inRange: range)
}
}
func selectHashtagSuggestion(tag: Tag) {
public func selectHashtagSuggestion(tag: Tag) {
if let range = currentSuggestionRange {
replaceTextWith(text: "#\(tag.name) ", inRange: range)
}
}
func replaceTextWith(text: String, inRange: NSRange) {
public func replaceTextWith(text: String, inRange: NSRange) {
let string = self.text
string.mutableString.deleteCharacters(in: inRange)
string.mutableString.insert(text, at: inRange.location)

View File

@ -7,8 +7,9 @@
import SwiftUI
import NukeUI
import ServicesKit
import EnvironmentKit
struct UserAvatar: View {
public struct UserAvatar: View {
@EnvironmentObject var applicationState: ApplicationState
public enum Size {
@ -38,7 +39,7 @@ struct UserAvatar: View {
self.size = size
}
var body: some View {
public var body: some View {
if let accountAvatar {
if let cachedAvatar = CacheImageService.shared.get(for: accountAvatar) {
cachedAvatar

View File

@ -7,14 +7,26 @@
import SwiftUI
import NukeUI
struct UsernameRow: View {
public struct UsernameRow: View {
@State public var accountId: String
@State public var accountAvatar: URL?
@State public var accountDisplayName: String?
@State public var accountUsername: String
@State public var size: UserAvatar.Size?
var body: some View {
public init(accountId: String,
accountAvatar: URL? = nil,
accountDisplayName: String? = nil,
accountUsername: String,
size: UserAvatar.Size? = nil) {
_accountId = State(initialValue: accountId)
_accountAvatar = State(initialValue: accountAvatar)
_accountDisplayName = State(initialValue: accountDisplayName)
_accountUsername = State(initialValue: accountUsername)
_size = State(initialValue: size)
}
public var body: some View {
HStack(alignment: .center) {
UserAvatar(accountAvatar: accountAvatar, size: size ?? .list)

View File

@ -0,0 +1,11 @@
import XCTest
@testable import WidgetsKit
final class WidgetsKitTests: XCTestCase {
func testExample() throws {
// This is an example of a functional test case.
// Use XCTAssert and related functions to verify your tests produce the correct
// results.
// XCTAssertEqual(WidgetsKit().text, "Hello, World!")
}
}