diff --git a/Carbon.podspec b/Carbon.podspec index bab0138..2d6b186 100644 --- a/Carbon.podspec +++ b/Carbon.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = 'Carbon' - spec.version = '1.0.0-rc.4' + spec.version = '1.0.0-rc.5' spec.author = { 'ra1028' => 'r.fe51028.r@gmail.com' } spec.homepage = 'https://github.com/ra1028/Carbon' spec.documentation_url = 'https://ra1028.github.io/Carbon' diff --git a/Carbon.xcodeproj/project.pbxproj b/Carbon.xcodeproj/project.pbxproj index 325a8fb..79bcdc8 100644 --- a/Carbon.xcodeproj/project.pbxproj +++ b/Carbon.xcodeproj/project.pbxproj @@ -8,6 +8,7 @@ /* Begin PBXBuildFile section */ 6B1BE6B722E5CA0D0054DB46 /* ComponentRenderable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B1BE6B622E5CA0D0054DB46 /* ComponentRenderable.swift */; }; + 6B2D90F2235F71A1003D260D /* ComponentSwiftUISupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B2D90F1235F71A1003D260D /* ComponentSwiftUISupport.swift */; }; 6B37B2F52320339300A80D62 /* IdentifiedComponentWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B37B2F32320339300A80D62 /* IdentifiedComponentWrapper.swift */; }; 6B37B2F62320339300A80D62 /* ComponentWrapping.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B37B2F42320339300A80D62 /* ComponentWrapping.swift */; }; 6B4B11AD2322E62A00D2E7E0 /* Group.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B4B11AC2322E62A00D2E7E0 /* Group.swift */; }; @@ -67,6 +68,7 @@ 6BC83E4D231ED17300350855 /* CellsBuildable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC83E4C231ED17300350855 /* CellsBuildable.swift */; }; 6BC83E51231ED21700350855 /* SectionsBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC83E50231ED21700350855 /* SectionsBuilder.swift */; }; 6BC83E53231ED42C00350855 /* SectionsBuildable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BC83E52231ED42C00350855 /* SectionsBuildable.swift */; }; + 6BD04F3E235FA9B800E53082 /* ComponentSwiftUISupportTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BD04F3D235FA9B800E53082 /* ComponentSwiftUISupportTests.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -81,6 +83,7 @@ /* Begin PBXFileReference section */ 6B1BE6B622E5CA0D0054DB46 /* ComponentRenderable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComponentRenderable.swift; sourceTree = ""; }; + 6B2D90F1235F71A1003D260D /* ComponentSwiftUISupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentSwiftUISupport.swift; sourceTree = ""; }; 6B37B2F32320339300A80D62 /* IdentifiedComponentWrapper.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = IdentifiedComponentWrapper.swift; sourceTree = ""; }; 6B37B2F42320339300A80D62 /* ComponentWrapping.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ComponentWrapping.swift; sourceTree = ""; }; 6B4B11AC2322E62A00D2E7E0 /* Group.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Group.swift; sourceTree = ""; }; @@ -144,6 +147,7 @@ 6BC83E4C231ED17300350855 /* CellsBuildable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CellsBuildable.swift; sourceTree = ""; }; 6BC83E50231ED21700350855 /* SectionsBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionsBuilder.swift; sourceTree = ""; }; 6BC83E52231ED42C00350855 /* SectionsBuildable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionsBuildable.swift; sourceTree = ""; }; + 6BD04F3D235FA9B800E53082 /* ComponentSwiftUISupportTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComponentSwiftUISupportTests.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -166,6 +170,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 6B2D90F0235F717E003D260D /* SwiftUISupport */ = { + isa = PBXGroup; + children = ( + 6B2D90F1235F71A1003D260D /* ComponentSwiftUISupport.swift */, + ); + path = SwiftUISupport; + sourceTree = ""; + }; 6B4B11B223244A8500D2E7E0 /* Nodes */ = { isa = PBXGroup; children = ( @@ -243,6 +255,7 @@ 6B65949021E2532100291AAF /* Section.swift */, 6B6594A321E2532100291AAF /* Renderer.swift */, 6B5304522201EDB200A3E21E /* DataChangeset.swift */, + 6B2D90F0235F717E003D260D /* SwiftUISupport */, 6BC83E47231ECE5000350855 /* FunctionBuilder */, 6B4B11B323244AE800D2E7E0 /* ComponentWrapper */, 6B4B11B223244A8500D2E7E0 /* Nodes */, @@ -324,6 +337,7 @@ 6B7ADEBB21F8B464003803BE /* AnyComponentTests.swift */, 6B7ADEC121F8C976003803BE /* SectionTests.swift */, 6B7ADEC821F9F9A6003803BE /* RendererTests.swift */, + 6BD04F3C235FA99E00E53082 /* SwiftUISupport */, 6B55C18A23278F57004F89F2 /* FunctionBuilder */, 6B55C185232789DE004F89F2 /* ComponentWrapper */, 6B55C1842327881A004F89F2 /* Nodes */, @@ -388,6 +402,14 @@ path = FunctionBuilder; sourceTree = ""; }; + 6BD04F3C235FA99E00E53082 /* SwiftUISupport */ = { + isa = PBXGroup; + children = ( + 6BD04F3D235FA9B800E53082 /* ComponentSwiftUISupportTests.swift */, + ); + path = SwiftUISupport; + sourceTree = ""; + }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ @@ -543,6 +565,7 @@ 6B6594A721E2532100291AAF /* UITableViewAdapter.swift in Sources */, 6B6594AD21E2532100291AAF /* ViewNode.swift in Sources */, 6B6594A421E2532100291AAF /* IdentifiableComponent.swift in Sources */, + 6B2D90F2235F71A1003D260D /* ComponentSwiftUISupport.swift in Sources */, 6B6594AF21E2532100291AAF /* UITableViewReloadDataUpdater.swift in Sources */, 6B6594AB21E2532100291AAF /* UICollectionViewFlowLayoutAdapter.swift in Sources */, 6B6594AE21E2532100291AAF /* UITableViewUpdater.swift in Sources */, @@ -569,6 +592,7 @@ 6B7ADEE121FBA6D1003803BE /* ComponentContainerElementTests.swift in Sources */, 6B7ADEC021F8C651003803BE /* CellNodeTests.swift in Sources */, 6B55C18923278E53004F89F2 /* IdentifiedComponentWrapperTests.swift in Sources */, + 6BD04F3E235FA9B800E53082 /* ComponentSwiftUISupportTests.swift in Sources */, 6B7ADECE21FA1B32003803BE /* UICollectionViewFlowLayoutAdapterTests.swift in Sources */, 6B7ADEB121F783E3003803BE /* ComponentTests.swift in Sources */, 6B7ADEDE21FBA59D003803BE /* UICollectionViewReloadDataTests.swift in Sources */, @@ -743,6 +767,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.ryo.Carbon; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -773,6 +798,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); + OTHER_LDFLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.ryo.Carbon; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj b/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj index 9816eb7..56424f3 100644 --- a/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj +++ b/Examples/Example-iOS/Example-iOS.xcodeproj/project.pbxproj @@ -3,11 +3,11 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ - 0A729640B3FDCE139DDB84E1 /* Pods_Example_iOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C676BFED3D0A58EBFA76D7DA /* Pods_Example_iOS.framework */; }; + 6B00B0A4233AA23F002A45E5 /* HostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B00B0A3233AA23F002A45E5 /* HostingController.swift */; }; 6B09264421FE17B300CFEC2F /* Footer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09264321FE17B300CFEC2F /* Footer.swift */; }; 6B09264621FE183300CFEC2F /* FooterContent.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6B09264521FE183300CFEC2F /* FooterContent.xib */; }; 6B21A49521E279AB00568841 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6B6594D621E2619E00291AAF /* Assets.xcassets */; }; @@ -31,6 +31,7 @@ 6B3973B5220000EC002BB03A /* PangramViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3973B2220000EC002BB03A /* PangramViewController.swift */; }; 6B3973B6220000EC002BB03A /* PangramLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B3973B3220000EC002BB03A /* PangramLabel.swift */; }; 6B3973B7220000EC002BB03A /* PangramViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6B3973B4220000EC002BB03A /* PangramViewController.xib */; }; + 6B444A342338C8E900D00F85 /* KyotoSwiftUIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B444A332338C8E900D00F85 /* KyotoSwiftUIView.swift */; }; 6B5A987721E8ED220013BB95 /* TodoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5A987621E8ED220013BB95 /* TodoViewController.swift */; }; 6B5A987921E8ED740013BB95 /* TodoViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6B5A987821E8ED740013BB95 /* TodoViewController.xib */; }; 6B5A987B21E8EED30013BB95 /* TodoText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B5A987A21E8EED30013BB95 /* TodoText.swift */; }; @@ -65,10 +66,31 @@ 6BBC27B321EF8A6600446FB7 /* EmojiLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BBC27B221EF8A6600446FB7 /* EmojiLabel.swift */; }; 6BBC27B521EF8CDC00446FB7 /* EmojiViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6BBC27B421EF8CDB00446FB7 /* EmojiViewController.xib */; }; 6BBC27B721EF8D4D00446FB7 /* EmojiLabelContent.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6BBC27B621EF8D4D00446FB7 /* EmojiLabelContent.xib */; }; + 6BD04F13235F875200E53082 /* DifferenceKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B6594F721E272D500291AAF /* DifferenceKit.framework */; }; + 6BD04F14235F875200E53082 /* DifferenceKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6B6594F721E272D500291AAF /* DifferenceKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 6BE9F755235F7CBF0023EF98 /* MagazineLayout in Frameworks */ = {isa = PBXBuildFile; productRef = 6BE9F754235F7CBF0023EF98 /* MagazineLayout */; }; + 6BE9F758235F7CF50023EF98 /* SwipeCellKit in Frameworks */ = {isa = PBXBuildFile; productRef = 6BE9F757235F7CF50023EF98 /* SwipeCellKit */; }; + 6BE9F763235F85CA0023EF98 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6BE9F75F235F80960023EF98 /* Carbon.framework */; }; + 6BE9F764235F85CA0023EF98 /* Carbon.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6BE9F75F235F80960023EF98 /* Carbon.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + 6BE9F765235F85CA0023EF98 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 6BD04F14235F875200E53082 /* DifferenceKit.framework in Embed Frameworks */, + 6BE9F764235F85CA0023EF98 /* Carbon.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ - 21CAE3C8FFB1A0F4BD270D3B /* Pods-Example-iOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.release.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.release.xcconfig"; sourceTree = ""; }; + 6B00B0A3233AA23F002A45E5 /* HostingController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HostingController.swift; sourceTree = ""; }; 6B09264321FE17B300CFEC2F /* Footer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Footer.swift; sourceTree = ""; }; 6B09264521FE183300CFEC2F /* FooterContent.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = FooterContent.xib; sourceTree = ""; }; 6B21A49E21E3A67200568841 /* FormViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FormViewController.swift; sourceTree = ""; }; @@ -91,6 +113,7 @@ 6B3973B2220000EC002BB03A /* PangramViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PangramViewController.swift; sourceTree = ""; }; 6B3973B3220000EC002BB03A /* PangramLabel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PangramLabel.swift; sourceTree = ""; }; 6B3973B4220000EC002BB03A /* PangramViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PangramViewController.xib; sourceTree = ""; }; + 6B444A332338C8E900D00F85 /* KyotoSwiftUIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KyotoSwiftUIView.swift; sourceTree = ""; }; 6B5A987621E8ED220013BB95 /* TodoViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoViewController.swift; sourceTree = ""; }; 6B5A987821E8ED740013BB95 /* TodoViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = TodoViewController.xib; sourceTree = ""; }; 6B5A987A21E8EED30013BB95 /* TodoText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TodoText.swift; sourceTree = ""; }; @@ -130,8 +153,8 @@ 6BBC27B221EF8A6600446FB7 /* EmojiLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojiLabel.swift; sourceTree = ""; }; 6BBC27B421EF8CDB00446FB7 /* EmojiViewController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EmojiViewController.xib; sourceTree = ""; }; 6BBC27B621EF8D4D00446FB7 /* EmojiLabelContent.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = EmojiLabelContent.xib; sourceTree = ""; }; - C676BFED3D0A58EBFA76D7DA /* Pods_Example_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - CA7767A4E02CFCA79CE0E01E /* Pods-Example-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example-iOS.debug.xcconfig"; path = "Target Support Files/Pods-Example-iOS/Pods-Example-iOS.debug.xcconfig"; sourceTree = ""; }; + 6BE9F75B235F7FBE0023EF98 /* Carbon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Carbon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6BE9F75F235F80960023EF98 /* Carbon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Carbon.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -139,22 +162,16 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0A729640B3FDCE139DDB84E1 /* Pods_Example_iOS.framework in Frameworks */, + 6BE9F755235F7CBF0023EF98 /* MagazineLayout in Frameworks */, + 6BE9F763235F85CA0023EF98 /* Carbon.framework in Frameworks */, + 6BD04F13235F875200E53082 /* DifferenceKit.framework in Frameworks */, + 6BE9F758235F7CF50023EF98 /* SwipeCellKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 4A86BB19C6009EA031F77B52 /* Pods */ = { - isa = PBXGroup; - children = ( - CA7767A4E02CFCA79CE0E01E /* Pods-Example-iOS.debug.xcconfig */, - 21CAE3C8FFB1A0F4BD270D3B /* Pods-Example-iOS.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; 6B21A49D21E3A63A00568841 /* Form */ = { isa = PBXGroup; children = ( @@ -186,6 +203,14 @@ path = Pangram; sourceTree = ""; }; + 6B444A312338C81A00D00F85 /* KyotoSwiftUI */ = { + isa = PBXGroup; + children = ( + 6B444A332338C8E900D00F85 /* KyotoSwiftUIView.swift */, + ); + path = KyotoSwiftUI; + sourceTree = ""; + }; 6B5A987521E8E9680013BB95 /* Todo */ = { isa = PBXGroup; children = ( @@ -210,6 +235,7 @@ 6B21A4A821E3ADE700568841 /* HeaderContent.xib */, 6B09264321FE17B300CFEC2F /* Footer.swift */, 6B09264521FE183300CFEC2F /* FooterContent.xib */, + 6B00B0A3233AA23F002A45E5 /* HostingController.swift */, 6B6594E621E2650000291AAF /* NibLoadable.swift */, 6B6594EE21E26A7A00291AAF /* Extensions.swift */, ); @@ -222,7 +248,6 @@ 6B6594CE21E2619B00291AAF /* Sources */, 6B6594CD21E2619B00291AAF /* Products */, 6B6594E121E262C400291AAF /* Frameworks */, - 4A86BB19C6009EA031F77B52 /* Pods */, ); sourceTree = ""; }; @@ -245,6 +270,7 @@ 6BBC27AF21EF87CE00446FB7 /* Emoji */, 6B5A987521E8E9680013BB95 /* Todo */, 6B21A49D21E3A63A00568841 /* Form */, + 6B444A312338C81A00D00F85 /* KyotoSwiftUI */, 6B6594CF21E2619B00291AAF /* AppDelegate.swift */, 6B6594D621E2619E00291AAF /* Assets.xcassets */, 6B6594D821E2619E00291AAF /* LaunchScreen.storyboard */, @@ -256,9 +282,10 @@ 6B6594E121E262C400291AAF /* Frameworks */ = { isa = PBXGroup; children = ( + 6BE9F75F235F80960023EF98 /* Carbon.framework */, + 6BE9F75B235F7FBE0023EF98 /* Carbon.framework */, 6B6594F721E272D500291AAF /* DifferenceKit.framework */, 6B6594E221E262C400291AAF /* Carbon.framework */, - C676BFED3D0A58EBFA76D7DA /* Pods_Example_iOS.framework */, ); name = Frameworks; sourceTree = ""; @@ -319,18 +346,21 @@ isa = PBXNativeTarget; buildConfigurationList = 6B6594DE21E2619E00291AAF /* Build configuration list for PBXNativeTarget "Example-iOS" */; buildPhases = ( - B42E1DF0DCAF8D02E3E2C6FD /* [CP] Check Pods Manifest.lock */, 6B6594C821E2619B00291AAF /* Sources */, 6B6594C921E2619B00291AAF /* Frameworks */, 6B6594CA21E2619B00291AAF /* Resources */, 6B7ADEF521FDC40B003803BE /* SwiftLint */, - BF42A6766E4C867797999EB1 /* [CP] Embed Pods Frameworks */, + 6BE9F765235F85CA0023EF98 /* Embed Frameworks */, ); buildRules = ( ); dependencies = ( ); name = "Example-iOS"; + packageProductDependencies = ( + 6BE9F754235F7CBF0023EF98 /* MagazineLayout */, + 6BE9F757235F7CF50023EF98 /* SwipeCellKit */, + ); productName = "Example-iOS"; productReference = 6B6594CC21E2619B00291AAF /* Example-iOS.app */; productType = "com.apple.product-type.application"; @@ -360,6 +390,10 @@ Base, ); mainGroup = 6B6594C321E2619B00291AAF; + packageReferences = ( + 6BE9F753235F7CBF0023EF98 /* XCRemoteSwiftPackageReference "MagazineLayout" */, + 6BE9F756235F7CF50023EF98 /* XCRemoteSwiftPackageReference "SwipeCellKit" */, + ); productRefGroup = 6B6594CD21E2619B00291AAF /* Products */; projectDirPath = ""; projectRoot = ""; @@ -423,45 +457,6 @@ shellPath = /bin/sh; shellScript = "if which swiftlint >/dev/null; then\nswiftlint --config ../../.swiftlint.yml\nelse\necho \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; }; - B42E1DF0DCAF8D02E3E2C6FD /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Example-iOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - BF42A6766E4C867797999EB1 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example-iOS/Pods-Example-iOS-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -479,6 +474,7 @@ 6BBC27B321EF8A6600446FB7 /* EmojiLabel.swift in Sources */, 6BBC279C21EE2F8200446FB7 /* Deletable.swift in Sources */, 6B21A4B321E3BABF00568841 /* FormTextView.swift in Sources */, + 6B444A342338C8E900D00F85 /* KyotoSwiftUIView.swift in Sources */, 6B6594EF21E26A7A00291AAF /* Extensions.swift in Sources */, 6B6594D221E2619B00291AAF /* HomeViewController.swift in Sources */, 6BBC27AC21EE5BFE00446FB7 /* KyotoLicense.swift in Sources */, @@ -488,6 +484,7 @@ 6B21A4AB21E3AF4700568841 /* FormTextPicker.swift in Sources */, 6BBC27A621EE451D00446FB7 /* KyotoImage.swift in Sources */, 6B5A987721E8ED220013BB95 /* TodoViewController.swift in Sources */, + 6B00B0A4233AA23F002A45E5 /* HostingController.swift in Sources */, 6BBC27B121EF882800446FB7 /* EmojiViewController.swift in Sources */, 6B7ADEFA21FDD5D3003803BE /* HelloViewController.swift in Sources */, 6BBC279E21EE326000446FB7 /* KyotoTop.swift in Sources */, @@ -636,7 +633,6 @@ }; 6B6594DF21E2619E00291AAF /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CA7767A4E02CFCA79CE0E01E /* Pods-Example-iOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_NOTICES = YES; @@ -654,13 +650,12 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Debug; }; 6B6594E021E2619E00291AAF /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 21CAE3C8FFB1A0F4BD270D3B /* Pods-Example-iOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_NOTICES = YES; @@ -678,7 +673,7 @@ PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; + TARGETED_DEVICE_FAMILY = 1; }; name = Release; }; @@ -704,6 +699,38 @@ defaultConfigurationName = Release; }; /* End XCConfigurationList section */ + +/* Begin XCRemoteSwiftPackageReference section */ + 6BE9F753235F7CBF0023EF98 /* XCRemoteSwiftPackageReference "MagazineLayout" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/airbnb/MagazineLayout"; + requirement = { + kind = revision; + revision = 61fd38f770fb1b635fe486a6670381061424ff80; + }; + }; + 6BE9F756235F7CF50023EF98 /* XCRemoteSwiftPackageReference "SwipeCellKit" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/SwipeCellKit/SwipeCellKit"; + requirement = { + kind = exactVersion; + version = 2.7.1; + }; + }; +/* End XCRemoteSwiftPackageReference section */ + +/* Begin XCSwiftPackageProductDependency section */ + 6BE9F754235F7CBF0023EF98 /* MagazineLayout */ = { + isa = XCSwiftPackageProductDependency; + package = 6BE9F753235F7CBF0023EF98 /* XCRemoteSwiftPackageReference "MagazineLayout" */; + productName = MagazineLayout; + }; + 6BE9F757235F7CF50023EF98 /* SwipeCellKit */ = { + isa = XCSwiftPackageProductDependency; + package = 6BE9F756235F7CF50023EF98 /* XCRemoteSwiftPackageReference "SwipeCellKit" */; + productName = SwipeCellKit; + }; +/* End XCSwiftPackageProductDependency section */ }; rootObject = 6B6594C421E2619B00291AAF /* Project object */; } diff --git a/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata index f6e458f..919434a 100644 --- a/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..291ebb9 --- /dev/null +++ b/Examples/Example-iOS/Example-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "MagazineLayout", + "repositoryURL": "https://github.com/airbnb/MagazineLayout", + "state": { + "branch": null, + "revision": "61fd38f770fb1b635fe486a6670381061424ff80", + "version": null + } + }, + { + "package": "SwipeCellKit", + "repositoryURL": "https://github.com/SwipeCellKit/SwipeCellKit", + "state": { + "branch": null, + "revision": "7219cad3098637176ace311510d11467dbfb9bb0", + "version": "2.7.1" + } + } + ] + }, + "version": 1 +} diff --git a/Examples/Example-iOS/Example-iOS.xcworkspace/contents.xcworkspacedata b/Examples/Example-iOS/Example-iOS.xcworkspace/contents.xcworkspacedata index 95ab9a2..fdf6c0c 100644 --- a/Examples/Example-iOS/Example-iOS.xcworkspace/contents.xcworkspacedata +++ b/Examples/Example-iOS/Example-iOS.xcworkspace/contents.xcworkspacedata @@ -5,6 +5,9 @@ location = "group:Example-iOS.xcodeproj"> + location = "group:../../Carbon.xcodeproj"> + + diff --git a/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 0000000..f9b0d7c --- /dev/null +++ b/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/swiftpm/Package.resolved new file mode 100644 index 0000000..291ebb9 --- /dev/null +++ b/Examples/Example-iOS/Example-iOS.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -0,0 +1,25 @@ +{ + "object": { + "pins": [ + { + "package": "MagazineLayout", + "repositoryURL": "https://github.com/airbnb/MagazineLayout", + "state": { + "branch": null, + "revision": "61fd38f770fb1b635fe486a6670381061424ff80", + "version": null + } + }, + { + "package": "SwipeCellKit", + "repositoryURL": "https://github.com/SwipeCellKit/SwipeCellKit", + "state": { + "branch": null, + "revision": "7219cad3098637176ace311510d11467dbfb9bb0", + "version": "2.7.1" + } + } + ] + }, + "version": 1 +} diff --git a/Examples/Example-iOS/Gemfile b/Examples/Example-iOS/Gemfile deleted file mode 100644 index 6556e49..0000000 --- a/Examples/Example-iOS/Gemfile +++ /dev/null @@ -1,3 +0,0 @@ -source "https://rubygems.org" - -gem 'cocoapods', '1.7.5' diff --git a/Examples/Example-iOS/Gemfile.lock b/Examples/Example-iOS/Gemfile.lock deleted file mode 100644 index 727b173..0000000 --- a/Examples/Example-iOS/Gemfile.lock +++ /dev/null @@ -1,76 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.0) - activesupport (4.2.11.1) - i18n (~> 0.7) - minitest (~> 5.1) - thread_safe (~> 0.3, >= 0.3.4) - tzinfo (~> 1.1) - atomos (0.1.3) - claide (1.0.2) - cocoapods (1.7.5) - activesupport (>= 4.0.2, < 5) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.7.5) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 1.2.2, < 2.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-stats (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.3.1, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.6.6) - nap (~> 1.0) - ruby-macho (~> 1.4) - xcodeproj (>= 1.10.0, < 2.0) - cocoapods-core (1.7.5) - activesupport (>= 4.0.2, < 6) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - cocoapods-deintegrate (1.0.4) - cocoapods-downloader (1.2.2) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.0) - cocoapods-stats (1.1.0) - cocoapods-trunk (1.3.1) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.1.0) - colored2 (3.1.2) - concurrent-ruby (1.1.5) - escape (0.0.4) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - minitest (5.11.3) - molinillo (0.6.6) - nanaimo (0.2.6) - nap (1.1.0) - netrc (0.11.0) - ruby-macho (1.4.0) - thread_safe (0.3.6) - tzinfo (1.2.5) - thread_safe (~> 0.1) - xcodeproj (1.11.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.2.6) - -PLATFORMS - ruby - -DEPENDENCIES - cocoapods (= 1.7.5) - -BUNDLED WITH - 2.0.1 diff --git a/Examples/Example-iOS/Makefile b/Examples/Example-iOS/Makefile deleted file mode 100644 index 06b4ef6..0000000 --- a/Examples/Example-iOS/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -pods-install: - bundle exec pod install || bundle exec pod install --repo-update - -gems-install: - bundle check || bundle install --path vendor/bundle --clean --jobs=4 diff --git a/Examples/Example-iOS/Podfile b/Examples/Example-iOS/Podfile deleted file mode 100644 index 8f51158..0000000 --- a/Examples/Example-iOS/Podfile +++ /dev/null @@ -1,13 +0,0 @@ -source 'https://cdn.cocoapods.org/' -platform :ios, '12.2' - -use_frameworks! -inhibit_all_warnings! - -ENV['COCOAPODS_DISABLE_STATS'] = 'true' - -target 'Example-iOS' do - pod 'Carbon', path: '../../' - pod 'MagazineLayout', '1.5.0' - pod 'SwipeCellKit', '2.6.0' -end diff --git a/Examples/Example-iOS/Podfile.lock b/Examples/Example-iOS/Podfile.lock deleted file mode 100644 index 42c52c7..0000000 --- a/Examples/Example-iOS/Podfile.lock +++ /dev/null @@ -1,31 +0,0 @@ -PODS: - - Carbon (1.0.0-rc.3): - - DifferenceKit/Core (~> 1.1) - - DifferenceKit/Core (1.1.3) - - MagazineLayout (1.5.0) - - SwipeCellKit (2.6.0) - -DEPENDENCIES: - - Carbon (from `../../`) - - MagazineLayout (= 1.5.0) - - SwipeCellKit (= 2.6.0) - -SPEC REPOS: - https://cdn.cocoapods.org/: - - DifferenceKit - - MagazineLayout - - SwipeCellKit - -EXTERNAL SOURCES: - Carbon: - :path: "../../" - -SPEC CHECKSUMS: - Carbon: c0703b96ce427ff1e7f162467e7169281eae435f - DifferenceKit: 5018791b6c1fc839921a3c171a0a539ace6ea60c - MagazineLayout: fe41dc2cf1923e3bf377cd8d906a4455a0bf9c83 - SwipeCellKit: 935ca28c187ec6e1ffb2b578cf8ddca842bfdcbb - -PODFILE CHECKSUM: be830e3243aec6afdc78b16a82166efd1db3cb52 - -COCOAPODS: 1.7.5 diff --git a/Examples/Example-iOS/README.md b/Examples/Example-iOS/README.md index 9d4d49f..6fa36d5 100644 --- a/Examples/Example-iOS/README.md +++ b/Examples/Example-iOS/README.md @@ -1,7 +1,5 @@ # How to Run -1. Change directory from the root of repository `cd ./Examples/Example-iOS` -1. Install gems by Bundler `make gems-install` -1. Install dependencies by CocoaPods `make pods-install` -1. Open `Example-iOS.xcworkspace` on Xcode +1. Setup project by command `make setup` in project root directory +1. Open `Example-iOS.xcworkspace` via Xcode 1. Run `Example-iOS` scheme diff --git a/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/1024.png b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..afd3646 Binary files /dev/null and b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/120.png b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/120.png new file mode 100644 index 0000000..50777cd Binary files /dev/null and b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/120.png differ diff --git a/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/180.png b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/180.png new file mode 100644 index 0000000..f043d60 Binary files /dev/null and b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/180.png differ diff --git a/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json index d8db8d6..9b28c3b 100644 --- a/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Examples/Example-iOS/Sources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -31,13 +31,15 @@ "scale" : "3x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "120.png", "scale" : "2x" }, { - "idiom" : "iphone", "size" : "60x60", + "idiom" : "iphone", + "filename" : "180.png", "scale" : "3x" }, { @@ -86,8 +88,9 @@ "scale" : "2x" }, { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "1024.png", "scale" : "1x" } ], diff --git a/Examples/Example-iOS/Sources/Common/Header.swift b/Examples/Example-iOS/Sources/Common/Header.swift index a8c3f0d..c5ee61d 100644 --- a/Examples/Example-iOS/Sources/Common/Header.swift +++ b/Examples/Example-iOS/Sources/Common/Header.swift @@ -1,7 +1,7 @@ -import UIKit +import SwiftUI import Carbon -struct Header: Component { +struct Header: Component, View { var title: String init(_ title: String) { diff --git a/Examples/Example-iOS/Sources/Common/HeaderContent.xib b/Examples/Example-iOS/Sources/Common/HeaderContent.xib index be68ffc..4c1852e 100644 --- a/Examples/Example-iOS/Sources/Common/HeaderContent.xib +++ b/Examples/Example-iOS/Sources/Common/HeaderContent.xib @@ -1,8 +1,8 @@ - + - + diff --git a/Examples/Example-iOS/Sources/Common/HostingController.swift b/Examples/Example-iOS/Sources/Common/HostingController.swift new file mode 100644 index 0000000..d328816 --- /dev/null +++ b/Examples/Example-iOS/Sources/Common/HostingController.swift @@ -0,0 +1,8 @@ +import SwiftUI +import UIKit + +final class HostingController: UIHostingController { + override var supportedInterfaceOrientations: UIInterfaceOrientationMask { + .portrait + } +} diff --git a/Examples/Example-iOS/Sources/Kyoto/KyotoImage.swift b/Examples/Example-iOS/Sources/Kyoto/KyotoImage.swift index 220e9cb..39574a6 100644 --- a/Examples/Example-iOS/Sources/Kyoto/KyotoImage.swift +++ b/Examples/Example-iOS/Sources/Kyoto/KyotoImage.swift @@ -1,7 +1,7 @@ -import UIKit +import SwiftUI import Carbon -struct KyotoImage: IdentifiableComponent, Hashable { +struct KyotoImage: IdentifiableComponent, View, Hashable { var title: String var image: UIImage @@ -13,6 +13,10 @@ struct KyotoImage: IdentifiableComponent, Hashable { content.imageView.image = image content.titleLabel.text = title } + + func referenceSize(in bounds: CGRect) -> CGSize? { + CGSize(width: bounds.width, height: 150) + } } final class KyotoImageContent: UIView, NibLoadable { diff --git a/Examples/Example-iOS/Sources/Kyoto/KyotoLicense.swift b/Examples/Example-iOS/Sources/Kyoto/KyotoLicense.swift index c2d618e..0718879 100644 --- a/Examples/Example-iOS/Sources/Kyoto/KyotoLicense.swift +++ b/Examples/Example-iOS/Sources/Kyoto/KyotoLicense.swift @@ -1,7 +1,7 @@ -import UIKit +import SwiftUI import Carbon -struct KyotoLicense: Component { +struct KyotoLicense: Component, View { var onSelected: () -> Void func renderContent() -> KyotoLicenseContent { @@ -11,6 +11,10 @@ struct KyotoLicense: Component { func render(in content: KyotoLicenseContent) { content.onSelected = onSelected } + + func referenceSize(in bounds: CGRect) -> CGSize? { + CGSize(width: bounds.size.width, height: 71) + } } final class KyotoLicenseContent: UIControl, NibLoadable { diff --git a/Examples/Example-iOS/Sources/Kyoto/KyotoMagazineLayoutAdapter.swift b/Examples/Example-iOS/Sources/Kyoto/KyotoMagazineLayoutAdapter.swift index a3acf81..17e6b32 100644 --- a/Examples/Example-iOS/Sources/Kyoto/KyotoMagazineLayoutAdapter.swift +++ b/Examples/Example-iOS/Sources/Kyoto/KyotoMagazineLayoutAdapter.swift @@ -1,3 +1,4 @@ +import UIKit import Carbon import MagazineLayout @@ -22,7 +23,12 @@ final class KyotoMagazineLayoutAdapter: UICollectionViewAdapter, UICollectionVie } func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeModeForItemAt indexPath: IndexPath) -> MagazineLayoutItemSizeMode { - MagazineLayoutItemSizeMode(widthMode: .halfWidth, heightMode: .static(height: 150)) + let node = cellNode(at: indexPath) + guard let size = node.component.referenceSize(in: collectionView.bounds) else { + return MagazineLayoutItemSizeMode(widthMode: .halfWidth, heightMode: .dynamic) + } + + return MagazineLayoutItemSizeMode(widthMode: .halfWidth, heightMode: .static(height: size.height)) } func collectionView( diff --git a/Examples/Example-iOS/Sources/Kyoto/KyotoTop.swift b/Examples/Example-iOS/Sources/Kyoto/KyotoTop.swift index 7ca7e89..c13a7fd 100644 --- a/Examples/Example-iOS/Sources/Kyoto/KyotoTop.swift +++ b/Examples/Example-iOS/Sources/Kyoto/KyotoTop.swift @@ -1,7 +1,7 @@ -import UIKit +import SwiftUI import Carbon -struct KyotoTop: Component, Hashable { +struct KyotoTop: Component, View, Hashable { func renderContent() -> KyotoTopContent { .loadFromNib() } diff --git a/Examples/Example-iOS/Sources/Kyoto/KyotoTopContent.xib b/Examples/Example-iOS/Sources/Kyoto/KyotoTopContent.xib index d0d694d..8ef502c 100644 --- a/Examples/Example-iOS/Sources/Kyoto/KyotoTopContent.xib +++ b/Examples/Example-iOS/Sources/Kyoto/KyotoTopContent.xib @@ -1,8 +1,8 @@ - + - + @@ -10,7 +10,7 @@ - + @@ -25,7 +25,7 @@ diff --git a/Examples/Example-iOS/Sources/KyotoSwiftUI/KyotoSwiftUIView.swift b/Examples/Example-iOS/Sources/KyotoSwiftUI/KyotoSwiftUIView.swift new file mode 100644 index 0000000..13f7e9e --- /dev/null +++ b/Examples/Example-iOS/Sources/KyotoSwiftUI/KyotoSwiftUIView.swift @@ -0,0 +1,44 @@ +import SwiftUI + +struct KyotoSwiftUIView: View { + var body: some View { + ScrollView { + VStack { + KyotoTop() + .frame(height: 435) + + Header("PHOTOS") + + VStack { + HStack { + KyotoImage(title: "Fushimi Inari-taisha", image: #imageLiteral(resourceName: "KyotoFushimiInari")) + KyotoImage(title: "Arashiyama", image: #imageLiteral(resourceName: "KyotoArashiyama")) + } + + HStack { + KyotoImage(title: "Byōdō-in", image: #imageLiteral(resourceName: "KyotoByōdōIn")) + KyotoImage(title: "Gion", image: #imageLiteral(resourceName: "KyotoGion")) + } + + HStack { + KyotoImage(title: "Kiyomizu-dera", image: #imageLiteral(resourceName: "KyotoKiyomizuDera")) + Color.clear + } + } + .padding(.horizontal, 16) + + KyotoLicense { + let url = URL(string: "https://unsplash.com/")! + UIApplication.shared.open(url) + } + } + } + .navigationBarTitle("Kyoto") + } +} + +struct KyotoSwiftUIView_Previews: PreviewProvider { + static var previews: some View { + KyotoSwiftUIView() + } +} diff --git a/Examples/Example-iOS/Sources/Todo/TodoSwipeCellKitAdapter.swift b/Examples/Example-iOS/Sources/Todo/TodoSwipeCellKitAdapter.swift index 92450f7..a54f7ed 100644 --- a/Examples/Example-iOS/Sources/Todo/TodoSwipeCellKitAdapter.swift +++ b/Examples/Example-iOS/Sources/Todo/TodoSwipeCellKitAdapter.swift @@ -1,3 +1,4 @@ +import UIKit import Carbon import SwipeCellKit diff --git a/Examples/Example-iOS/Sources/Top/HomeViewController.swift b/Examples/Example-iOS/Sources/Top/HomeViewController.swift index 186d1a5..70cf580 100644 --- a/Examples/Example-iOS/Sources/Top/HomeViewController.swift +++ b/Examples/Example-iOS/Sources/Top/HomeViewController.swift @@ -1,4 +1,5 @@ import UIKit +import SwiftUI import Carbon final class HomeViewController: UIViewController { @@ -9,6 +10,7 @@ final class HomeViewController: UIViewController { case emoji case todo case form + case kyotoSwiftUI } @IBOutlet var tableView: UITableView! @@ -51,6 +53,10 @@ final class HomeViewController: UIViewController { HomeItem(title: "👤 Profile Form") { [weak self] in self?.push(.form) } + + HomeItem(title: "⛩ Kyoto SwiftUI") { [weak self] in + self?.push(.kyotoSwiftUI) + } } } @@ -75,6 +81,9 @@ final class HomeViewController: UIViewController { case .form: controller = FormViewController() + + case .kyotoSwiftUI: + controller = HostingController(rootView: KyotoSwiftUIView()) } navigationController?.pushViewController(controller, animated: true) diff --git a/README.md b/README.md index 90373e6..4b59bea 100644 --- a/README.md +++ b/README.md @@ -30,6 +30,7 @@ in UITableView and UICollectionView.
Carbon is a library for building component-based user interfaces in UITableView and UICollectionView inspired by [SwiftUI](https://developer.apple.com/xcode/swiftui) and [React](https://reactjs.org). This make it painless to build and maintain the complex UIs. +Since components made with `Carbon` can be works directly on `SwiftUI`, the cost of future migration can be greatly reduced. Uses [DifferenceKit](https://github.com/ra1028/DifferenceKit) which is highly optimized based on Paul Heckel's paper for diffing. Declarative design and diffing algorithm make your code more predictable, debugging easier and providing beautiful animations to users. @@ -40,6 +41,11 @@ Our goal is similar to [Instagram/IGListKit](https://github.com/Instagram/IGList ## Examples +|![Pangram](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/pangram.gif)|![Kyoto](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/kyoto.gif)|![Emoji](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/emoji.gif)|![Todo](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/todo.gif)|![Form](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/form.gif)| +|:----------------------------:|:------------------------:|:------------------------:|:----------------------:|:----------------------:| + +--- + ```swift @@ -58,8 +64,25 @@ renderer.render { --- -|![Pangram](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/pangram.gif)|![Kyoto](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/kyoto.gif)|![Emoji](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/emoji.gif)|![Todo](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/todo.gif)|![Form](https://raw.githubusercontent.com/ra1028/Carbon/master/assets/form.gif)| -|:----------------------------:|:------------------------:|:------------------------:|:----------------------:|:----------------------:| +### [SwiftUI Compatibility](https://github.com/ra1028/Carbon#swiftui-compatibility-1) + +```swift +struct ContentView: View { + var body: some View { + ScrollView { + VStack { + Text("GREET") + .font(.title) + .padding(.horizontal, 16) + + HelloMessage("World") + .frame(height: 60) + .background(Color.red) + } + } + } +} +``` --- @@ -298,6 +321,33 @@ struct HelloMessage: IdentifiableComponent { ... ``` +### SwiftUI Compatibility + +Components made with `Carbon` are compatible with `SwiftUI`. +The component can easily works as SwiftUI by composing with `View` protocol. +Currently SwiftUI doesn't support self-sizing, so can use `UIView.intrinsicContentSize` or specify the height explicitly by `Component.referenceSize(in:)` or `View.frame(height:)`. + +```swift +struct HelloMessage: Component, View { + ... +} +``` + +```swift +struct ContentView: View { + var body: some View { + VStack(alignment: .leading) { + Text("GREET") + + HelloMessage("World") + .frame(height: 60) + + Spacer() + } + } +} +``` + ### Component in-Depth Components can define more detailed behaviors. @@ -538,6 +588,12 @@ Add the following to your `Cartfile`: github "ra1028/Carbon" ``` +### [Swift Package Manager](https://developer.apple.com/documentation/xcode/adding_package_dependencies_to_your_app) +Select Xcode menu File > Swift Packages > Add Package Dependency and enter repository URL with GUI. +``` +Repository: https://github.com/ra1028/Carbon +``` + --- ## Contributing diff --git a/Sources/AnyComponent.swift b/Sources/AnyComponent.swift index 74372bb..0308508 100644 --- a/Sources/AnyComponent.swift +++ b/Sources/AnyComponent.swift @@ -102,6 +102,17 @@ public struct AnyComponent: Component { box.layout(content: content, in: container) } + /// The natural size for the passed content. + /// + /// - Parameter: + /// - content: An instance of content. + /// + /// - Returns: A `CGSize` value represents a natural size of the passed content. + @inlinable + public func intrinsicContentSize(for content: Any) -> CGSize { + return box.intrinsicContentSize(for: content) + } + /// Invoked every time of before a component got into visible area. /// /// - Parameter: @@ -146,6 +157,7 @@ internal protocol AnyComponentBox { func render(in content: Any) func referenceSize(in bounds: CGRect) -> CGSize? func layout(content: Any, in container: UIView) + func intrinsicContentSize(for content: Any) -> CGSize func shouldContentUpdate(with next: AnyComponentBox) -> Bool func shouldRender(next: AnyComponentBox, in content: Any) -> Bool @@ -197,6 +209,13 @@ internal struct ComponentBox: AnyComponentBox { baseComponent.layout(content: content, in: container) } + @inlinable + func intrinsicContentSize(for content: Any) -> CGSize { + guard let content = content as? Base.Content else { return .zero } + + return baseComponent.intrinsicContentSize(for: content) + } + @inlinable func shouldContentUpdate(with next: AnyComponentBox) -> Bool { guard let next = next.base as? Base else { return true } diff --git a/Sources/Component.swift b/Sources/Component.swift index 2fb6a5a..2822c7c 100644 --- a/Sources/Component.swift +++ b/Sources/Component.swift @@ -1,9 +1,8 @@ import UIKit -/// Represents a component of a list UI such as `UITableView` or `UICollectionView`. -/// -/// - Note: Components are designed to be available for `UITableView`, `UICollectionView`, -/// and its cell, header, footer or other generally elements. +/// A component represents a small reusable piece of code of element to be rendered. +/// This behaves as all elements of UIKit's UITableView and UICollectionView, and can +/// be easily support SwiftUI by used in conjunction with the `View` protocol. /// /// Example for the simple component: /// @@ -22,6 +21,19 @@ import UIKit /// content.text = text /// } /// } +/// +/// Example for use with SwiftUI: +/// +/// extension Label: View {} +/// +/// struct ContentView: View { +/// var body: some View { +/// VStack { +/// Text("This is SwiftUI view") +/// Label("This is Carbon component") +/// } +/// } +/// } public protocol Component { /// A type that represents a content to be render on the element of list UI. associatedtype Content @@ -88,6 +100,14 @@ public protocol Component { /// - container: A container view to layout content. func layout(content: Content, in container: UIView) + /// The natural size for the passed content. + /// + /// - Parameter: + /// - content: An instance of content. + /// + /// - Returns: A `CGSize` value represents a natural size of the passed content. + func intrinsicContentSize(for content: Content) -> CGSize + // MARK: - Lifecycle - optional /// Invoked every time of before a component got into visible area. @@ -179,6 +199,16 @@ public extension Component where Content: UIView { func layout(content: Content, in container: UIView) { container.addSubviewWithEdgeConstraints(content) } + + /// The natural size for the passed content. + /// + /// - Parameter: + /// - content: An instance of content. + /// + /// - Returns: A `CGSize` value represents a natural size of the passed content. + func intrinsicContentSize(for content: Content) -> CGSize { + return content.intrinsicContentSize + } } public extension Component where Content: UIViewController { @@ -191,6 +221,16 @@ public extension Component where Content: UIViewController { func layout(content: Content, in container: UIView) { container.addSubviewWithEdgeConstraints(content.view) } + + /// The natural size for the passed content. + /// + /// - Parameter: + /// - content: An instance of content. + /// + /// - Returns: A `CGSize` value represents a natural size of the passed content. + func intrinsicContentSize(for content: Content) -> CGSize { + return content.view.intrinsicContentSize + } } private extension UIView { diff --git a/Sources/ComponentWrapper/ComponentWrapping.swift b/Sources/ComponentWrapper/ComponentWrapping.swift index 0dc318f..d655e42 100644 --- a/Sources/ComponentWrapper/ComponentWrapping.swift +++ b/Sources/ComponentWrapper/ComponentWrapping.swift @@ -115,6 +115,16 @@ public extension ComponentWrapping { wrapped.layout(content: content, in: container) } + /// The natural size for the passed content. + /// + /// - Parameter: + /// - content: An instance of content. + /// + /// - Returns: A `CGSize` value represents a natural size of the passed content. + func intrinsicContentSize(for content: Wrapped.Content) -> CGSize { + return wrapped.intrinsicContentSize(for: content) + } + /// Invoked every time of before a component got into visible area. /// /// - Parameter: diff --git a/Sources/Interfaces/ComponentRenderable.swift b/Sources/Interfaces/ComponentRenderable.swift index ca2b7a3..93e4d47 100644 --- a/Sources/Interfaces/ComponentRenderable.swift +++ b/Sources/Interfaces/ComponentRenderable.swift @@ -60,6 +60,13 @@ internal extension ComponentRenderable { } } +public extension ComponentRenderable where Self: UIView { + /// The container view to be render a component. + var componentContainerView: UIView { + return self + } +} + public extension ComponentRenderable where Self: UITableViewCell { /// The container view to be render a component. var componentContainerView: UIView { diff --git a/Sources/SwiftUISupport/ComponentSwiftUISupport.swift b/Sources/SwiftUISupport/ComponentSwiftUISupport.swift new file mode 100644 index 0000000..9a40b23 --- /dev/null +++ b/Sources/SwiftUISupport/ComponentSwiftUISupport.swift @@ -0,0 +1,72 @@ +#if canImport(SwiftUI) && canImport(Combine) + +import SwiftUI + +@available(iOS 13.0, *) +public extension Component where Self: View { + /// Declares the content and behavior of this view. + var body: some View { + ComponentView(self) + } +} + +@available(iOS 13.0, *) +private struct ComponentView: View { + var component: C + var proxy = ComponentViewProxy() + + init(_ component: C) { + self.component = component + } + + var body: some View { + ComponentRepresenting(component: component, proxy: proxy) + .onAppear { self.proxy.uiView?.contentWillDisplay() } + .onDisappear { self.proxy.uiView?.contentDidEndDisplay() } + } +} + +private struct ComponentRepresenting: UIViewRepresentable { + var component: C + var proxy: ComponentViewProxy + + func makeUIView(context: Context) -> UIComponentView { + UIComponentView() + } + + func updateUIView(_ uiView: UIComponentView, context: Context) { + uiView.render(component: AnyComponent(component)) + proxy.uiView = uiView + } +} + +private final class UIComponentView: UIView, ComponentRenderable { + @available(*, unavailable) + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override init(frame: CGRect) { + super.init(frame: frame) + + backgroundColor = .clear + } + + override var intrinsicContentSize: CGSize { + if let referenceSize = renderedComponent?.referenceSize(in: bounds) { + return referenceSize + } + else if let component = renderedComponent, let content = renderedContent { + return component.intrinsicContentSize(for: content) + } + else { + return super.intrinsicContentSize + } + } +} + +private final class ComponentViewProxy { + var uiView: UIComponentView? +} + +#endif diff --git a/Tests/AnyComponentTests.swift b/Tests/AnyComponentTests.swift index 16e8d68..6f58608 100644 --- a/Tests/AnyComponentTests.swift +++ b/Tests/AnyComponentTests.swift @@ -66,6 +66,31 @@ final class AnyComponentTests: XCTestCase { XCTAssertEqual((anyContent as? MockComponent.Content)?.frame, frame) } + func testIntrinsicContentSizeForView() { + struct TestComponent: Component { + func renderContent() -> UILabel { + return UILabel() + } + + func render(in content: UILabel) { + content.text = "Test" + } + } + + let component = TestComponent() + let content = component.renderContent() + let anyComponent = AnyComponent(component) + let anyContent = anyComponent.renderContent() + + component.render(in: content) + anyComponent.render(in: anyContent) + + XCTAssertEqual( + component.intrinsicContentSize(for: content), + anyComponent.intrinsicContentSize(for: anyContent) + ) + } + func testShouldContentUpdate() { let component1 = MockComponent(shouldContentUpdate: true) let component2 = MockComponent(shouldContentUpdate: false) diff --git a/Tests/ComponentTests.swift b/Tests/ComponentTests.swift index 3b95f56..e666689 100644 --- a/Tests/ComponentTests.swift +++ b/Tests/ComponentTests.swift @@ -22,6 +22,24 @@ final class ComponentTests: XCTestCase { XCTAssertEqual(content.frame, frame) } + func testIntrinsicContentSizeForView() { + struct TestComponent: Component { + func renderContent() -> UILabel { + return UILabel() + } + + func render(in content: UILabel) { + content.text = "Test" + } + } + + let component = TestComponent() + let content = component.renderContent() + component.render(in: content) + + XCTAssertEqual(component.intrinsicContentSize(for: content), content.intrinsicContentSize) + } + func testShouldContentUpdateWhenEquatable() { let component1 = A.Component(value: 100) let component2 = A.Component(value: 200) diff --git a/Tests/ComponentWrapper/ComponentWrappingTests.swift b/Tests/ComponentWrapper/ComponentWrappingTests.swift index a2bbeea..26a6c96 100644 --- a/Tests/ComponentWrapper/ComponentWrappingTests.swift +++ b/Tests/ComponentWrapper/ComponentWrappingTests.swift @@ -4,7 +4,8 @@ import XCTest final class ComponentWrappingTests: XCTestCase { func testForwardingActions() { let reuseIdentifier = "testForwardingActions" - let referenceSize = CGSize(width: 200, height: 200) + let referenceSize = CGSize(width: 200, height: 200) + let intrinsicContentSize = CGSize(width: 300, height: 300) let shouldContentUpdate = true let shouldRender = true let content = UIView() @@ -12,6 +13,7 @@ final class ComponentWrappingTests: XCTestCase { let mock = MockComponent( reuseIdentifier: reuseIdentifier, referenceSize: referenceSize, + intrinsicContentSize: intrinsicContentSize, shouldContentUpdate: shouldContentUpdate, shouldRender: shouldRender, content: content @@ -26,6 +28,7 @@ final class ComponentWrappingTests: XCTestCase { XCTAssertEqual(wrapper.renderContent(), content) XCTAssertEqual(mock.contentCapturedOnRender, content) XCTAssertEqual(wrapper.referenceSize(in: .zero), referenceSize) + XCTAssertEqual(wrapper.intrinsicContentSize(for: content), intrinsicContentSize) XCTAssertEqual(wrapper.shouldContentUpdate(with: wrapper), shouldContentUpdate) XCTAssertEqual(wrapper.shouldRender(next: wrapper, in: content), shouldRender) XCTAssertEqual(mock.contentCapturedOnLayout, content) diff --git a/Tests/SwiftUISupport/ComponentSwiftUISupportTests.swift b/Tests/SwiftUISupport/ComponentSwiftUISupportTests.swift new file mode 100644 index 0000000..aeba04d --- /dev/null +++ b/Tests/SwiftUISupport/ComponentSwiftUISupportTests.swift @@ -0,0 +1,100 @@ +#if canImport(SwiftUI) && canImport(Combine) + +import XCTest +import SwiftUI +@testable import Carbon + +@available(iOS 13.0, *) +final class ComponentSwiftUISupportTests: XCTestCase { + func testDisplayLifecycle() { + struct TestComponent: Component, View { + var willDisplay: () -> Void + var didEndDisplay: () -> Void + + func renderContent() -> UIView { + UIView() + } + + func render(in content: UIView) {} + + func contentWillDisplay(_ content: UIView) { + willDisplay() + } + + func contentDidEndDisplay(_ content: UIView) { + didEndDisplay() + } + } + + var isWillDisplayCalled = false + var isDidEndDisplayCalled = false + let component = TestComponent( + willDisplay: { isWillDisplayCalled = true }, + didEndDisplay: { isDidEndDisplayCalled = true } + ) + let hostingController = UIHostingController(rootView: AnyView(component.body)) + + XCTAssertFalse(isWillDisplayCalled) + XCTAssertFalse(isDidEndDisplayCalled) + + let window = UIWindow() + window.rootViewController = hostingController + window.isHidden = false + window.setNeedsLayout() + window.layoutIfNeeded() + + XCTAssertTrue(isWillDisplayCalled) + XCTAssertFalse(isDidEndDisplayCalled) + + hostingController.rootView = AnyView(EmptyView()) + window.setNeedsLayout() + window.layoutIfNeeded() + + XCTAssertTrue(isWillDisplayCalled) + XCTAssertTrue(isDidEndDisplayCalled) + } + + func testReferenceSize() { + struct TestComponent: Component, View { + static let testSize = CGSize(width: 123, height: 456) + + func renderContent() -> UIView { + UIView() + } + + func render(in content: UIView) {} + + func referenceSize(in bounds: CGRect) -> CGSize? { + Self.testSize + } + } + + let component = TestComponent() + let hostingController = UIHostingController(rootView: component.body) + + XCTAssertEqual(hostingController.view.sizeThatFits(.zero), TestComponent.testSize) + } + + func testIntrinsicContentSize() { + struct TestComponent: Component, View { + static let testSize = CGSize(width: 123, height: 456) + + func renderContent() -> UIView { + UIView() + } + + func render(in content: UIView) {} + + func intrinsicContentSize(for content: UIView) -> CGSize { + Self.testSize + } + } + + let component = TestComponent() + let hostingController = UIHostingController(rootView: component.body) + + XCTAssertEqual(hostingController.view.sizeThatFits(.zero), TestComponent.testSize) + } +} + +#endif diff --git a/Tests/TestTools.swift b/Tests/TestTools.swift index 29bd6c7..437fadf 100644 --- a/Tests/TestTools.swift +++ b/Tests/TestTools.swift @@ -56,6 +56,7 @@ enum B { class MockComponent: Component, Equatable { let reuseIdentifier: String let referenceSize: CGSize? + let intrinsicContentSize: CGSize let shouldContentUpdate: Bool let shouldRender: Bool let content: UIView @@ -68,12 +69,14 @@ class MockComponent: Component, Equatable { init( reuseIdentifier: String = "MockComponent", referenceSize: CGSize? = nil, + intrinsicContentSize: CGSize = .zero, shouldContentUpdate: Bool = false, shouldRender: Bool = false, content: UIView = UIView() ) { self.reuseIdentifier = reuseIdentifier self.referenceSize = referenceSize + self.intrinsicContentSize = intrinsicContentSize self.shouldContentUpdate = shouldContentUpdate self.shouldRender = shouldRender self.content = content @@ -103,6 +106,10 @@ class MockComponent: Component, Equatable { contentCapturedOnLayout = content } + func intrinsicContentSize(for content: UIView) -> CGSize { + return intrinsicContentSize + } + func contentWillDisplay(_ content: UIView) { contentCapturedOnWillDisplay = content } diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 54b0cc5..75716a4 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -12,7 +12,7 @@ jobs: DEVELOPER_DIR: /Applications/Xcode_10.2.app SIMULATOR_NAME: iPhone Xs xcode11: - DEVELOPER_DIR: /Applications/Xcode_11.app + DEVELOPER_DIR: /Applications/Xcode_11.1.app SIMULATOR_NAME: iPhone 11 Pro steps: - checkout: self diff --git a/docs/Adapter.html b/docs/Adapter.html index a3530cd..44cc0a0 100644 --- a/docs/Adapter.html +++ b/docs/Adapter.html @@ -368,7 +368,7 @@

Declaration

diff --git a/docs/Builder.html b/docs/Builder.html index 83b8010..57ddf39 100644 --- a/docs/Builder.html +++ b/docs/Builder.html @@ -386,7 +386,7 @@

Declaration

diff --git a/docs/Changeset.html b/docs/Changeset.html index 26d2f5b..a56b00a 100644 --- a/docs/Changeset.html +++ b/docs/Changeset.html @@ -287,7 +287,7 @@

Declaration

diff --git a/docs/Classes/Renderer.html b/docs/Classes/Renderer.html index 2fadc96..b4bd70e 100644 --- a/docs/Classes/Renderer.html +++ b/docs/Classes/Renderer.html @@ -681,7 +681,7 @@

Parameters

diff --git a/docs/Classes/UICollectionComponentReusableView.html b/docs/Classes/UICollectionComponentReusableView.html index fe4ade4..de5547e 100644 --- a/docs/Classes/UICollectionComponentReusableView.html +++ b/docs/Classes/UICollectionComponentReusableView.html @@ -266,7 +266,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewAdapter.html b/docs/Classes/UICollectionViewAdapter.html index a2d69a6..734e79c 100644 --- a/docs/Classes/UICollectionViewAdapter.html +++ b/docs/Classes/UICollectionViewAdapter.html @@ -980,7 +980,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewAdapter/CellRegistration.html b/docs/Classes/UICollectionViewAdapter/CellRegistration.html index 6ede57d..fb78360 100644 --- a/docs/Classes/UICollectionViewAdapter/CellRegistration.html +++ b/docs/Classes/UICollectionViewAdapter/CellRegistration.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewAdapter/SelectionContext.html b/docs/Classes/UICollectionViewAdapter/SelectionContext.html index 915c5ea..0533a18 100644 --- a/docs/Classes/UICollectionViewAdapter/SelectionContext.html +++ b/docs/Classes/UICollectionViewAdapter/SelectionContext.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewAdapter/ViewRegistration.html b/docs/Classes/UICollectionViewAdapter/ViewRegistration.html index 5c0cde1..50196fc 100644 --- a/docs/Classes/UICollectionViewAdapter/ViewRegistration.html +++ b/docs/Classes/UICollectionViewAdapter/ViewRegistration.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewComponentCell.html b/docs/Classes/UICollectionViewComponentCell.html index 3b98dfa..6755b9b 100644 --- a/docs/Classes/UICollectionViewComponentCell.html +++ b/docs/Classes/UICollectionViewComponentCell.html @@ -266,7 +266,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewFlowLayoutAdapter.html b/docs/Classes/UICollectionViewFlowLayoutAdapter.html index c5e7324..257dbd6 100644 --- a/docs/Classes/UICollectionViewFlowLayoutAdapter.html +++ b/docs/Classes/UICollectionViewFlowLayoutAdapter.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UICollectionViewReloadDataUpdater.html b/docs/Classes/UICollectionViewReloadDataUpdater.html index 6842e61..b0f5e75 100644 --- a/docs/Classes/UICollectionViewReloadDataUpdater.html +++ b/docs/Classes/UICollectionViewReloadDataUpdater.html @@ -394,7 +394,7 @@

Parameters

diff --git a/docs/Classes/UICollectionViewUpdater.html b/docs/Classes/UICollectionViewUpdater.html index 78a94e6..b334a87 100644 --- a/docs/Classes/UICollectionViewUpdater.html +++ b/docs/Classes/UICollectionViewUpdater.html @@ -689,7 +689,7 @@

Parameters

diff --git a/docs/Classes/UITableViewAdapter.html b/docs/Classes/UITableViewAdapter.html index 96fc92c..78f8e35 100644 --- a/docs/Classes/UITableViewAdapter.html +++ b/docs/Classes/UITableViewAdapter.html @@ -1149,7 +1149,7 @@

Declaration

diff --git a/docs/Classes/UITableViewAdapter/CellRegistration.html b/docs/Classes/UITableViewAdapter/CellRegistration.html index 83f6738..ca04f5e 100644 --- a/docs/Classes/UITableViewAdapter/CellRegistration.html +++ b/docs/Classes/UITableViewAdapter/CellRegistration.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UITableViewAdapter/SelectionContext.html b/docs/Classes/UITableViewAdapter/SelectionContext.html index e99fe21..26dab7c 100644 --- a/docs/Classes/UITableViewAdapter/SelectionContext.html +++ b/docs/Classes/UITableViewAdapter/SelectionContext.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UITableViewAdapter/ViewRegistration.html b/docs/Classes/UITableViewAdapter/ViewRegistration.html index 7b1bd53..03ed555 100644 --- a/docs/Classes/UITableViewAdapter/ViewRegistration.html +++ b/docs/Classes/UITableViewAdapter/ViewRegistration.html @@ -320,7 +320,7 @@

Declaration

diff --git a/docs/Classes/UITableViewComponentCell.html b/docs/Classes/UITableViewComponentCell.html index 6db840c..eaf9a9c 100644 --- a/docs/Classes/UITableViewComponentCell.html +++ b/docs/Classes/UITableViewComponentCell.html @@ -266,7 +266,7 @@

Declaration

diff --git a/docs/Classes/UITableViewComponentHeaderFooterView.html b/docs/Classes/UITableViewComponentHeaderFooterView.html index 117e01e..91cb438 100644 --- a/docs/Classes/UITableViewComponentHeaderFooterView.html +++ b/docs/Classes/UITableViewComponentHeaderFooterView.html @@ -266,7 +266,7 @@

Declaration

diff --git a/docs/Classes/UITableViewReloadDataUpdater.html b/docs/Classes/UITableViewReloadDataUpdater.html index de6799c..52fba00 100644 --- a/docs/Classes/UITableViewReloadDataUpdater.html +++ b/docs/Classes/UITableViewReloadDataUpdater.html @@ -394,7 +394,7 @@

Parameters

diff --git a/docs/Classes/UITableViewUpdater.html b/docs/Classes/UITableViewUpdater.html index b8326ca..df68b43 100644 --- a/docs/Classes/UITableViewUpdater.html +++ b/docs/Classes/UITableViewUpdater.html @@ -878,7 +878,7 @@

Parameters

diff --git a/docs/ComponentWrapper.html b/docs/ComponentWrapper.html index f824552..87460e9 100644 --- a/docs/ComponentWrapper.html +++ b/docs/ComponentWrapper.html @@ -315,7 +315,7 @@

Declaration

diff --git a/docs/Element.html b/docs/Element.html index 3b7a86e..c844a0f 100644 --- a/docs/Element.html +++ b/docs/Element.html @@ -237,13 +237,9 @@

Element

-

Represents a component of a list UI such as UITableView or UICollectionView.

-
-

Note

- Components are designed to be available for UITableView, UICollectionView, - and its cell, header, footer or other generally elements. - -
+

A component represents a small reusable piece of code of element to be rendered. +This behaves as all elements of UIKit’s UITableView and UICollectionView, and can +be easily support SwiftUI by used in conjunction with the View protocol.

Example for the simple component:

struct Label: Component {
@@ -261,6 +257,19 @@ 

Element

content.text = text } } +
+ +

Example for use with SwiftUI:

+
extension Label: View {}
+
+struct ContentView: View {
+    var body: some View {
+        VStack {
+            Text("This is SwiftUI view")
+            Label("This is Carbon component")
+        }
+    }
+}
 
See more @@ -457,7 +466,7 @@

Declaration

diff --git a/docs/Extensions/Optional.html b/docs/Extensions/Optional.html index 06b437f..ccfcdee 100644 --- a/docs/Extensions/Optional.html +++ b/docs/Extensions/Optional.html @@ -299,7 +299,7 @@

Declaration

diff --git a/docs/Interface.html b/docs/Interface.html index b187ee6..14048e8 100644 --- a/docs/Interface.html +++ b/docs/Interface.html @@ -388,7 +388,7 @@

Declaration

diff --git a/docs/Node.html b/docs/Node.html index dd7bd4e..c567332 100644 --- a/docs/Node.html +++ b/docs/Node.html @@ -296,7 +296,7 @@

Declaration

diff --git a/docs/Protocols/Adapter.html b/docs/Protocols/Adapter.html index d6d79d3..c307a9b 100644 --- a/docs/Protocols/Adapter.html +++ b/docs/Protocols/Adapter.html @@ -406,7 +406,7 @@

Return Value

diff --git a/docs/Protocols/CellsBuildable.html b/docs/Protocols/CellsBuildable.html index b1343e9..17cded0 100644 --- a/docs/Protocols/CellsBuildable.html +++ b/docs/Protocols/CellsBuildable.html @@ -266,7 +266,7 @@

Declaration

diff --git a/docs/Protocols/Component.html b/docs/Protocols/Component.html index a9b0ff4..ee5c177 100644 --- a/docs/Protocols/Component.html +++ b/docs/Protocols/Component.html @@ -222,13 +222,9 @@

Component

-

Represents a component of a list UI such as UITableView or UICollectionView.

-
-

Note

- Components are designed to be available for UITableView, UICollectionView, - and its cell, header, footer or other generally elements. - -
+

A component represents a small reusable piece of code of element to be rendered. +This behaves as all elements of UIKit’s UITableView and UICollectionView, and can +be easily support SwiftUI by used in conjunction with the View protocol.

Example for the simple component:

struct Label: Component {
@@ -246,6 +242,19 @@ 

Component

content.text = text } } +
+ +

Example for use with SwiftUI:

+
extension Label: View {}
+
+struct ContentView: View {
+    var body: some View {
+        VStack {
+            Text("This is SwiftUI view")
+            Label("This is Carbon component")
+        }
+    }
+}
 
@@ -644,6 +653,45 @@

Parameters

+
  • +
    + + + + intrinsicContentSize(for:) + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    The natural size for the passed content.

    + +
    +

    Default Implementation

    +
    +

    The natural size for the passed content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    func intrinsicContentSize(for content: Content) -> CGSize
    + +
    +
    +
    +

    Return Value

    +

    A CGSize value represents a natural size of the passed content.

    +
    +
    +
    +
  • @@ -801,13 +849,47 @@

    Return Value

    +
    +
      +
    • +
      + + + + body + + + Extension method + +
      +
      +
      +
      +
      +
      +

      Declares the content and behavior of this view.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      var body: some View { get }
      + +
      +
      +
      +
      +
    • +
    +
    diff --git a/docs/Protocols/ComponentRenderable.html b/docs/Protocols/ComponentRenderable.html index 4658bde..3f58176 100644 --- a/docs/Protocols/ComponentRenderable.html +++ b/docs/Protocols/ComponentRenderable.html @@ -338,7 +338,7 @@

    Declaration

    diff --git a/docs/Protocols/ComponentWrapping.html b/docs/Protocols/ComponentWrapping.html index 17aa235..e375291 100644 --- a/docs/Protocols/ComponentWrapping.html +++ b/docs/Protocols/ComponentWrapping.html @@ -272,7 +272,7 @@

    ComponentWrapping

    diff --git a/docs/Protocols/IdentifiableComponent.html b/docs/Protocols/IdentifiableComponent.html index 15e60d4..8a90f03 100644 --- a/docs/Protocols/IdentifiableComponent.html +++ b/docs/Protocols/IdentifiableComponent.html @@ -351,7 +351,7 @@

    Declaration

    diff --git a/docs/Protocols/SectionsBuildable.html b/docs/Protocols/SectionsBuildable.html index df8ef3f..6aca552 100644 --- a/docs/Protocols/SectionsBuildable.html +++ b/docs/Protocols/SectionsBuildable.html @@ -266,7 +266,7 @@

    Declaration

    diff --git a/docs/Protocols/Updater.html b/docs/Protocols/Updater.html index 1a6c4db..1545d6c 100644 --- a/docs/Protocols/Updater.html +++ b/docs/Protocols/Updater.html @@ -421,7 +421,7 @@

    Parameters

    diff --git a/docs/Renderer.html b/docs/Renderer.html index 58e899b..a6c03ea 100644 --- a/docs/Renderer.html +++ b/docs/Renderer.html @@ -285,7 +285,7 @@

    Declaration

    diff --git a/docs/Structs/AnyComponent.html b/docs/Structs/AnyComponent.html index 930888b..89d58a0 100644 --- a/docs/Structs/AnyComponent.html +++ b/docs/Structs/AnyComponent.html @@ -595,6 +595,38 @@

    Parameters

    +
  • + +
    +
    +
    +
    +
    +

    The natural size for the passed content.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @inlinable
    +public func intrinsicContentSize(for content: Any) -> CGSize
    + +
    +
    +
    +

    Return Value

    +

    A CGSize value represents a natural size of the passed content.

    +
    +
    +
    +
  • @@ -722,7 +754,7 @@

    Declaration

    diff --git a/docs/Structs/CellNode.html b/docs/Structs/CellNode.html index c6d5cf3..277e72a 100644 --- a/docs/Structs/CellNode.html +++ b/docs/Structs/CellNode.html @@ -538,7 +538,7 @@

    Declaration

    diff --git a/docs/Structs/CellsBuilder.html b/docs/Structs/CellsBuilder.html index 4c651cd..773373d 100644 --- a/docs/Structs/CellsBuilder.html +++ b/docs/Structs/CellsBuilder.html @@ -268,7 +268,7 @@

    Declaration

    diff --git a/docs/Structs/Group.html b/docs/Structs/Group.html index 5383670..826502b 100644 --- a/docs/Structs/Group.html +++ b/docs/Structs/Group.html @@ -460,7 +460,7 @@

    Return Value

    diff --git a/docs/Structs/IdentifiedComponentWrapper.html b/docs/Structs/IdentifiedComponentWrapper.html index 1bc8e37..254d372 100644 --- a/docs/Structs/IdentifiedComponentWrapper.html +++ b/docs/Structs/IdentifiedComponentWrapper.html @@ -352,7 +352,7 @@

    Parameters

    diff --git a/docs/Structs/Section.html b/docs/Structs/Section.html index 173085f..914b61d 100644 --- a/docs/Structs/Section.html +++ b/docs/Structs/Section.html @@ -1235,7 +1235,7 @@

    Declaration

    diff --git a/docs/Structs/SectionsBuilder.html b/docs/Structs/SectionsBuilder.html index c7af1e7..4bb9428 100644 --- a/docs/Structs/SectionsBuilder.html +++ b/docs/Structs/SectionsBuilder.html @@ -267,7 +267,7 @@

    Declaration

    diff --git a/docs/Structs/ViewNode.html b/docs/Structs/ViewNode.html index b6518ae..a598e79 100644 --- a/docs/Structs/ViewNode.html +++ b/docs/Structs/ViewNode.html @@ -393,7 +393,7 @@

    Declaration

    diff --git a/docs/Updater.html b/docs/Updater.html index 56eb777..f1a3704 100644 --- a/docs/Updater.html +++ b/docs/Updater.html @@ -388,7 +388,7 @@

    Declaration

    diff --git a/docs/index.html b/docs/index.html index d4bd090..7048b07 100644 --- a/docs/index.html +++ b/docs/index.html @@ -255,7 +255,8 @@

    Introduction

    Carbon is a library for building component-based user interfaces in UITableView and UICollectionView inspired by SwiftUI and React.
    -This make it painless to build and maintain the complex UIs.

    +This make it painless to build and maintain the complex UIs.
    +Since components made with Carbon can be works directly on SwiftUI, the cost of future migration can be greatly reduced.

    Uses DifferenceKit which is highly optimized based on Paul Heckel’s paper for diffing.
    Declarative design and diffing algorithm make your code more predictable, debugging easier and providing beautiful animations to users.

    @@ -265,6 +266,19 @@

    Introduction


    Examples

    + + + + + + + + + +
    PangramKyotoEmojiTodoForm
    + +
    +

    renderer.render {
         Header("GREET")
    @@ -280,17 +294,23 @@ 

    Examples


    - - - - - - - - - - -
    PangramKyotoEmojiTodoForm
    +

    SwiftUI Compatibility

    +
    struct ContentView: View {
    +    var body: some View {
    +        ScrollView {
    +            VStack {
    +                Text("GREET")
    +                    .font(.title)
    +                    .padding(.horizontal, 16)
    +
    +                HelloMessage("World")
    +                    .frame(height: 60)
    +                    .background(Color.red)
    +            }
    +        }
    +    }
    +}
    +

    Getting Started

    @@ -503,6 +523,28 @@

    IdentifiableComponent

    ...
    +

    SwiftUI Compatibility

    + +

    Components made with Carbon are compatible with SwiftUI.
    +The component can easily works as SwiftUI by composing with View protocol.
    +Currently SwiftUI doesn’t support self-sizing, so can use UIView.intrinsicContentSize or specify the height explicitly by Component.referenceSize(in:) or View.frame(height:).

    +
    struct HelloMessage: Component, View {
    +    ...
    +}
    +
    +
    struct ContentView: View {
    +    var body: some View {
    +        VStack(alignment: .leading) {
    +            Text("GREET")
    +
    +            HelloMessage("World")
    +                .frame(height: 60)
    +
    +            Spacer()
    +        }
    +    }
    +}
    +

    Component in-Depth

    Components can define more detailed behaviors.
    @@ -719,6 +761,11 @@

    Add the following to your Cartfile:

    github "ra1028/Carbon"
     
    +

    Swift Package Manager

    + +

    Select Xcode menu File > Swift Packages > Add Package Dependency and enter repository URL with GUI.

    +
    Repository: https://github.com/ra1028/Carbon
    +

    Contributing

    @@ -764,7 +811,7 @@

    License

    diff --git a/docs/search.json b/docs/search.json index 044e285..335ef1c 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Changeset.html#/s:6Carbon13DataChangeseta":{"name":"DataChangeset","abstract":"

    A set of changes in the collection of sections.

    "},"Changeset.html#/s:6Carbon19StagedDataChangeseta":{"name":"StagedDataChangeset","abstract":"

    An ordered collection of DataChangeset as staged set of changes"},"Extensions/Optional.html#/s:Sq6CarbonAA14CellsBuildableRzlE05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"Optional"},"Extensions/Optional.html#/s:Sq6CarbonAA17SectionsBuildableRzlE05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Optional"},"Protocols/SectionsBuildable.html#/s:6Carbon17SectionsBuildableP05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"SectionsBuildable"},"Protocols/CellsBuildable.html#/s:6Carbon14CellsBuildableP05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"CellsBuildable"},"Structs/SectionsBuilder.html#/s:6Carbon15SectionsBuilderV05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"SectionsBuilder"},"Structs/CellsBuilder.html#/s:6Carbon12CellsBuilderV05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"CellsBuilder"},"Structs/CellsBuilder.html":{"name":"CellsBuilder","abstract":"

    The custom parameter attribute that constructs cells from multi-statement closures.

    "},"Structs/SectionsBuilder.html":{"name":"SectionsBuilder","abstract":"

    The custom parameter attribute that constructs sections from multi-statement closures.

    "},"Protocols/CellsBuildable.html":{"name":"CellsBuildable","abstract":"

    Represents an instance that can build cells.

    "},"Protocols/SectionsBuildable.html":{"name":"SectionsBuildable","abstract":"

    Represents an instance that can build sections.

    "},"Extensions/Optional.html":{"name":"Optional"},"Classes/UICollectionComponentReusableView.html#/c:@M@Carbon@objc(cs)UICollectionComponentReusableView(im)initWithFrame:":{"name":"init(frame:)","abstract":"

    Create a new view with identifier for reuse.

    ","parent_name":"UICollectionComponentReusableView"},"Classes/UICollectionViewComponentCell.html#/c:@M@Carbon@objc(cs)UICollectionViewComponentCell(im)initWithFrame:":{"name":"init(frame:)","abstract":"

    Create a new cell with the frame.

    ","parent_name":"UICollectionViewComponentCell"},"Classes/UITableViewComponentHeaderFooterView.html#/c:@M@Carbon@objc(cs)UITableViewComponentHeaderFooterView(im)initWithReuseIdentifier:":{"name":"init(reuseIdentifier:)","abstract":"

    Create a new view with identifier for reuse.

    ","parent_name":"UITableViewComponentHeaderFooterView"},"Classes/UITableViewComponentCell.html#/c:@M@Carbon@objc(cs)UITableViewComponentCell(im)initWithStyle:reuseIdentifier:":{"name":"init(style:reuseIdentifier:)","abstract":"

    Create a new cell with style and identifier for reuse.

    ","parent_name":"UITableViewComponentCell"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderableP22componentContainerViewSo6UIViewCvp":{"name":"componentContainerView","abstract":"

    The container view to be render a component.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderablePAAE15renderedContentypSgvp":{"name":"renderedContent","abstract":"

    A content of component that rendered on container.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderablePAAE08renderedB0AA03AnyB0VSgvp":{"name":"renderedComponent","abstract":"

    A component that latest rendered on container.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html":{"name":"ComponentRenderable","abstract":"

    Represents a container that can render a component.

    "},"Classes/UITableViewComponentCell.html":{"name":"UITableViewComponentCell","abstract":"

    The cell as the container that renders the component.

    "},"Classes/UITableViewComponentHeaderFooterView.html":{"name":"UITableViewComponentHeaderFooterView","abstract":"

    The header or footer view as the container that renders the component.

    "},"Classes/UICollectionViewComponentCell.html":{"name":"UICollectionViewComponentCell","abstract":"

    The cell as the container that renders the component.

    "},"Classes/UICollectionComponentReusableView.html":{"name":"UICollectionComponentReusableView","abstract":"

    The header or footer view as the container that renders the component.

    "},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given collection view, then reload data and invalidate layout.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform reload data to render given data to the target.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC18isAnimationEnabledSbvp":{"name":"isAnimationEnabled","abstract":"

    A Bool value indicating whether that enable diffing animation. Default is true.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC32isAnimationEnabledWhileScrollingSbvp":{"name":"isAnimationEnabledWhileScrolling","abstract":"

    A Bool value indicating whether that enable diffing animation while target is","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC29alwaysRenderVisibleComponentsSbvp":{"name":"alwaysRenderVisibleComponents","abstract":"

    A Bool value indicating whether that to always render visible components","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC18keepsContentOffsetSbvp":{"name":"keepsContentOffset","abstract":"

    A Bool value indicating whether that to reset content offset after","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC21animatableChangeCountSivp":{"name":"animatableChangeCount","abstract":"

    Max number of changes that can be animated for diffing updates. Default is 300.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC10completionyycSgvp":{"name":"completion","abstract":"

    A completion handler to be called after each updates.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given collection view, then reload data and invalidate layout.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC26performDifferentialUpdatesyySo0bC0C_xXetcACyxGAA0bC7AdapterCRbzlF":{"name":"performDifferentialUpdates(target:adapter:stagedChangeset:)","abstract":"

    Perform diffing updates to render given data to the target.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC23renderVisibleComponents2in7adapterySo0bC0C_xtF":{"name":"renderVisibleComponents(in:adapter:)","abstract":"

    Renders components displayed in visible area again.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given table view, then reload data.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform reload data to render given data to the target.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23deleteSectionsAnimationSo0bc3RowG0Vvp":{"name":"deleteSectionsAnimation","abstract":"

    An animation for section deletions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23insertSectionsAnimationSo0bc3RowG0Vvp":{"name":"insertSectionsAnimation","abstract":"

    An animation for section insertions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23reloadSectionsAnimationSo0bc3RowG0Vvp":{"name":"reloadSectionsAnimation","abstract":"

    An animation for section reloads. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19deleteRowsAnimationSo0bc3RowG0Vvp":{"name":"deleteRowsAnimation","abstract":"

    An animation for row deletions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19insertRowsAnimationSo0bc3RowG0Vvp":{"name":"insertRowsAnimation","abstract":"

    An animation for row insertions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19reloadRowsAnimationSo0bc3RowG0Vvp":{"name":"reloadRowsAnimation","abstract":"

    An animation for row reloads. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC18isAnimationEnabledSbvp":{"name":"isAnimationEnabled","abstract":"

    A Bool value indicating whether that enable diffing animation. Default is true.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC32isAnimationEnabledWhileScrollingSbvp":{"name":"isAnimationEnabledWhileScrolling","abstract":"

    A Bool value indicating whether that enable diffing animation while target is","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC29alwaysRenderVisibleComponentsSbvp":{"name":"alwaysRenderVisibleComponents","abstract":"

    A Bool value indicating whether that to always render visible components","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC18keepsContentOffsetSbvp":{"name":"keepsContentOffset","abstract":"

    A Bool value indicating whether that to reset content offset after","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC21animatableChangeCountSivp":{"name":"animatableChangeCount","abstract":"

    Max number of changes that can be animated for diffing updates. Default is 300.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC10completionyycSgvp":{"name":"completion","abstract":"

    A completion handler to be called after each updates.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC3set12allAnimationySo0bc3RowG0V_tF":{"name":"set(allAnimation:)","abstract":"

    Set given animation to all kind of diffing updates.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given table view, then reload data.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC26performDifferentialUpdatesyySo0bC0C_xXetcACyxGAA0bC7AdapterCRbzlF":{"name":"performDifferentialUpdates(target:adapter:stagedChangeset:)","abstract":"

    Perform diffing updates to render given data to the target.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23renderVisibleComponents2in7adapterySo0bC0C_xtF":{"name":"renderVisibleComponents(in:adapter:)","abstract":"

    Renders components displayed in visible area again.

    ","parent_name":"UITableViewUpdater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP6TargetQa":{"name":"Target","abstract":"

    A type that represents a target to be updated for render given data.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP7AdapterQa":{"name":"Adapter","abstract":"

    A type that represents an adapter holding the data to be rendered.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP7prepare6target7adaptery6TargetQz_7AdapterQztF":{"name":"prepare(target:adapter:)","abstract":"

    Prepares given target and adapter.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP14performUpdates6target7adapter4datay6TargetQz_7AdapterQzSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.

    ","parent_name":"Updater"},"Protocols/Updater.html":{"name":"Updater","abstract":"

    Represents an updater that manages the updation for target.

    "},"Classes/UITableViewUpdater.html":{"name":"UITableViewUpdater","abstract":"

    An updater for managing diffing updates to render data to the UITableView.

    "},"Classes/UITableViewReloadDataUpdater.html":{"name":"UITableViewReloadDataUpdater","abstract":"

    An updater for managing to perform reload data to render data to the UITableView.

    "},"Classes/UICollectionViewUpdater.html":{"name":"UICollectionViewUpdater","abstract":"

    An updater for managing diffing updates to render data to the UICollectionView.

    "},"Classes/UICollectionViewReloadDataUpdater.html":{"name":"UICollectionViewReloadDataUpdater","abstract":"

    An updater for managing to perform reload data to render data to the UICollectionView.

    "},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:sizeForItemAtIndexPath:":{"name":"collectionView(_:layout:sizeForItemAt:)","abstract":"

    Returns the size for item at specified index path.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:referenceSizeForHeaderInSection:":{"name":"collectionView(_:layout:referenceSizeForHeaderInSection:)","abstract":"

    Returns the size for header in specified section.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:referenceSizeForFooterInSection:":{"name":"collectionView(_:layout:referenceSizeForFooterInSection:)","abstract":"

    Returns the size for footer in specified section.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV010collectionC0So0bC0Cvp":{"name":"collectionView","abstract":"

    A collection view of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV4nodeAA8CellNodeVvp":{"name":"node","abstract":"

    A node corresponding to the selected cell position.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV9indexPath10Foundation05IndexH0Vvp":{"name":"indexPath","abstract":"

    The index path of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV5classAA19ComponentRenderable_So0b8ReusableC0CXcXpvp":{"name":"class","abstract":"

    A class for register supplementary view conforming ComponentRenderable.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register supplementary view.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV5class3nibAeA19ComponentRenderable_So0b8ReusableC0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV5classAA19ComponentRenderable_So0bcE0CXcXpvp":{"name":"class","abstract":"

    A class for register cell conforming ComponentRenderable.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register cell.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV5class3nibAeA19ComponentRenderable_So0bcE0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered in the list UI.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC9didSelectyAC16SelectionContextVcSgvp":{"name":"didSelect","abstract":"

    A closure that to handle selection events of cell.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC4dataACSayAA7SectionVG_tcfc":{"name":"init(data:)","abstract":"

    Create an adapter with initial data.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC16cellRegistration010collectionC09indexPath4nodeAC04CellF0VSo0bC0C_10Foundation05IndexI0VAA0K4NodeVtF":{"name":"cellRegistration(collectionView:indexPath:node:)","abstract":"

    Returns a registration info for register each cells.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC013supplementaryC12Registration14forElementKind010collectionC09indexPath4nodeAC0cF0VSS_So0bC0C10Foundation05IndexL0VAA0C4NodeVtF":{"name":"supplementaryViewRegistration(forElementKind:collectionView:indexPath:node:)","abstract":"

    Returns a registration info for register each header views.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC013supplementaryC4Node14forElementKind010collectionC02atAA0cF0VSgSS_So0bC0C10Foundation9IndexPathVtF":{"name":"supplementaryViewNode(forElementKind:collectionView:at:)","abstract":"

    Returns a node for supplementary view for arbitrary element of kind.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC023registeredSupplementaryC5Kinds3forSaySSGSo0bC0C_tF":{"name":"registeredSupplementaryViewKinds(for:)","abstract":"

    Returns the kinds of supplementary view registered in the specified collection view.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/CellRegistration.html":{"name":"CellRegistration","abstract":"

    Registration info for collection view cell.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/ViewRegistration.html":{"name":"ViewRegistration","abstract":"

    Registration info for collection view supplementary view.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/SelectionContext.html":{"name":"SelectionContext","abstract":"

    Context when cell is selected.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)numberOfSectionsInCollectionView:":{"name":"numberOfSections(in:)","abstract":"

    Return the number of sections.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Return the number of items in specified section.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Resister and dequeue the cell at specified index path.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:viewForSupplementaryElementOfKind:atIndexPath:":{"name":"collectionView(_:viewForSupplementaryElementOfKind:at:)","abstract":"

    Resister and dequeue the header or footer in specified section.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Callback the selected event of cell to the didSelect closure.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    The event that the cell will display in the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    The event that the cell did left from the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:willDisplaySupplementaryView:forElementKind:atIndexPath:":{"name":"collectionView(_:willDisplaySupplementaryView:forElementKind:at:)","abstract":"

    The event that the header or footer will display in the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:":{"name":"collectionView(_:didEndDisplayingSupplementaryView:forElementOfKind:at:)","abstract":"

    The event that the header or footer did left from the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV05tableC0So0bC0Cvp":{"name":"tableView","abstract":"

    A table view of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV4nodeAA8CellNodeVvp":{"name":"node","abstract":"

    A node corresponding to the selected cell position.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV9indexPath10Foundation05IndexH0Vvp":{"name":"indexPath","abstract":"

    The index path of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV5classAA19ComponentRenderable_So0bc12HeaderFooterC0CXcXpvp":{"name":"class","abstract":"

    A class for register header or footer view conforming ComponentRenderable.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register header or footer view.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV5class3nibAeA19ComponentRenderable_So0bc12HeaderFooterC0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV5classAA19ComponentRenderable_So0bcE0CXcXpvp":{"name":"class","abstract":"

    A class for register cell conforming ComponentRenderable.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register cell.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV5class3nibAeA19ComponentRenderable_So0bcE0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered in the list UI.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC9didSelectyAC16SelectionContextVcSgvp":{"name":"didSelect","abstract":"

    A closure that to handle selection events of cell.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC4dataACSayAA7SectionVG_tcfc":{"name":"init(data:)","abstract":"

    Create an adapter with initial data.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC16cellRegistration05tableC09indexPath4nodeAC04CellF0VSo0bC0C_10Foundation05IndexI0VAA0K4NodeVtF":{"name":"cellRegistration(tableView:indexPath:node:)","abstract":"

    Returns a registration info for register each cells.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC06headerC12Registration05tableC07section4nodeAC0cF0VSo0bC0C_SiAA0C4NodeVtF":{"name":"headerViewRegistration(tableView:section:node:)","abstract":"

    Returns a registration info for register each header views.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC06footerC12Registration05tableC07section4nodeAC0cF0VSo0bC0C_SiAA0C4NodeVtF":{"name":"footerViewRegistration(tableView:section:node:)","abstract":"

    Returns a registration info for register each footer views.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/CellRegistration.html":{"name":"CellRegistration","abstract":"

    Registration info for table view cell.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/ViewRegistration.html":{"name":"ViewRegistration","abstract":"

    Registration info for table view header or footer view.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/SelectionContext.html":{"name":"SelectionContext","abstract":"

    Context when cell is selected.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)numberOfSectionsInTableView:":{"name":"numberOfSections(in:)","abstract":"

    Return the number of sections.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:numberOfRowsInSection:":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Return the number of rows in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:cellForRowAtIndexPath:":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Resister and dequeue the cell at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:viewForHeaderInSection:":{"name":"tableView(_:viewForHeaderInSection:)","abstract":"

    Resister and dequeue the header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:viewForFooterInSection:":{"name":"tableView(_:viewForFooterInSection:)","abstract":"

    Resister and dequeue the footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForRowAtIndexPath:":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Returns the height for row at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForRowAtIndexPath:":{"name":"tableView(_:estimatedHeightForRowAt:)","abstract":"

    Returns the estimated height for row at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForHeaderInSection:":{"name":"tableView(_:heightForHeaderInSection:)","abstract":"

    Returns the height for header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForHeaderInSection:":{"name":"tableView(_:estimatedHeightForHeaderInSection:)","abstract":"

    Returns the estimated height for header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForFooterInSection:":{"name":"tableView(_:heightForFooterInSection:)","abstract":"

    Returns the height for footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForFooterInSection:":{"name":"tableView(_:estimatedHeightForFooterInSection:)","abstract":"

    Returns the estimated height for footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didSelectRowAtIndexPath:":{"name":"tableView(_:didSelectRowAt:)","abstract":"

    Callback the selected event of cell to the didSelect closure.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayCell:forRowAtIndexPath:":{"name":"tableView(_:willDisplay:forRowAt:)","abstract":"

    The event that the cell will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingCell:forRowAtIndexPath:":{"name":"tableView(_:didEndDisplaying:forRowAt:)","abstract":"

    The event that the cell did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayHeaderView:forSection:":{"name":"tableView(_:willDisplayHeaderView:forSection:)","abstract":"

    The event that the header will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingHeaderView:forSection:":{"name":"tableView(_:didEndDisplayingHeaderView:forSection:)","abstract":"

    The event that the header did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayFooterView:forSection:":{"name":"tableView(_:willDisplayFooterView:forSection:)","abstract":"

    The event that the footer will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingFooterView:forSection:":{"name":"tableView(_:didEndDisplayingFooterView:forSection:)","abstract":"

    The event that the footer did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterP4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE9cellNodes2inSayAA8CellNodeVGSi_tF":{"name":"cellNodes(in:)","abstract":"

    Returns a collection of cell nodes in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE8cellNode2atAA04CellD0V10Foundation9IndexPathV_tF":{"name":"cellNode(at:)","abstract":"

    Returns a node of cell at the specified index path.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE10headerNode2inAA04ViewD0VSgSi_tF":{"name":"headerNode(in:)","abstract":"

    Returns a node of header in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE10footerNode2inAA04ViewD0VSgSi_tF":{"name":"footerNode(in:)","abstract":"

    Returns a node of footer in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html":{"name":"Adapter","abstract":"

    Represents an adapter that holds data to be rendered.

    "},"Classes/UITableViewAdapter.html":{"name":"UITableViewAdapter","abstract":"

    An adapter for UITableView."},"Classes/UICollectionViewAdapter.html":{"name":"UICollectionViewAdapter","abstract":"

    An adapter for UICollectionView."},"Classes/UICollectionViewFlowLayoutAdapter.html":{"name":"UICollectionViewFlowLayoutAdapter","abstract":"

    An adapter for UICollectionView with UICollectionViewFlowLayout inherited from UICollectionViewAdapter.

    "},"Classes/Renderer.html#/s:6Carbon8RendererC7adapter7AdapterQzvp":{"name":"adapter","abstract":"

    An instance of adapter that specified at initialized.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC7updaterxvp":{"name":"updater","abstract":"

    An instance of updater that specified at initialized.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6target6TargetQzSgvp":{"name":"target","abstract":"

    An instance of target that weakly referenced.","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    Returns a current data held in adapter.","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC7adapter7updaterACyxG7AdapterQz_xtcfc":{"name":"init(adapter:updater:)","abstract":"

    Create a new instance with given adapter and updater.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyqd__SlRd__AA7SectionV7ElementRtd__lF":{"name":"render(_:)","abstract":"

    Render given collection of sections, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyqd__SlRd__AA7SectionVSg7ElementRtd__lF":{"name":"render(_:)","abstract":"

    Render given collection of sections skipping nil, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyAA7SectionVd_tF":{"name":"render(_:)","abstract":"

    Render given collection sections, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyAA7SectionVSgd_tF":{"name":"render(_:)","abstract":"

    Render given variadic number of sections skipping nil, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6render8sectionsyqd__yXE_tAA17SectionsBuildableRd__lF":{"name":"render(sections:)","abstract":"

    Render given variadic number of sections with function builder syntax, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6render5cellsyqd__yXE_tAA14CellsBuildableRd__lF":{"name":"render(cells:)","abstract":"

    Render a single section contains given cells with function builder syntax, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html":{"name":"Renderer","abstract":"

    Renderer is a controller to render passed data to target"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV9componentAA12AnyComponentVvp":{"name":"component","abstract":"

    A type-erased component which wrapped in self.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeVyACxcAA9ComponentRzlufc":{"name":"init(_:)","abstract":"

    Create a node wrapping given component.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV9component2asxSgxm_tlF":{"name":"component(as:)","abstract":"

    Returns a base instance of component casted as given type if possible.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"ViewNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV2ids11AnyHashableVvp":{"name":"id","abstract":"

    A type-erased identifier that can be used to uniquely","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV9componentAA12AnyComponentVvp":{"name":"component","abstract":"

    A type-erased component which wrapped in self.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV2id_ACx_q_tcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:_:)","abstract":"

    Create a node wrapping given id and component.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeVyACxcAA21IdentifiableComponentRzlufc":{"name":"init(_:)","abstract":"

    Create a node wrapping given component and its id.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV9component2asxSgxm_tlF":{"name":"component(as:)","abstract":"

    Returns a base instance of component casted as given type if possible.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon14CellsBuildableP05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV20differenceIdentifiers11AnyHashableVvp":{"name":"differenceIdentifier","abstract":"

    An identifier value for difference calculation.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"CellNode"},"Structs/CellNode.html":{"name":"CellNode","abstract":"

    The node for cell that can be uniquely identified."},"Structs/ViewNode.html":{"name":"ViewNode","abstract":"

    The node for view which need not be uniquely identified like header or footer."},"Protocols/ComponentWrapping.html#/Wrapped":{"name":"Wrapped","abstract":"

    The type of wrapped component.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/wrapped":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingP7WrappedQa":{"name":"Wrapped","abstract":"

    The type of wrapped component.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingP7wrapped7WrappedQzvp":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13dynamicMemberqd__s7KeyPathCy7WrappedQzqd__G_tcluip":{"name":"subscript(dynamicMember:)","abstract":"

    Accesses a member of wrapped component with key path.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13renderContent7Wrapped_0E0QZyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE6render2iny7Wrapped_7ContentQZ_tF":{"name":"render(in:)","abstract":"

    Render properties into the content.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE19shouldContentUpdate4withSbx_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE12shouldRender4next2inSbx_7Wrapped_7ContentQZtF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE6layout7content2iny7Wrapped_7ContentQZ_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE18contentWillDisplayyy7Wrapped_7ContentQZF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE20contentDidEndDisplayyy7Wrapped_7ContentQZF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"ComponentWrapping"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV2idxvp":{"name":"id","abstract":"

    A type that represents an id that used to uniquely identify the component.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV7wrappedq_vp":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV2id7wrappedACyxq_Gx_q_tcfc":{"name":"init(id:wrapped:)","abstract":"

    Create a component wrapper wrapping given id and component.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html":{"name":"IdentifiedComponentWrapper","abstract":"

    A wrapper around the compoent to conform to IdentifiableComponent.

    "},"Protocols/ComponentWrapping.html":{"name":"ComponentWrapping","abstract":"

    Represents a wrapper of component that forwards all actions to wrapped component."},"Structs/Group.html#/s:6Carbon5GroupVACyxGycfc":{"name":"init()","abstract":"

    Creates a group without elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE5cellsACyAEGqd__yXE_tcAA14CellsBuildableRd__lufc":{"name":"init(cells:)","abstract":"

    Creates a group with given cells.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE2of4cellACyAEGqd___qd_0_7ElementQyd__XEtcSTRd__AA14CellsBuildableRd_0_r0_lufc":{"name":"init(of:cell:)","abstract":"

    Creates a group with cells mapped from given elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE10buildCellsSayAEGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE8sectionsACyAEGqd__yXE_tcAA17SectionsBuildableRd__lufc":{"name":"init(sections:)","abstract":"

    Creates a group with given sections.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE2of7sectionACyAEGqd___qd_0_7ElementQyd__XEtcSTRd__AA17SectionsBuildableRd_0_r0_lufc":{"name":"init(of:section:)","abstract":"

    Creates a group with sections mapped from given elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE13buildSectionsSayAEGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Group"},"Structs/Section.html#/s:6Carbon7SectionV2ids11AnyHashableVvp":{"name":"id","abstract":"

    A type-erased identifier that can be used to uniquely","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6headerAA8ViewNodeVSgvp":{"name":"header","abstract":"

    A node representing header view.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV5cellsSayAA8CellNodeVGvp":{"name":"cells","abstract":"

    A collection of nodes representing cells.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6footerAA8ViewNodeVSgvp":{"name":"footer","abstract":"

    A node representing footer view.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cells6footerACx_AA8ViewNodeVSgq_AJtcSHRzSlR_AA04CellH0V7ElementRt_r0_lufc":{"name":"init(id:header:cells:footer:)","abstract":"

    Create a section wrapping id, header node, footer node and cell nodes.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cells6footerACx_AA8ViewNodeVSgq_AJtcSHRzSlR_AA04CellH0VSg7ElementRt_r0_lufc":{"name":"init(id:header:cells:footer:)","abstract":"

    Create a section wrapping id, header node, footer node and cell nodes.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footerACx_AA8ViewNodeVSgAItcSHRzlufc":{"name":"init(id:header:footer:)","abstract":"

    Create a section wrapping id, header node, footer node.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id5cellsACx_q_yXEtcSHRzAA14CellsBuildableR_r0_lufc":{"name":"init(id:cells:)","abstract":"

    Create a section wrapping given id and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footer5cellsACx_q_Sgq0_Sgq1_yXEtcSHRzAA9ComponentR_AaJR0_AA14CellsBuildableR1_r2_lufc":{"name":"init(id:header:footer:cells:)","abstract":"

    Create a section wrapping given id, header, footer and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footerACx_q_Sgq0_SgtcSHRzAA9ComponentR_AaIR0_r1_lufc":{"name":"init(id:header:footer:)","abstract":"

    Create a section wrapping given id, header and footer.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cellsACx_q_SgAA14CellsBuildable_pyXEtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:header:cells:)","abstract":"

    Create a section wrapping given id, header and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6footer5cellsACx_q_Sgq0_yXEtcSHRzAA9ComponentR_AA14CellsBuildableR0_r1_lufc":{"name":"init(id:footer:cells:)","abstract":"

    Create a section wrapping given id, footer and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6headerACx_q_SgtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:header:)","abstract":"

    Create a section wrapping given id and header.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6footerACx_q_SgtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:footer:)","abstract":"

    Create a section wrapping given id and footer.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV13buildSectionsSayACGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV20differenceIdentifiers11AnyHashableVvp":{"name":"differenceIdentifier","abstract":"

    An identifier value for difference calculation.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV8elementsSayAA8CellNodeVGvp":{"name":"elements","abstract":"

    The collection of element in the section.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6source8elementsA2C_xtcSlRzAA8CellNodeV7ElementRtzlufc":{"name":"init(source:elements:)","abstract":"

    Creates a new section reproducing the given source section with replacing the elements.

    ","parent_name":"Section"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV4baseypvp":{"name":"base","abstract":"

    The value wrapped by this instance.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentVyACxcAA0C0Rzlufc":{"name":"init(_:)","abstract":"

    Create a type-erased component that wraps the given instance.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV13renderContentypyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV6render2inyyp_tF":{"name":"render(in:)","abstract":"

    Render properties into the content on the element of list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV19shouldContentUpdate4withSbAC_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV12shouldRender4next2inSbAC_yptF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV6layout7content2inyyp_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV18contentWillDisplayyyypF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV20contentDidEndDisplayyyypF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV2asyxSgxmlF":{"name":"as(_:)","abstract":"

    Returns a base instance casted as given type if possible.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"AnyComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentP2IDQa":{"name":"ID","abstract":"

    A type that represents an id that used to uniquely identify the component.

    ","parent_name":"IdentifiableComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentP2id2IDQzvp":{"name":"id","abstract":"

    An identifier that used to uniquely identify the component.

    ","parent_name":"IdentifiableComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentPAAE10buildCellsSayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of section.

    ","parent_name":"IdentifiableComponent"},"Protocols/Component.html#/s:6Carbon9ComponentP7ContentQa":{"name":"Content","abstract":"

    A type that represents a content to be render on the element of list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP13renderContent0D0QzyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP6render2iny7ContentQz_tF":{"name":"render(in:)","abstract":"

    Render properties into the content.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP19shouldContentUpdate4withSbx_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP12shouldRender4next2inSbx_7ContentQztF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP6layout7content2iny7ContentQz_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP18contentWillDisplayyy7ContentQzF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP20contentDidEndDisplayyy7ContentQzF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentPAAE10identified2byAA010IdentifiedB7WrapperVyqd__xGqd___tSHRd__lF":{"name":"identified(by:)","abstract":"

    Returns an identified component wrapping self and given id.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentPAAE10identified2byAA010IdentifiedB7WrapperVyqd__xGs7KeyPathCyxqd__G_tSHRd__lF":{"name":"identified(by:)","abstract":"

    Returns an identified component wrapping self and the id that accessed by given key path.

    ","parent_name":"Component"},"Protocols/Component.html":{"name":"Component","abstract":"

    Represents a component of a list UI such as UITableView or UICollectionView.

    "},"Protocols/IdentifiableComponent.html":{"name":"IdentifiableComponent","abstract":"

    Represents a component that can be uniquely identify.

    "},"Structs/AnyComponent.html":{"name":"AnyComponent","abstract":"

    A type-erased component.

    "},"Structs/Section.html":{"name":"Section","abstract":"

    Represents a section of list UI, containing header node, footer node"},"Structs/Group.html":{"name":"Group","abstract":"

    An affordance for grouping component or section.

    "},"Element.html":{"name":"Element"},"ComponentWrapper.html":{"name":"ComponentWrapper"},"Node.html":{"name":"Node"},"Renderer.html":{"name":"Renderer"},"Adapter.html":{"name":"Adapter"},"Updater.html":{"name":"Updater"},"Interface.html":{"name":"Interface"},"Builder.html":{"name":"Builder"},"Changeset.html":{"name":"Changeset"}} \ No newline at end of file +{"Changeset.html#/s:6Carbon13DataChangeseta":{"name":"DataChangeset","abstract":"

    A set of changes in the collection of sections.

    "},"Changeset.html#/s:6Carbon19StagedDataChangeseta":{"name":"StagedDataChangeset","abstract":"

    An ordered collection of DataChangeset as staged set of changes"},"Extensions/Optional.html#/s:Sq6CarbonAA14CellsBuildableRzlE05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"Optional"},"Extensions/Optional.html#/s:Sq6CarbonAA17SectionsBuildableRzlE05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Optional"},"Protocols/SectionsBuildable.html#/s:6Carbon17SectionsBuildableP05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"SectionsBuildable"},"Protocols/CellsBuildable.html#/s:6Carbon14CellsBuildableP05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"CellsBuildable"},"Structs/SectionsBuilder.html#/s:6Carbon15SectionsBuilderV05buildB0SayAA7SectionVGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"SectionsBuilder"},"Structs/CellsBuilder.html#/s:6Carbon12CellsBuilderV05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"CellsBuilder"},"Structs/CellsBuilder.html":{"name":"CellsBuilder","abstract":"

    The custom parameter attribute that constructs cells from multi-statement closures.

    "},"Structs/SectionsBuilder.html":{"name":"SectionsBuilder","abstract":"

    The custom parameter attribute that constructs sections from multi-statement closures.

    "},"Protocols/CellsBuildable.html":{"name":"CellsBuildable","abstract":"

    Represents an instance that can build cells.

    "},"Protocols/SectionsBuildable.html":{"name":"SectionsBuildable","abstract":"

    Represents an instance that can build sections.

    "},"Extensions/Optional.html":{"name":"Optional"},"Classes/UICollectionComponentReusableView.html#/c:@M@Carbon@objc(cs)UICollectionComponentReusableView(im)initWithFrame:":{"name":"init(frame:)","abstract":"

    Create a new view with identifier for reuse.

    ","parent_name":"UICollectionComponentReusableView"},"Classes/UICollectionViewComponentCell.html#/c:@M@Carbon@objc(cs)UICollectionViewComponentCell(im)initWithFrame:":{"name":"init(frame:)","abstract":"

    Create a new cell with the frame.

    ","parent_name":"UICollectionViewComponentCell"},"Classes/UITableViewComponentHeaderFooterView.html#/c:@M@Carbon@objc(cs)UITableViewComponentHeaderFooterView(im)initWithReuseIdentifier:":{"name":"init(reuseIdentifier:)","abstract":"

    Create a new view with identifier for reuse.

    ","parent_name":"UITableViewComponentHeaderFooterView"},"Classes/UITableViewComponentCell.html#/c:@M@Carbon@objc(cs)UITableViewComponentCell(im)initWithStyle:reuseIdentifier:":{"name":"init(style:reuseIdentifier:)","abstract":"

    Create a new cell with style and identifier for reuse.

    ","parent_name":"UITableViewComponentCell"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderableP22componentContainerViewSo6UIViewCvp":{"name":"componentContainerView","abstract":"

    The container view to be render a component.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderablePAAE15renderedContentypSgvp":{"name":"renderedContent","abstract":"

    A content of component that rendered on container.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html#/s:6Carbon19ComponentRenderablePAAE08renderedB0AA03AnyB0VSgvp":{"name":"renderedComponent","abstract":"

    A component that latest rendered on container.

    ","parent_name":"ComponentRenderable"},"Protocols/ComponentRenderable.html":{"name":"ComponentRenderable","abstract":"

    Represents a container that can render a component.

    "},"Classes/UITableViewComponentCell.html":{"name":"UITableViewComponentCell","abstract":"

    The cell as the container that renders the component.

    "},"Classes/UITableViewComponentHeaderFooterView.html":{"name":"UITableViewComponentHeaderFooterView","abstract":"

    The header or footer view as the container that renders the component.

    "},"Classes/UICollectionViewComponentCell.html":{"name":"UICollectionViewComponentCell","abstract":"

    The cell as the container that renders the component.

    "},"Classes/UICollectionComponentReusableView.html":{"name":"UICollectionComponentReusableView","abstract":"

    The header or footer view as the container that renders the component.

    "},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given collection view, then reload data and invalidate layout.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewReloadDataUpdater.html#/s:6Carbon33UICollectionViewReloadDataUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform reload data to render given data to the target.

    ","parent_name":"UICollectionViewReloadDataUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC18isAnimationEnabledSbvp":{"name":"isAnimationEnabled","abstract":"

    A Bool value indicating whether that enable diffing animation. Default is true.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC32isAnimationEnabledWhileScrollingSbvp":{"name":"isAnimationEnabledWhileScrolling","abstract":"

    A Bool value indicating whether that enable diffing animation while target is","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC29alwaysRenderVisibleComponentsSbvp":{"name":"alwaysRenderVisibleComponents","abstract":"

    A Bool value indicating whether that to always render visible components","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC18keepsContentOffsetSbvp":{"name":"keepsContentOffset","abstract":"

    A Bool value indicating whether that to reset content offset after","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC21animatableChangeCountSivp":{"name":"animatableChangeCount","abstract":"

    Max number of changes that can be animated for diffing updates. Default is 300.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC10completionyycSgvp":{"name":"completion","abstract":"

    A completion handler to be called after each updates.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given collection view, then reload data and invalidate layout.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC26performDifferentialUpdatesyySo0bC0C_xXetcACyxGAA0bC7AdapterCRbzlF":{"name":"performDifferentialUpdates(target:adapter:stagedChangeset:)","abstract":"

    Perform diffing updates to render given data to the target.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UICollectionViewUpdater.html#/s:6Carbon23UICollectionViewUpdaterC23renderVisibleComponents2in7adapterySo0bC0C_xtF":{"name":"renderVisibleComponents(in:adapter:)","abstract":"

    Renders components displayed in visible area again.

    ","parent_name":"UICollectionViewUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given table view, then reload data.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewReloadDataUpdater.html#/s:6Carbon28UITableViewReloadDataUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform reload data to render given data to the target.

    ","parent_name":"UITableViewReloadDataUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23deleteSectionsAnimationSo0bc3RowG0Vvp":{"name":"deleteSectionsAnimation","abstract":"

    An animation for section deletions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23insertSectionsAnimationSo0bc3RowG0Vvp":{"name":"insertSectionsAnimation","abstract":"

    An animation for section insertions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23reloadSectionsAnimationSo0bc3RowG0Vvp":{"name":"reloadSectionsAnimation","abstract":"

    An animation for section reloads. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19deleteRowsAnimationSo0bc3RowG0Vvp":{"name":"deleteRowsAnimation","abstract":"

    An animation for row deletions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19insertRowsAnimationSo0bc3RowG0Vvp":{"name":"insertRowsAnimation","abstract":"

    An animation for row insertions. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC19reloadRowsAnimationSo0bc3RowG0Vvp":{"name":"reloadRowsAnimation","abstract":"

    An animation for row reloads. Default is fade.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC18isAnimationEnabledSbvp":{"name":"isAnimationEnabled","abstract":"

    A Bool value indicating whether that enable diffing animation. Default is true.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC32isAnimationEnabledWhileScrollingSbvp":{"name":"isAnimationEnabledWhileScrolling","abstract":"

    A Bool value indicating whether that enable diffing animation while target is","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC29alwaysRenderVisibleComponentsSbvp":{"name":"alwaysRenderVisibleComponents","abstract":"

    A Bool value indicating whether that to always render visible components","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC18keepsContentOffsetSbvp":{"name":"keepsContentOffset","abstract":"

    A Bool value indicating whether that to reset content offset after","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC21animatableChangeCountSivp":{"name":"animatableChangeCount","abstract":"

    Max number of changes that can be animated for diffing updates. Default is 300.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC10completionyycSgvp":{"name":"completion","abstract":"

    A completion handler to be called after each updates.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterCACyxGycfc":{"name":"init()","abstract":"

    Create a new updater.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC3set12allAnimationySo0bc3RowG0V_tF":{"name":"set(allAnimation:)","abstract":"

    Set given animation to all kind of diffing updates.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC7prepare6target7adapterySo0bC0C_xtF":{"name":"prepare(target:adapter:)","abstract":"

    Set the delegate and dataSource of given table view, then reload data.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC14performUpdates6target7adapter4dataySo0bC0C_xSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC26performDifferentialUpdatesyySo0bC0C_xXetcACyxGAA0bC7AdapterCRbzlF":{"name":"performDifferentialUpdates(target:adapter:stagedChangeset:)","abstract":"

    Perform diffing updates to render given data to the target.

    ","parent_name":"UITableViewUpdater"},"Classes/UITableViewUpdater.html#/s:6Carbon18UITableViewUpdaterC23renderVisibleComponents2in7adapterySo0bC0C_xtF":{"name":"renderVisibleComponents(in:adapter:)","abstract":"

    Renders components displayed in visible area again.

    ","parent_name":"UITableViewUpdater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP6TargetQa":{"name":"Target","abstract":"

    A type that represents a target to be updated for render given data.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP7AdapterQa":{"name":"Adapter","abstract":"

    A type that represents an adapter holding the data to be rendered.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP7prepare6target7adaptery6TargetQz_7AdapterQztF":{"name":"prepare(target:adapter:)","abstract":"

    Prepares given target and adapter.

    ","parent_name":"Updater"},"Protocols/Updater.html#/s:6Carbon7UpdaterP14performUpdates6target7adapter4datay6TargetQz_7AdapterQzSayAA7SectionVGtF":{"name":"performUpdates(target:adapter:data:)","abstract":"

    Perform updates to render given data to the target.

    ","parent_name":"Updater"},"Protocols/Updater.html":{"name":"Updater","abstract":"

    Represents an updater that manages the updation for target.

    "},"Classes/UITableViewUpdater.html":{"name":"UITableViewUpdater","abstract":"

    An updater for managing diffing updates to render data to the UITableView.

    "},"Classes/UITableViewReloadDataUpdater.html":{"name":"UITableViewReloadDataUpdater","abstract":"

    An updater for managing to perform reload data to render data to the UITableView.

    "},"Classes/UICollectionViewUpdater.html":{"name":"UICollectionViewUpdater","abstract":"

    An updater for managing diffing updates to render data to the UICollectionView.

    "},"Classes/UICollectionViewReloadDataUpdater.html":{"name":"UICollectionViewReloadDataUpdater","abstract":"

    An updater for managing to perform reload data to render data to the UICollectionView.

    "},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:sizeForItemAtIndexPath:":{"name":"collectionView(_:layout:sizeForItemAt:)","abstract":"

    Returns the size for item at specified index path.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:referenceSizeForHeaderInSection:":{"name":"collectionView(_:layout:referenceSizeForHeaderInSection:)","abstract":"

    Returns the size for header in specified section.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewFlowLayoutAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewFlowLayoutAdapter(im)collectionView:layout:referenceSizeForFooterInSection:":{"name":"collectionView(_:layout:referenceSizeForFooterInSection:)","abstract":"

    Returns the size for footer in specified section.

    ","parent_name":"UICollectionViewFlowLayoutAdapter"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV010collectionC0So0bC0Cvp":{"name":"collectionView","abstract":"

    A collection view of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV4nodeAA8CellNodeVvp":{"name":"node","abstract":"

    A node corresponding to the selected cell position.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/SelectionContext.html#/s:6Carbon23UICollectionViewAdapterC16SelectionContextV9indexPath10Foundation05IndexH0Vvp":{"name":"indexPath","abstract":"

    The index path of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV5classAA19ComponentRenderable_So0b8ReusableC0CXcXpvp":{"name":"class","abstract":"

    A class for register supplementary view conforming ComponentRenderable.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register supplementary view.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/ViewRegistration.html#/s:6Carbon23UICollectionViewAdapterC0C12RegistrationV5class3nibAeA19ComponentRenderable_So0b8ReusableC0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"ViewRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV5classAA19ComponentRenderable_So0bcE0CXcXpvp":{"name":"class","abstract":"

    A class for register cell conforming ComponentRenderable.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register cell.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter/CellRegistration.html#/s:6Carbon23UICollectionViewAdapterC16CellRegistrationV5class3nibAeA19ComponentRenderable_So0bcE0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"CellRegistration"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered in the list UI.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC9didSelectyAC16SelectionContextVcSgvp":{"name":"didSelect","abstract":"

    A closure that to handle selection events of cell.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC4dataACSayAA7SectionVG_tcfc":{"name":"init(data:)","abstract":"

    Create an adapter with initial data.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC16cellRegistration010collectionC09indexPath4nodeAC04CellF0VSo0bC0C_10Foundation05IndexI0VAA0K4NodeVtF":{"name":"cellRegistration(collectionView:indexPath:node:)","abstract":"

    Returns a registration info for register each cells.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC013supplementaryC12Registration14forElementKind010collectionC09indexPath4nodeAC0cF0VSS_So0bC0C10Foundation05IndexL0VAA0C4NodeVtF":{"name":"supplementaryViewRegistration(forElementKind:collectionView:indexPath:node:)","abstract":"

    Returns a registration info for register each header views.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC013supplementaryC4Node14forElementKind010collectionC02atAA0cF0VSgSS_So0bC0C10Foundation9IndexPathVtF":{"name":"supplementaryViewNode(forElementKind:collectionView:at:)","abstract":"

    Returns a node for supplementary view for arbitrary element of kind.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/s:6Carbon23UICollectionViewAdapterC023registeredSupplementaryC5Kinds3forSaySSGSo0bC0C_tF":{"name":"registeredSupplementaryViewKinds(for:)","abstract":"

    Returns the kinds of supplementary view registered in the specified collection view.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/CellRegistration.html":{"name":"CellRegistration","abstract":"

    Registration info for collection view cell.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/ViewRegistration.html":{"name":"ViewRegistration","abstract":"

    Registration info for collection view supplementary view.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter/SelectionContext.html":{"name":"SelectionContext","abstract":"

    Context when cell is selected.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)numberOfSectionsInCollectionView:":{"name":"numberOfSections(in:)","abstract":"

    Return the number of sections.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Return the number of items in specified section.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Resister and dequeue the cell at specified index path.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:viewForSupplementaryElementOfKind:atIndexPath:":{"name":"collectionView(_:viewForSupplementaryElementOfKind:at:)","abstract":"

    Resister and dequeue the header or footer in specified section.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Callback the selected event of cell to the didSelect closure.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    The event that the cell will display in the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    The event that the cell did left from the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:willDisplaySupplementaryView:forElementKind:atIndexPath:":{"name":"collectionView(_:willDisplaySupplementaryView:forElementKind:at:)","abstract":"

    The event that the header or footer will display in the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UICollectionViewAdapter.html#/c:@CM@Carbon@objc(cs)UICollectionViewAdapter(im)collectionView:didEndDisplayingSupplementaryView:forElementOfKind:atIndexPath:":{"name":"collectionView(_:didEndDisplayingSupplementaryView:forElementOfKind:at:)","abstract":"

    The event that the header or footer did left from the visible rect.

    ","parent_name":"UICollectionViewAdapter"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV05tableC0So0bC0Cvp":{"name":"tableView","abstract":"

    A table view of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV4nodeAA8CellNodeVvp":{"name":"node","abstract":"

    A node corresponding to the selected cell position.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/SelectionContext.html#/s:6Carbon18UITableViewAdapterC16SelectionContextV9indexPath10Foundation05IndexH0Vvp":{"name":"indexPath","abstract":"

    The index path of the selected cell.

    ","parent_name":"SelectionContext"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV5classAA19ComponentRenderable_So0bc12HeaderFooterC0CXcXpvp":{"name":"class","abstract":"

    A class for register header or footer view conforming ComponentRenderable.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register header or footer view.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/ViewRegistration.html#/s:6Carbon18UITableViewAdapterC0C12RegistrationV5class3nibAeA19ComponentRenderable_So0bc12HeaderFooterC0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"ViewRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV5classAA19ComponentRenderable_So0bcE0CXcXpvp":{"name":"class","abstract":"

    A class for register cell conforming ComponentRenderable.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV3nibSo5UINibCSgvp":{"name":"nib","abstract":"

    The nib for register cell.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter/CellRegistration.html#/s:6Carbon18UITableViewAdapterC16CellRegistrationV5class3nibAeA19ComponentRenderable_So0bcE0CXcXp_So5UINibCSgtcfc":{"name":"init(class:nib:)","abstract":"

    Create a new registration.

    ","parent_name":"CellRegistration"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered in the list UI.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC9didSelectyAC16SelectionContextVcSgvp":{"name":"didSelect","abstract":"

    A closure that to handle selection events of cell.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC4dataACSayAA7SectionVG_tcfc":{"name":"init(data:)","abstract":"

    Create an adapter with initial data.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC16cellRegistration05tableC09indexPath4nodeAC04CellF0VSo0bC0C_10Foundation05IndexI0VAA0K4NodeVtF":{"name":"cellRegistration(tableView:indexPath:node:)","abstract":"

    Returns a registration info for register each cells.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC06headerC12Registration05tableC07section4nodeAC0cF0VSo0bC0C_SiAA0C4NodeVtF":{"name":"headerViewRegistration(tableView:section:node:)","abstract":"

    Returns a registration info for register each header views.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/s:6Carbon18UITableViewAdapterC06footerC12Registration05tableC07section4nodeAC0cF0VSo0bC0C_SiAA0C4NodeVtF":{"name":"footerViewRegistration(tableView:section:node:)","abstract":"

    Returns a registration info for register each footer views.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/CellRegistration.html":{"name":"CellRegistration","abstract":"

    Registration info for table view cell.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/ViewRegistration.html":{"name":"ViewRegistration","abstract":"

    Registration info for table view header or footer view.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter/SelectionContext.html":{"name":"SelectionContext","abstract":"

    Context when cell is selected.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)numberOfSectionsInTableView:":{"name":"numberOfSections(in:)","abstract":"

    Return the number of sections.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:numberOfRowsInSection:":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Return the number of rows in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:cellForRowAtIndexPath:":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Resister and dequeue the cell at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:viewForHeaderInSection:":{"name":"tableView(_:viewForHeaderInSection:)","abstract":"

    Resister and dequeue the header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:viewForFooterInSection:":{"name":"tableView(_:viewForFooterInSection:)","abstract":"

    Resister and dequeue the footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForRowAtIndexPath:":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Returns the height for row at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForRowAtIndexPath:":{"name":"tableView(_:estimatedHeightForRowAt:)","abstract":"

    Returns the estimated height for row at specified index path.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForHeaderInSection:":{"name":"tableView(_:heightForHeaderInSection:)","abstract":"

    Returns the height for header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForHeaderInSection:":{"name":"tableView(_:estimatedHeightForHeaderInSection:)","abstract":"

    Returns the estimated height for header in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:heightForFooterInSection:":{"name":"tableView(_:heightForFooterInSection:)","abstract":"

    Returns the height for footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:estimatedHeightForFooterInSection:":{"name":"tableView(_:estimatedHeightForFooterInSection:)","abstract":"

    Returns the estimated height for footer in specified section.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didSelectRowAtIndexPath:":{"name":"tableView(_:didSelectRowAt:)","abstract":"

    Callback the selected event of cell to the didSelect closure.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayCell:forRowAtIndexPath:":{"name":"tableView(_:willDisplay:forRowAt:)","abstract":"

    The event that the cell will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingCell:forRowAtIndexPath:":{"name":"tableView(_:didEndDisplaying:forRowAt:)","abstract":"

    The event that the cell did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayHeaderView:forSection:":{"name":"tableView(_:willDisplayHeaderView:forSection:)","abstract":"

    The event that the header will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingHeaderView:forSection:":{"name":"tableView(_:didEndDisplayingHeaderView:forSection:)","abstract":"

    The event that the header did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:willDisplayFooterView:forSection:":{"name":"tableView(_:willDisplayFooterView:forSection:)","abstract":"

    The event that the footer will display in the visible rect.

    ","parent_name":"UITableViewAdapter"},"Classes/UITableViewAdapter.html#/c:@CM@Carbon@objc(cs)UITableViewAdapter(im)tableView:didEndDisplayingFooterView:forSection:":{"name":"tableView(_:didEndDisplayingFooterView:forSection:)","abstract":"

    The event that the footer did left from the visible rect.

    ","parent_name":"UITableViewAdapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterP4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    The data to be rendered.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE9cellNodes2inSayAA8CellNodeVGSi_tF":{"name":"cellNodes(in:)","abstract":"

    Returns a collection of cell nodes in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE8cellNode2atAA04CellD0V10Foundation9IndexPathV_tF":{"name":"cellNode(at:)","abstract":"

    Returns a node of cell at the specified index path.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE10headerNode2inAA04ViewD0VSgSi_tF":{"name":"headerNode(in:)","abstract":"

    Returns a node of header in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html#/s:6Carbon7AdapterPAAE10footerNode2inAA04ViewD0VSgSi_tF":{"name":"footerNode(in:)","abstract":"

    Returns a node of footer in the specified section.

    ","parent_name":"Adapter"},"Protocols/Adapter.html":{"name":"Adapter","abstract":"

    Represents an adapter that holds data to be rendered.

    "},"Classes/UITableViewAdapter.html":{"name":"UITableViewAdapter","abstract":"

    An adapter for UITableView."},"Classes/UICollectionViewAdapter.html":{"name":"UICollectionViewAdapter","abstract":"

    An adapter for UICollectionView."},"Classes/UICollectionViewFlowLayoutAdapter.html":{"name":"UICollectionViewFlowLayoutAdapter","abstract":"

    An adapter for UICollectionView with UICollectionViewFlowLayout inherited from UICollectionViewAdapter.

    "},"Classes/Renderer.html#/s:6Carbon8RendererC7adapter7AdapterQzvp":{"name":"adapter","abstract":"

    An instance of adapter that specified at initialized.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC7updaterxvp":{"name":"updater","abstract":"

    An instance of updater that specified at initialized.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6target6TargetQzSgvp":{"name":"target","abstract":"

    An instance of target that weakly referenced.","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC4dataSayAA7SectionVGvp":{"name":"data","abstract":"

    Returns a current data held in adapter.","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC7adapter7updaterACyxG7AdapterQz_xtcfc":{"name":"init(adapter:updater:)","abstract":"

    Create a new instance with given adapter and updater.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyqd__SlRd__AA7SectionV7ElementRtd__lF":{"name":"render(_:)","abstract":"

    Render given collection of sections, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyqd__SlRd__AA7SectionVSg7ElementRtd__lF":{"name":"render(_:)","abstract":"

    Render given collection of sections skipping nil, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyAA7SectionVd_tF":{"name":"render(_:)","abstract":"

    Render given collection sections, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6renderyyAA7SectionVSgd_tF":{"name":"render(_:)","abstract":"

    Render given variadic number of sections skipping nil, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6render8sectionsyqd__yXE_tAA17SectionsBuildableRd__lF":{"name":"render(sections:)","abstract":"

    Render given variadic number of sections with function builder syntax, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html#/s:6Carbon8RendererC6render5cellsyqd__yXE_tAA14CellsBuildableRd__lF":{"name":"render(cells:)","abstract":"

    Render a single section contains given cells with function builder syntax, immediately.

    ","parent_name":"Renderer"},"Classes/Renderer.html":{"name":"Renderer","abstract":"

    Renderer is a controller to render passed data to target"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV9componentAA12AnyComponentVvp":{"name":"component","abstract":"

    A type-erased component which wrapped in self.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeVyACxcAA9ComponentRzlufc":{"name":"init(_:)","abstract":"

    Create a node wrapping given component.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV9component2asxSgxm_tlF":{"name":"component(as:)","abstract":"

    Returns a base instance of component casted as given type if possible.

    ","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"ViewNode"},"Structs/ViewNode.html#/s:6Carbon8ViewNodeV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"ViewNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV2ids11AnyHashableVvp":{"name":"id","abstract":"

    A type-erased identifier that can be used to uniquely","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV9componentAA12AnyComponentVvp":{"name":"component","abstract":"

    A type-erased component which wrapped in self.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV2id_ACx_q_tcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:_:)","abstract":"

    Create a node wrapping given id and component.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeVyACxcAA21IdentifiableComponentRzlufc":{"name":"init(_:)","abstract":"

    Create a node wrapping given component and its id.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV9component2asxSgxm_tlF":{"name":"component(as:)","abstract":"

    Returns a base instance of component casted as given type if possible.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon14CellsBuildableP05buildB0SayAA8CellNodeVGyF":{"name":"buildCells()","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV20differenceIdentifiers11AnyHashableVvp":{"name":"differenceIdentifier","abstract":"

    An identifier value for difference calculation.

    ","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"CellNode"},"Structs/CellNode.html#/s:6Carbon8CellNodeV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"CellNode"},"Structs/CellNode.html":{"name":"CellNode","abstract":"

    The node for cell that can be uniquely identified."},"Structs/ViewNode.html":{"name":"ViewNode","abstract":"

    The node for view which need not be uniquely identified like header or footer."},"Protocols/ComponentWrapping.html#/Wrapped":{"name":"Wrapped","abstract":"

    The type of wrapped component.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/wrapped":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingP7WrappedQa":{"name":"Wrapped","abstract":"

    The type of wrapped component.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingP7wrapped7WrappedQzvp":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13dynamicMemberqd__s7KeyPathCy7WrappedQzqd__G_tcluip":{"name":"subscript(dynamicMember:)","abstract":"

    Accesses a member of wrapped component with key path.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13renderContent7Wrapped_0E0QZyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE6render2iny7Wrapped_7ContentQZ_tF":{"name":"render(in:)","abstract":"

    Render properties into the content.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE19shouldContentUpdate4withSbx_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE12shouldRender4next2inSbx_7Wrapped_7ContentQZtF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE6layout7content2iny7Wrapped_7ContentQZ_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE20intrinsicContentSize3forSo6CGSizeV7Wrapped_0E0QZ_tF":{"name":"intrinsicContentSize(for:)","abstract":"

    The natural size for the passed content.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE18contentWillDisplayyy7Wrapped_7ContentQZF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"ComponentWrapping"},"Protocols/ComponentWrapping.html#/s:6Carbon17ComponentWrappingPAAE20contentDidEndDisplayyy7Wrapped_7ContentQZF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"ComponentWrapping"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV2idxvp":{"name":"id","abstract":"

    A type that represents an id that used to uniquely identify the component.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV7wrappedq_vp":{"name":"wrapped","abstract":"

    The wrapped component instance.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html#/s:6Carbon26IdentifiedComponentWrapperV2id7wrappedACyxq_Gx_q_tcfc":{"name":"init(id:wrapped:)","abstract":"

    Create a component wrapper wrapping given id and component.

    ","parent_name":"IdentifiedComponentWrapper"},"Structs/IdentifiedComponentWrapper.html":{"name":"IdentifiedComponentWrapper","abstract":"

    A wrapper around the compoent to conform to IdentifiableComponent.

    "},"Protocols/ComponentWrapping.html":{"name":"ComponentWrapping","abstract":"

    Represents a wrapper of component that forwards all actions to wrapped component."},"Structs/Group.html#/s:6Carbon5GroupVACyxGycfc":{"name":"init()","abstract":"

    Creates a group without elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE5cellsACyAEGqd__yXE_tcAA14CellsBuildableRd__lufc":{"name":"init(cells:)","abstract":"

    Creates a group with given cells.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE2of4cellACyAEGqd___qd_0_7ElementQyd__XEtcSTRd__AA14CellsBuildableRd_0_r0_lufc":{"name":"init(of:cell:)","abstract":"

    Creates a group with cells mapped from given elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A8CellNodeVRszlE10buildCellsSayAEGyF":{"name":"buildCells()","abstract":"

    Build an array of cell.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE8sectionsACyAEGqd__yXE_tcAA17SectionsBuildableRd__lufc":{"name":"init(sections:)","abstract":"

    Creates a group with given sections.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE2of7sectionACyAEGqd___qd_0_7ElementQyd__XEtcSTRd__AA17SectionsBuildableRd_0_r0_lufc":{"name":"init(of:section:)","abstract":"

    Creates a group with sections mapped from given elements.

    ","parent_name":"Group"},"Structs/Group.html#/s:6Carbon5GroupVA2A7SectionVRszlE13buildSectionsSayAEGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Group"},"Structs/Section.html#/s:6Carbon7SectionV2ids11AnyHashableVvp":{"name":"id","abstract":"

    A type-erased identifier that can be used to uniquely","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6headerAA8ViewNodeVSgvp":{"name":"header","abstract":"

    A node representing header view.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV5cellsSayAA8CellNodeVGvp":{"name":"cells","abstract":"

    A collection of nodes representing cells.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6footerAA8ViewNodeVSgvp":{"name":"footer","abstract":"

    A node representing footer view.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cells6footerACx_AA8ViewNodeVSgq_AJtcSHRzSlR_AA04CellH0V7ElementRt_r0_lufc":{"name":"init(id:header:cells:footer:)","abstract":"

    Create a section wrapping id, header node, footer node and cell nodes.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cells6footerACx_AA8ViewNodeVSgq_AJtcSHRzSlR_AA04CellH0VSg7ElementRt_r0_lufc":{"name":"init(id:header:cells:footer:)","abstract":"

    Create a section wrapping id, header node, footer node and cell nodes.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footerACx_AA8ViewNodeVSgAItcSHRzlufc":{"name":"init(id:header:footer:)","abstract":"

    Create a section wrapping id, header node, footer node.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id5cellsACx_q_yXEtcSHRzAA14CellsBuildableR_r0_lufc":{"name":"init(id:cells:)","abstract":"

    Create a section wrapping given id and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footer5cellsACx_q_Sgq0_Sgq1_yXEtcSHRzAA9ComponentR_AaJR0_AA14CellsBuildableR1_r2_lufc":{"name":"init(id:header:footer:cells:)","abstract":"

    Create a section wrapping given id, header, footer and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header6footerACx_q_Sgq0_SgtcSHRzAA9ComponentR_AaIR0_r1_lufc":{"name":"init(id:header:footer:)","abstract":"

    Create a section wrapping given id, header and footer.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6header5cellsACx_q_SgAA14CellsBuildable_pyXEtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:header:cells:)","abstract":"

    Create a section wrapping given id, header and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6footer5cellsACx_q_Sgq0_yXEtcSHRzAA9ComponentR_AA14CellsBuildableR0_r1_lufc":{"name":"init(id:footer:cells:)","abstract":"

    Create a section wrapping given id, footer and cells with function builder syntax.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6headerACx_q_SgtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:header:)","abstract":"

    Create a section wrapping given id and header.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV2id6footerACx_q_SgtcSHRzAA9ComponentR_r0_lufc":{"name":"init(id:footer:)","abstract":"

    Create a section wrapping given id and footer.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV13buildSectionsSayACGyF":{"name":"buildSections()","abstract":"

    Build an array of section.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV20differenceIdentifiers11AnyHashableVvp":{"name":"differenceIdentifier","abstract":"

    An identifier value for difference calculation.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV8elementsSayAA8CellNodeVGvp":{"name":"elements","abstract":"

    The collection of element in the section.

    ","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV14isContentEqual2toSbAC_tF":{"name":"isContentEqual(to:)","abstract":"

    Indicate whether the content of self is equals to the content of","parent_name":"Section"},"Structs/Section.html#/s:6Carbon7SectionV6source8elementsA2C_xtcSlRzAA8CellNodeV7ElementRtzlufc":{"name":"init(source:elements:)","abstract":"

    Creates a new section reproducing the given source section with replacing the elements.

    ","parent_name":"Section"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV4baseypvp":{"name":"base","abstract":"

    The value wrapped by this instance.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentVyACxcAA0C0Rzlufc":{"name":"init(_:)","abstract":"

    Create a type-erased component that wraps the given instance.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV13renderContentypyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV6render2inyyp_tF":{"name":"render(in:)","abstract":"

    Render properties into the content on the element of list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV19shouldContentUpdate4withSbAC_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV12shouldRender4next2inSbAC_yptF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV6layout7content2inyyp_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV20intrinsicContentSize3forSo6CGSizeVyp_tF":{"name":"intrinsicContentSize(for:)","abstract":"

    The natural size for the passed content.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV18contentWillDisplayyyypF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV20contentDidEndDisplayyyypF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV2asyxSgxmlF":{"name":"as(_:)","abstract":"

    Returns a base instance casted as given type if possible.

    ","parent_name":"AnyComponent"},"Structs/AnyComponent.html#/s:6Carbon12AnyComponentV16debugDescriptionSSvp":{"name":"debugDescription","abstract":"

    A textual representation of this instance, suitable for debugging.

    ","parent_name":"AnyComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentP2IDQa":{"name":"ID","abstract":"

    A type that represents an id that used to uniquely identify the component.

    ","parent_name":"IdentifiableComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentP2id2IDQzvp":{"name":"id","abstract":"

    An identifier that used to uniquely identify the component.

    ","parent_name":"IdentifiableComponent"},"Protocols/IdentifiableComponent.html#/s:6Carbon21IdentifiableComponentPAAE10buildCellsSayAA8CellNodeVGyF":{"name":"buildCells()","abstract":"

    Build an array of section.

    ","parent_name":"IdentifiableComponent"},"Protocols/Component.html#/s:6Carbon9ComponentP7ContentQa":{"name":"Content","abstract":"

    A type that represents a content to be render on the element of list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP13renderContent0D0QzyF":{"name":"renderContent()","abstract":"

    Returns a new instance of Content.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP6render2iny7ContentQz_tF":{"name":"render(in:)","abstract":"

    Render properties into the content.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP15reuseIdentifierSSvp":{"name":"reuseIdentifier","abstract":"

    A string used to identify a element that is reusable. Default is the type name of self.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP13referenceSize2inSo6CGSizeVSgSo6CGRectV_tF":{"name":"referenceSize(in:)","abstract":"

    Returns the referencing size of content to render on the list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP19shouldContentUpdate4withSbx_tF":{"name":"shouldContentUpdate(with:)","abstract":"

    Returns a Bool value indicating whether the content should be reloaded.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP12shouldRender4next2inSbx_7ContentQztF":{"name":"shouldRender(next:in:)","abstract":"

    Returns a Bool value indicating whether component should be render again.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP6layout7content2iny7ContentQz_So6UIViewCtF":{"name":"layout(content:in:)","abstract":"

    Layout the content on top of element of the list UI.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP20intrinsicContentSize3forSo6CGSizeV0D0Qz_tF":{"name":"intrinsicContentSize(for:)","abstract":"

    The natural size for the passed content.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP18contentWillDisplayyy7ContentQzF":{"name":"contentWillDisplay(_:)","abstract":"

    Invoked every time of before a component got into visible area.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentP20contentDidEndDisplayyy7ContentQzF":{"name":"contentDidEndDisplay(_:)","abstract":"

    Invoked every time of after a component went out from visible area.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentPAAE10identified2byAA010IdentifiedB7WrapperVyqd__xGqd___tSHRd__lF":{"name":"identified(by:)","abstract":"

    Returns an identified component wrapping self and given id.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentPAAE10identified2byAA010IdentifiedB7WrapperVyqd__xGs7KeyPathCyxqd__G_tSHRd__lF":{"name":"identified(by:)","abstract":"

    Returns an identified component wrapping self and the id that accessed by given key path.

    ","parent_name":"Component"},"Protocols/Component.html#/s:6Carbon9ComponentPAA7SwiftUI4ViewRzrlE4bodyQrvp":{"name":"body","abstract":"

    Declares the content and behavior of this view.

    ","parent_name":"Component"},"Protocols/Component.html":{"name":"Component","abstract":"

    A component represents a small reusable piece of code of element to be rendered."},"Protocols/IdentifiableComponent.html":{"name":"IdentifiableComponent","abstract":"

    Represents a component that can be uniquely identify.

    "},"Structs/AnyComponent.html":{"name":"AnyComponent","abstract":"

    A type-erased component.

    "},"Structs/Section.html":{"name":"Section","abstract":"

    Represents a section of list UI, containing header node, footer node"},"Structs/Group.html":{"name":"Group","abstract":"

    An affordance for grouping component or section.

    "},"Element.html":{"name":"Element"},"ComponentWrapper.html":{"name":"ComponentWrapper"},"Node.html":{"name":"Node"},"Renderer.html":{"name":"Renderer"},"Adapter.html":{"name":"Adapter"},"Updater.html":{"name":"Updater"},"Interface.html":{"name":"Interface"},"Builder.html":{"name":"Builder"},"Changeset.html":{"name":"Changeset"}} \ No newline at end of file