chore: fix building the app (#13606)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - New Features - Built-in Then-style DSL for fluent configuration. - Centralized theming via a new resources library exposing standardized colors and icons for SwiftUI and UIKit. - Refactor - Migrated color and icon accessors to the new resources provider. - Removed redundant imports and streamlined UI configuration. - Dependencies - Updated MarkdownView to 3.4.2. - Removed the Then third-party dependency; updated package sources; added resources package and assets. - Documentation - Added iOS Swift code style and architecture guidelines. - Chores - Updated Xcode project format and repository ignore rules. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
57
packages/frontend/apps/ios/AGENTS.md
Normal file
57
packages/frontend/apps/ios/AGENTS.md
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# Swift Code Style Guidelines
|
||||||
|
|
||||||
|
## Core Style
|
||||||
|
|
||||||
|
- **Indentation**: 2 spaces
|
||||||
|
- **Braces**: Opening brace on same line
|
||||||
|
- **Spacing**: Single space around operators and commas
|
||||||
|
- **Naming**: PascalCase for types, camelCase for properties/methods
|
||||||
|
|
||||||
|
## File Organization
|
||||||
|
|
||||||
|
- Logical directory grouping
|
||||||
|
- PascalCase files for types, `+` for extensions
|
||||||
|
- Modular design with extensions
|
||||||
|
|
||||||
|
## Modern Swift Features
|
||||||
|
|
||||||
|
- **@Observable macro**: Replace `ObservableObject`/`@Published`
|
||||||
|
- **Swift concurrency**: `async/await`, `Task`, `actor`, `@MainActor`
|
||||||
|
- **Result builders**: Declarative APIs
|
||||||
|
- **Property wrappers**: Use line breaks for long declarations
|
||||||
|
- **Opaque types**: `some` for protocol returns
|
||||||
|
|
||||||
|
## Code Structure
|
||||||
|
|
||||||
|
- Early returns to reduce nesting
|
||||||
|
- Guard statements for optional unwrapping
|
||||||
|
- Single responsibility per type/extension
|
||||||
|
- Value types over reference types
|
||||||
|
|
||||||
|
## Error Handling
|
||||||
|
|
||||||
|
- `Result` enum for typed errors
|
||||||
|
- `throws`/`try` for propagation
|
||||||
|
- Optional chaining with `guard let`/`if let`
|
||||||
|
- Typed error definitions
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
- Protocol-oriented design
|
||||||
|
- Dependency injection over singletons
|
||||||
|
- Composition over inheritance
|
||||||
|
- Factory/Repository patterns
|
||||||
|
|
||||||
|
## Debug Assertions
|
||||||
|
|
||||||
|
- Use `assert()` for development-time invariant checking
|
||||||
|
- Use `assertionFailure()` for unreachable code paths
|
||||||
|
- Assertions removed in release builds for performance
|
||||||
|
- Precondition checking with `precondition()` for fatal errors
|
||||||
|
|
||||||
|
## Memory Management
|
||||||
|
|
||||||
|
- `weak` references for cycles
|
||||||
|
- `unowned` when guaranteed non-nil
|
||||||
|
- Capture lists in closures
|
||||||
|
- `deinit` for cleanup
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 56;
|
objectVersion = 77;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
@@ -53,6 +53,7 @@
|
|||||||
50802D5E2D112F7D00694021 /* Intelligents */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Intelligents; sourceTree = "<group>"; };
|
50802D5E2D112F7D00694021 /* Intelligents */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = Intelligents; sourceTree = "<group>"; };
|
||||||
50A285D52D112A5E000D5A6D /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = "<group>"; };
|
50A285D52D112A5E000D5A6D /* InfoPlist.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = InfoPlist.xcstrings; sourceTree = "<group>"; };
|
||||||
50A285D62D112A5E000D5A6D /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
|
50A285D62D112A5E000D5A6D /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Localizable.xcstrings; sourceTree = "<group>"; };
|
||||||
|
50CECF1E2E7C1084004487AA /* AffineResources */ = {isa = PBXFileReference; lastKnownFileType = wrapper; path = AffineResources; sourceTree = "<group>"; };
|
||||||
50FF42892D2E757E0050AA83 /* ApplicationBridgedWindowScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBridgedWindowScript.swift; sourceTree = "<group>"; };
|
50FF42892D2E757E0050AA83 /* ApplicationBridgedWindowScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationBridgedWindowScript.swift; sourceTree = "<group>"; };
|
||||||
50FF428B2D2E77CC0050AA83 /* AffineViewController+AIButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AffineViewController+AIButton.swift"; sourceTree = "<group>"; };
|
50FF428B2D2E77CC0050AA83 /* AffineViewController+AIButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "AffineViewController+AIButton.swift"; sourceTree = "<group>"; };
|
||||||
9D52FC422D26CDB600105D0A /* JSValueContainerExt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSValueContainerExt.swift; sourceTree = "<group>"; };
|
9D52FC422D26CDB600105D0A /* JSValueContainerExt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSValueContainerExt.swift; sourceTree = "<group>"; };
|
||||||
@@ -80,8 +81,6 @@
|
|||||||
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
/* Begin PBXFileSystemSynchronizedRootGroup section */
|
||||||
9DAE85B72E7BAC3B00DB9F1D /* Plugins */ = {
|
9DAE85B72E7BAC3B00DB9F1D /* Plugins */ = {
|
||||||
isa = PBXFileSystemSynchronizedRootGroup;
|
isa = PBXFileSystemSynchronizedRootGroup;
|
||||||
exceptions = (
|
|
||||||
);
|
|
||||||
path = Plugins;
|
path = Plugins;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
@@ -137,6 +136,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
5039CC962D1D42C700874F32 /* AffineGraphQL */,
|
5039CC962D1D42C700874F32 /* AffineGraphQL */,
|
||||||
|
50CECF1E2E7C1084004487AA /* AffineResources */,
|
||||||
50802D5E2D112F7D00694021 /* Intelligents */,
|
50802D5E2D112F7D00694021 /* Intelligents */,
|
||||||
);
|
);
|
||||||
path = Packages;
|
path = Packages;
|
||||||
@@ -292,9 +292,13 @@
|
|||||||
);
|
);
|
||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
);
|
);
|
||||||
|
inputPaths = (
|
||||||
|
);
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
);
|
);
|
||||||
|
outputPaths = (
|
||||||
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AFFiNE/Pods-AFFiNE-frameworks.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AFFiNE/Pods-AFFiNE-frameworks.sh\"\n";
|
||||||
|
|||||||
@@ -41,8 +41,8 @@
|
|||||||
"kind" : "remoteSourceControl",
|
"kind" : "remoteSourceControl",
|
||||||
"location" : "https://github.com/Lakr233/MarkdownView",
|
"location" : "https://github.com/Lakr233/MarkdownView",
|
||||||
"state" : {
|
"state" : {
|
||||||
"revision" : "1b0267f115274260d7cc875c4e9043f976f003a2",
|
"revision" : "c052f57768436212c91e4369d76181c38eaa3ba3",
|
||||||
"version" : "3.4.1"
|
"version" : "3.4.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -107,15 +107,6 @@
|
|||||||
"revision" : "cfd646dcac0c5553e21ebf1ee05f9078277518bc",
|
"revision" : "cfd646dcac0c5553e21ebf1ee05f9078277518bc",
|
||||||
"version" : "1.7.2"
|
"version" : "1.7.2"
|
||||||
}
|
}
|
||||||
},
|
|
||||||
{
|
|
||||||
"identity" : "then",
|
|
||||||
"kind" : "remoteSourceControl",
|
|
||||||
"location" : "https://github.com/devxoul/Then",
|
|
||||||
"state" : {
|
|
||||||
"revision" : "d41ef523faef0f911369f79c0b96815d9dbb6d7a",
|
|
||||||
"version" : "3.0.0"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"version" : 2
|
"version" : 2
|
||||||
|
|||||||
@@ -8,8 +8,8 @@
|
|||||||
import ApolloAPI
|
import ApolloAPI
|
||||||
|
|
||||||
public enum SchemaConfiguration: ApolloAPI.SchemaConfiguration {
|
public enum SchemaConfiguration: ApolloAPI.SchemaConfiguration {
|
||||||
public static func cacheKeyInfo(for _: ApolloAPI.Object, object _: ApolloAPI.ObjectData) -> CacheKeyInfo? {
|
public static func cacheKeyInfo(for type: ApolloAPI.Object, object: ApolloAPI.ObjectData) -> CacheKeyInfo? {
|
||||||
// Implement this function to configure cache key resolution for your schema types.
|
// Implement this function to configure cache key resolution for your schema types.
|
||||||
nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
8
packages/frontend/apps/ios/App/Packages/AffineResources/.gitignore
vendored
Normal file
8
packages/frontend/apps/ios/App/Packages/AffineResources/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
.DS_Store
|
||||||
|
/.build
|
||||||
|
/Packages
|
||||||
|
xcuserdata/
|
||||||
|
DerivedData/
|
||||||
|
.swiftpm/configuration/registries.json
|
||||||
|
.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
|
||||||
|
.netrc
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
// swift-tools-version: 5.9
|
||||||
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
||||||
|
|
||||||
|
import PackageDescription
|
||||||
|
|
||||||
|
let package = Package(
|
||||||
|
name: "AffineResources",
|
||||||
|
products: [
|
||||||
|
.library(
|
||||||
|
name: "AffineResources",
|
||||||
|
targets: ["AffineResources"]
|
||||||
|
),
|
||||||
|
],
|
||||||
|
targets: [
|
||||||
|
.target(
|
||||||
|
name: "AffineResources",
|
||||||
|
resources: [
|
||||||
|
.process("Resources/Icons.xcassets"),
|
||||||
|
.process("Resources/Colors.xcassets"),
|
||||||
|
]
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
// The Swift Programming Language
|
||||||
|
// https://docs.swift.org/swift-book
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
import UIKit
|
||||||
|
|
||||||
|
public enum AffineColors: String, CaseIterable {
|
||||||
|
case buttonPrimary = "affine.button.primary"
|
||||||
|
case iconActivated = "affine.icon.activated"
|
||||||
|
case iconPrimary = "affine.icon.primary"
|
||||||
|
case layerBackgroundPrimary = "affine.layer.background.primary"
|
||||||
|
case layerBackgroundSecondary = "affine.layer.background.secondary"
|
||||||
|
case layerBorder = "affine.layer.border"
|
||||||
|
case layerPureWhite = "affine.layer.pureWhite"
|
||||||
|
case textEmphasis = "affine.text.emphasis"
|
||||||
|
case textLink = "affine.text.link"
|
||||||
|
case textListDotAndNumber = "affine.text.listDotAndNumber"
|
||||||
|
case textPlaceholder = "affine.text.placeholder"
|
||||||
|
case textPrimary = "affine.text.primary"
|
||||||
|
case textPureWhite = "affine.text.pureWhite"
|
||||||
|
case textSecondary = "affine.text.secondary"
|
||||||
|
case textTertiary = "affine.text.tertiary"
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public var color: Color {
|
||||||
|
Color(rawValue, bundle: .module)
|
||||||
|
}
|
||||||
|
|
||||||
|
public var uiColor: UIColor {
|
||||||
|
UIColor(named: rawValue, in: .module, compatibleWith: nil) ?? .clear
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum AffineIcons: String, CaseIterable {
|
||||||
|
case arrowDown = "ArrowDown"
|
||||||
|
case arrowUpBig = "ArrowUpBig"
|
||||||
|
case box = "Box"
|
||||||
|
case broom = "Broom"
|
||||||
|
case bubble = "Bubble"
|
||||||
|
case calendar = "Calendar"
|
||||||
|
case camera = "Camera"
|
||||||
|
case checkCircle = "CheckCircle"
|
||||||
|
case close = "Close"
|
||||||
|
case image = "Image"
|
||||||
|
case more = "More"
|
||||||
|
case page = "Page"
|
||||||
|
case plus = "Plus"
|
||||||
|
case settings = "Settings"
|
||||||
|
case think = "Think"
|
||||||
|
case tools = "Tools"
|
||||||
|
case upload = "Upload"
|
||||||
|
case web = "Web"
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public var image: Image {
|
||||||
|
Image(rawValue, bundle: .module)
|
||||||
|
}
|
||||||
|
|
||||||
|
@available(iOS 13.0, *)
|
||||||
|
public var uiImage: UIImage {
|
||||||
|
UIImage(named: rawValue, in: .module, with: .none) ?? UIImage()
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -14,28 +14,29 @@ let package = Package(
|
|||||||
],
|
],
|
||||||
dependencies: [
|
dependencies: [
|
||||||
.package(path: "../AffineGraphQL"),
|
.package(path: "../AffineGraphQL"),
|
||||||
|
.package(path: "../AffineResources"),
|
||||||
.package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.22.0"),
|
.package(url: "https://github.com/apollographql/apollo-ios.git", from: "1.22.0"),
|
||||||
.package(url: "https://github.com/apple/swift-collections", from: "1.2.0"),
|
.package(url: "https://github.com/apple/swift-collections.git", from: "1.2.0"),
|
||||||
.package(url: "https://github.com/devxoul/Then", from: "3.0.0"),
|
|
||||||
.package(url: "https://github.com/SnapKit/SnapKit.git", from: "5.7.1"),
|
.package(url: "https://github.com/SnapKit/SnapKit.git", from: "5.7.1"),
|
||||||
.package(url: "https://github.com/SwifterSwift/SwifterSwift.git", from: "6.0.0"),
|
.package(url: "https://github.com/SwifterSwift/SwifterSwift.git", from: "6.0.0"),
|
||||||
.package(url: "https://github.com/Recouse/EventSource", from: "0.1.4"),
|
.package(url: "https://github.com/Recouse/EventSource.git", from: "0.1.4"),
|
||||||
.package(url: "https://github.com/Lakr233/ListViewKit", from: "1.1.6"),
|
.package(url: "https://github.com/Lakr233/ListViewKit.git", from: "1.1.6"),
|
||||||
.package(url: "https://github.com/Lakr233/MarkdownView", from: "3.4.1"),
|
.package(url: "https://github.com/Lakr233/MarkdownView.git", from: "3.4.2"),
|
||||||
],
|
],
|
||||||
targets: [
|
targets: [
|
||||||
.target(name: "Intelligents", dependencies: [
|
.target(name: "Intelligents", dependencies: [
|
||||||
"AffineGraphQL",
|
"AffineGraphQL",
|
||||||
|
"AffineResources",
|
||||||
"SnapKit",
|
"SnapKit",
|
||||||
"Then",
|
|
||||||
"SwifterSwift",
|
"SwifterSwift",
|
||||||
.product(name: "Apollo", package: "apollo-ios"),
|
.product(name: "Apollo", package: "apollo-ios"),
|
||||||
.product(name: "OrderedCollections", package: "swift-collections"),
|
.product(name: "OrderedCollections", package: "swift-collections"),
|
||||||
|
|
||||||
"ListViewKit",
|
"ListViewKit",
|
||||||
"MarkdownView",
|
"MarkdownView",
|
||||||
"EventSource",
|
"EventSource",
|
||||||
], resources: [
|
], resources: [
|
||||||
|
.process("Resources/main.metal"),
|
||||||
|
.process("Resources/Media.xcassets"),
|
||||||
.process("Interface/View/InputBox/InputBox.xcassets"),
|
.process("Interface/View/InputBox/InputBox.xcassets"),
|
||||||
.process("Interface/Controller/AttachmentManagementController/AttachmentIcon.xcassets"),
|
.process("Interface/Controller/AttachmentManagementController/AttachmentIcon.xcassets"),
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
import AffineResources
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
extension Color {
|
||||||
|
/// Primary icon color
|
||||||
|
static var affineIconPrimary: Color {
|
||||||
|
AffineColors.iconPrimary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Primary background layer color
|
||||||
|
static var affineLayerBackgroundPrimary: Color {
|
||||||
|
AffineColors.layerBackgroundPrimary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Secondary background layer color
|
||||||
|
static var affineLayerBackgroundSecondary: Color {
|
||||||
|
AffineColors.layerBackgroundSecondary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Border layer color
|
||||||
|
static var affineLayerBorder: Color {
|
||||||
|
AffineColors.layerBorder.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Pure white layer color
|
||||||
|
static var affineLayerPureWhite: Color {
|
||||||
|
AffineColors.layerPureWhite.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Primary button color
|
||||||
|
static var affineButtonPrimary: Color {
|
||||||
|
AffineColors.buttonPrimary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Activated icon color
|
||||||
|
static var affineIconActivated: Color {
|
||||||
|
AffineColors.iconActivated.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Text emphasis color
|
||||||
|
static var affineTextEmphasis: Color {
|
||||||
|
AffineColors.textEmphasis.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Text link color
|
||||||
|
static var affineTextLink: Color {
|
||||||
|
AffineColors.textLink.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// List dot and number color
|
||||||
|
static var affineTextListDotAndNumber: Color {
|
||||||
|
AffineColors.textListDotAndNumber.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Placeholder text color
|
||||||
|
static var affineTextPlaceholder: Color {
|
||||||
|
AffineColors.textPlaceholder.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Primary text color
|
||||||
|
static var affineTextPrimary: Color {
|
||||||
|
AffineColors.textPrimary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Pure white text color
|
||||||
|
static var affineTextPureWhite: Color {
|
||||||
|
AffineColors.textPureWhite.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Secondary text color
|
||||||
|
static var affineTextSecondary: Color {
|
||||||
|
AffineColors.textSecondary.color
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Tertiary text color
|
||||||
|
static var affineTextTertiary: Color {
|
||||||
|
AffineColors.textTertiary.color
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,94 @@
|
|||||||
|
import AffineResources
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
extension Image {
|
||||||
|
/// Check circle icon
|
||||||
|
static var affineCheckCircle: Image {
|
||||||
|
AffineIcons.checkCircle.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// More options icon
|
||||||
|
static var affineMore: Image {
|
||||||
|
AffineIcons.more.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Arrow down icon
|
||||||
|
static var affineArrowDown: Image {
|
||||||
|
AffineIcons.arrowDown.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Tools icon
|
||||||
|
static var affineTools: Image {
|
||||||
|
AffineIcons.tools.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Box icon
|
||||||
|
static var affineBox: Image {
|
||||||
|
AffineIcons.box.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Think icon
|
||||||
|
static var affineThink: Image {
|
||||||
|
AffineIcons.think.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Web icon
|
||||||
|
static var affineWeb: Image {
|
||||||
|
AffineIcons.web.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Calendar icon
|
||||||
|
static var affineCalendar: Image {
|
||||||
|
AffineIcons.calendar.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Camera icon
|
||||||
|
static var affineCamera: Image {
|
||||||
|
AffineIcons.camera.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Close icon
|
||||||
|
static var affineClose: Image {
|
||||||
|
AffineIcons.close.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Big arrow up icon
|
||||||
|
static var affineArrowUpBig: Image {
|
||||||
|
AffineIcons.arrowUpBig.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Broom icon
|
||||||
|
static var affineBroom: Image {
|
||||||
|
AffineIcons.broom.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Bubble icon
|
||||||
|
static var affineBubble: Image {
|
||||||
|
AffineIcons.bubble.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Image icon
|
||||||
|
static var affineImage: Image {
|
||||||
|
AffineIcons.image.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Page icon
|
||||||
|
static var affinePage: Image {
|
||||||
|
AffineIcons.page.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Plus icon
|
||||||
|
static var affinePlus: Image {
|
||||||
|
AffineIcons.plus.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Settings icon
|
||||||
|
static var affineSettings: Image {
|
||||||
|
AffineIcons.settings.image
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Upload icon
|
||||||
|
static var affineUpload: Image {
|
||||||
|
AffineIcons.upload.image
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
// The MIT License (MIT)
|
||||||
|
//
|
||||||
|
// Copyright (c) 2015 Suyeol Jeon (xoul.kr)
|
||||||
|
//
|
||||||
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
// of this software and associated documentation files (the "Software"), to deal
|
||||||
|
// in the Software without restriction, including without limitation the rights
|
||||||
|
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
// copies of the Software, and to permit persons to whom the Software is
|
||||||
|
// furnished to do so, subject to the following conditions:
|
||||||
|
//
|
||||||
|
// The above copyright notice and this permission notice shall be included in all
|
||||||
|
// copies or substantial portions of the Software.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
// SOFTWARE.
|
||||||
|
|
||||||
|
// this package uses swift version 5.0 which is currently broken
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
#if !os(Linux)
|
||||||
|
import CoreGraphics
|
||||||
|
#endif
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
import UIKit.UIGeometry
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public protocol Then {}
|
||||||
|
|
||||||
|
extension Then where Self: Any {
|
||||||
|
|
||||||
|
/// Makes it available to set properties with closures just after initializing and copying the value types.
|
||||||
|
///
|
||||||
|
/// let frame = CGRect().with {
|
||||||
|
/// $0.origin.x = 10
|
||||||
|
/// $0.size.width = 100
|
||||||
|
/// }
|
||||||
|
@inlinable
|
||||||
|
public func with(_ block: (inout Self) throws -> Void) rethrows -> Self {
|
||||||
|
var copy = self
|
||||||
|
try block(©)
|
||||||
|
return copy
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Makes it available to execute something with closures.
|
||||||
|
///
|
||||||
|
/// UserDefaults.standard.do {
|
||||||
|
/// $0.set("devxoul", forKey: "username")
|
||||||
|
/// $0.set("devxoul@gmail.com", forKey: "email")
|
||||||
|
/// $0.synchronize()
|
||||||
|
/// }
|
||||||
|
@inlinable
|
||||||
|
public func `do`(_ block: (Self) throws -> Void) rethrows {
|
||||||
|
try block(self)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension Then where Self: AnyObject {
|
||||||
|
|
||||||
|
/// Makes it available to set properties with closures just after initializing.
|
||||||
|
///
|
||||||
|
/// let label = UILabel().then {
|
||||||
|
/// $0.textAlignment = .center
|
||||||
|
/// $0.textColor = UIColor.black
|
||||||
|
/// $0.text = "Hello, World!"
|
||||||
|
/// }
|
||||||
|
@inlinable
|
||||||
|
public func then(_ block: (Self) throws -> Void) rethrows -> Self {
|
||||||
|
try block(self)
|
||||||
|
return self
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
extension NSObject: Then {}
|
||||||
|
|
||||||
|
#if !os(Linux)
|
||||||
|
extension CGPoint: Then {}
|
||||||
|
extension CGRect: Then {}
|
||||||
|
extension CGSize: Then {}
|
||||||
|
extension CGVector: Then {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
extension Array: Then {}
|
||||||
|
extension Dictionary: Then {}
|
||||||
|
extension Set: Then {}
|
||||||
|
extension JSONDecoder: Then {}
|
||||||
|
extension JSONEncoder: Then {}
|
||||||
|
|
||||||
|
#if os(iOS) || os(tvOS)
|
||||||
|
extension UIEdgeInsets: Then {}
|
||||||
|
extension UIOffset: Then {}
|
||||||
|
extension UIRectEdge: Then {}
|
||||||
|
#endif
|
||||||
@@ -1,78 +1,79 @@
|
|||||||
|
import AffineResources
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
extension UIColor {
|
extension UIColor {
|
||||||
/// Primary icon color
|
/// Primary icon color
|
||||||
static var affineIconPrimary: UIColor {
|
static var affineIconPrimary: UIColor {
|
||||||
UIColor(named: "affine.icon.primary", in: .module, compatibleWith: nil) ?? .black
|
AffineColors.iconPrimary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Primary background layer color
|
/// Primary background layer color
|
||||||
static var affineLayerBackgroundPrimary: UIColor {
|
static var affineLayerBackgroundPrimary: UIColor {
|
||||||
UIColor(named: "affine.layer.background.primary", in: .module, compatibleWith: nil) ?? .white
|
AffineColors.layerBackgroundPrimary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Secondary background layer color
|
/// Secondary background layer color
|
||||||
static var affineLayerBackgroundSecondary: UIColor {
|
static var affineLayerBackgroundSecondary: UIColor {
|
||||||
UIColor(named: "affine.layer.background.secondary", in: .module, compatibleWith: nil) ?? .systemGray6
|
AffineColors.layerBackgroundSecondary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Border layer color
|
/// Border layer color
|
||||||
static var affineLayerBorder: UIColor {
|
static var affineLayerBorder: UIColor {
|
||||||
UIColor(named: "affine.layer.border", in: .module, compatibleWith: nil) ?? .gray
|
AffineColors.layerBorder.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Pure white layer color
|
/// Pure white layer color
|
||||||
static var affineLayerPureWhite: UIColor {
|
static var affineLayerPureWhite: UIColor {
|
||||||
UIColor(named: "affine.layer.pureWhite", in: .module, compatibleWith: nil) ?? .white
|
AffineColors.layerPureWhite.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Primary button color
|
/// Primary button color
|
||||||
static var affineButtonPrimary: UIColor {
|
static var affineButtonPrimary: UIColor {
|
||||||
UIColor(named: "affine.button.primary", in: .module, compatibleWith: nil) ?? .blue
|
AffineColors.buttonPrimary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Activated icon color
|
/// Activated icon color
|
||||||
static var affineIconActivated: UIColor {
|
static var affineIconActivated: UIColor {
|
||||||
UIColor(named: "affine.icon.activated", in: .module, compatibleWith: nil) ?? .blue
|
AffineColors.iconActivated.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Text emphasis color
|
/// Text emphasis color
|
||||||
static var affineTextEmphasis: UIColor {
|
static var affineTextEmphasis: UIColor {
|
||||||
UIColor(named: "affine.text.emphasis", in: .module, compatibleWith: nil) ?? .blue
|
AffineColors.textEmphasis.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Text link color
|
/// Text link color
|
||||||
static var affineTextLink: UIColor {
|
static var affineTextLink: UIColor {
|
||||||
UIColor(named: "affine.text.link", in: .module, compatibleWith: nil) ?? .blue
|
AffineColors.textLink.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// List dot and number color
|
/// List dot and number color
|
||||||
static var affineTextListDotAndNumber: UIColor {
|
static var affineTextListDotAndNumber: UIColor {
|
||||||
UIColor(named: "affine.text.listDotAndNumber", in: .module, compatibleWith: nil) ?? .blue
|
AffineColors.textListDotAndNumber.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Placeholder text color
|
/// Placeholder text color
|
||||||
static var affineTextPlaceholder: UIColor {
|
static var affineTextPlaceholder: UIColor {
|
||||||
UIColor(named: "affine.text.placeholder", in: .module, compatibleWith: nil) ?? .gray
|
AffineColors.textPlaceholder.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Primary text color
|
/// Primary text color
|
||||||
static var affineTextPrimary: UIColor {
|
static var affineTextPrimary: UIColor {
|
||||||
UIColor(named: "affine.text.primary", in: .module, compatibleWith: nil) ?? .black
|
AffineColors.textPrimary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Pure white text color
|
/// Pure white text color
|
||||||
static var affineTextPureWhite: UIColor {
|
static var affineTextPureWhite: UIColor {
|
||||||
UIColor(named: "affine.text.pureWhite", in: .module, compatibleWith: nil) ?? .white
|
AffineColors.textPureWhite.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Secondary text color
|
/// Secondary text color
|
||||||
static var affineTextSecondary: UIColor {
|
static var affineTextSecondary: UIColor {
|
||||||
UIColor(named: "affine.text.secondary", in: .module, compatibleWith: nil) ?? .gray
|
AffineColors.textSecondary.uiColor
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tertiary text color
|
/// Tertiary text color
|
||||||
static var affineTextTertiary: UIColor {
|
static var affineTextTertiary: UIColor {
|
||||||
UIColor(named: "affine.text.tertiary", in: .module, compatibleWith: nil) ?? .gray
|
AffineColors.textTertiary.uiColor
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,93 +1,94 @@
|
|||||||
|
import AffineResources
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
extension UIImage {
|
extension UIImage {
|
||||||
/// Check circle icon
|
/// Check circle icon
|
||||||
static var affineCheckCircle: UIImage {
|
static var affineCheckCircle: UIImage {
|
||||||
UIImage(named: "CheckCircle", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.checkCircle.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// More options icon
|
/// More options icon
|
||||||
static var affineMore: UIImage {
|
static var affineMore: UIImage {
|
||||||
UIImage(named: "More", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.more.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Arrow down icon
|
/// Arrow down icon
|
||||||
static var affineArrowDown: UIImage {
|
static var affineArrowDown: UIImage {
|
||||||
UIImage(named: "ArrowDown", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.arrowDown.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tools icon
|
/// Tools icon
|
||||||
static var affineTools: UIImage {
|
static var affineTools: UIImage {
|
||||||
UIImage(named: "Tools", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.tools.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Box icon
|
/// Box icon
|
||||||
static var affineBox: UIImage {
|
static var affineBox: UIImage {
|
||||||
UIImage(named: "Box", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.box.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Think icon
|
/// Think icon
|
||||||
static var affineThink: UIImage {
|
static var affineThink: UIImage {
|
||||||
UIImage(named: "Think", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.think.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Web icon
|
/// Web icon
|
||||||
static var affineWeb: UIImage {
|
static var affineWeb: UIImage {
|
||||||
UIImage(named: "Web", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.web.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Calendar icon
|
/// Calendar icon
|
||||||
static var affineCalendar: UIImage {
|
static var affineCalendar: UIImage {
|
||||||
UIImage(named: "Calendar", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.calendar.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Camera icon
|
/// Camera icon
|
||||||
static var affineCamera: UIImage {
|
static var affineCamera: UIImage {
|
||||||
UIImage(named: "Camera", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.camera.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Close icon
|
/// Close icon
|
||||||
static var affineClose: UIImage {
|
static var affineClose: UIImage {
|
||||||
UIImage(named: "Close", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.close.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Big arrow up icon
|
/// Big arrow up icon
|
||||||
static var affineArrowUpBig: UIImage {
|
static var affineArrowUpBig: UIImage {
|
||||||
UIImage(named: "ArrowUpBig", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.arrowUpBig.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Broom icon
|
/// Broom icon
|
||||||
static var affineBroom: UIImage {
|
static var affineBroom: UIImage {
|
||||||
UIImage(named: "Broom", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.broom.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Bubble icon
|
/// Bubble icon
|
||||||
static var affineBubble: UIImage {
|
static var affineBubble: UIImage {
|
||||||
UIImage(named: "Bubble", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.bubble.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Image icon
|
/// Image icon
|
||||||
static var affineImage: UIImage {
|
static var affineImage: UIImage {
|
||||||
UIImage(named: "Image", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.image.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Page icon
|
/// Page icon
|
||||||
static var affinePage: UIImage {
|
static var affinePage: UIImage {
|
||||||
UIImage(named: "Page", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.page.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Plus icon
|
/// Plus icon
|
||||||
static var affinePlus: UIImage {
|
static var affinePlus: UIImage {
|
||||||
UIImage(named: "Plus", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.plus.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Settings icon
|
/// Settings icon
|
||||||
static var affineSettings: UIImage {
|
static var affineSettings: UIImage {
|
||||||
UIImage(named: "Settings", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.settings.uiImage
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Upload icon
|
/// Upload icon
|
||||||
static var affineUpload: UIImage {
|
static var affineUpload: UIImage {
|
||||||
UIImage(named: "Upload", in: .module, compatibleWith: nil) ?? UIImage()
|
AffineIcons.upload.uiImage
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class AttachmentManagementController: UINavigationController {
|
class AttachmentManagementController: UINavigationController {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import Combine
|
import Combine
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class MainViewController: UIViewController {
|
class MainViewController: UIViewController {
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
import Litext
|
import Litext
|
||||||
import MarkdownView
|
import MarkdownView
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
private let markdownViewForSizeCalculation: MarkdownTextView = .init()
|
private let markdownViewForSizeCalculation: MarkdownTextView = .init()
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import ListViewKit
|
|||||||
import Litext
|
import Litext
|
||||||
import MarkdownView
|
import MarkdownView
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class ChatBaseCell: ListRowView {
|
class ChatBaseCell: ListRowView {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import Litext
|
import Litext
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class ErrorCell: ChatBaseCell {
|
class ErrorCell: ChatBaseCell {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import Litext
|
import Litext
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class LoadingCell: ChatBaseCell {
|
class LoadingCell: ChatBaseCell {
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import Litext
|
import Litext
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
private let labelForSizeCalculation = LTXLabel()
|
private let labelForSizeCalculation = LTXLabel()
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import Litext
|
import Litext
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
private let labelForSizeCalculation = LTXLabel()
|
private let labelForSizeCalculation = LTXLabel()
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import AffineGraphQL
|
import AffineGraphQL
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class DocumentPickerView: UIView {
|
class DocumentPickerView: UIView {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class DocumentTableViewCell: UITableViewCell {
|
class DocumentTableViewCell: UITableViewCell {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
final class FileAttachmentHeaderView: UIView {
|
final class FileAttachmentHeaderView: UIView {
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
//
|
//
|
||||||
|
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class ImageAttachmentBar: UICollectionView {
|
class ImageAttachmentBar: UICollectionView {
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import Combine
|
import Combine
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class InputBox: UIView {
|
class InputBox: UIView {
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
private let unselectedColor: UIColor = .affineIconPrimary
|
private let unselectedColor: UIColor = .affineIconPrimary
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
|
|
||||||
import SnapKit
|
import SnapKit
|
||||||
import SwifterSwift
|
import SwifterSwift
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
// floating button to open intelligent panel
|
// floating button to open intelligent panel
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
import SnapKit
|
import SnapKit
|
||||||
import Then
|
|
||||||
import UIKit
|
import UIKit
|
||||||
|
|
||||||
class MainHeaderView: UIView {
|
class MainHeaderView: UIView {
|
||||||
|
|||||||
@@ -45,13 +45,13 @@ EXTERNAL SOURCES:
|
|||||||
:path: "../../../../../node_modules/capacitor-plugin-app-tracking-transparency"
|
:path: "../../../../../node_modules/capacitor-plugin-app-tracking-transparency"
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Capacitor: 106e7a4205f4618d582b886a975657c61179138d
|
Capacitor: 03bc7cbdde6a629a8b910a9d7d78c3cc7ed09ea7
|
||||||
CapacitorApp: d63334c052278caf5d81585d80b21905c6f93f39
|
CapacitorApp: febecbb9582cb353aed037e18ec765141f880fe9
|
||||||
CapacitorBrowser: 081852cf532acf77b9d2953f3a88fe5b9711fb06
|
CapacitorBrowser: 6299776d496e968505464884d565992faa20444a
|
||||||
CapacitorCordova: 5967b9ba03915ef1d585469d6e31f31dc49be96f
|
CapacitorCordova: 5967b9ba03915ef1d585469d6e31f31dc49be96f
|
||||||
CapacitorHaptics: 70e47470fa1a6bd6338cd102552e3846b7f9a1b3
|
CapacitorHaptics: 1f1e17041f435d8ead9ff2a34edd592c6aa6a8d6
|
||||||
CapacitorKeyboard: 969647d0ca2e5c737d7300088e2517aa832434e2
|
CapacitorKeyboard: 09fd91dcde4f8a37313e7f11bde553ad1ed52036
|
||||||
CapacitorPluginAppTrackingTransparency: 2a2792623a5a72795f2e8f9ab3f1147573732fd8
|
CapacitorPluginAppTrackingTransparency: 92ae9c1cfb5cf477753db9269689332a686f675a
|
||||||
CryptoSwift: 967f37cea5a3294d9cce358f78861652155be483
|
CryptoSwift: 967f37cea5a3294d9cce358f78861652155be483
|
||||||
|
|
||||||
PODFILE CHECKSUM: 2c1e4be82121f2d9724ecf7e31dd14e165aeb082
|
PODFILE CHECKSUM: 2c1e4be82121f2d9724ecf7e31dd14e165aeb082
|
||||||
|
|||||||
Reference in New Issue
Block a user