Rename Gluon to Tokamak (#44)

* Rename Gluon to Tokamak
* Fix scheme in .travis.yml, fix storyboard
This commit is contained in:
Max Desiatov 2019-02-18 10:54:49 +00:00 committed by GitHub
parent 22cce69d3a
commit c197701e36
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
164 changed files with 1896 additions and 2148 deletions

View File

@ -18,10 +18,10 @@ before_install:
script:
- swiftformat --lint --verbose .
- swiftlint
- xcodebuild -scheme GluonUIKit -sdk iphonesimulator
- xcodebuild test -enableCodeCoverage YES -scheme GluonCore
- xcodebuild -scheme TokamakUIKit -sdk iphonesimulator
- xcodebuild test -enableCodeCoverage YES -scheme Tokamak
after_success:
- bash <(curl -s https://codecov.io/bash)
# - swift build
# - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/Gluon.xcworkspace -scheme Gluon-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty
# - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/Tokamak.xcworkspace -scheme Tokamak-Example -sdk iphonesimulator11.0 ONLY_ACTIVE_ARCH=NO | xcpretty
# - pod lib lint

View File

@ -55,7 +55,7 @@ further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at conduct@gluon.sh. All
reported by contacting the project team at conduct@tokamakui.org. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.

View File

@ -1,6 +1,6 @@
platform :ios, '11.0'
target 'Gluon_Example' do
pod 'Gluon', :path => '..'
pod 'GluonUIKit', :path => '..'
target 'TokamakDemo' do
pod 'Tokamak', :path => '..'
pod 'TokamakUIKit', :path => '..'
end

View File

@ -1,22 +1,22 @@
PODS:
- Gluon (0.1.0)
- GluonUIKit (0.1.0):
- Gluon (~> 0.1)
- Tokamak (0.1.0)
- TokamakUIKit (0.1.0):
- Tokamak (~> 0.1)
DEPENDENCIES:
- Gluon (from `..`)
- GluonUIKit (from `..`)
- Tokamak (from `..`)
- TokamakUIKit (from `..`)
EXTERNAL SOURCES:
Gluon:
Tokamak:
:path: ".."
GluonUIKit:
TokamakUIKit:
:path: ".."
SPEC CHECKSUMS:
Gluon: 5eb3a35b870287095b92a4203dbf9b6fa423ce02
GluonUIKit: d88bc67ed0cc1dcaf89bad30413c9de91a65c629
Tokamak: 502731565af11af88173b92a55799e6811240c55
TokamakUIKit: 1ba14d4ee2b26eaa5c5e2e416af61b48e02c58eb
PODFILE CHECKSUM: 72db4a70e433e8e9a04a2f588b37abc06f0bfe35
PODFILE CHECKSUM: fde6d1f4790dafaa632305df0301b976838f0849
COCOAPODS: 1.6.0

View File

@ -1,14 +1,14 @@
//
// GluonTest.swift
// Gluon_Tests
// TokamakTest.swift
// Tokamak_Tests
//
// Created by Max Desiatov on 27/11/2018.
// Copyright © 2018 CocoaPods. All rights reserved.
// Copyright © 2018 Max Desiatov. All rights reserved.
//
import XCTest
class GluonTest: XCTestCase {
class TokamakTest: XCTestCase {
override func setUp() {
// Put setup code here. This method is called before the invocation of each
// test method in the class.

View File

@ -3,22 +3,21 @@
archiveVersion = 1;
classes = {
};
objectVersion = 46;
objectVersion = 51;
objects = {
/* Begin PBXBuildFile section */
22E3415861D32D3493271FF2 /* libPods-Gluon_Example.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */; };
607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; };
607FACD81AFB9204008FA782 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD71AFB9204008FA782 /* ViewController.swift */; };
607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; };
607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; };
607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; };
C449B806DFEE55B6CEE6478C /* libPods-TokamakDemo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */; };
D11DB6432219C03000013FC3 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D11DB6422219C03000013FC3 /* Timer.swift */; };
D1BFAF772215795900845EA0 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF762215795900845EA0 /* Router.swift */; };
D1BFAF792215800A00845EA0 /* Counter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF782215800A00845EA0 /* Counter.swift */; };
D1BFAF7B22158B4000845EA0 /* List.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1BFAF7A22158B4000845EA0 /* List.swift */; };
D1DEEC2922009E8000C525EE /* ModalRouter.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1DEEC2822009E8000C525EE /* ModalRouter.swift */; };
D1E6BCD221AD4CD6002769E3 /* GluonTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */; };
D1F2C3272214407B008358DC /* TableModal.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F2C3262214407B008358DC /* TableModal.swift */; };
D1F7185322159E09004E5951 /* Controls.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F7185222159E09004E5951 /* Controls.swift */; };
D1F7185522159EAD004E5951 /* DatePickers.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F7185422159EAD004E5951 /* DatePickers.swift */; };
@ -27,45 +26,32 @@
D1F718612215A617004E5951 /* Modals.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1F718602215A617004E5951 /* Modals.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 607FACC81AFB9204008FA782 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 607FACCF1AFB9204008FA782;
remoteInfo = Gluon;
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Gluon_Example.a"; sourceTree = BUILT_PRODUCTS_DIR; };
2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Gluon_Example.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Gluon_Example/Pods-Gluon_Example.debug.xcconfig"; sourceTree = "<group>"; };
4C92866C2AA17B00C980C452 /* Gluon.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = Gluon.podspec; path = ../Gluon.podspec; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.ruby; };
607FACD01AFB9204008FA782 /* Gluon_Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Gluon_Example.app; sourceTree = BUILT_PRODUCTS_DIR; };
5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-TokamakDemo.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TokamakDemo.release.xcconfig"; path = "Pods/Target Support Files/Pods-TokamakDemo/Pods-TokamakDemo.release.xcconfig"; sourceTree = "<group>"; };
607FACD01AFB9204008FA782 /* TokamakDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = TokamakDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
607FACD71AFB9204008FA782 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = "<group>"; };
607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = "<group>"; };
607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Gluon_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
8CADEBB8BFF6F2621CA49E8F /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
C1B4A8D80770145FDAFEAE64 /* Pods_Gluon_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Gluon_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-TokamakDemo.debug.xcconfig"; path = "Pods/Target Support Files/Pods-TokamakDemo/Pods-TokamakDemo.debug.xcconfig"; sourceTree = "<group>"; };
C6DA99382B6892EAB361742F /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = "<group>"; };
D11DB6422219C03000013FC3 /* Timer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = "<group>"; };
D1BFAF762215795900845EA0 /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = "<group>"; };
D1BFAF782215800A00845EA0 /* Counter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Counter.swift; sourceTree = "<group>"; };
D1BFAF7A22158B4000845EA0 /* List.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = List.swift; sourceTree = "<group>"; };
D1DEEC2822009E8000C525EE /* ModalRouter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ModalRouter.swift; sourceTree = "<group>"; };
D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GluonTest.swift; sourceTree = "<group>"; };
D1E6BCD121AD4CD6002769E3 /* TokamakTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TokamakTest.swift; sourceTree = "<group>"; };
D1F2C3262214407B008358DC /* TableModal.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TableModal.swift; sourceTree = "<group>"; };
D1F7185222159E09004E5951 /* Controls.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Controls.swift; sourceTree = "<group>"; };
D1F7185422159EAD004E5951 /* DatePickers.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickers.swift; sourceTree = "<group>"; };
D1F7185C2215A4A1004E5951 /* LayerProps.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LayerProps.swift; sourceTree = "<group>"; };
D1F7185E2215A5D0004E5951 /* Constraints.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constraints.swift; sourceTree = "<group>"; };
D1F718602215A617004E5951 /* Modals.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Modals.swift; sourceTree = "<group>"; };
E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Gluon_Example.release.xcconfig"; path = "Pods/Target Support Files/Pods-Gluon_Example/Pods-Gluon_Example.release.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -73,14 +59,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
22E3415861D32D3493271FF2 /* libPods-Gluon_Example.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
607FACE21AFB9204008FA782 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
C449B806DFEE55B6CEE6478C /* libPods-TokamakDemo.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -91,7 +70,7 @@
isa = PBXGroup;
children = (
607FACF51AFB993E008FA782 /* Podspec Metadata */,
607FACD21AFB9204008FA782 /* Example for Gluon */,
607FACD21AFB9204008FA782 /* TokamakDemo */,
607FACE81AFB9204008FA782 /* Tests */,
607FACD11AFB9204008FA782 /* Products */,
D360275A0620D06017CFB567 /* Pods */,
@ -104,17 +83,16 @@
607FACD11AFB9204008FA782 /* Products */ = {
isa = PBXGroup;
children = (
607FACD01AFB9204008FA782 /* Gluon_Example.app */,
607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */,
607FACD01AFB9204008FA782 /* TokamakDemo.app */,
);
name = Products;
sourceTree = "<group>";
};
607FACD21AFB9204008FA782 /* Example for Gluon */ = {
607FACD21AFB9204008FA782 /* TokamakDemo */ = {
isa = PBXGroup;
children = (
607FACD51AFB9204008FA782 /* AppDelegate.swift */,
D1F7185122159D6E004E5951 /* Examples */,
D1F7185122159D6E004E5951 /* Components */,
607FACD71AFB9204008FA782 /* ViewController.swift */,
D1BFAF762215795900845EA0 /* Router.swift */,
607FACD91AFB9204008FA782 /* Main.storyboard */,
@ -122,8 +100,8 @@
607FACDE1AFB9204008FA782 /* LaunchScreen.xib */,
607FACD31AFB9204008FA782 /* Supporting Files */,
);
name = "Example for Gluon";
path = Gluon;
name = TokamakDemo;
path = Tokamak;
sourceTree = "<group>";
};
607FACD31AFB9204008FA782 /* Supporting Files */ = {
@ -137,7 +115,7 @@
607FACE81AFB9204008FA782 /* Tests */ = {
isa = PBXGroup;
children = (
D1E6BCD121AD4CD6002769E3 /* GluonTest.swift */,
D1E6BCD121AD4CD6002769E3 /* TokamakTest.swift */,
607FACE91AFB9204008FA782 /* Supporting Files */,
);
path = Tests;
@ -154,7 +132,6 @@
607FACF51AFB993E008FA782 /* Podspec Metadata */ = {
isa = PBXGroup;
children = (
4C92866C2AA17B00C980C452 /* Gluon.podspec */,
8CADEBB8BFF6F2621CA49E8F /* README.md */,
C6DA99382B6892EAB361742F /* LICENSE */,
);
@ -164,13 +141,12 @@
7C9590EA0938024ADB1C1A08 /* Frameworks */ = {
isa = PBXGroup;
children = (
C1B4A8D80770145FDAFEAE64 /* Pods_Gluon_Tests.framework */,
23D2573BE6C621FABA3368E7 /* libPods-Gluon_Example.a */,
5B96B435A9D67621D318616E /* libPods-TokamakDemo.a */,
);
name = Frameworks;
sourceTree = "<group>";
};
D1F7185122159D6E004E5951 /* Examples */ = {
D1F7185122159D6E004E5951 /* Components */ = {
isa = PBXGroup;
children = (
D1BFAF782215800A00845EA0 /* Counter.swift */,
@ -184,14 +160,14 @@
D1F2C3262214407B008358DC /* TableModal.swift */,
D11DB6422219C03000013FC3 /* Timer.swift */,
);
path = Examples;
path = Components;
sourceTree = "<group>";
};
D360275A0620D06017CFB567 /* Pods */ = {
isa = PBXGroup;
children = (
2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */,
E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */,
A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */,
5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */,
);
name = Pods;
sourceTree = "<group>";
@ -199,9 +175,9 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
607FACCF1AFB9204008FA782 /* Gluon_Example */ = {
607FACCF1AFB9204008FA782 /* TokamakDemo */ = {
isa = PBXNativeTarget;
buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Example" */;
buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TokamakDemo" */;
buildPhases = (
EC5FD3EFB14C0031402120B7 /* [CP] Check Pods Manifest.lock */,
607FACCC1AFB9204008FA782 /* Sources */,
@ -212,29 +188,11 @@
);
dependencies = (
);
name = Gluon_Example;
productName = Gluon;
productReference = 607FACD01AFB9204008FA782 /* Gluon_Example.app */;
name = TokamakDemo;
productName = Tokamak;
productReference = 607FACD01AFB9204008FA782 /* TokamakDemo.app */;
productType = "com.apple.product-type.application";
};
607FACE41AFB9204008FA782 /* Gluon_Tests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Tests" */;
buildPhases = (
607FACE11AFB9204008FA782 /* Sources */,
607FACE21AFB9204008FA782 /* Frameworks */,
607FACE31AFB9204008FA782 /* Resources */,
);
buildRules = (
);
dependencies = (
607FACE71AFB9204008FA782 /* PBXTargetDependency */,
);
name = Gluon_Tests;
productName = Tests;
productReference = 607FACE51AFB9204008FA782 /* Gluon_Tests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@ -243,23 +201,17 @@
attributes = {
LastSwiftUpdateCheck = 0830;
LastUpgradeCheck = 1000;
ORGANIZATIONNAME = Gluon;
ORGANIZATIONNAME = Tokamak;
TargetAttributes = {
607FACCF1AFB9204008FA782 = {
CreatedOnToolsVersion = 6.3.1;
DevelopmentTeam = H4Z9Z4RD2G;
LastSwiftMigration = 1000;
};
607FACE41AFB9204008FA782 = {
CreatedOnToolsVersion = 6.3.1;
DevelopmentTeam = H4Z9Z4RD2G;
LastSwiftMigration = 1010;
TestTargetID = 607FACCF1AFB9204008FA782;
};
};
};
buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Gluon" */;
compatibilityVersion = "Xcode 3.2";
buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Tokamak" */;
compatibilityVersion = "Xcode 10.0";
developmentRegion = English;
hasScannedForEncodings = 0;
knownRegions = (
@ -271,8 +223,7 @@
projectDirPath = "";
projectRoot = "";
targets = (
607FACCF1AFB9204008FA782 /* Gluon_Example */,
607FACE41AFB9204008FA782 /* Gluon_Tests */,
607FACCF1AFB9204008FA782 /* TokamakDemo */,
);
};
/* End PBXProject section */
@ -288,13 +239,6 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
607FACE31AFB9204008FA782 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
@ -309,7 +253,7 @@
);
name = "[CP] Check Pods Manifest.lock";
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-Gluon_Example-checkManifestLockResult.txt",
"$(DERIVED_FILE_DIR)/Pods-TokamakDemo-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@ -339,24 +283,8 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
607FACE11AFB9204008FA782 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
D1E6BCD221AD4CD6002769E3 /* GluonTest.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
607FACE71AFB9204008FA782 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 607FACCF1AFB9204008FA782 /* Gluon_Example */;
targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
607FACD91AFB9204008FA782 /* Main.storyboard */ = {
isa = PBXVariantGroup;
@ -424,7 +352,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -472,25 +400,29 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
SDKROOT = iphoneos;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_COMPILATION_MODE = wholemodule;
SWIFT_OPTIMIZATION_LEVEL = "-O";
VALIDATE_PRODUCT = YES;
};
name = Release;
};
607FACF01AFB9204008FA782 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 2EACD4D4A09D2A5A83D8CCFC /* Pods-Gluon_Example.debug.xcconfig */;
baseConfigurationReference = A9EEF813955DAEEFE1D52ED4 /* Pods-TokamakDemo.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
INFOPLIST_FILE = Gluon/Info.plist;
INFOPLIST_FILE = Tokamak/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = "org.gluon.demo.Gluon-Example";
PRODUCT_BUNDLE_IDENTIFIER = org.tokamak.demo.TokamakDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
};
@ -498,65 +430,27 @@
};
607FACF11AFB9204008FA782 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = E7F808D1B3715FF294877289 /* Pods-Gluon_Example.release.xcconfig */;
baseConfigurationReference = 5EDE96CE7CBE2345FEE1A935 /* Pods-TokamakDemo.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
INFOPLIST_FILE = Gluon/Info.plist;
INFOPLIST_FILE = Tokamak/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MODULE_NAME = ExampleApp;
PRODUCT_BUNDLE_IDENTIFIER = "org.gluon.demo.Gluon-Example";
PRODUCT_BUNDLE_IDENTIFIER = org.tokamak.demo.TokamakDemo;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
};
name = Release;
};
607FACF31AFB9204008FA782 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gluon_Example.app/Gluon_Example";
};
name = Debug;
};
607FACF41AFB9204008FA782 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_ENABLE_MODULES = YES;
DEVELOPMENT_TEAM = H4Z9Z4RD2G;
FRAMEWORK_SEARCH_PATHS = (
"$(SDKROOT)/Developer/Library/Frameworks",
"$(inherited)",
);
INFOPLIST_FILE = Tests/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)";
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 4.2;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Gluon_Example.app/Gluon_Example";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Gluon" */ = {
607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "Tokamak" */ = {
isa = XCConfigurationList;
buildConfigurations = (
607FACED1AFB9204008FA782 /* Debug */,
@ -565,7 +459,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Example" */ = {
607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "TokamakDemo" */ = {
isa = XCConfigurationList;
buildConfigurations = (
607FACF01AFB9204008FA782 /* Debug */,
@ -574,15 +468,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "Gluon_Tests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
607FACF31AFB9204008FA782 /* Debug */,
607FACF41AFB9204008FA782 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 607FACC81AFB9204008FA782 /* Project object */;

View File

@ -2,6 +2,6 @@
<Workspace
version = "1.0">
<FileRef
location = "self:Gluon.xcodeproj">
location = "self:Tokamak.xcodeproj">
</FileRef>
</Workspace>

View File

@ -15,9 +15,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
BuildableName = "Gluon_Example.app"
BlueprintName = "Gluon_Example"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "TokamakDemo.app"
BlueprintName = "TokamakDemo"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
@ -29,9 +29,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACE41AFB9204008FA782"
BuildableName = "Gluon_Tests.xctest"
BlueprintName = "Gluon_Tests"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "Tokamak_Tests.xctest"
BlueprintName = "Tokamak_Tests"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
@ -47,9 +47,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACE41AFB9204008FA782"
BuildableName = "Gluon_Tests.xctest"
BlueprintName = "Gluon_Tests"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "Tokamak_Tests.xctest"
BlueprintName = "Tokamak_Tests"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
@ -57,9 +57,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
BuildableName = "Gluon_Example.app"
BlueprintName = "Gluon_Example"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "TokamakDemo.app"
BlueprintName = "TokamakDemo"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
@ -80,9 +80,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
BuildableName = "Gluon_Example.app"
BlueprintName = "Gluon_Example"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "TokamakDemo.app"
BlueprintName = "TokamakDemo"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
<AdditionalOptions>
@ -99,9 +99,9 @@
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "607FACCF1AFB9204008FA782"
BuildableName = "Gluon_Example.app"
BlueprintName = "Gluon_Example"
ReferencedContainer = "container:Gluon.xcodeproj">
BuildableName = "TokamakDemo.app"
BlueprintName = "TokamakDemo"
ReferencedContainer = "container:Tokamak.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>

View File

@ -2,7 +2,7 @@
<Workspace
version = "1.0">
<FileRef
location = "group:Gluon.xcodeproj">
location = "group:Tokamak.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">

View File

@ -1,6 +1,6 @@
//
// AppDelegate.swift
// Gluon
// Tokamak_Example
//
// Created by Max Desiatov on 09/15/2018.
// Copyright (c) 2018 Max Desiatov. All rights reserved.

View File

@ -1,12 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="13771" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" colorMatched="YES">
<device id="retina4_7" orientation="portrait">
<adaptation id="fullscreen"/>
</device>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13772"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@ -16,14 +15,14 @@
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2015 CocoaPods. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="441" height="21"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text=" Copyright (c) 2019 Max Desiatov. All rights reserved." textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="440" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Gluon" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="140" width="441" height="43"/>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Tokamak" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="139.5" width="440" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>

View File

@ -12,7 +12,7 @@
<!--View Controller-->
<scene sceneID="ufC-wZ-h7g">
<objects>
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModule="Gluon_Example" customModuleProvider="target" sceneMemberID="viewController">
<viewController id="vXZ-lx-hvc" customClass="ViewController" customModule="TokamakDemo" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="jyV-Pf-zRb"/>
<viewControllerLayoutGuide type="bottom" id="2fi-mo-0CV"/>

View File

@ -1,12 +1,12 @@
//
// Constraints.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct Constraints: LeafComponent {
typealias Props = Null

View File

@ -1,12 +1,12 @@
//
// Controls.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct Controls: LeafComponent {
typealias Props = Null

View File

@ -1,12 +1,12 @@
//
// Counter.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct Counter: LeafComponent {
struct Props: Equatable {

View File

@ -1,12 +1,12 @@
//
// DatePicker.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct DatePickers: LeafComponent {
typealias Props = Null

View File

@ -1,12 +1,12 @@
//
// LayerProps.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct LayerProps: LeafComponent {
typealias Props = Null

View File

@ -1,12 +1,12 @@
//
// List.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
private struct Cells: SimpleCellProvider {
static func cell(

View File

@ -1,12 +1,12 @@
//
// NavRouter.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 29/01/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct ModalRouter: NavigationRouter {
enum Route {

View File

@ -1,12 +1,12 @@
//
// Modals.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct NavigationModal: PureLeafComponent {
struct Props: Equatable {

View File

@ -1,11 +1,12 @@
//
// TableModal.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 13/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
struct ListProvider: SimpleCellProvider {
typealias Props = Null

View File

@ -1,13 +1,13 @@
//
// Timer.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 17/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Foundation
import Gluon
import Tokamak
struct TimerCounter: LeafComponent {
typealias Props = Null

View File

@ -1,12 +1,12 @@
//
// RootRouter.swift
// Gluon_Example
// Tokamak_Example
//
// Created by Max Desiatov on 14/02/2019.
// Copyright © 2019 Gluon. All rights reserved.
// Copyright © 2019 Max Desiatov. All rights reserved.
//
import Gluon
import Tokamak
enum AppRoute: String, CaseIterable {
case list = "Examples"

View File

@ -1,16 +1,16 @@
//
// ViewController.swift
// Gluon
// Tokamak_Example
//
// Created by Max Desiatov on 09/15/2018.
// Copyright (c) 2018 Max Desiatov. All rights reserved.
//
import Gluon
import GluonUIKit
import Tokamak
import TokamakUIKit
import UIKit
final class ViewController: GluonViewController {
final class ViewController: TokamakViewController {
override var node: AnyNode {
return NavigationPresenter<Router>.node(.init(initial: .list))
}

File diff suppressed because it is too large Load Diff

View File

@ -1,109 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "9999"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Gluon::GluonTestRenderer"
BuildableName = "GluonTestRenderer.framework"
BlueprintName = "GluonTestRenderer"
ReferencedContainer = "container:Gluon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Gluon::Gluon"
BuildableName = "Gluon.framework"
BlueprintName = "Gluon"
ReferencedContainer = "container:Gluon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Gluon::GluonUIKit"
BuildableName = "GluonUIKit.framework"
BlueprintName = "GluonUIKit"
ReferencedContainer = "container:Gluon.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Gluon::GluonTests"
BuildableName = "GluonTests.xctest"
BlueprintName = "GluonTests"
ReferencedContainer = "container:Gluon.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "Gluon::GluonTestRenderer"
BuildableName = "GluonTestRenderer.framework"
BlueprintName = "GluonTestRenderer"
ReferencedContainer = "container:Gluon.xcodeproj">
</BuildableReference>
</MacroExpansion>
<AdditionalOptions>
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>

View File

@ -5,21 +5,21 @@
import PackageDescription
let package = Package(
name: "Gluon",
name: "Tokamak",
products: [
// Products define the executables and libraries produced by a package,
// and make them visible to other packages.
.library(
name: "Gluon",
targets: ["Gluon"]
name: "Tokamak",
targets: ["Tokamak"]
),
.library(
name: "GluonUIKit",
targets: ["GluonUIKit"]
name: "TokamakUIKit",
targets: ["TokamakUIKit"]
),
.library(
name: "GluonTestRenderer",
targets: ["GluonTestRenderer"]
name: "TokamakTestRenderer",
targets: ["TokamakTestRenderer"]
),
],
dependencies: [
@ -32,20 +32,20 @@ let package = Package(
// Targets can depend on other targets in this package, and on products
// in packages which this package depends on.
.target(
name: "Gluon",
name: "Tokamak",
dependencies: []
),
.target(
name: "GluonUIKit",
dependencies: ["Gluon"]
name: "TokamakUIKit",
dependencies: ["Tokamak"]
),
.target(
name: "GluonTestRenderer",
dependencies: ["Gluon"]
name: "TokamakTestRenderer",
dependencies: ["Tokamak"]
),
.testTarget(
name: "GluonTests",
dependencies: ["GluonTestRenderer"]
name: "TokamakTests",
dependencies: ["TokamakTestRenderer"]
),
]
)

View File

@ -8,5 +8,5 @@
/// or specific system versions before calling newer APIs.
MACOSX_DEPLOYMENT_TARGET=10.13
IPHONEOS_DEPLOYMENT_TARGET=10.0
IPHONEOS_DEPLOYMENT_TARGET=11.0
SUPPORTED_PLATFORMS = macosx iphoneos iphonesimulator

128
README.md
View File

@ -1,26 +1,26 @@
# Gluon
# Tokamak
## React-like framework for native UI written in pure Swift 🛠⚛️📲
[![CI Status](https://img.shields.io/travis/MaxDesiatov/Gluon.svg?style=flat)](https://travis-ci.org/MaxDesiatov/Gluon)
[![Coverage](https://img.shields.io/codecov/c/github/MaxDesiatov/Gluon/master.svg?style=flat)](https://codecov.io/gh/maxdesiatov/Gluon)
[![CI Status](https://img.shields.io/travis/MaxDesiatov/Tokamak.svg?style=flat)](https://travis-ci.org/MaxDesiatov/Tokamak)
[![Coverage](https://img.shields.io/codecov/c/github/MaxDesiatov/Tokamak/master.svg?style=flat)](https://codecov.io/gh/maxdesiatov/Tokamak)
<!--
[![Version](https://img.shields.io/cocoapods/v/Gluon.svg?style=flat)](https://cocoapods.org/pods/Gluon)
[![License](https://img.shields.io/cocoapods/l/Gluon.svg?style=flat)](https://cocoapods.org/pods/Gluon)
[![Platform](https://img.shields.io/cocoapods/p/Gluon.svg?style=flat)](https://cocoapods.org/pods/Gluon)
[![Version](https://img.shields.io/cocoapods/v/Tokamak.svg?style=flat)](https://cocoapods.org/pods/Tokamak)
[![License](https://img.shields.io/cocoapods/l/Tokamak.svg?style=flat)](https://cocoapods.org/pods/Tokamak)
[![Platform](https://img.shields.io/cocoapods/p/Tokamak.svg?style=flat)](https://cocoapods.org/pods/Tokamak)
-->
Gluon provides a declarative, testable and scalable API for building UI
Tokamak provides a declarative, testable and scalable API for building UI
components backed by fully native views. You can use it for your new iOS apps or
add to existing apps with little effort and without rewriting the rest of the
code or changing the app's overall architecture.
Gluon recreates [React Hooks API](https://reactjs.org/docs/hooks-intro.html)
Tokamak recreates [React Hooks API](https://reactjs.org/docs/hooks-intro.html)
improving it with Swift's strong type system, high performance and efficient
memory management thanks to being compiled to a native binary.
When compared to standard UIKit MVC or other patterns built on top of
it (MVVM, MVP, VIPER etc), Gluon provides:
it (MVVM, MVP, VIPER etc), Tokamak provides:
* **Declarative [DSL](https://en.wikipedia.org/wiki/Domain-specific_language)
for native UI**: no more conflicts caused by Storyboards, no template languages
@ -33,31 +33,31 @@ state changes.
* **Clean composable architecture**: components can be passed to other
components as children with an established API focused on code reuse. You can
easily embed Gluon components within your existing UIKit code or vice versa:
expose that code as Gluon components. No need to decide whether you should
easily embed Tokamak components within your existing UIKit code or vice versa:
expose that code as Tokamak components. No need to decide whether you should
subclass `UIView` or `UIViewController` to make your UI composable.
* **Off-screen rendering for unit-tests**: no need to maintain slow and flaky UI
tests that render everything on a simulator screen and simulate actual touch
events. All of UI logic written with Gluon can be tested off-screen with tests
events. All of UI logic written with Tokamak can be tested off-screen with tests
completing in a fraction of a second. If your UI logic doesn't require any
code specific to `UIKit` (and Gluon provides helpers to achieve that) you can
code specific to `UIKit` (and Tokamak provides helpers to achieve that) you can
even run your UI-related unit-tests on Linux!
* **Platform-independent core**: our main goal is to eventually support as many
platforms as possible. Starting with iOS and UIKit, we plan to add renderers
for macOS/AppKit, WebAssembly/DOM and native Android in future versions. As
the core API is cross-platform, UI components written with Gluon won't need to
the core API is cross-platform, UI components written with Tokamak won't need to
change to become available on newly added platforms unless you need UI logic
specific to a device or OS.
* **Architecture proven to work**: React has been available for years and
gained a lot of traction and is still growing. We've seen so many apps
successfully rebuilt with it and heard positive feedback on React itself, but
a lot of complaints about overreliance on JavaScript. Gluon makes architecture
a lot of complaints about overreliance on JavaScript. Tokamak makes architecture
of React with its established patterns available to you in Swift.
_**Important:**_ Gluon is relatively stable at this point, as in not having any
_**Important:**_ Tokamak is relatively stable at this point, as in not having any
blocking or critical bugs that the maintainers are aware of. The core API of
`Component` and `Hooks` types is frozen, and there's a plenty of [standard
components](#standard-components) to start building useful apps. If in the
@ -86,12 +86,12 @@ Nevertheless, its important to note this can't always be achieved.
## Example code
An example of a Gluon component that binds a button to a label, embedded
An example of a Tokamak component that binds a button to a label, embedded
within an existing UIKit app, looks like this:
```swift
import Gluon
import GluonUIKit
import Tokamak
import TokamakUIKit
struct Counter: LeafComponent {
struct Props: Equatable {
@ -111,23 +111,23 @@ struct Counter: LeafComponent {
}
}
final class ViewController: GluonViewController {
final class ViewController: TokamakViewController {
override var node: AnyNode {
return Counter.node(.init(countFrom: 1))
}
}
```
![Counter component](GluonCounter.gif)
![Counter component](TokamakCounter.gif)
To run the example project, clone the repo, and run `pod install` from the
[`Example`](https://github.com/MaxDesiatov/Gluon/tree/master/Example) directory
first. Then you can open `Example/Gluon.xcworkspace` and run the main
executable target `Gluon-Example`.
[`Example`](https://github.com/MaxDesiatov/Tokamak/tree/master/Example) directory
first. Then you can open `Example/Tokamak.xcworkspace` and run the main
executable target `Tokamak-Example`.
## Fundamental concepts
We try to keep Gluon's API as simple as possible and the core algorithm with
We try to keep Tokamak's API as simple as possible and the core algorithm with
supporting protocols/structures currently fit in only ~600 lines of code. It's
all built upon a few basic concepts:
@ -154,7 +154,7 @@ struct Props: Equatable {
Sometimes "configuration" is described in a tree-like fashion. For example, a
list of views contains an array of subviews, which themselves can contain other
subviews. In Gluon this is called `Children`, which behave similar to `Props`,
subviews. In Tokamak this is called `Children`, which behave similar to `Props`,
but are important enough to be treated separately. `Children` are also immutable
and `Equatable`, which allows us to observe those for changes too.
@ -173,7 +173,7 @@ protocol Component {
(Don't worry if you don't know what `associatedtype` means, it's only a simple
requirement for components to provide these types and make them `Equatable`. If
you do know what a [PAT](https://www.youtube.com/watch?v=XWoNjiSPqI8) is, you
also shouldn't worry. 😄 Gluon's API is built specifically to hide "sharp edges"
also shouldn't worry. 😄 Tokamak's API is built specifically to hide "sharp edges"
of PATs from the public API and to make it easy to use without requiring
advanced knowledge of Swift. This is similar to what [Swift standard
library](https://developer.apple.com/documentation/swift/swift_standard_library/)
@ -183,20 +183,20 @@ has done, which is built on top of PATs but stays flexible and ergonomic).
A node is a container for `Props`, `Children` and a type conforming to
`Component` rendering this "configuration". If you're familiar with React, nodes
in Gluon correspond to [elements in
in Tokamak correspond to [elements in
React](https://reactjs.org/docs/glossary.html#elements). When `Children` is an
array of nodes, we can indirectly form a tree describing the app's UI.
Corollary, nodes are immutable and `Equatable`. You'd only need to use the
standard `AnyNode` type provided by Gluon:
standard `AnyNode` type provided by Tokamak:
```swift
struct AnyNode: Equatable {
// ... `Props` and `Children` stored here by Gluon as private properties
// ... `Props` and `Children` stored here by Tokamak as private properties
}
```
Here's an example of an array of nodes used as `Children` in the standard
`StackView` component provided by Gluon, which describe subviews of the stack
`StackView` component provided by Tokamak, which describe subviews of the stack
view.
```swift
@ -208,11 +208,11 @@ struct StackView: Component {
}
```
For every component Gluon provides an easy way to create a node for it
For every component Tokamak provides an easy way to create a node for it
coupled with given props and children:
```swift
// this extension and its `node` function are defined for you by Gluon
// this extension and its `node` function are defined for you by Tokamak
extension Component {
static func node(_ props: Props, _ children: Children) -> AnyNode {
// ...
@ -235,28 +235,28 @@ function](https://en.wikipedia.org/wiki/Pure_function) taking `Props` and
```swift
protocol PureComponent: Component {
// this is the function you define for your own components,
// Gluon takes care of the rest
// Tokamak takes care of the rest
static func render(props: Props, children: Children) -> AnyNode
}
```
Gluon calls `render` on your components when their `Props` or `Children` passed
Tokamak calls `render` on your components when their `Props` or `Children` passed
from parent components change. You don't ever need to call `render` yourself,
pass different values as props or children to nodes returned from parent
`render` and Gluon will update only those views on screen that need to be
`render` and Tokamak will update only those views on screen that need to be
updated.
Note that `render` function does not return *other components*, it returns
*nodes* that *describe other components*. It's a very important distiction,
which allows Gluon to stay efficient and to avoid updating deep trees of
which allows Tokamak to stay efficient and to avoid updating deep trees of
components.
Some of your components wouldn't need `Children` at all, for those Gluon
Some of your components wouldn't need `Children` at all, for those Tokamak
provides a `PureLeafComponent` helper protocol that allows you to implement only
a single function with a simpler signature:
```swift
// Helpers provided by Gluon:
// Helpers provided by Tokamak:
struct Null: Equatable {}
@ -278,7 +278,7 @@ Quite frequently you need components that are stateful or cause some other
`Hooks` provide a clear separation between declarative components and other
imperative code, such as state management, file I/O, networking etc.
The standard protocol `CompositeComponent` in Gluon gets `Hooks` injected into
The standard protocol `CompositeComponent` in Tokamak gets `Hooks` injected into
`render` function as an argument.
```swift
@ -295,7 +295,7 @@ In fact, the standard `PureComponent` is a special case of a
`CompositeComponent` that doesn't use `Hooks` during rendering:
```swift
// Helpers provided by Gluon:
// Helpers provided by Tokamak:
protocol PureComponent: CompositeComponent {
static func render(props: Props, children: Children) -> AnyNode
@ -351,7 +351,7 @@ struct State<T> {
```
Note that `set` functions are not `mutating`, they never update the component's
state in-place synchronously, but only schedule an update with Gluon at a later
state in-place synchronously, but only schedule an update with Tokamak at a later
time. A call to `render` is only scheduled on the component that obtained this
state with `hooks.state`.
@ -379,10 +379,10 @@ ones: just add it to your `extension Hooks` wherever works best for you.
### Renderers
When mapping Gluon's architecture to what's previosly been established in iOS,
When mapping Tokamak's architecture to what's previosly been established in iOS,
`Component` corresponds to a "view-model" layer, while `Hooks` provide a reusable
"controller" layer. A `Renderer` is a "view" layer in these terms, but it's
fully managed by Gluon. Not only this greatly simplifies the code of your
fully managed by Tokamak. Not only this greatly simplifies the code of your
components and allows you to make it declarative, it also completely decouples
platform-specific code. Note that `Counter` component above doesn't contain a
single type from `UIKit` module, although the component itself is passed to a
@ -399,11 +399,11 @@ requiring [Marzipan](https://www.imore.com/marzipan)!
### Standard components
Gluon provides a few basic components that you can reuse in your apps. On iOS
Tokamak provides a few basic components that you can reuse in your apps. On iOS
these components are rendered to corresponding `UIView` subclasses that you're
already used to, e.g. `Button` component is rendered as `UIButton`, `Label` as
`UILabel` etc. Check out [the complete up to date
list](https://github.com/MaxDesiatov/Gluon/blob/master/gluon.sh/StandardComponents.md)
list](https://github.com/MaxDesiatov/Tokamak/blob/master/tokamakui.org/StandardComponents.md)
for more info.
## Requirements
@ -431,7 +431,7 @@ Navigate to the project directory and create `Podfile` with the following comman
$ pod install
```
Inside of your `Podfile`, specify the `Gluon` pod:
Inside of your `Podfile`, specify the `Tokamak` pod:
```ruby
# Uncomment the next line to define a global platform for your project
@ -442,7 +442,7 @@ target 'YourApp' do
use_frameworks!
# Pods for Test
pod 'Gluon', '~> 0.1'
pod 'Tokamak', '~> 0.1'
end
```
@ -480,14 +480,14 @@ React](https://reactjs.org/docs/hooks-rules.html):
4. Don't call Hooks from any function that's not a `static func render` on a
component or not a custom Hook. ⚠️
In a future version Gluon will provide a linter able to catch violations of
In a future version Tokamak will provide a linter able to catch violations of
Rules of Hooks at compile time.
### Why do Rules of Hooks exist?
[Same as
React](https://reactjs.org/docs/hooks-faq.html#how-does-react-associate-hook-calls-with-components),
Gluon maintains an array of "memory cells" for every stateful component to hold
Tokamak maintains an array of "memory cells" for every stateful component to hold
the actual state. It needs to distinguish one Hooks call from another to map
those to corresponding cells during execution of a `render` function of your
component. Consider this:
@ -522,7 +522,7 @@ struct ConditionalCounter: LeafComponent {
}
```
How does Gluon renderer know on subsequent calls to `DoubleCounter.render` which
How does Tokamak renderer know on subsequent calls to `DoubleCounter.render` which
state you're actually addressing? It relies on the order of those calls, so if
the order dynamically changes from one rendering to another, you could
unexpectedly get a value of the one state cell, when you expected a value of
@ -558,7 +558,7 @@ struct ConditionalCounter: LeafComponent {
}
```
### Why does Gluon use value types and protocols instead of classes?
### Why does Tokamak use value types and protocols instead of classes?
Swift developers focused on GUI might be used to classes thanks to abundance of
class hierarchies in `UIKit` and `AppKit` (although [benefits of composition
@ -572,8 +572,8 @@ Objective-C in mind, years before Swift became public and [protocol-oriented
patterns](https://developer.apple.com/videos/play/wwdc2015/408/) were
established.
One of the main goals of Gluon is to build a UI framework that feels native to
Swift. Gluon's API brings these benefits when compared to class-based APIs:
One of the main goals of Tokamak is to build a UI framework that feels native to
Swift. Tokamak's API brings these benefits when compared to class-based APIs:
- no need to [subclass `NSObject` to conform to commonly used
protocols](https://stackoverflow.com/questions/31754366/swift-my-custom-uitableviewdatasource-class-thinks-it-doesnt-conform-to-protoc);
@ -594,11 +594,11 @@ Swift. Gluon's API brings these benefits when compared to class-based APIs:
imperative code when needed: value types guarantee lack of unexpected
side effects in pure functions.
### Is there anything like [JSX](https://reactjs.org/docs/jsx-in-depth.html) available for Gluon?
### Is there anything like [JSX](https://reactjs.org/docs/jsx-in-depth.html) available for Tokamak?
At the moment the answer is no, but we find that Gluon's API allows you to
At the moment the answer is no, but we find that Tokamak's API allows you to
create nodes much more concisely when compared to [`React.createElement`
syntax](https://reactjs.org/docs/react-without-jsx.html). In fact, with Gluon's
syntax](https://reactjs.org/docs/react-without-jsx.html). In fact, with Tokamak's
`.node` API you don't need closing element tags you'd have to write with JSX.
E.g. compare this:
@ -614,12 +614,12 @@ to this:
We do agree that there's an overhead of `.init` for props and a requirement of
props initializer arguments to be ordered. For the latter, we have a helpful
convention in Gluon that all named arguments to props initializers should be
convention in Tokamak that all named arguments to props initializers should be
ordered alphabetically.
The main problem is that currently there's no easily extensible Swift parser or
a macro system available that would allow something like JSX to be used for
Gluon. As soon is it becomes easy to implement, we'd definitely consider it as
Tokamak. As soon is it becomes easy to implement, we'd definitely consider it as
an option.
### Why is `render` function `static` on `Component` protocol?
@ -661,7 +661,7 @@ struct Counter {
}
// Gluon does something like this internally for your components,
// Tokamak does something like this internally for your components,
// consider following a pseudocode:
let xComponent = Counter.self
let yComponent = OtherComponent.self
@ -716,9 +716,9 @@ state, while intended local state is managed with `Hooks`.
## Contributing
This project adheres to the [Contributor Covenant Code of
Conduct](https://github.com/MaxDesiatov/Gluon/blob/master/CODE_OF_CONDUCT.md).
Conduct](https://github.com/MaxDesiatov/Tokamak/blob/master/CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report
unacceptable behavior to conduct@gluon.sh.
unacceptable behavior to conduct@tokamakui.org.
## Maintainers
@ -727,6 +727,6 @@ Hodovaniuk](https://matvii.hodovani.uk)
## License
Gluon is available under the Apache 2.0 license. See the
[LICENSE](https://github.com/MaxDesiatov/Gluon/blob/master/LICENSE) file for
Tokamak is available under the Apache 2.0 license. See the
[LICENSE](https://github.com/MaxDesiatov/Tokamak/blob/master/LICENSE) file for
more info.

View File

@ -1,23 +0,0 @@
//
// Slider.swift
// Gluon
//
// Created by Max Desiatov on 29/12/2018.
//
import Gluon
import UIKit
final class GluonSlider: UISlider, Default, ValueStorage {
static var defaultValue: GluonSlider {
return GluonSlider()
}
}
extension Slider: UIValueComponent {
typealias Target = GluonSlider
static func update(valueBox: ValueControlBox<GluonSlider>,
_ props: Slider.Props,
_ children: Null) {}
}

View File

@ -1,23 +0,0 @@
//
// Stepper.swift
// Gluon
//
// Created by Matvii Hodovaniuk on 1/21/19.
//
import Gluon
import UIKit
final class GluonStepper: UIStepper, Default, ValueStorage {
static var defaultValue: GluonStepper {
return GluonStepper()
}
}
extension Stepper: UIValueComponent {
typealias Target = GluonStepper
static func update(valueBox: ValueControlBox<GluonStepper>,
_ props: Stepper.Props,
_ children: Null) {}
}

View File

@ -1,12 +1,12 @@
//
// AnyEquatable.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 06/11/2018.
//
/** Type-erased version of `Equatable` that allows you to compare values of
different types. Main use of `AnyEquatable` in Gluon is to wrap `Props` and
different types. Main use of `AnyEquatable` in Tokamak is to wrap `Props` and
`Children` before storing those in `AnyNode`.
Example:

View File

@ -1,6 +1,6 @@
//
// Node.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 30/11/2018.
//

View File

@ -1,13 +1,13 @@
//
// Component.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 07/10/2018.
//
/// Type-erased version of `HostComponent` to work around [PAT restrictions](
/// http://www.russbishop.net/swift-associated-types). Users
/// of Gluon shouldn't ever need to conform to this protocol directly, use
/// of Tokamak shouldn't ever need to conform to this protocol directly, use
/// `HostComponent` instead.
public protocol AnyHostComponent {}
@ -19,7 +19,7 @@ public protocol RefComponent: HostComponent {
/// Type-erased version of `CompositeComponent` to work around
/// [PAT restrictions](http://www.russbishop.net/swift-associated-types). Users
/// of Gluon shouldn't ever need to conform to this protocol directly, use
/// of Tokamak shouldn't ever need to conform to this protocol directly, use
/// `CompositeComponent` instead.
public protocol AnyCompositeComponent {
static func render(

View File

@ -1,6 +1,6 @@
//
// Alert.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 31/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Animated.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// Button.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/12/2018.
//

View File

@ -1,10 +1,12 @@
//
// DatePicker.swift
// Gluon
// Tokamak
//
// Created by Matvii Hodovaniuk on 2/4/19.
//
import Foundation
public struct DatePicker: HostComponent {
public struct Props: Equatable, ControlProps, StyleProps,
ValueControlProps {

View File

@ -1,6 +1,6 @@
//
// Label.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// ListView.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 21/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// NavigationController.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 06/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// SegmentedControl.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 05/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// Slider.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 29/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// StackView.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Stepper.swift
// Gluon
// Tokamak
//
// Created by Matvii Hodovaniuk on 1/21/19.
//

View File

@ -1,6 +1,6 @@
//
// Switch.swift
// Gluon
// Tokamak
//
// Created by Matvii Hodovaniuk on 1/21/19.
//

View File

@ -1,6 +1,6 @@
//
// View.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 29/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// ModalPresenter.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 31/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// NavigationItem.swift
// GluonUIKit
// TokamakUIKit
//
// Created by Max Desiatov on 04/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// NavigationPresenter.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 31/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Router.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 03/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// TabItem.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 04/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// TabPresenter.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 31/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Color.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 16/10/2018.
//

View File

@ -1,6 +1,6 @@
//
// Bottom.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Center.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// CenterX.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// CenterY.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Constraint.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 16/10/2018.
//

View File

@ -1,6 +1,6 @@
//
// Edges.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// FirstBaseline.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Height.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// LastBaseline.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Leading.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Left.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Right.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// SizeConstraint.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Top.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Trailing.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Width.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 02/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Event.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 04/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Insets.swift
// GluonUIKit
// TokamakUIKit
//
// Created by Max Desiatov on 17/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// LineBreakMode.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 14/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Rectangle.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 29/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Second.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 05/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// Style.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 31/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// TextAlignment.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 30/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// Default.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 16/11/2018.
//

View File

@ -1,6 +1,6 @@
//
// Effect.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 10/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Hooks.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 06/11/2018.
//

View File

@ -1,6 +1,6 @@
//
// Ref.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 09/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// State.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 09/02/2019.
//
@ -19,7 +19,7 @@ typealias Updater<T> = (inout T) -> ()
/** Note that `set` functions are not `mutating`, they never update the
component's state in-place synchronously, but only schedule an update with
Gluon at a later time. A call to `render` is only scheduled on the component
Tokamak at a later time. A call to `render` is only scheduled on the component
that obtained this state with `hooks.state`.
*/
public struct State<T> {

View File

@ -1,6 +1,6 @@
//
// MountedComponent.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 28/11/2018.
//

View File

@ -1,6 +1,6 @@
//
// MountedCompositeComponent.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 03/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// MountedHostComponent.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 03/12/2018.
//

View File

@ -1,6 +1,6 @@
//
// MountedNull.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 05/01/2019.
//

View File

@ -1,6 +1,6 @@
//
// Null.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 16/11/2018.
//

View File

@ -1,6 +1,6 @@
//
// UIKitRenderer.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 07/10/2018.
//

View File

@ -1,6 +1,6 @@
//
// StackReconciler.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 28/11/2018.
//

View File

@ -1,6 +1,6 @@
//
// Target.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 10/02/2019.
//

View File

@ -1,6 +1,6 @@
//
// Unique.swift
// Gluon
// Tokamak
//
// Created by Max Desiatov on 06/11/2018.
//

View File

@ -1,11 +1,11 @@
//
// TestRenderer.swift
// GluonTestRenderer
// TokamakTestRenderer
//
// Created by Max Desiatov on 21/12/2018.
//
import Gluon
import Tokamak
public final class TestRenderer: Renderer {
public private(set) var reconciler: StackReconciler<TestRenderer>?

View File

@ -1,11 +1,11 @@
//
// TestView.swift
// GluonTestRenderer
// TokamakTestRenderer
//
// Created by Max Desiatov on 18/12/2018.
//
import Gluon
import Tokamak
/// A class that `TestRenderer` uses as a target.
/// When rendering to a `TestView` instance it is possible

View File

@ -1,11 +1,11 @@
//
// ContainerViewController.swift
// GluonUIKit
// TokamakUIKit
//
// Created by Max Desiatov on 01/01/2019.
//
import Gluon
import Tokamak
import UIKit
final class ContainerViewController: UIViewController {

View File

@ -1,11 +1,11 @@
//
// ControlBox.swift
// GluonUIKit
// TokamakUIKit
//
// Created by Max Desiatov on 01/01/2019.
//
import Gluon
import Tokamak
import UIKit
final class Action {

View File

@ -1,14 +1,14 @@
//
// TableViewBox.swift
// GluonUIKit
// TokamakUIKit
//
// Created by Max Desiatov on 26/01/2019.
//
import Gluon
import Tokamak
import UIKit
final class GluonTableCell: UITableViewCell {
final class TokamakTableCell: UITableViewCell {
// FIXME: `component` has a strong reference to `box` through its own
// property `target`, should that be `weak` to break a potential reference
// cycle?
@ -62,11 +62,11 @@ private final class DataSource<T: CellProvider>: NSObject,
if let cell = tableView.dequeueReusableCell(
withIdentifier: id.rawValue
) as? GluonTableCell, let component = cell.component {
) as? TokamakTableCell, let component = cell.component {
renderer?.update(component: component, with: node)
return cell
} else {
let result = GluonTableCell(
let result = TokamakTableCell(
style: .default,
reuseIdentifier: id.rawValue
)
@ -96,13 +96,13 @@ private final class Delegate<T: CellProvider>: NSObject, UITableViewDelegate {
}
}
final class GluonTableView: UITableView, Default {
static var defaultValue: GluonTableView {
return GluonTableView()
final class TokamakTableView: UITableView, Default {
static var defaultValue: TokamakTableView {
return TokamakTableView()
}
}
final class TableViewBox<T: CellProvider>: ViewBox<GluonTableView> {
final class TableViewBox<T: CellProvider>: ViewBox<TokamakTableView> {
private let dataSource: DataSource<T>
// this delegate stays as a constant and doesn't create a reference cycle
@ -124,7 +124,7 @@ final class TableViewBox<T: CellProvider>: ViewBox<GluonTableView> {
}
init(
_ view: GluonTableView,
_ view: TokamakTableView,
_ viewController: UIViewController,
_ component: UIKitRenderer.MountedHost,
_ props: ListView<T>.Props,

Some files were not shown because too many files have changed in this diff Show More