From 71d09345b1f755dfc2ed2f8ce96c022220277616 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Wed, 9 Oct 2019 22:50:25 -0400 Subject: [PATCH 01/16] Set theme jekyll-theme-midnight --- docs/_config.yml | 1 + 1 file changed, 1 insertion(+) create mode 100644 docs/_config.yml diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 00000000..18854876 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-midnight \ No newline at end of file From 6ce455bee3f6b314b7c7444362654e5b3e227fea Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 7 Oct 2019 19:55:35 -0400 Subject: [PATCH 02/16] Bump version to 1.5.0 Signed-off-by: Joseph Mattiello --- CHANGELOG.md | 3 +-- Hero.podspec | 26 ++++++++++++++------------ 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 627b36ab..113a9f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,7 @@ The changelog for `Hero`. Also see the [releases](https://github.com/HeroTransit -------------------------------------- -## Upcoming release +## [1.5.0](https://github.com/HeroTransitions/Hero/releases/tag/1.5.0) ### Added @@ -26,7 +26,6 @@ The changelog for `Hero`. Also see the [releases](https://github.com/HeroTransit - Added support for Swift 4.2. [#534](https://github.com/HeroTransitions/Hero/pull/534) by [@rennarda](https://github.com/rennarda) - ## [1.3.1](https://github.com/HeroTransitions/Hero/releases/tag/1.3.1) ### Fixed diff --git a/Hero.podspec b/Hero.podspec index 0975521e..3812e485 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -1,22 +1,24 @@ +# frozen_string_literal: true + Pod::Spec.new do |s| - s.name = "Hero" - s.version = "1.4.0" - s.summary = "Elegant transition library for iOS" + s.name = 'Hero' + s.version = '1.5.0' + s.summary = 'Elegant transition library for iOS' s.description = <<-DESC Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit's cumbersome transition APIs. Making custom transitions an easy task for developers. - DESC + DESC - s.homepage = "https://github.com/HeroTransitions/Hero" - s.screenshots = "https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true" + s.homepage = 'https://github.com/HeroTransitions/Hero' + s.screenshots = 'https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true' s.license = 'MIT' - s.author = { "Luke" => "lzhaoyilun@gmail.com" } - s.source = { :git => "https://github.com/HeroTransitions/Hero.git", :tag => s.version.to_s } - - s.ios.deployment_target = '8.0' - s.tvos.deployment_target = '9.0' + s.author = { 'Luke' => 'lzhaoyilun@gmail.com' } + s.source = { git: 'https://github.com/HeroTransitions/Hero.git', tag: s.version.to_s } + + s.ios.deployment_target = '8.0' + s.tvos.deployment_target = '9.0' - s.ios.frameworks = 'UIKit', 'Foundation' + s.ios.frameworks = 'UIKit', 'Foundation' s.requires_arc = true From 98f0a8c381914a16f43e60864495dbdf355969cd Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 7 Oct 2019 22:16:05 -0400 Subject: [PATCH 03/16] Docs - Update jazzy config Signed-off-by: Joseph Mattiello --- .jazzy.yaml | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/.jazzy.yaml b/.jazzy.yaml index a30426bc..d523f684 100644 --- a/.jazzy.yaml +++ b/.jazzy.yaml @@ -1,8 +1,27 @@ +# ---- About ---- module: Hero -author: Luke Zhao -author_url: http://lkzhao.com -github_url: https://github.com/lkzhao/Hero -swift_version: 3.0.2 -source_directory: Examples +module_version: 1.5.0 +author: HeroTransitions readme: README.md -theme: fullwidth \ No newline at end of file +copyright: 'See [license](https://github.com/HeroTransitions/Hero/blob/develop/LICENSE) for more details.' + +# ---- URLs ---- +author_url: https://herotransitions.github.io/ +dash_url: https://herotransitions.github.io/docsets/ScreenKitFramework.xml +github_url: https://github.com/HeroTransitions/Hero +github_file_prefix: https://github.com/HeroTransitions/Hero/tree/version/1.5.0/ + +# ---- Sources ---- +podspec: Hero.podspec + +# ---- Generation ---- +clean: true +output: docs +min_acl: public +hide_documentation_coverage: false +skip_undocumented: false +objc: false +swift_version: 5.0.1 + +# ---- Formatting ---- +theme: fullwidth From e9179f013c85feb8bc186177b6ec798bae654202 Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 7 Oct 2019 22:16:26 -0400 Subject: [PATCH 04/16] Docs - Run jazzy against new spec Signed-off-by: Joseph Mattiello --- docs/ChangeLog.md | 193 - docs/Classes.html | 821 +++ docs/Classes/BinaryOpNode.html | 388 ++ docs/Classes/CallNode.html | 358 ++ docs/Classes/ExprNode.html | 387 ++ docs/Classes/FunctionNode.html | 388 ++ docs/Classes/Hero.html | 306 ++ docs/Classes/HeroContext.html | 618 +++ docs/Classes/HeroDebugPlugin.html | 373 ++ docs/Classes/HeroExtension.html | 895 ++++ docs/Classes/HeroModifier.html | 2650 ++++++++++ docs/Classes/HeroPlugin.html | 945 ++++ docs/Classes/HeroTransition.html | 1706 +++++++ docs/Classes/Lexer.html | 328 ++ docs/Classes/NumberNode.html | 358 ++ docs/Classes/Parser.html | 328 ++ docs/Classes/PrototypeNode.html | 358 ++ docs/Classes/VariableNode.html | 298 ++ docs/ContributionGuide.md | 24 - docs/CoordinateSpace.md | 21 - docs/DefaultAnimations.md | 57 - docs/Enums.html | 534 ++ docs/Enums/CascadeDirection.html | 508 ++ docs/Enums/HeroCoordinateSpace.html | 328 ++ docs/Enums/HeroDefaultAnimationType.html | 844 ++++ .../HeroDefaultAnimationType/Direction.html | 478 ++ .../HeroDefaultAnimationType/Strategy.html | 358 ++ docs/Enums/HeroSnapshotType.html | 393 ++ docs/Enums/HeroTransitionState.html | 418 ++ docs/Enums/HeroViewOrderingStrategy.html | 358 ++ docs/Enums/ParseError.html | 448 ++ docs/Enums/Token.html | 448 ++ docs/Extensions.html | 548 ++ docs/Extensions/CAMediaTimingFunction.html | 567 +++ docs/Extensions/CATransform3D.html | 296 ++ docs/Extensions/HeroDebugView.html | 279 ++ docs/Extensions/String.html | 297 ++ docs/Extensions/UINavigationController.html | 279 ++ docs/Extensions/UITabBarController.html | 328 ++ docs/Extensions/UIView.html | 421 ++ docs/Extensions/UIViewController.html | 636 +++ docs/Functions.html | 292 ++ docs/HeroModifiers.md | 90 - docs/InteractiveTransition.md | 91 - docs/NavigationHelpers.md | 52 - docs/Protocols.html | 531 ++ docs/Protocols/HeroAnimator.html | 508 ++ docs/Protocols/HeroCompatible.html | 336 ++ docs/Protocols/HeroCustomSnapshotView.html | 298 ++ docs/Protocols/HeroPreprocessor.html | 328 ++ .../Protocols/HeroProgressUpdateObserver.html | 298 ++ docs/Protocols/HeroStringConvertible.html | 298 ++ docs/Protocols/HeroTransitionDelegate.html | 328 ++ .../Protocols/HeroViewControllerDelegate.html | 548 ++ docs/README.md | 18 - docs/SnapshotTypes.md | 22 - docs/Structs.html | 328 ++ docs/Structs/HeroConditionalContext.html | 658 +++ docs/Structs/HeroTargetState.html | 1444 ++++++ docs/UsageGuide.md | 58 - docs/badge.svg | 28 + docs/css/highlight.css | 200 + docs/css/jazzy.css | 378 ++ docs/docsets/Hero.docset/Contents/Info.plist | 20 + .../Contents/Resources/Documents/Classes.html | 821 +++ .../Documents/Classes/BinaryOpNode.html | 388 ++ .../Resources/Documents/Classes/CallNode.html | 358 ++ .../Resources/Documents/Classes/ExprNode.html | 387 ++ .../Documents/Classes/FunctionNode.html | 388 ++ .../Resources/Documents/Classes/Hero.html | 306 ++ .../Documents/Classes/HeroContext.html | 618 +++ .../Documents/Classes/HeroDebugPlugin.html | 373 ++ .../Documents/Classes/HeroExtension.html | 895 ++++ .../Documents/Classes/HeroModifier.html | 2650 ++++++++++ .../Documents/Classes/HeroPlugin.html | 945 ++++ .../Documents/Classes/HeroTransition.html | 1706 +++++++ .../Resources/Documents/Classes/Lexer.html | 328 ++ .../Documents/Classes/NumberNode.html | 358 ++ .../Resources/Documents/Classes/Parser.html | 328 ++ .../Documents/Classes/PrototypeNode.html | 358 ++ .../Documents/Classes/VariableNode.html | 298 ++ .../Contents/Resources/Documents/Enums.html | 534 ++ .../Documents/Enums/CascadeDirection.html | 508 ++ .../Documents/Enums/HeroCoordinateSpace.html | 328 ++ .../Enums/HeroDefaultAnimationType.html | 844 ++++ .../HeroDefaultAnimationType/Direction.html | 478 ++ .../HeroDefaultAnimationType/Strategy.html | 358 ++ .../Documents/Enums/HeroSnapshotType.html | 393 ++ .../Documents/Enums/HeroTransitionState.html | 418 ++ .../Enums/HeroViewOrderingStrategy.html | 358 ++ .../Resources/Documents/Enums/ParseError.html | 448 ++ .../Resources/Documents/Enums/Token.html | 448 ++ .../Resources/Documents/Extensions.html | 548 ++ .../Extensions/CAMediaTimingFunction.html | 567 +++ .../Documents/Extensions/CATransform3D.html | 296 ++ .../Documents/Extensions/HeroDebugView.html | 279 ++ .../Documents/Extensions/String.html | 297 ++ .../Extensions/UINavigationController.html | 279 ++ .../Extensions/UITabBarController.html | 328 ++ .../Documents/Extensions/UIView.html | 421 ++ .../Extensions/UIViewController.html | 636 +++ .../Resources/Documents/Functions.html | 292 ++ .../Resources/Documents/Protocols.html | 531 ++ .../Documents/Protocols/HeroAnimator.html | 508 ++ .../Documents/Protocols/HeroCompatible.html | 336 ++ .../Protocols/HeroCustomSnapshotView.html | 298 ++ .../Documents/Protocols/HeroPreprocessor.html | 328 ++ .../Protocols/HeroProgressUpdateObserver.html | 298 ++ .../Protocols/HeroStringConvertible.html | 298 ++ .../Protocols/HeroTransitionDelegate.html | 328 ++ .../Protocols/HeroViewControllerDelegate.html | 548 ++ .../Contents/Resources/Documents/Structs.html | 328 ++ .../Structs/HeroConditionalContext.html | 658 +++ .../Documents/Structs/HeroTargetState.html | 1444 ++++++ .../Resources/Documents/css/highlight.css | 200 + .../Resources/Documents/css/jazzy.css | 378 ++ .../Resources/Documents/img/carat.png | Bin 0 -> 274 bytes .../Contents/Resources/Documents/img/dash.png | Bin 0 -> 1338 bytes .../Contents/Resources/Documents/img/gh.png | Bin 0 -> 1571 bytes .../Resources/Documents/img/spinner.gif | Bin 0 -> 1849 bytes .../Contents/Resources/Documents/index.html | 398 ++ .../Contents/Resources/Documents/js/jazzy.js | 59 + .../Resources/Documents/js/jazzy.search.js | 70 + .../Resources/Documents/js/jquery.min.js | 2 + .../Resources/Documents/js/lunr.min.js | 1 + .../Documents/js/typeahead.jquery.js | 1674 +++++++ .../Contents/Resources/Documents/search.json | 1 + .../Contents/Resources/docSet.dsidx | Bin 0 -> 114688 bytes docs/docsets/Hero.tgz | Bin 0 -> 156873 bytes docs/img/carat.png | Bin 0 -> 274 bytes docs/img/dash.png | Bin 0 -> 1338 bytes docs/img/gh.png | Bin 0 -> 1571 bytes docs/img/spinner.gif | Bin 0 -> 1849 bytes docs/index.html | 398 ++ docs/js/jazzy.js | 59 + docs/js/jazzy.search.js | 70 + docs/js/jquery.min.js | 2 + docs/js/lunr.min.js | 1 + docs/js/typeahead.jquery.js | 1674 +++++++ docs/search.json | 1 + docs/undocumented.json | 4464 +++++++++++++++++ 141 files changed, 63010 insertions(+), 626 deletions(-) delete mode 100644 docs/ChangeLog.md create mode 100644 docs/Classes.html create mode 100644 docs/Classes/BinaryOpNode.html create mode 100644 docs/Classes/CallNode.html create mode 100644 docs/Classes/ExprNode.html create mode 100644 docs/Classes/FunctionNode.html create mode 100644 docs/Classes/Hero.html create mode 100644 docs/Classes/HeroContext.html create mode 100644 docs/Classes/HeroDebugPlugin.html create mode 100644 docs/Classes/HeroExtension.html create mode 100644 docs/Classes/HeroModifier.html create mode 100644 docs/Classes/HeroPlugin.html create mode 100644 docs/Classes/HeroTransition.html create mode 100644 docs/Classes/Lexer.html create mode 100644 docs/Classes/NumberNode.html create mode 100644 docs/Classes/Parser.html create mode 100644 docs/Classes/PrototypeNode.html create mode 100644 docs/Classes/VariableNode.html delete mode 100644 docs/ContributionGuide.md delete mode 100644 docs/CoordinateSpace.md delete mode 100644 docs/DefaultAnimations.md create mode 100644 docs/Enums.html create mode 100644 docs/Enums/CascadeDirection.html create mode 100644 docs/Enums/HeroCoordinateSpace.html create mode 100644 docs/Enums/HeroDefaultAnimationType.html create mode 100644 docs/Enums/HeroDefaultAnimationType/Direction.html create mode 100644 docs/Enums/HeroDefaultAnimationType/Strategy.html create mode 100644 docs/Enums/HeroSnapshotType.html create mode 100644 docs/Enums/HeroTransitionState.html create mode 100644 docs/Enums/HeroViewOrderingStrategy.html create mode 100644 docs/Enums/ParseError.html create mode 100644 docs/Enums/Token.html create mode 100644 docs/Extensions.html create mode 100644 docs/Extensions/CAMediaTimingFunction.html create mode 100644 docs/Extensions/CATransform3D.html create mode 100644 docs/Extensions/HeroDebugView.html create mode 100644 docs/Extensions/String.html create mode 100644 docs/Extensions/UINavigationController.html create mode 100644 docs/Extensions/UITabBarController.html create mode 100644 docs/Extensions/UIView.html create mode 100644 docs/Extensions/UIViewController.html create mode 100644 docs/Functions.html delete mode 100644 docs/HeroModifiers.md delete mode 100644 docs/InteractiveTransition.md delete mode 100644 docs/NavigationHelpers.md create mode 100644 docs/Protocols.html create mode 100644 docs/Protocols/HeroAnimator.html create mode 100644 docs/Protocols/HeroCompatible.html create mode 100644 docs/Protocols/HeroCustomSnapshotView.html create mode 100644 docs/Protocols/HeroPreprocessor.html create mode 100644 docs/Protocols/HeroProgressUpdateObserver.html create mode 100644 docs/Protocols/HeroStringConvertible.html create mode 100644 docs/Protocols/HeroTransitionDelegate.html create mode 100644 docs/Protocols/HeroViewControllerDelegate.html delete mode 100644 docs/README.md delete mode 100644 docs/SnapshotTypes.md create mode 100644 docs/Structs.html create mode 100644 docs/Structs/HeroConditionalContext.html create mode 100644 docs/Structs/HeroTargetState.html delete mode 100644 docs/UsageGuide.md create mode 100644 docs/badge.svg create mode 100644 docs/css/highlight.css create mode 100644 docs/css/jazzy.css create mode 100644 docs/docsets/Hero.docset/Contents/Info.plist create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css create mode 100755 docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png create mode 100755 docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png create mode 100755 docs/docsets/Hero.docset/Contents/Resources/Documents/img/gh.png create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/img/spinner.gif create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/index.html create mode 100755 docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/js/lunr.min.js create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/js/typeahead.jquery.js create mode 100644 docs/docsets/Hero.docset/Contents/Resources/Documents/search.json create mode 100644 docs/docsets/Hero.docset/Contents/Resources/docSet.dsidx create mode 100644 docs/docsets/Hero.tgz create mode 100755 docs/img/carat.png create mode 100755 docs/img/dash.png create mode 100755 docs/img/gh.png create mode 100644 docs/img/spinner.gif create mode 100644 docs/index.html create mode 100755 docs/js/jazzy.js create mode 100644 docs/js/jazzy.search.js create mode 100644 docs/js/jquery.min.js create mode 100644 docs/js/lunr.min.js create mode 100644 docs/js/typeahead.jquery.js create mode 100644 docs/search.json create mode 100644 docs/undocumented.json diff --git a/docs/ChangeLog.md b/docs/ChangeLog.md deleted file mode 100644 index 7ed93124..00000000 --- a/docs/ChangeLog.md +++ /dev/null @@ -1,193 +0,0 @@ -## 0.3.2 -* new properties for specifying default animations -```swift -extension UIViewController { - /// default hero animation type for presenting & dismissing modally - public var heroModalAnimationType: HeroDefaultAnimationType -} -extension UINavigationController { - /// default hero animation type for push and pop within the navigation controller - public var heroNavigationAnimationType: HeroDefaultAnimationType -} -extension UITabBarController { - /// default hero animation type for switching tabs within the tab bar controller - public var heroTabBarAnimationType: HeroDefaultAnimationType -} -``` -* bug fixes https://github.com/lkzhao/Hero/issues/90 https://github.com/lkzhao/Hero/issues/85 -* basic support for animating UIVisualEffectView's effect property in iOS 10 - -## 0.3.0 -* support `.overFullScreen` modalPresentationStyle -* Implement many new default transitions. (fade was the only default transition before this update) - - * **.push(direction: Direction)** - * **.pull(direction: Direction)** - * **.cover(direction: Direction)** - * **.uncover(direction: Direction)** - * **.slide(direction: Direction)** - * **.zoomSlide(direction: Direction)** - * **.pageIn(direction: Direction)** - * **.pageOut(direction: Direction)** - -* a few new modifiers: - * **beginWith(modifiers:[HeroModifier])** - * **durationMatchLongest** - * **overlay(color:UIColor, opacity:CGFloat)** - * **masksToBounds(_ masksToBounds: Bool)** - -## 0.1.7 -* fix a zPosition regression introduced in 0.1.5 - -## 0.1.6 -* fix a regression introduced in 0.1.5 where animation for matched view might appear inconsistent. - -## 0.1.5 -* fix a bug where toViewController's delegate callbacks are not being called -* fix a bug where fromViewController's delegate callbacks receive incorrect parameters. -* Add **useScaleBasedSizeChange** modifier. - Force Hero use scale based size animation. This will convert all `.size` modifier into `.scale` modifier. - This is to help Hero animate layers that doesn't support bounds animation. Also gives better performance when animating. - -* fix a few bugs with `.useNoSnapshot` -* new video player example. - -## 0.1.4 -* fix a bug where changing orientation doesn't affect previous VC. https://github.com/lkzhao/Hero/issues/60 -* fix a bug where the presented view controller has incorrect frame. https://github.com/lkzhao/Hero/issues/63, https://github.com/lkzhao/Hero/issues/56 -* New **snapshot type** modifiers: - * **useOptimizedSnapshot** - - With this modifier, Hero will create snapshot optimized for different view type when animating. - For custom views or views with masking, useOptimizedSnapshot might create snapshots - that appear differently than the actual view. - In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization. - * **useNormalSnapshot** - - Create snapshot using snapshotView(afterScreenUpdates:). - * **useLayerRenderSnapshot** - - Create snapshot using layer.render(in: currentContext). - This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView). - * **useNoSnapshot** - - Force Hero to not create any snapshot when animating this view. Hence Hero will animate on the view directly. - This will mess up the view hierarchy. Therefore, view controllers have to rebuild its view structure after the transition finishes. - -* New navigation extension on UIViewController (mainly to support **unwinding**): - * **func hero_dismissViewController()** - - Dismiss the current view controller with animation. Will perform a navigationController.popViewController - if the current view controller is contained inside a navigationController. - * **func hero_replaceViewController(with:UIViewController)** - - Replace the current view controller with another VC on the navigation/modal stack. - * **func hero_unwindToRootViewController()** - - Unwind to the root view controller using Hero. - * **func hero_unwindToViewController(_ toViewController:)** - - Unwind to a specific view controller using Hero. - * **func hero_unwindToViewController(withSelector: Selector)** - - Unwind to a view controller that responds to the given selector using Hero. - * **func hero_unwindToViewController(withClass: AnyClass)** - - Unwind to a view controller with given class using Hero. - * **func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool)** - - Unwind to a view controller that the match block returns true on. - -## 0.1.3 -* Support **local coordinate space**. - - | Global coordinate space | Local (parent's) coordinate space | - | ---- | ---- | - | Animating views are **not** affected by parent views' attributes | Animating views are affected by parent views' attributes | - | When parent view moves, subviews that have its own modifiers do **not** move with the parent view. I.e. they are being taken out of the view hierarchy. | When parent view moves, subviews that have its own modifiers move along with the parent view. I.e. similar to how a view behave when its parent view moves. | - | Used for matched views & views with `source` modifier. Global is the default prior to 0.1.3 | Local is the default coordinate space after 0.1.3 | - -* New **useGlobalCoordinateSpace** modifier. Force the view to use global coordinate space. I.e. won't move with its parent view. - -## 0.1.2 -* `HeroPlugin` returning .infinity duration will be treated as wanting interactive transition -* few bug fixes. -* Update plugin API protocol to be more concise. - -## 0.1.1 -* Swift Package Manager Support, Thanks to [@mRs-](https://github.com/mRs-) -* Bug fixes #41, #36, & #38 -* Cleaner navigation bar animation. -* Better alpha animation support. - -## 0.1.0 -* add **HeroModifier** class and **HeroTargetState** struct - * **HeroModifier** is a swift enum-like class that provides the same functionality of the original string-based **heroModifiers**. - * **HeroTargetState** is a struct that holds view state informations. It can be build from **[HeroModifier]**. Mostly used internally and for building **HeroPlugin**. -* change the original `heroModifiers:String?` to `heroModifierString:String?` **(breaking change!)** -* add `heroModifiers:[HeroModifier]?` to **UIView** -* add a shared singleton `Hero` object for controlling the interactive transition. Which can be accessed by `Hero.shared` -* few changes to the protocols - * protocol **HeroAnimator** - - ```swift - func temporarilySet(view:UIView, to modifiers:HeroModifiers) - // to - func temporarilySet(view:UIView, targetState:HeroTargetState) - ``` - * protocol **HeroViewControllerDelegate** - - ```swift - @objc optional func wantInteractiveHeroTransition(context:HeroInteractiveContext) -> Bool - // to - @objc optional func wantInteractiveHeroTransition() -> Bool - ``` - * remove **HeroInteractiveContext** protocol -* update **HeroPlugin** to conform to the new protocols definitions. -* rename a few modifiers: - * **curve** → **timingFunction** - * **sourceID** → **source** - * **clearSubviewModifiers** → **ignoreSubviewModifiers** -* fix a bug with `heroReplaceViewController` API. [PR 30](https://github.com/lkzhao/Hero/pull/30) -* fix a bug with **UIStackView** not animating correctly. [PR 22](https://github.com/lkzhao/Hero/pull/22) -* add **recursive** `ignoreSubviewModifiers` modifier -* add **radial** & **inverseRadial** cascade: - - - -### To migrate from previous versions: - -Do a whole-project **find & replace**(cmd+option+shift+F) for: - - * **heroModifiers** → **heroModifierString** - * **curve** → **timingFunction** - * **sourceID** → **source** - * **clearSubviewModifiers** → **ignoreSubviewModifiers** - - Remember to also replace these inside the storyboard. In code, please migrate to the new type-safe `heroModifiers`. It provides better type-checking and more functionality. - -## 0.0.5 -* Add live injection example -* Make `snapshotView` available to all HeroAnimators. -* Add `heroWillStartTransition` & `heroDidEndTransition` callbacks to `HeroViewControllerDelegate` -* Fix animation for UIStackView https://github.com/lkzhao/Hero/pull/18 -* Smoother UIImageView animation for bounds change https://github.com/lkzhao/Hero/pull/16 - -## 0.0.4 -* Add Carthage support - -## 0.0.3 -* Cleaner resume animation after an interactive transition. -* plugin API: `seekTo(progress:Double)` changed to `seekTo(timePassed:TimeInterval)` -* plugin API: `resume(progress:Double, reverse:Bool)` changed to `resume(timePassed:TimeInterval, reverse:Bool)` -* provides dynamic duration by default. - [material design(duration & timing)](https://material.io/guidelines/motion/duration-easing.html#duration-easing-dynamic-durations) - -## 0.0.2 -* rename `clearSubviewClasses` to `clearSubviewModifiers`. was a naming mistake. -* set default animation to be CABasicAnimation with the **Standard Curve** from [material design (easing)](https://material.io/guidelines/motion/duration-easing.html#duration-easing-natural-easing-curves). -* add the new **arc** effect from [material design (movement)](https://material.io/guidelines/motion/movement.html#movement-movement-within-screen-bounds). -* add **arc** effect to **Basic**, **Menu**, & **ListToGrid** examples. -* add the ability to show arc path in the Debug Plugin. -* ignore `HeroModifiers` for source view when matched with a target view with the same `HeroID` -* some small optimization & bug fixes \ No newline at end of file diff --git a/docs/Classes.html b/docs/Classes.html new file mode 100644 index 00000000..39344cc0 --- /dev/null +++ b/docs/Classes.html @@ -0,0 +1,821 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
    +
  • +
    + + + + Lexer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Lexer
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + Parser + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Parser
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + HeroTransition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class HeroTransition : NSObject
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Hero + +
    +
    +
    +
    +
    +
    +

    The singleton class/object for controlling interactive transitions.

    +
    Hero.shared
    +
    +

    Use the following methods for controlling the interactive transition:

    +
    func update(progress:Double)
    +func end()
    +func cancel()
    +func apply(modifiers:[HeroModifier], to view:UIView)
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Hero : NSObject
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Classes/BinaryOpNode.html b/docs/Classes/BinaryOpNode.html new file mode 100644 index 00000000..3a440f25 --- /dev/null +++ b/docs/Classes/BinaryOpNode.html @@ -0,0 +1,388 @@ + + + + BinaryOpNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

BinaryOpNode

+
+
+
public class BinaryOpNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + lhs + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let lhs: ExprNode
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rhs + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rhs: ExprNode
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:lhs:rhs:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, lhs: ExprNode, rhs: ExprNode)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/CallNode.html b/docs/Classes/CallNode.html new file mode 100644 index 00000000..e9afa8ea --- /dev/null +++ b/docs/Classes/CallNode.html @@ -0,0 +1,358 @@ + + + + CallNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CallNode

+
+
+
public class CallNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: [ExprNode]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:arguments:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, arguments: [ExprNode])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/ExprNode.html b/docs/Classes/ExprNode.html new file mode 100644 index 00000000..a91c1514 --- /dev/null +++ b/docs/Classes/ExprNode.html @@ -0,0 +1,387 @@ + + + + ExprNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

ExprNode

+
+
+
public class ExprNode : CustomStringConvertible, Equatable
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + range + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var range: CountableRange<Int>
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/FunctionNode.html b/docs/Classes/FunctionNode.html new file mode 100644 index 00000000..c8350ea1 --- /dev/null +++ b/docs/Classes/FunctionNode.html @@ -0,0 +1,388 @@ + + + + FunctionNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

FunctionNode

+
+
+
public class FunctionNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Classes/Hero.html b/docs/Classes/Hero.html new file mode 100644 index 00000000..e3a4a05b --- /dev/null +++ b/docs/Classes/Hero.html @@ -0,0 +1,306 @@ + + + + Hero Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Hero

+
+
+
public class Hero : NSObject
+ +
+
+

The singleton class/object for controlling interactive transitions.

+
Hero.shared
+
+

Use the following methods for controlling the interactive transition:

+
func update(progress:Double)
+func end()
+func cancel()
+func apply(modifiers:[HeroModifier], to view:UIView)
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + shared + +
    +
    +
    +
    +
    +
    +

    Shared singleton object for controlling the transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var shared: HeroTransition
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/HeroContext.html b/docs/Classes/HeroContext.html new file mode 100644 index 00000000..a7482f4c --- /dev/null +++ b/docs/Classes/HeroContext.html @@ -0,0 +1,618 @@ + + + + HeroContext Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroContext

+
+
+
public class HeroContext
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + container + +
    +
    +
    +
    +
    +
    +

    The container holding all of the animating views

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let container: UIView
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViews + +
    +
    +
    +
    +
    +
    +

    A flattened list of all views from source ViewController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fromViews: [UIView]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViews + +
    +
    +
    +
    +
    +
    +

    A flattened list of all views from destination ViewController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var toViews: [UIView]
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + sourceView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sourceView(for heroID: String) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a source view matching the heroID, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + destinationView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func destinationView(for heroID: String) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a destination view matching the heroID, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + pairedView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func pairedView(for view: UIView) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a view with the same heroID, but on different view controller, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + snapshotView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func snapshotView(for view: UIView) -> UIView
    + +
    +
    +
    +

    Return Value

    +

    a snapshot view for animation

    +
    + +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(view: UIView) -> HeroTargetState? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + clean() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func clean()
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + hide(view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hide(view: UIView)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unhide(view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unhide(view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/HeroDebugPlugin.html b/docs/Classes/HeroDebugPlugin.html new file mode 100644 index 00000000..cb8e7adc --- /dev/null +++ b/docs/Classes/HeroDebugPlugin.html @@ -0,0 +1,373 @@ + + + + HeroDebugPlugin Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ + +
+ + + + diff --git a/docs/Classes/HeroExtension.html b/docs/Classes/HeroExtension.html new file mode 100644 index 00000000..3ba263ea --- /dev/null +++ b/docs/Classes/HeroExtension.html @@ -0,0 +1,895 @@ + + + + HeroExtension Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroExtension

+
+
+
public class HeroExtension<Base>
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + base + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let base: Base
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    ID is the identifier for the view. When doing a transition between two view controllers, +Hero will search through all the subviews for both view controllers and matches views with the same heroID.

    + +

    Whenever a pair is discovered, +Hero will automatically transit the views from source state to the destination state.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    isEnabled allows to specify whether a view and its subviews should be consider for animations. +If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabledForSubviews + +
    +
    +
    +
    +
    +
    +

    isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations. +If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabledForSubviews: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modifiers + +
    +
    +
    +
    +
    +
    +

    Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift for available modifiers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modifiers: [HeroModifier]? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modifierString + +
    +
    +
    +
    +
    +
    +

    modifierString** provides another way to set modifiers. It can be assigned through storyboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modifierString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + modalAnimationType + +
    +
    +
    +
    +
    +
    +

    default hero animation type for presenting & dismissing modally

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modalAnimationType: HeroDefaultAnimationType { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modalAnimationTypeString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Dismiss the current view controller with animation. Will perform a navigationController.popViewController +if the current view controller is contained inside a navigationController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func dismissViewController(completion: (() -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to the root view controller using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToRootViewController()
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a specific view controller using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(_ toViewController: UIViewController)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withSelector: Selector)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a view controller with given class using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withClass: AnyClass)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a view controller that the matchBlock returns true on.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withMatchBlock: (UIViewController) -> Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Replace the current view controller with another VC on the navigation/modal stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replaceViewController(with next: UIViewController, completion: (() -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/HeroModifier.html b/docs/Classes/HeroModifier.html new file mode 100644 index 00000000..6280f738 --- /dev/null +++ b/docs/Classes/HeroModifier.html @@ -0,0 +1,2650 @@ + + + + HeroModifier Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroModifier

+
+
+
public final class HeroModifier
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
    +
  • +
    + + + + beginWith(_:) + +
    +
    +
    +
    +
    +
    +

    Apply modifiers directly to the view at the start of the transition. +The modifiers supplied here won’t be animated. +For source views, modifiers are set directly at the beginning of the animation. +For destination views, they replace the target state (final appearance).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(_ modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + beginWith(modifiers:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + beginWith(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Use global coordinate space.

    + +

    When using global coordinate space. The view become a independent view that is not a subview of any view. +It won’t move when its parent view moves, and won’t be affected by parent view’s attributes.

    + +

    When a view is matched, this is automatically enabled. +The source modifier will also enable this.

    + +

    Global coordinate space is default for all views prior to version 0.1.3

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useGlobalCoordinateSpace: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    ignore all heroModifiers attributes for a view’s direct subviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var ignoreSubviewModifiers: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    ignore all heroModifiers attributes for a view’s subviews.

    + +
      +
    • recursive: if false, will only ignore direct subviews’ modifiers. default false.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func ignoreSubviewModifiers(recursive: Bool = false) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useOptimizedSnapshot + +
    +
    +
    +
    +
    +
    +

    Will create snapshot optimized for different view type. +For custom views or views with masking, useOptimizedSnapshot might create snapshots +that appear differently than the actual view. +In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.

    + +

    This modifier actually does nothing by itself since .useOptimizedSnapshot is the default.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useOptimizedSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useNormalSnapshot + +
    +
    +
    +
    +
    +
    +

    Create snapshot using snapshotView(afterScreenUpdates:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useNormalSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create snapshot using layer.render(in: currentContext). +This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useLayerRenderSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useNoSnapshot + +
    +
    +
    +
    +
    +
    +

    Force Hero to not create any snapshot when animating this view. +This will mess up the view hierarchy, therefore, view controllers have to rebuild +its view structure after the transition finishes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useNoSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceAnimate + +
    +
    +
    +
    +
    +
    +

    Force the view to animate.

    + +

    By default, Hero will not animate if the view is outside the screen bounds or if there is no animatable hero modifier, unless this modifier is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var forceAnimate: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier. +This is to help Hero animate layers that doesn’t support bounds animation. Also gives better performance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useScaleBasedSizeChange: HeroModifier
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> HeroModifier?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + fade + +
    +
    +
    +
    +
    +
    +

    Fade the view during transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var fade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceNonFade + +
    +
    +
    +
    +
    +
    +

    Force don’t fade view during transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var forceNonFade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + position(_:) + +
    +
    +
    +
    +
    +
    +

    Set the position for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func position(_ position: CGPoint) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + position + + +
    +

    position for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + size(_:) + +
    +
    +
    +
    +
    +
    +

    Set the size for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func size(_ size: CGSize) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + size + + +
    +

    size for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + transform(_:) + +
    +
    +
    +
    +
    +
    +

    Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func transform(_ t: CATransform3D) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + t + + +
    +

    the CATransform3D object

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + perspective(_:) + +
    +
    +
    +
    +
    +
    +

    Set the perspective on the transform. use in combination with the rotate modifier.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func perspective(_ perspective: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + perspective + + +
    +

    set the camera distance of the transform

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + scale(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Scale 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func scale(x: CGFloat = 1, y: CGFloat = 1, z: CGFloat = 1) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    scale factor on x axis, default 1

    +
    +
    + + y + + +
    +

    scale factor on y axis, default 1

    +
    +
    + + z + + +
    +

    scale factor on z axis, default 1

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + scale(_:) + +
    +
    +
    +
    +
    +
    +

    Scale in x & y axis

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func scale(_ xy: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + xy + + +
    +

    scale factor in both x & y axis

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + translate(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Translate 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func translate(x: CGFloat = 0, y: CGFloat = 0, z: CGFloat = 0) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    translation distance on x axis in display pixel, default 0

    +
    +
    + + y + + +
    +

    translation distance on y axis in display pixel, default 0

    +
    +
    + + z + + +
    +

    translation distance on z axis in display pixel, default 0

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + translate(_:z:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func translate(_ point: CGPoint, z: CGFloat = 0) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Rotate 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(x: CGFloat = 0, y: CGFloat = 0, z: CGFloat = 0) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    rotation on x axis in radian, default 0

    +
    +
    + + y + + +
    +

    rotation on y axis in radian, default 0

    +
    +
    + + z + + +
    +

    rotation on z axis in radian, default 0

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(_:z:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(_ point: CGPoint, z: CGFloat = 0) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(_:) + +
    +
    +
    +
    +
    +
    +

    Rotate 2d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(_ z: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + z + + +
    +

    rotation in radian

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + opacity(_:) + +
    +
    +
    +
    +
    +
    +

    Set the opacity for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func opacity(_ opacity: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + opacity + + +
    +

    opacity for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + backgroundColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the backgroundColor for the view to animate from/to.

    + +
      +
    • backgroundColor: backgroundColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func backgroundColor(_ backgroundColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cornerRadius(_:) + +
    +
    +
    +
    +
    +
    +

    Set the cornerRadius for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cornerRadius(_ cornerRadius: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + cornerRadius + + +
    +

    cornerRadius for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + zPosition(_:) + +
    +
    +
    +
    +
    +
    +

    Set the zPosition for the view to animate from/to.

    + +
      +
    • zPosition: zPosition for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func zPosition(_ zPosition: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsRect(_:) + +
    +
    +
    +
    +
    +
    +

    Set the contentsRect for the view to animate from/to.

    + +
      +
    • contentsRect: contentsRect for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func contentsRect(_ contentsRect: CGRect) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsScale(_:) + +
    +
    +
    +
    +
    +
    +

    Set the contentsScale for the view to animate from/to.

    + +
      +
    • contentsScale: contentsScale for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func contentsScale(_ contentsScale: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderWidth(_:) + +
    +
    +
    +
    +
    +
    +

    Set the borderWidth for the view to animate from/to.

    + +
      +
    • borderWidth: borderWidth for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func borderWidth(_ borderWidth: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the borderColor for the view to animate from/to.

    + +
      +
    • borderColor: borderColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func borderColor(_ borderColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowColor for the view to animate from/to.

    + +
      +
    • shadowColor: shadowColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowColor(_ shadowColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOpacity(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowOpacity for the view to animate from/to.

    + +
      +
    • shadowOpacity: shadowOpacity for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowOpacity(_ shadowOpacity: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOffset(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowOffset for the view to animate from/to.

    + +
      +
    • shadowOffset: shadowOffset for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowOffset(_ shadowOffset: CGSize) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowRadius(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowRadius for the view to animate from/to.

    + +
      +
    • shadowRadius: shadowRadius for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowRadius(_ shadowRadius: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowPath(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowPath for the view to animate from/to.

    + +
      +
    • shadowPath: shadowPath for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowPath(_ shadowPath: CGPath) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + masksToBounds(_:) + +
    +
    +
    +
    +
    +
    +

    Set the masksToBounds for the view to animate from/to.

    + +
      +
    • masksToBounds: masksToBounds for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func masksToBounds(_ masksToBounds: Bool) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create an overlay on the animating view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func overlay(color: UIColor, opacity: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + color + + +
    +

    color of the overlay

    +
    +
    + + opacity + + +
    +

    opacity of the overlay

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + duration(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.

    + +

    Note: a duration of .infinity means matching the duration of the longest animation. same as .durationMatchLongest

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func duration(_ duration: TimeInterval) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + duration + + +
    +

    duration of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + durationMatchLongest + +
    +
    +
    +
    +
    +
    +

    Sets the duration of the animation for a given view to match the longest animation of the transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var durationMatchLongest: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + delay(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the delay of the animation for a given view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func delay(_ delay: TimeInterval) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + delay + + +
    +

    delay of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + timingFunction(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func timingFunction(_ timingFunction: CAMediaTimingFunction) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + timingFunction + + +
    +

    timing function of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    (iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 9, *)
    +public static func spring(stiffness: CGFloat, damping: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + stiffness + + +
    +

    stiffness of the spring

    +
    +
    + + damping + + +
    +

    damping of the spring

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + source(heroID:) + +
    +
    +
    +
    +
    +
    +

    Transition from/to the state of the view with matching heroID +Will also force the view to use global coordinate space.

    + +

    The following layer properties will be animated from the given view.

    +
    position
    +bounds.size
    +cornerRadius
    +transform
    +shadowColor
    +shadowOpacity
    +shadowOffset
    +shadowRadius
    +shadowPath
    +
    + +

    Note that the following properties won’t be taken from the source view.

    +
    backgroundColor
    +borderWidth
    +borderColor
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func source(heroID: String) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + heroID + + +
    +

    the source view’s heroId.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc + +
    +
    +
    +
    +
    +
    +

    Works in combination with position modifier to apply a natural curve when moving to the destination.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var arc: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc(intensity:) + +
    +
    +
    +
    +
    +
    +

    Works in combination with position modifier to apply a natural curve when moving to the destination.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func arc(intensity: CGFloat = 1) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + intensity + + +
    +

    a value of 1 represent a downward natural curve ╰. a value of -1 represent a upward curve ╮. +default is 1.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + cascade + +
    +
    +
    +
    +
    +
    +

    Cascade applys increasing delay modifiers to subviews

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var cascade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Cascade applys increasing delay modifiers to subviews

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cascade(delta: TimeInterval = 0.02,
    +                           direction: CascadeDirection = .topToBottom,
    +                           delayMatchedViews: Bool = false) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + delta + + +
    +

    delay in between each animation

    +
    +
    + + direction + + +
    +

    cascade direction

    +
    +
    + + delayMatchedViews + + +
    +

    whether or not to delay matched subviews until all cascading animation have started

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + when(_:_:) + +
    +
    +
    +
    +
    +
    +

    Apply modifiers only if the condition return true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func when(_ condition: @escaping (HeroConditionalContext) -> Bool, _ modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + when(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func when(_ condition: @escaping (HeroConditionalContext) -> Bool, _ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenMatched(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenMatched(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenPresenting(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenPresenting(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenDismissing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenDismissing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenAppearing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenAppearing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenDisappearing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenDisappearing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/HeroPlugin.html b/docs/Classes/HeroPlugin.html new file mode 100644 index 00000000..7857f3ad --- /dev/null +++ b/docs/Classes/HeroPlugin.html @@ -0,0 +1,945 @@ + + + + HeroPlugin Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroPlugin

+
+
+
open class HeroPlugin : NSObject, HeroPreprocessor, HeroAnimator
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + hero + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak public var hero: HeroTransition!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + context + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var context: HeroContext! { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines whether or not to receive seekTo callback on every frame.

    + +

    Default is false.

    + +

    When requirePerFrameCallback is false, the plugin needs to start its own animations inside animate & resume +The seekTo method is only being called during an interactive transition.

    + +

    When requirePerFrameCallback is true, the plugin will receive seekTo callback on every animation frame. Hence it is possible for the plugin to do per-frame animations without implementing animate & resume

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var requirePerFrameCallback: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override required init()
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Called before any animation. +Override this method when you want to preprocess modifiers for views

    + +

    To check a view’s modifiers:

    +
    context[view]
    +context[view, "modifierName"]
    +
    + +

    To set a view’s modifiers:

    +
    context[view] = [("modifier1", ["parameter1"]), ("modifier2", [])]
    +context[view, "modifier1"] = ["parameter1", "parameter2"]
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func process(fromViews: [UIView], toViews: [UIView])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + fromViews + + +
    +

    A flattened list of all views from source ViewController

    +
    +
    + + toViews + + +
    +

    A flattened list of all views from destination ViewController

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func canAnimate(view: UIView, appearing: Bool) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + view + + +
    +

    the view to check whether or not the plugin can handle the animation

    +
    +
    + + appearing + + +
    +

    true if the view is appearing(i.e. a view in destination ViewController) +If return true, Hero won’t animate and won’t let any other plugins animate this view. +The view will also be hidden automatically during the animation.

    +
    +
    +
    +
    +

    Return Value

    +

    return true if the plugin can handle animating the view.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Perform the animation.

    + +

    Note: views in fromViews & toViews are hidden already. Unhide then if you need to take snapshots.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func animate(fromViews: [UIView], toViews: [UIView]) -> TimeInterval
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + fromViews + + +
    +

    A flattened list of all views from source ViewController (filtered by canAnimate)

    +
    +
    + + toViews + + +
    +

    A flattened list of all views from destination ViewController (filtered by canAnimate)

    +
    +
    +
    +
    +

    Return Value

    +

    The duration needed to complete the animation

    +
    + +
    +
    +
  • +
  • +
    + + + + clean() + +
    +
    +
    +
    +
    +
    +

    Called when all animations are completed.

    + +

    Should perform cleanup and release any reference

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func clean()
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + seekTo(timePassed:) + +
    +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when an interactive animation is in place +The plugin should pause the animation, and seek to the given progress

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func seekTo(timePassed: TimeInterval)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + timePassed + + +
    +

    time of the animation to seek to.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when an interactive animation is ended +The plugin should resume the animation.

    + +
      +
    • timePassed: will be the same value since last seekTo
    • +
    • reverse: a boolean value indicating whether or not the animation should reverse
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func resume(timePassed: TimeInterval, reverse: Bool) -> TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + apply(state:to:) + +
    +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when user wants to override animation modifiers during an interactive animation

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func apply(state: HeroTargetState, to view: UIView)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + state + + +
    +

    the target state to override

    +
    +
    + + view + + +
    +

    the view to override

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func changeTarget(state: HeroTargetState, isDestination: Bool, to view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/HeroTransition.html b/docs/Classes/HeroTransition.html new file mode 100644 index 00000000..e295f07c --- /dev/null +++ b/docs/Classes/HeroTransition.html @@ -0,0 +1,1706 @@ + + + + HeroTransition Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransition

+
+
+
open class HeroTransition : NSObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var delegate: HeroTransitionDelegate?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + defaultAnimation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var defaultAnimation: HeroDefaultAnimationType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + containerColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var containerColor: UIColor
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + viewOrderingStrategy + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewOrderingStrategy: HeroViewOrderingStrategy
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var defaultAnimationDirectionStrategy: HeroDefaultAnimationType.Strategy
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + state + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var state: HeroTransitionState { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTransitioning + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isTransitioning: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isPresenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var isPresenting: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + transitioning + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transitioning: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + presenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var presenting: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + container + +
    +
    +
    +
    +
    +
    +

    container we created to hold all animating views, will be a subview of the +transitionContainer when transitioning

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var container: UIView!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViewController + +
    +
    +
    +
    +
    +
    +

    destination view controller

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var toViewController: UIViewController?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViewController + +
    +
    +
    +
    +
    +
    +

    source view controller

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var fromViewController: UIViewController?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + context + +
    +
    +
    +
    +
    +
    +

    context object holding transition informations

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var context: HeroContext!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + interactive + +
    +
    +
    +
    +
    +
    +

    whether or not we are handling transition interactively

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var interactive: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + totalDuration + +
    +
    +
    +
    +
    +
    +

    max duration needed by the animators

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var totalDuration: TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + progress + +
    +
    +
    +
    +
    +
    +

    progress of the current transition. 0 if no transition is happening

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var progress: Double { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override init()
    + +
    +
    + +
    +
    +
  • +
+
+
+ + +
+
+
    +
  • +
    + + + + animate() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func animate()
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(from: UIViewController, to: UIViewController, in view: UIView, completion: ((Bool) -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + update(_:) + +
    +
    +
    +
    +
    +
    +

    Update the progress for the interactive transition.

    + +
      +
    • progress: the current progress, must be between 0…1
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func update(_ percentageComplete: CGFloat)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + finish(animate:) + +
    +
    +
    +
    +
    +
    +

    Finish the interactive transition. +Will stop the interactive transition and animate from the +current state to the end state

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func finish(animate: Bool = true)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cancel(animate:) + +
    +
    +
    +
    +
    +
    +

    Cancel the interactive transition. +Will stop the interactive transition and animate from the +current state to the beginning state

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cancel(animate: Bool = true)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + apply(modifiers:to:) + +
    +
    +
    +
    +
    +
    +

    Override modifiers during an interactive animation.

    + +

    For example:

    + +

    Hero.shared.apply([.position(x:50, y:50)], to:view)

    + +

    will set the view’s position to 50, 50

    + +
      +
    • modifiers: the modifiers to override
    • +
    • view: the view to override to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func apply(modifiers: [HeroModifier], to view: UIView)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Override target state during an interactive animation.

    + +

    For example:

    + +

    Hero.shared.changeTarget([.position(x:50, y:50)], to:view)

    + +

    will animate the view’s position to 50, 50 once finish(animate:) is called

    + +
      +
    • modifiers: the modifiers to override
    • +
    • isDestination: if false, it changes the starting state
    • +
    • view: the view to override to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func changeTarget(modifiers: [HeroModifier], isDestination: Bool = true, to view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + start() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func start()
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func interactionControllerForPresentation(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animateTransition(using context: UIViewControllerContextTransitioning)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + animationEnded(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationEnded(_ transitionCompleted: Bool)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + wantsInteractiveStart + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wantsInteractiveStart: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func startInteractiveTransition(_ transitionContext: UIViewControllerContextTransitioning)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/Lexer.html b/docs/Classes/Lexer.html new file mode 100644 index 00000000..393639ce --- /dev/null +++ b/docs/Classes/Lexer.html @@ -0,0 +1,328 @@ + + + + Lexer Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Lexer

+
+
+
public class Lexer
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(input:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(input: String)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + tokenize() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tokenize() -> [Token]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/NumberNode.html b/docs/Classes/NumberNode.html new file mode 100644 index 00000000..7f87ad22 --- /dev/null +++ b/docs/Classes/NumberNode.html @@ -0,0 +1,358 @@ + + + + NumberNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

NumberNode

+
+
+
public class NumberNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let value: Float
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(value:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(value: Float)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/Parser.html b/docs/Classes/Parser.html new file mode 100644 index 00000000..e1031b72 --- /dev/null +++ b/docs/Classes/Parser.html @@ -0,0 +1,328 @@ + + + + Parser Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Parser

+
+
+
public class Parser
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(tokens:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(tokens: [Token])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parse() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse() throws -> [ExprNode]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/PrototypeNode.html b/docs/Classes/PrototypeNode.html new file mode 100644 index 00000000..1f372c9b --- /dev/null +++ b/docs/Classes/PrototypeNode.html @@ -0,0 +1,358 @@ + + + + PrototypeNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

PrototypeNode

+
+
+
public class PrototypeNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + argumentNames + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let argumentNames: [String]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, argumentNames: [String])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Classes/VariableNode.html b/docs/Classes/VariableNode.html new file mode 100644 index 00000000..a66afe2e --- /dev/null +++ b/docs/Classes/VariableNode.html @@ -0,0 +1,298 @@ + + + + VariableNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

VariableNode

+
+
+
public class VariableNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/ContributionGuide.md b/docs/ContributionGuide.md deleted file mode 100644 index 05072c55..00000000 --- a/docs/ContributionGuide.md +++ /dev/null @@ -1,24 +0,0 @@ -# Issues -If you run into problems, please open an issue. - -When filling bugs, we can best help you if you include the following: - -1. Screenshot of video of what happened. -2. Description of what suppose to happen. -3. An example project would be nice. - - -# PR -#### Before you do any work to the library. Be sure to create an issue first!! - -We welcome pull requests. By contributing to Hero you agree that your contributions will be licensed under its MIT license. Your work is appreciated! - -But before you do any real work, especially framework changes, check if there is any existing issues. Some people might be working on the issues already. For API changes, we need detailed discussion before continuing. - -# Ways you can help -* Help us test the latest master branch. -* Grab existing issues. (Checkout the project tab for todos, make sure you reply to the issue to let us know that you have started working on it.) - -# Code Style -* 2 space indent -* follow [Swift Style Guide](https://github.com/raywenderlich/swift-style-guide) as much as possible. \ No newline at end of file diff --git a/docs/CoordinateSpace.md b/docs/CoordinateSpace.md deleted file mode 100644 index 5da6bd25..00000000 --- a/docs/CoordinateSpace.md +++ /dev/null @@ -1,21 +0,0 @@ -### Global Coordinate Space (default before 0.1.3) - -Animating views are **not** affected by parent views' attributes. Does not move with the parent view. I.e. They are being taken out of the view hierarchy once heroModifiers are applied. Use `useGlobalCoordinateSpace` modifier to force this behavior after 0.1.3. - - - -### Local Coordinate Space (default after 0.1.3) - -Animating views moves along with its parent view. Note that when a view is matched, or when `source` or `useGlobalCoordinateSpace` modifiers are used, the view will go back to global coordinate space. - - - -For the examples above, the following heroModifiers are applied. - -```swift -greyView.heroModifiers = [.translate(y:100)] -blackView.heroModifiers = nil -redView.heroModifiers = [.translate(x:50)] -``` - -When using local coordinate space, the view is contained inside a global coordinate spaced view. Other global spaced view might appear on top of these local spaced views. If you want a view to appear on top of another global spaced view, you will have to change it to global spaced as well by using the `useGlobalCoordinateSpace` modifier. \ No newline at end of file diff --git a/docs/DefaultAnimations.md b/docs/DefaultAnimations.md deleted file mode 100644 index dcae74f6..00000000 --- a/docs/DefaultAnimations.md +++ /dev/null @@ -1,57 +0,0 @@ -# Default Animations - -Starting with **0.3.0**. Hero provides several default transitions. These can also be customized & combined with your custom `heroID` & `heroModifiers`. Makes transitions even easier to implement. - -       - - -## Methods for changing the default animations - -Use the following properties to change default animation type for different presentation methods. - -```swift -extension UIViewController { - /// default hero animation type for presenting & dismissing modally - public var heroModalAnimationType: HeroDefaultAnimationType -} -extension UINavigationController { - /// default hero animation type for push and pop within the navigation controller - public var heroNavigationAnimationType: HeroDefaultAnimationType -} -extension UITabBarController { - /// default hero animation type for switching tabs within the tab bar controller - public var heroTabBarAnimationType: HeroDefaultAnimationType -} -``` - -## Supported default animations - -Please checkout [HeroDefaultAnimations.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroDefaultAnimations.swift#L25) for supported animations. - -Many of these animations support directions(up, down, left, right). - -## .auto Animation Type - -`.auto` is the default animation type. It uses the following animations depending on the presentation style: - -* `.none` if source root view or destination root view have existing animations (defined via `heroID` or `heroModifiers`). -* `.push` & `.pull` if animating within a UINavigationController. -* `.slide` if animating within a UITabbarController. -* `.fade` if presenting modally. -* `.none` if presenting modally with `modalPresentationStyle == .overFullScreen`. - -## .selectBy(presenting:, dismissing:) Animation Type - -Will determine the animation type by whether or not we are presenting or dismissing. - -For example: - -```swift -.selectBy(presenting:.push(.left), dismissing:.pull(.right)) -``` - -Will use left push animation if presenting a VC, or right pull animation when dismissing a VC. - -## Note - -Other than `.auto` & `.none`, default animations will override `heroModifiers` on source & destination root views during the transition. \ No newline at end of file diff --git a/docs/Enums.html b/docs/Enums.html new file mode 100644 index 00000000..104d4fbf --- /dev/null +++ b/docs/Enums.html @@ -0,0 +1,534 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+
    +
  • +
    + + + + Token + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Token
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ParseError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ParseError : Error
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Enums/CascadeDirection.html b/docs/Enums/CascadeDirection.html new file mode 100644 index 00000000..c32bf493 --- /dev/null +++ b/docs/Enums/CascadeDirection.html @@ -0,0 +1,508 @@ + + + + CascadeDirection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CascadeDirection

+
+
+
public enum CascadeDirection
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + topToBottom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topToBottom
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + bottomToTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomToTop
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leftToRight + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leftToRight
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rightToLeft + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rightToLeft
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + radial(center:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case radial(center: CGPoint)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inverseRadial(center: CGPoint)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leadingToTrailing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var leadingToTrailing: CascadeDirection { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + trailingToLeading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var trailingToLeading: CascadeDirection { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroCoordinateSpace.html b/docs/Enums/HeroCoordinateSpace.html new file mode 100644 index 00000000..c66ce6a2 --- /dev/null +++ b/docs/Enums/HeroCoordinateSpace.html @@ -0,0 +1,328 @@ + + + + HeroCoordinateSpace Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCoordinateSpace

+
+
+
public enum HeroCoordinateSpace
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + global + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case global
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + local + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case local
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroDefaultAnimationType.html b/docs/Enums/HeroDefaultAnimationType.html new file mode 100644 index 00000000..d2a2fa93 --- /dev/null +++ b/docs/Enums/HeroDefaultAnimationType.html @@ -0,0 +1,844 @@ + + + + HeroDefaultAnimationType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroDefaultAnimationType

+
+
+
public enum HeroDefaultAnimationType
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> HeroDefaultAnimationType?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroDefaultAnimationType/Direction.html b/docs/Enums/HeroDefaultAnimationType/Direction.html new file mode 100644 index 00000000..877cb861 --- /dev/null +++ b/docs/Enums/HeroDefaultAnimationType/Direction.html @@ -0,0 +1,478 @@ + + + + Direction Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Direction

+
+
+
public enum Direction : HeroStringConvertible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case left
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case right
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + up + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case up
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + down + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case down
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> Direction?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var leading: Direction { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var trailing: Direction { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroDefaultAnimationType/Strategy.html b/docs/Enums/HeroDefaultAnimationType/Strategy.html new file mode 100644 index 00000000..b583e381 --- /dev/null +++ b/docs/Enums/HeroDefaultAnimationType/Strategy.html @@ -0,0 +1,358 @@ + + + + Strategy Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Strategy

+
+
+
public enum Strategy
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroSnapshotType.html b/docs/Enums/HeroSnapshotType.html new file mode 100644 index 00000000..2be51fcb --- /dev/null +++ b/docs/Enums/HeroSnapshotType.html @@ -0,0 +1,393 @@ + + + + HeroSnapshotType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroSnapshotType

+
+
+
public enum HeroSnapshotType
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + optimized + +
    +
    +
    +
    +
    +
    +

    Will optimize for different type of views +For custom views or views with masking, .optimizedDefault might create snapshots +that appear differently than the actual view. +In that case, use .normal or .slowRender to disable the optimization

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case optimized
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    +

    snapshotView(afterScreenUpdates:)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + layerRender + +
    +
    +
    +
    +
    +
    +

    layer.render(in: currentContext)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case layerRender
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + noSnapshot + +
    +
    +
    +
    +
    +
    +

    will not create snapshot. animate the view directly. +This will mess up the view hierarchy, therefore, view controllers have to rebuild +its view structure after the transition finishes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noSnapshot
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroTransitionState.html b/docs/Enums/HeroTransitionState.html new file mode 100644 index 00000000..3d100544 --- /dev/null +++ b/docs/Enums/HeroTransitionState.html @@ -0,0 +1,418 @@ + + + + HeroTransitionState Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransitionState

+
+
+
public enum HeroTransitionState : Int
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + possible + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case possible
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + notified + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notified
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + starting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case starting
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + animating + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case animating
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + completing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case completing
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/HeroViewOrderingStrategy.html b/docs/Enums/HeroViewOrderingStrategy.html new file mode 100644 index 00000000..b7531b28 --- /dev/null +++ b/docs/Enums/HeroViewOrderingStrategy.html @@ -0,0 +1,358 @@ + + + + HeroViewOrderingStrategy Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroViewOrderingStrategy

+
+
+
public enum HeroViewOrderingStrategy
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sourceViewOnTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sourceViewOnTop
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + destinationViewOnTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case destinationViewOnTop
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Enums/ParseError.html b/docs/Enums/ParseError.html new file mode 100644 index 00000000..26ec7263 --- /dev/null +++ b/docs/Enums/ParseError.html @@ -0,0 +1,448 @@ + + + + ParseError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

ParseError

+
+
+
public enum ParseError : Error
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Enums/Token.html b/docs/Enums/Token.html new file mode 100644 index 00000000..41cccbb6 --- /dev/null +++ b/docs/Enums/Token.html @@ -0,0 +1,448 @@ + + + + Token Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Token

+
+
+
public enum Token
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + identifier(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case identifier(String, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + number(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case number(Float, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parensOpen(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case parensOpen(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parensClose(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case parensClose(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comma(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case comma(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other(String, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions.html b/docs/Extensions.html new file mode 100644 index 00000000..b875e14d --- /dev/null +++ b/docs/Extensions.html @@ -0,0 +1,548 @@ + + + + Extensions Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + HeroDebugView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension HeroDebugView: UIGestureRecognizerDelegate
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CAMediaTimingFunction + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CAMediaTimingFunction
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CATransform3D + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension CATransform3D: Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + UIView + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + UIViewController + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIViewController
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UINavigationController
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UITabBarController + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UITabBarController
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + String + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension String
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/CAMediaTimingFunction.html b/docs/Extensions/CAMediaTimingFunction.html new file mode 100644 index 00000000..53ebe48c --- /dev/null +++ b/docs/Extensions/CAMediaTimingFunction.html @@ -0,0 +1,567 @@ + + + + CAMediaTimingFunction Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CAMediaTimingFunction

+
+
+
public extension CAMediaTimingFunction
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + linear + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let linear: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeIn + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeIn: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeOut + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeOut: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeInOut + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeInOut: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + standard + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let standard: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deceleration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let deceleration: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + acceleration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let acceleration: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sharp + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let sharp: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeOutBack + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeOutBack: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + from(name:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func from(name: String) -> CAMediaTimingFunction?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/CATransform3D.html b/docs/Extensions/CATransform3D.html new file mode 100644 index 00000000..7766c3dd --- /dev/null +++ b/docs/Extensions/CATransform3D.html @@ -0,0 +1,296 @@ + + + + CATransform3D Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CATransform3D

+
+
+
extension CATransform3D: Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: CATransform3D, rhs: CATransform3D) -> Bool
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/HeroDebugView.html b/docs/Extensions/HeroDebugView.html new file mode 100644 index 00000000..fea8b8e5 --- /dev/null +++ b/docs/Extensions/HeroDebugView.html @@ -0,0 +1,279 @@ + + + + HeroDebugView Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + + + + + + diff --git a/docs/Extensions/String.html b/docs/Extensions/String.html new file mode 100644 index 00000000..49b8309a --- /dev/null +++ b/docs/Extensions/String.html @@ -0,0 +1,297 @@ + + + + String Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

String

+
+
+
public extension String
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + match(regex:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func match(regex: String) -> (String, CountableRange<Int>)?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/UINavigationController.html b/docs/Extensions/UINavigationController.html new file mode 100644 index 00000000..cd585556 --- /dev/null +++ b/docs/Extensions/UINavigationController.html @@ -0,0 +1,279 @@ + + + + UINavigationController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UINavigationController

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Operation + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/UITabBarController.html b/docs/Extensions/UITabBarController.html new file mode 100644 index 00000000..d3578269 --- /dev/null +++ b/docs/Extensions/UITabBarController.html @@ -0,0 +1,328 @@ + + + + UITabBarController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UITabBarController

+
+
+
extension UITabBarController
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/UIView.html b/docs/Extensions/UIView.html new file mode 100644 index 00000000..83f6ec6f --- /dev/null +++ b/docs/Extensions/UIView.html @@ -0,0 +1,421 @@ + + + + UIView Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UIView

+
+
+
public extension UIView
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + heroID + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var heroID: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isHeroEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var isHeroEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var isHeroEnabledForSubviews: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + heroModifiers + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var heroModifiers: [HeroModifier]? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + heroModifierString + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var heroModifierString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Extensions/UIViewController.html b/docs/Extensions/UIViewController.html new file mode 100644 index 00000000..c662f574 --- /dev/null +++ b/docs/Extensions/UIViewController.html @@ -0,0 +1,636 @@ + + + + UIViewController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UIViewController

+
+
+
public extension UIViewController
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Functions.html b/docs/Functions.html new file mode 100644 index 00000000..a44d8efa --- /dev/null +++ b/docs/Functions.html @@ -0,0 +1,292 @@ + + + + Functions Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Functions

+

The following functions are available globally.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/HeroModifiers.md b/docs/HeroModifiers.md deleted file mode 100644 index 2f0f855a..00000000 --- a/docs/HeroModifiers.md +++ /dev/null @@ -1,90 +0,0 @@ -#### Checkout [HeroModifier.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroModifier.swift) for up-to-date modifier details. - -### Basic Modifiers -* fade -* position -* size -* scale -* rotate -* perspective -* translate -* zPosition -* opacity -* shadowOpacity -* shadowRadius -* shadowColor -* shadowOffset -* shadowPath -* borderColor -* borderWidth - -### Advance Modifiers - -| Modifier Name | Description | -| --- | --- | -| delay(time) | Delay for the animation | -| duration(time) | Duration for the animation, if unspecified, the duration will be calculated based on the distance travelled | -| timingFunction(curveName) | Timing function for the animation (`linear`, `easeIn`, `easeOut`, `easeInOut`, `standard`, `deceleration`, `acceleration`, `sharp`) | -| timingFunction(c1x, c1y, c2x, c2y) | Custom cubic bezier timing function for the animation | -| spring(stiffness, damping) | **(iOS 9+)** Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if `arc`, `curve`, or `duration` is set. | -| useGlobalCoordinateSpace | Force the view to use global coordinate space | -| overlay(color:,opacity) | Animate an overlay on top of the view | -| source(HeroID) | Transition from a view with given heroID | -| arc(intensity) | Make position animation follow a natural arc curve. | -| cascade(deltaDelay, direction, forceMatchedToWait) | Apply increasing delay to view's subview | -| ignoreSubviewModifiers | Disables all `heroModifiers` for view's direct subviews | -| useScaleBasedSizeChange | Force Hero use scale based size animation. | -| useOptimizedSnapshot | Change snapshot type to OptimizedSnapshot, see [Snapshot Types](#snapshot-types) | -| useNormalSnapshot | Change snapshot type to NormalSnapshot, see [Snapshot Types](#snapshot-types) | -| useLayerRenderSnapshot | Change snapshot type to LayerRenderSnapshot, see [Snapshot Types](#snapshot-types) | -| useNoSnapshot | Change snapshot type to NoSnapshot, see [Snapshot Types](#snapshot-types) | -| beginWith(modifiers:) | Apply modifiers directly to the view at the start of the transition. Without animation. | -| beginWithIfMatched(modifiers:) | Same as `beginWith` but effective only when matched. | - -#### Modifiers Support for matched views -Some of the modifiers **won't** work with matched views(views with the same `heroID`). These are: -* fade -* scale -* translate -* rotate -* transform -* cascade - -NOTE: For other modifiers that works with matched views, the target view's modifiers will be used. the source view's modifiers will be ignored. - -## Modifier Details - -### Arc Modifier -When animating `position`, if **arc** is enabled. the view will follow a natural arc curve instead of going to the target position directly. See [material design](https://material.io/guidelines/motion/movement.html#movement-movement-within-screen-bounds) for more details. - -The **intensity** parameter is a number that determine the curve's intensity. A value of 0 means no curve. A value of 1 means a natural downward curve. This value can be negative or above 1. Default is 1. - -Use the debug plugin and enable **Show Curves** to see the actual arc curve objects follows. - -### Source Modifier -The `source` modifier allows a view to be transitioned from a view with the given heroID. - -##### See the Menu Example for how `source` is used. - -### Cascade Modifier - -The `cascade` modifier automatically applies increasing `delay` heroModifiers to a view's direct subviews. - -| Parameters | Description | -| --- | --- | -| deltaDelay | delay in between each animation | -| direction | the cascade direction, can be `topToBottom`, `bottomToTop`, `leftToRight`, & `rightToLeft`, default `topToBottom` | -| forceMatchedToWait | whether or not to delay matched views until all cascading animations have started, default false | - -NOTE: matched views(views with the same `heroID`) won't have the cascading effect. however, you can use the 3rd parameter to delay the start time of matched views until the last cascading animation have started. The matched views will animate simultaneously with the cascading views by default. - -##### See the ListToGrid & ImageGallery Example for how `cascade` is used. - -### ignoreSubviewModifiers Modifier - -The `ignoreSubviewModifiers` modifier disables all `heroModifiers` attributes for a view's direct subviews. - -### useScaleBasedSizeChange Modifier - -Force Hero use scale based size animation. This will convert all `.size` modifier into `.scale` modifier. -This is to help Hero animate layers that doesn't support bounds animation. Also gives better animation performance. \ No newline at end of file diff --git a/docs/InteractiveTransition.md b/docs/InteractiveTransition.md deleted file mode 100644 index eecdf26f..00000000 --- a/docs/InteractiveTransition.md +++ /dev/null @@ -1,91 +0,0 @@ -# Interactive Transition - -#### Check out the [Interactive transitions with Hero (Part 1)](http://lkzhao.com/2017/02/05/hero-interactive-transition.html) blog post for a more in-depth tutorial on interactive transition. - - -## General Approach - -When implementing a interactive transition, the general approach is to setup a gesture recognizer first. Then do the following 3 things inside the gesture handler: - -1. Tell Hero when to start the transition - - Usually happens when `gestureRecognizer.state == .began`. Begin the transition as normal. - -2. Tell Hero to update the animations through out the transition - - Use `Hero.shared.update(progress:)` & `Hero.shared.apply(modifiers:to:)` to modify the progress & view states. - -3. Tell Hero to end/cancel the transition - - Use `Hero.shared.end()` or `Hero.shared.cancel()` - - -## Interactive methods - -`Hero.shared` is the singleton object you can operate with when doing an interactive transition. It has the following 4 methods that are useful for interactive transition: - -```swift -/** - Update the progress for the interactive transition. - - Parameters: - - progress: the current progress, must be between 0...1 - */ -public func update(progress: Double) - -/** - Finish the interactive transition. - Will stop the interactive transition and animate from the - current state to the **end** state - */ -public func end(animate: Bool = true) - -/** - Cancel the interactive transition. - Will stop the interactive transition and animate from the - current state to the **beginning** state - */ -public func cancel(animate: Bool = true) - -/** - Override modifiers during an interactive animation. - - For example: - - Hero.shared.apply([.position(x:50, y:50)], to:view) - - will set the view's position to 50, 50 - - Parameters: - - modifiers: the modifiers to override - - view: the view to override to - */ -public func apply(modifiers: [HeroModifier], to view: UIView) -``` - -## Sample Gesture Recognizer Handler - -This example is taken from `ImageViewController.swift` inside the example project. - -```swift - func pan() { - let translation = panGR.translation(in: nil) - let progress = translation.y / 2 / collectionView!.bounds.height - switch panGR.state { - case .began: - Hero.shared.setDefaultAnimationForNextTransition(.fade) - hero_dismissViewController() - case .changed: - Hero.shared.update(progress: Double(progress)) - if let cell = collectionView?.visibleCells[0] as? ScrollingImageCell { - let currentPos = CGPoint(x: translation.x + view.center.x, y: translation.y + view.center.y) - Hero.shared.apply(modifiers: [.position(currentPos)], to: cell.imageView) - } - default: - if progress + panGR.velocity(in: nil).y / collectionView!.bounds.height > 0.3 { - Hero.shared.end() - } else { - Hero.shared.cancel() - } - } - } -``` - diff --git a/docs/NavigationHelpers.md b/docs/NavigationHelpers.md deleted file mode 100644 index 92ab70e2..00000000 --- a/docs/NavigationHelpers.md +++ /dev/null @@ -1,52 +0,0 @@ -# Navigation Helper - -Hero provides some useful navigation extension methods on UIViewController. Use these alongside with `pushViewController`, `presentViewController` to navigate between view controllers. - - -```swift -func hero_dismissViewController() -``` - -Dismiss the current view controller with animation. Will perform a navigationController.popViewController -if the current view controller is contained inside a navigationController. - -```swift -func hero_replaceViewController(with: UIViewController) -``` - -Replace the current view controller with another VC on the navigation/modal stack. - - -```swift -func hero_unwindToRootViewController() -``` - -Unwind to the root view controller using Hero. - - -```swift -func hero_unwindToViewController(_ toViewController:) -``` - -Unwind to a specific view controller using Hero. - - -```swift -func hero_unwindToViewController(withSelector: Selector) -``` - -Unwind to a view controller that responds to the given selector using Hero. - - -```swift -func hero_unwindToViewController(withClass: AnyClass) -``` - -Unwind to a view controller with given class using Hero. - - -```swift -func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool) -``` - -Unwind to a view controller that the match block returns true on. \ No newline at end of file diff --git a/docs/Protocols.html b/docs/Protocols.html new file mode 100644 index 00000000..3cf58fc9 --- /dev/null +++ b/docs/Protocols.html @@ -0,0 +1,531 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Allows a view to create their own custom snapshot when using Optimized snapshot

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol HeroCustomSnapshotView
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroAnimator.html b/docs/Protocols/HeroAnimator.html new file mode 100644 index 00000000..a432928f --- /dev/null +++ b/docs/Protocols/HeroAnimator.html @@ -0,0 +1,508 @@ + + + + HeroAnimator Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroAnimator

+
+
+
public protocol HeroAnimator : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroCompatible.html b/docs/Protocols/HeroCompatible.html new file mode 100644 index 00000000..b66efbcb --- /dev/null +++ b/docs/Protocols/HeroCompatible.html @@ -0,0 +1,336 @@ + + + + HeroCompatible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCompatible

+
+
+
public protocol HeroCompatible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + CompatibleType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype CompatibleType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hero + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var hero: HeroExtension<CompatibleType> { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroCustomSnapshotView.html b/docs/Protocols/HeroCustomSnapshotView.html new file mode 100644 index 00000000..13438a61 --- /dev/null +++ b/docs/Protocols/HeroCustomSnapshotView.html @@ -0,0 +1,298 @@ + + + + HeroCustomSnapshotView Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCustomSnapshotView

+
+
+
public protocol HeroCustomSnapshotView
+ +
+
+

Allows a view to create their own custom snapshot when using Optimized snapshot

+ +
+
+ +
+
+
+
    +
  • +
    + + + + heroSnapshot + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var heroSnapshot: UIView? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroPreprocessor.html b/docs/Protocols/HeroPreprocessor.html new file mode 100644 index 00000000..05ac19c9 --- /dev/null +++ b/docs/Protocols/HeroPreprocessor.html @@ -0,0 +1,328 @@ + + + + HeroPreprocessor Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroPreprocessor

+
+
+
public protocol HeroPreprocessor : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroProgressUpdateObserver.html b/docs/Protocols/HeroProgressUpdateObserver.html new file mode 100644 index 00000000..a60b00ad --- /dev/null +++ b/docs/Protocols/HeroProgressUpdateObserver.html @@ -0,0 +1,298 @@ + + + + HeroProgressUpdateObserver Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroProgressUpdateObserver

+
+
+
public protocol HeroProgressUpdateObserver : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroStringConvertible.html b/docs/Protocols/HeroStringConvertible.html new file mode 100644 index 00000000..e07f639f --- /dev/null +++ b/docs/Protocols/HeroStringConvertible.html @@ -0,0 +1,298 @@ + + + + HeroStringConvertible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroStringConvertible

+
+
+
public protocol HeroStringConvertible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func from(node: ExprNode) -> `Self`?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroTransitionDelegate.html b/docs/Protocols/HeroTransitionDelegate.html new file mode 100644 index 00000000..8b8cafc9 --- /dev/null +++ b/docs/Protocols/HeroTransitionDelegate.html @@ -0,0 +1,328 @@ + + + + HeroTransitionDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransitionDelegate

+
+
+
public protocol HeroTransitionDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Protocols/HeroViewControllerDelegate.html b/docs/Protocols/HeroViewControllerDelegate.html new file mode 100644 index 00000000..29cfaf1d --- /dev/null +++ b/docs/Protocols/HeroViewControllerDelegate.html @@ -0,0 +1,548 @@ + + + + HeroViewControllerDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroViewControllerDelegate

+
+
+
@objc
+public protocol HeroViewControllerDelegate
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 102095ac..00000000 --- a/docs/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Table of Contents - -* [Read Me](/README.md) -* [Installation](/docs/Installation.md) -* [Usage Guide](/docs/UsageGuide.md) - -# - -* Core Concepts - * [Hero Modifier](/docs/HeroModifiers.md) - * [Coordinate Space](/docs/CoordinateSpace.md) - * [View Snapshot](/docs/SnapshotTypes.md) - -# - -* [Interactive Transition](/docs/InteractiveTransition.md) -* [Default Animations](/docs/DefaultAnimations.md) -* [Navigation Helpers](/docs/NavigationHelpers.md) \ No newline at end of file diff --git a/docs/SnapshotTypes.md b/docs/SnapshotTypes.md deleted file mode 100644 index c1cbea4a..00000000 --- a/docs/SnapshotTypes.md +++ /dev/null @@ -1,22 +0,0 @@ -Hero creates snapshots of your animating views when performing animations. Use the following four modifiers to change how Hero take these snapshots. - -#### useOptimizedSnapshot - - With this modifier, Hero will create snapshot optimized for different view type when animating. - For custom views or views with masking, useOptimizedSnapshot might create snapshots - that appear differently than the actual view. - In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization. - -#### useNormalSnapshot - - Create snapshot using snapshotView(afterScreenUpdates:). - -#### useLayerRenderSnapshot - - Create snapshot using layer.render(in: currentContext). - This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView). - -#### useNoSnapshot - - Force Hero to not create any snapshot when animating this view. Hence Hero will animate on the view directly. - This will mess up the view hierarchy. Therefore, view controllers have to rebuild its view structure after the transition finishes. diff --git a/docs/Structs.html b/docs/Structs.html new file mode 100644 index 00000000..05a612f4 --- /dev/null +++ b/docs/Structs.html @@ -0,0 +1,328 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/Structs/HeroConditionalContext.html b/docs/Structs/HeroConditionalContext.html new file mode 100644 index 00000000..fd2c797c --- /dev/null +++ b/docs/Structs/HeroConditionalContext.html @@ -0,0 +1,658 @@ + + + + HeroConditionalContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroConditionalContext

+
+
+
public struct HeroConditionalContext
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + view + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var view: UIView!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAppearing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var isAppearing: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isPresenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isPresenting: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isInTabbarController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isInTabbarController: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isInNavbarController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isInNavbarController: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isMatched + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isMatched: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAncestorViewMatched + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAncestorViewMatched: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + matchedView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var matchedView: UIView? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + matchedAncestorView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var matchedAncestorView: (UIView, UIView)? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fromViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var toViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + currentViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + otherViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var otherViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/Structs/HeroTargetState.html b/docs/Structs/HeroTargetState.html new file mode 100644 index 00000000..31ba2130 --- /dev/null +++ b/docs/Structs/HeroTargetState.html @@ -0,0 +1,1444 @@ + + + + HeroTargetState Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTargetState

+
+
+
public struct HeroTargetState
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + beginState + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var beginState: [HeroModifier]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + conditionalModifiers + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var conditionalModifiers: [((HeroConditionalContext) -> Bool, [HeroModifier])]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var position: CGPoint?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: CGSize?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: Float?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cornerRadius + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerRadius: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + backgroundColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var backgroundColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + zPosition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var zPosition: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsRect + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentsRect: CGRect?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsScale + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentsScale: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderWidth + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderWidth: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOpacity + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowOpacity: Float?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOffset + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowOffset: CGSize?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowRadius + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowRadius: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowPath + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowPath: CGPath?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + masksToBounds + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var masksToBounds: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + displayShadow + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var displayShadow: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + overlay + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var overlay: (color: CGColor, opacity: CGFloat)?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + spring + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spring: (CGFloat, CGFloat)?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + delay + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var delay: TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + duration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var duration: TimeInterval?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + timingFunction + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var timingFunction: CAMediaTimingFunction?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var arc: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + source + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var source: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cascade + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cascade: (TimeInterval, CascadeDirection, Bool)?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ignoreSubviewModifiers: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + coordinateSpace + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var coordinateSpace: HeroCoordinateSpace?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var useScaleBasedSizeChange: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + snapshotType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var snapshotType: HeroSnapshotType?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + nonFade + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var nonFade: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceAnimate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var forceAnimate: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + custom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var custom: [String : Any]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(_ modifier: HeroModifier)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(contentsOf:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(contentsOf modifiers: [HeroModifier])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(key: String) -> Any? { get set }
    + +
    +
    +
    +

    Return Value

    +

    custom item for a specific key

    +
    + +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/UsageGuide.md b/docs/UsageGuide.md deleted file mode 100644 index 6d942b93..00000000 --- a/docs/UsageGuide.md +++ /dev/null @@ -1,58 +0,0 @@ -# Usage - -### Storyboard - -1. In the Identity Inspector, for every pair of source/destination views, give each one the same `HeroID` attribute. -3. For any other views that you would like to animate, specify animation effects in the `Hero Modifier String` attribute. -4. Also in the Identity Inspector, enable Hero Transition on your destination view controller. - -### In Code - -1. Before doing a transition, set the desired `heroID` and `heroModifiers` to both your source and destination views. -2. Enable Hero for the destination view controller - - ```swift - viewController.isHeroEnabled = true - ``` - -### UINavigationController & UITabBarController - -Hero also supports transitions within a navigation controller or a tab bar controller—just set the 'isHeroEnabled' attribute to true on the UINavigationController/UITabBarController instance. - -## Attributes -There are two important attributes to understand: `heroID` and `heroModifiers`. These are implemented as extensions (using associated objects) for `UIView`. Therefore, after the Hero library is imported, every `UIView` will have these two attributes. - -| Attribute Name | Description | -| --- | --- | -| `heroID` | Identifier for the view. Hero will automatically transition between views with the same `heroID` | -| `heroModifiers` | Specifies the extra animations performed alongside the main transition. | - -## HeroID - -`heroID` is the identifier for the view. When doing a transition between two view controllers, Hero will search through all subviews for both controllers, and match any views with the same `heroID`. Whenever a pair is discovered, Hero will automatically transit the views from source state to destination state. - -## HeroModifiers - -Use `heroModifiers` to specify animations alongside the main transition. Checkout [HeroModifier.swift](https://github.com/lkzhao/Hero/blob/master/Sources/HeroModifier.swift) for available modifiers. - -#### For example, to achieve the following effect, set the `heroModifiers` to be - -```swift -view.heroModifiers = [.fade, .translate(x:0, y:-250), .rotate(x:-1.6), .scale(1.5)] -``` - - - -Note: For matched views, the target view's heroModifier will be used. The source view's heroModifier will be ignored. When dismissing, the target view is the presentingViewController's view and the source view is the presentedViewController's view. - -## HeroModifierString - -This is a string value. It provides another way to set `heroModifiers`. It can be accessed through the storyboard. - -It must be in the following syntax: - -```swift -modifier1() modifier2(parameter1) modifier3(parameter1, parameter2) ... -``` - -Parameters must be between a pair of parentheses, separated by a comma, and each modifier must be separated by a space. Not all modifiers are settable this way. diff --git a/docs/badge.svg b/docs/badge.svg new file mode 100644 index 00000000..579932f7 --- /dev/null +++ b/docs/badge.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + documentation + + + documentation + + + 24% + + + 24% + + + diff --git a/docs/css/highlight.css b/docs/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/docs/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/css/jazzy.css b/docs/css/jazzy.css new file mode 100644 index 00000000..833be0d2 --- /dev/null +++ b/docs/css/jazzy.css @@ -0,0 +1,378 @@ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +p > code, li > code { + background: #f7f7f7; + padding: .2em; } + p > code:before, p > code:after, li > code:before, li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } + +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } + +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } + +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 0px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/Hero.docset/Contents/Info.plist b/docs/docsets/Hero.docset/Contents/Info.plist new file mode 100644 index 00000000..a7ed4135 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Info.plist @@ -0,0 +1,20 @@ + + + + + CFBundleIdentifier + com.jazzy.hero + CFBundleName + Hero + DocSetPlatformFamily + hero + isDashDocset + + dashIndexFilePath + index.html + isJavaScriptEnabled + + DashDocSetFamily + dashtoc + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html new file mode 100644 index 00000000..39344cc0 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes.html @@ -0,0 +1,821 @@ + + + + Classes Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Classes

+

The following classes are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
    +
  • +
    + + + + Lexer + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Lexer
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
    +
  • +
    + + + + Parser + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Parser
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + HeroTransition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open class HeroTransition : NSObject
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + Hero + +
    +
    +
    +
    +
    +
    +

    The singleton class/object for controlling interactive transitions.

    +
    Hero.shared
    +
    +

    Use the following methods for controlling the interactive transition:

    +
    func update(progress:Double)
    +func end()
    +func cancel()
    +func apply(modifiers:[HeroModifier], to view:UIView)
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public class Hero : NSObject
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html new file mode 100644 index 00000000..3a440f25 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/BinaryOpNode.html @@ -0,0 +1,388 @@ + + + + BinaryOpNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

BinaryOpNode

+
+
+
public class BinaryOpNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + lhs + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let lhs: ExprNode
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rhs + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let rhs: ExprNode
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:lhs:rhs:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, lhs: ExprNode, rhs: ExprNode)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html new file mode 100644 index 00000000..e9afa8ea --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/CallNode.html @@ -0,0 +1,358 @@ + + + + CallNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CallNode

+
+
+
public class CallNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + arguments + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let arguments: [ExprNode]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:arguments:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, arguments: [ExprNode])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html new file mode 100644 index 00000000..a91c1514 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/ExprNode.html @@ -0,0 +1,387 @@ + + + + ExprNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

ExprNode

+
+
+
public class ExprNode : CustomStringConvertible, Equatable
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + range + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var range: CountableRange<Int>
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + name + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let name: String
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(name:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html new file mode 100644 index 00000000..c8350ea1 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/FunctionNode.html @@ -0,0 +1,388 @@ + + + + FunctionNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

FunctionNode

+
+
+
public class FunctionNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html new file mode 100644 index 00000000..e3a4a05b --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Hero.html @@ -0,0 +1,306 @@ + + + + Hero Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Hero

+
+
+
public class Hero : NSObject
+ +
+
+

The singleton class/object for controlling interactive transitions.

+
Hero.shared
+
+

Use the following methods for controlling the interactive transition:

+
func update(progress:Double)
+func end()
+func cancel()
+func apply(modifiers:[HeroModifier], to view:UIView)
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + shared + +
    +
    +
    +
    +
    +
    +

    Shared singleton object for controlling the transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var shared: HeroTransition
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html new file mode 100644 index 00000000..a7482f4c --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroContext.html @@ -0,0 +1,618 @@ + + + + HeroContext Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroContext

+
+
+
public class HeroContext
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + container + +
    +
    +
    +
    +
    +
    +

    The container holding all of the animating views

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let container: UIView
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViews + +
    +
    +
    +
    +
    +
    +

    A flattened list of all views from source ViewController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fromViews: [UIView]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViews + +
    +
    +
    +
    +
    +
    +

    A flattened list of all views from destination ViewController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var toViews: [UIView]
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + sourceView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func sourceView(for heroID: String) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a source view matching the heroID, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + destinationView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func destinationView(for heroID: String) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a destination view matching the heroID, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + pairedView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func pairedView(for view: UIView) -> UIView?
    + +
    +
    +
    +

    Return Value

    +

    a view with the same heroID, but on different view controller, nil if not found

    +
    + +
    +
    +
  • +
  • +
    + + + + snapshotView(for:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func snapshotView(for view: UIView) -> UIView
    + +
    +
    +
    +

    Return Value

    +

    a snapshot view for animation

    +
    + +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(view: UIView) -> HeroTargetState? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + clean() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func clean()
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + hide(view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func hide(view: UIView)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + unhide(view:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unhide(view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html new file mode 100644 index 00000000..cb8e7adc --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroDebugPlugin.html @@ -0,0 +1,373 @@ + + + + HeroDebugPlugin Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ + +
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html new file mode 100644 index 00000000..3ba263ea --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroExtension.html @@ -0,0 +1,895 @@ + + + + HeroExtension Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroExtension

+
+
+
public class HeroExtension<Base>
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + base + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let base: Base
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + id + +
    +
    +
    +
    +
    +
    +

    ID is the identifier for the view. When doing a transition between two view controllers, +Hero will search through all the subviews for both view controllers and matches views with the same heroID.

    + +

    Whenever a pair is discovered, +Hero will automatically transit the views from source state to the destination state.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var id: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    isEnabled allows to specify whether a view and its subviews should be consider for animations. +If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabledForSubviews + +
    +
    +
    +
    +
    +
    +

    isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations. +If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabledForSubviews: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modifiers + +
    +
    +
    +
    +
    +
    +

    Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift for available modifiers.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modifiers: [HeroModifier]? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + modifierString + +
    +
    +
    +
    +
    +
    +

    modifierString** provides another way to set modifiers. It can be assigned through storyboard.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modifierString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + modalAnimationType + +
    +
    +
    +
    +
    +
    +

    default hero animation type for presenting & dismissing modally

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modalAnimationType: HeroDefaultAnimationType { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var modalAnimationTypeString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Dismiss the current view controller with animation. Will perform a navigationController.popViewController +if the current view controller is contained inside a navigationController

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func dismissViewController(completion: (() -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to the root view controller using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToRootViewController()
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a specific view controller using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(_ toViewController: UIViewController)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withSelector: Selector)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a view controller with given class using Hero

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withClass: AnyClass)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Unwind to a view controller that the matchBlock returns true on.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func unwindToViewController(withMatchBlock: (UIViewController) -> Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Replace the current view controller with another VC on the navigation/modal stack.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func replaceViewController(with next: UIViewController, completion: (() -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html new file mode 100644 index 00000000..6280f738 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroModifier.html @@ -0,0 +1,2650 @@ + + + + HeroModifier Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroModifier

+
+
+
public final class HeroModifier
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
    +
  • +
    + + + + beginWith(_:) + +
    +
    +
    +
    +
    +
    +

    Apply modifiers directly to the view at the start of the transition. +The modifiers supplied here won’t be animated. +For source views, modifiers are set directly at the beginning of the animation. +For destination views, they replace the target state (final appearance).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(_ modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + beginWith(modifiers:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + beginWith(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func beginWith(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Use global coordinate space.

    + +

    When using global coordinate space. The view become a independent view that is not a subview of any view. +It won’t move when its parent view moves, and won’t be affected by parent view’s attributes.

    + +

    When a view is matched, this is automatically enabled. +The source modifier will also enable this.

    + +

    Global coordinate space is default for all views prior to version 0.1.3

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useGlobalCoordinateSpace: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    ignore all heroModifiers attributes for a view’s direct subviews.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var ignoreSubviewModifiers: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    ignore all heroModifiers attributes for a view’s subviews.

    + +
      +
    • recursive: if false, will only ignore direct subviews’ modifiers. default false.
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func ignoreSubviewModifiers(recursive: Bool = false) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useOptimizedSnapshot + +
    +
    +
    +
    +
    +
    +

    Will create snapshot optimized for different view type. +For custom views or views with masking, useOptimizedSnapshot might create snapshots +that appear differently than the actual view. +In that case, use .useNormalSnapshot or .useSlowRenderSnapshot to disable the optimization.

    + +

    This modifier actually does nothing by itself since .useOptimizedSnapshot is the default.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useOptimizedSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useNormalSnapshot + +
    +
    +
    +
    +
    +
    +

    Create snapshot using snapshotView(afterScreenUpdates:).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useNormalSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create snapshot using layer.render(in: currentContext). +This is slower than .useNormalSnapshot but gives more accurate snapshot for some views (eg. UIStackView).

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useLayerRenderSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + useNoSnapshot + +
    +
    +
    +
    +
    +
    +

    Force Hero to not create any snapshot when animating this view. +This will mess up the view hierarchy, therefore, view controllers have to rebuild +its view structure after the transition finishes.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useNoSnapshot: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceAnimate + +
    +
    +
    +
    +
    +
    +

    Force the view to animate.

    + +

    By default, Hero will not animate if the view is outside the screen bounds or if there is no animatable hero modifier, unless this modifier is used.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var forceAnimate: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier. +This is to help Hero animate layers that doesn’t support bounds animation. Also gives better performance.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var useScaleBasedSizeChange: HeroModifier
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> HeroModifier?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + fade + +
    +
    +
    +
    +
    +
    +

    Fade the view during transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var fade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceNonFade + +
    +
    +
    +
    +
    +
    +

    Force don’t fade view during transition

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var forceNonFade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + position(_:) + +
    +
    +
    +
    +
    +
    +

    Set the position for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func position(_ position: CGPoint) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + position + + +
    +

    position for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + size(_:) + +
    +
    +
    +
    +
    +
    +

    Set the size for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func size(_ size: CGSize) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + size + + +
    +

    size for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + transform(_:) + +
    +
    +
    +
    +
    +
    +

    Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func transform(_ t: CATransform3D) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + t + + +
    +

    the CATransform3D object

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + perspective(_:) + +
    +
    +
    +
    +
    +
    +

    Set the perspective on the transform. use in combination with the rotate modifier.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func perspective(_ perspective: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + perspective + + +
    +

    set the camera distance of the transform

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + scale(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Scale 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func scale(x: CGFloat = 1, y: CGFloat = 1, z: CGFloat = 1) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    scale factor on x axis, default 1

    +
    +
    + + y + + +
    +

    scale factor on y axis, default 1

    +
    +
    + + z + + +
    +

    scale factor on z axis, default 1

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + scale(_:) + +
    +
    +
    +
    +
    +
    +

    Scale in x & y axis

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func scale(_ xy: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + xy + + +
    +

    scale factor in both x & y axis

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + translate(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Translate 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func translate(x: CGFloat = 0, y: CGFloat = 0, z: CGFloat = 0) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    translation distance on x axis in display pixel, default 0

    +
    +
    + + y + + +
    +

    translation distance on y axis in display pixel, default 0

    +
    +
    + + z + + +
    +

    translation distance on z axis in display pixel, default 0

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + translate(_:z:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func translate(_ point: CGPoint, z: CGFloat = 0) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(x:y:z:) + +
    +
    +
    +
    +
    +
    +

    Rotate 3d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(x: CGFloat = 0, y: CGFloat = 0, z: CGFloat = 0) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + x + + +
    +

    rotation on x axis in radian, default 0

    +
    +
    + + y + + +
    +

    rotation on y axis in radian, default 0

    +
    +
    + + z + + +
    +

    rotation on z axis in radian, default 0

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(_:z:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(_ point: CGPoint, z: CGFloat = 0) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rotate(_:) + +
    +
    +
    +
    +
    +
    +

    Rotate 2d

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func rotate(_ z: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + z + + +
    +

    rotation in radian

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + opacity(_:) + +
    +
    +
    +
    +
    +
    +

    Set the opacity for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func opacity(_ opacity: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + opacity + + +
    +

    opacity for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + backgroundColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the backgroundColor for the view to animate from/to.

    + +
      +
    • backgroundColor: backgroundColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func backgroundColor(_ backgroundColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cornerRadius(_:) + +
    +
    +
    +
    +
    +
    +

    Set the cornerRadius for the view to animate from/to.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cornerRadius(_ cornerRadius: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + cornerRadius + + +
    +

    cornerRadius for the view to animate from/to

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + zPosition(_:) + +
    +
    +
    +
    +
    +
    +

    Set the zPosition for the view to animate from/to.

    + +
      +
    • zPosition: zPosition for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func zPosition(_ zPosition: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsRect(_:) + +
    +
    +
    +
    +
    +
    +

    Set the contentsRect for the view to animate from/to.

    + +
      +
    • contentsRect: contentsRect for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func contentsRect(_ contentsRect: CGRect) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsScale(_:) + +
    +
    +
    +
    +
    +
    +

    Set the contentsScale for the view to animate from/to.

    + +
      +
    • contentsScale: contentsScale for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func contentsScale(_ contentsScale: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderWidth(_:) + +
    +
    +
    +
    +
    +
    +

    Set the borderWidth for the view to animate from/to.

    + +
      +
    • borderWidth: borderWidth for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func borderWidth(_ borderWidth: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the borderColor for the view to animate from/to.

    + +
      +
    • borderColor: borderColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func borderColor(_ borderColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowColor(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowColor for the view to animate from/to.

    + +
      +
    • shadowColor: shadowColor for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowColor(_ shadowColor: UIColor) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOpacity(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowOpacity for the view to animate from/to.

    + +
      +
    • shadowOpacity: shadowOpacity for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowOpacity(_ shadowOpacity: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOffset(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowOffset for the view to animate from/to.

    + +
      +
    • shadowOffset: shadowOffset for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowOffset(_ shadowOffset: CGSize) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowRadius(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowRadius for the view to animate from/to.

    + +
      +
    • shadowRadius: shadowRadius for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowRadius(_ shadowRadius: CGFloat) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowPath(_:) + +
    +
    +
    +
    +
    +
    +

    Set the shadowPath for the view to animate from/to.

    + +
      +
    • shadowPath: shadowPath for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func shadowPath(_ shadowPath: CGPath) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + masksToBounds(_:) + +
    +
    +
    +
    +
    +
    +

    Set the masksToBounds for the view to animate from/to.

    + +
      +
    • masksToBounds: masksToBounds for the view to animate from/to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func masksToBounds(_ masksToBounds: Bool) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Create an overlay on the animating view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func overlay(color: UIColor, opacity: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + color + + +
    +

    color of the overlay

    +
    +
    + + opacity + + +
    +

    opacity of the overlay

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + duration(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.

    + +

    Note: a duration of .infinity means matching the duration of the longest animation. same as .durationMatchLongest

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func duration(_ duration: TimeInterval) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + duration + + +
    +

    duration of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + durationMatchLongest + +
    +
    +
    +
    +
    +
    +

    Sets the duration of the animation for a given view to match the longest animation of the transition.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var durationMatchLongest: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + delay(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the delay of the animation for a given view.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func delay(_ delay: TimeInterval) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + delay + + +
    +

    delay of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + timingFunction(_:) + +
    +
    +
    +
    +
    +
    +

    Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func timingFunction(_ timingFunction: CAMediaTimingFunction) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + timingFunction + + +
    +

    timing function of the animation

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    (iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @available(iOS 9, *)
    +public static func spring(stiffness: CGFloat, damping: CGFloat) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + stiffness + + +
    +

    stiffness of the spring

    +
    +
    + + damping + + +
    +

    damping of the spring

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + source(heroID:) + +
    +
    +
    +
    +
    +
    +

    Transition from/to the state of the view with matching heroID +Will also force the view to use global coordinate space.

    + +

    The following layer properties will be animated from the given view.

    +
    position
    +bounds.size
    +cornerRadius
    +transform
    +shadowColor
    +shadowOpacity
    +shadowOffset
    +shadowRadius
    +shadowPath
    +
    + +

    Note that the following properties won’t be taken from the source view.

    +
    backgroundColor
    +borderWidth
    +borderColor
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func source(heroID: String) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + heroID + + +
    +

    the source view’s heroId.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc + +
    +
    +
    +
    +
    +
    +

    Works in combination with position modifier to apply a natural curve when moving to the destination.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var arc: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc(intensity:) + +
    +
    +
    +
    +
    +
    +

    Works in combination with position modifier to apply a natural curve when moving to the destination.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func arc(intensity: CGFloat = 1) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + intensity + + +
    +

    a value of 1 represent a downward natural curve ╰. a value of -1 represent a upward curve ╮. +default is 1.

    +
    +
    +
    + +
    +
    +
  • +
  • +
    + + + + cascade + +
    +
    +
    +
    +
    +
    +

    Cascade applys increasing delay modifiers to subviews

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var cascade: HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Cascade applys increasing delay modifiers to subviews

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func cascade(delta: TimeInterval = 0.02,
    +                           direction: CascadeDirection = .topToBottom,
    +                           delayMatchedViews: Bool = false) -> HeroModifier
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + delta + + +
    +

    delay in between each animation

    +
    +
    + + direction + + +
    +

    cascade direction

    +
    +
    + + delayMatchedViews + + +
    +

    whether or not to delay matched subviews until all cascading animation have started

    +
    +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + when(_:_:) + +
    +
    +
    +
    +
    +
    +

    Apply modifiers only if the condition return true.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func when(_ condition: @escaping (HeroConditionalContext) -> Bool, _ modifiers: [HeroModifier]) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + when(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func when(_ condition: @escaping (HeroConditionalContext) -> Bool, _ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenMatched(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenMatched(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenPresenting(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenPresenting(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenDismissing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenDismissing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenAppearing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenAppearing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + whenDisappearing(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func whenDisappearing(_ modifiers: HeroModifier...) -> HeroModifier
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html new file mode 100644 index 00000000..7857f3ad --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroPlugin.html @@ -0,0 +1,945 @@ + + + + HeroPlugin Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroPlugin

+
+
+
open class HeroPlugin : NSObject, HeroPreprocessor, HeroAnimator
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + hero + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    weak public var hero: HeroTransition!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + context + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var context: HeroContext! { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Determines whether or not to receive seekTo callback on every frame.

    + +

    Default is false.

    + +

    When requirePerFrameCallback is false, the plugin needs to start its own animations inside animate & resume +The seekTo method is only being called during an interactive transition.

    + +

    When requirePerFrameCallback is true, the plugin will receive seekTo callback on every animation frame. Hence it is possible for the plugin to do per-frame animations without implementing animate & resume

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open var requirePerFrameCallback: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override required init()
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Called before any animation. +Override this method when you want to preprocess modifiers for views

    + +

    To check a view’s modifiers:

    +
    context[view]
    +context[view, "modifierName"]
    +
    + +

    To set a view’s modifiers:

    +
    context[view] = [("modifier1", ["parameter1"]), ("modifier2", [])]
    +context[view, "modifier1"] = ["parameter1", "parameter2"]
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func process(fromViews: [UIView], toViews: [UIView])
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + fromViews + + +
    +

    A flattened list of all views from source ViewController

    +
    +
    + + toViews + + +
    +

    A flattened list of all views from destination ViewController

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func canAnimate(view: UIView, appearing: Bool) -> Bool
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + view + + +
    +

    the view to check whether or not the plugin can handle the animation

    +
    +
    + + appearing + + +
    +

    true if the view is appearing(i.e. a view in destination ViewController) +If return true, Hero won’t animate and won’t let any other plugins animate this view. +The view will also be hidden automatically during the animation.

    +
    +
    +
    +
    +

    Return Value

    +

    return true if the plugin can handle animating the view.

    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Perform the animation.

    + +

    Note: views in fromViews & toViews are hidden already. Unhide then if you need to take snapshots.

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func animate(fromViews: [UIView], toViews: [UIView]) -> TimeInterval
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + + + + + +
    + + context + + +
    +

    object holding all parsed and changed modifiers,

    +
    +
    + + fromViews + + +
    +

    A flattened list of all views from source ViewController (filtered by canAnimate)

    +
    +
    + + toViews + + +
    +

    A flattened list of all views from destination ViewController (filtered by canAnimate)

    +
    +
    +
    +
    +

    Return Value

    +

    The duration needed to complete the animation

    +
    + +
    +
    +
  • +
  • +
    + + + + clean() + +
    +
    +
    +
    +
    +
    +

    Called when all animations are completed.

    + +

    Should perform cleanup and release any reference

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func clean()
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + seekTo(timePassed:) + +
    +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when an interactive animation is in place +The plugin should pause the animation, and seek to the given progress

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func seekTo(timePassed: TimeInterval)
    + +
    +
    +
    +

    Parameters

    + + + + + + + +
    + + timePassed + + +
    +

    time of the animation to seek to.

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when an interactive animation is ended +The plugin should resume the animation.

    + +
      +
    • timePassed: will be the same value since last seekTo
    • +
    • reverse: a boolean value indicating whether or not the animation should reverse
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func resume(timePassed: TimeInterval, reverse: Bool) -> TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + apply(state:to:) + +
    +
    +
    +
    +
    +
    +

    For supporting interactive animation only.

    + +

    This method is called when user wants to override animation modifiers during an interactive animation

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func apply(state: HeroTargetState, to view: UIView)
    + +
    +
    +
    +

    Parameters

    + + + + + + + + + + + +
    + + state + + +
    +

    the target state to override

    +
    +
    + + view + + +
    +

    the view to override

    +
    +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func changeTarget(state: HeroTargetState, isDestination: Bool, to view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + isEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var isEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + enable() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func enable()
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + disable() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func disable()
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html new file mode 100644 index 00000000..e295f07c --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/HeroTransition.html @@ -0,0 +1,1706 @@ + + + + HeroTransition Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransition

+
+
+
open class HeroTransition : NSObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + delegate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var delegate: HeroTransitionDelegate?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + defaultAnimation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var defaultAnimation: HeroDefaultAnimationType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + containerColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var containerColor: UIColor
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isUserInteractionEnabled: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + viewOrderingStrategy + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var viewOrderingStrategy: HeroViewOrderingStrategy
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var defaultAnimationDirectionStrategy: HeroDefaultAnimationType.Strategy
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + state + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var state: HeroTransitionState { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isTransitioning + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isTransitioning: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isPresenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var isPresenting: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + transitioning + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transitioning: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + presenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var presenting: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + container + +
    +
    +
    +
    +
    +
    +

    container we created to hold all animating views, will be a subview of the +transitionContainer when transitioning

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var container: UIView!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViewController + +
    +
    +
    +
    +
    +
    +

    destination view controller

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var toViewController: UIViewController?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViewController + +
    +
    +
    +
    +
    +
    +

    source view controller

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var fromViewController: UIViewController?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + context + +
    +
    +
    +
    +
    +
    +

    context object holding transition informations

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var context: HeroContext!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + interactive + +
    +
    +
    +
    +
    +
    +

    whether or not we are handling transition interactively

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var interactive: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + totalDuration + +
    +
    +
    +
    +
    +
    +

    max duration needed by the animators

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var totalDuration: TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + progress + +
    +
    +
    +
    +
    +
    +

    progress of the current transition. 0 if no transition is happening

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public internal(set) var progress: Double { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override init()
    + +
    +
    + +
    +
    +
  • +
+
+
+ + +
+
+
    +
  • +
    + + + + animate() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func animate()
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transition(from: UIViewController, to: UIViewController, in view: UIView, completion: ((Bool) -> Void)? = nil)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + update(_:) + +
    +
    +
    +
    +
    +
    +

    Update the progress for the interactive transition.

    + +
      +
    • progress: the current progress, must be between 0…1
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func update(_ percentageComplete: CGFloat)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + finish(animate:) + +
    +
    +
    +
    +
    +
    +

    Finish the interactive transition. +Will stop the interactive transition and animate from the +current state to the end state

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func finish(animate: Bool = true)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cancel(animate:) + +
    +
    +
    +
    +
    +
    +

    Cancel the interactive transition. +Will stop the interactive transition and animate from the +current state to the beginning state

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func cancel(animate: Bool = true)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + apply(modifiers:to:) + +
    +
    +
    +
    +
    +
    +

    Override modifiers during an interactive animation.

    + +

    For example:

    + +

    Hero.shared.apply([.position(x:50, y:50)], to:view)

    + +

    will set the view’s position to 50, 50

    + +
      +
    • modifiers: the modifiers to override
    • +
    • view: the view to override to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func apply(modifiers: [HeroModifier], to view: UIView)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Override target state during an interactive animation.

    + +

    For example:

    + +

    Hero.shared.changeTarget([.position(x:50, y:50)], to:view)

    + +

    will animate the view’s position to 50, 50 once finish(animate:) is called

    + +
      +
    • modifiers: the modifiers to override
    • +
    • isDestination: if false, it changes the starting state
    • +
    • view: the view to override to
    • +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func changeTarget(modifiers: [HeroModifier], isDestination: Bool = true, to view: UIView)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + start() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    open func start()
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, didShow viewController: UIViewController, animated: Bool)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, animationControllerFor operation: UINavigationController.Operation, from fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func navigationController(_ navigationController: UINavigationController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, interactionControllerFor animationController: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tabBarController(_ tabBarController: UITabBarController, animationControllerForTransitionFrom fromVC: UIViewController, to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func interactionControllerForDismissal(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func interactionControllerForPresentation(using animator: UIViewControllerAnimatedTransitioning) -> UIViewControllerInteractiveTransitioning?
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animateTransition(using context: UIViewControllerContextTransitioning)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + animationEnded(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func animationEnded(_ transitionCompleted: Bool)
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + wantsInteractiveStart + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var wantsInteractiveStart: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func startInteractiveTransition(_ transitionContext: UIViewControllerContextTransitioning)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html new file mode 100644 index 00000000..393639ce --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Lexer.html @@ -0,0 +1,328 @@ + + + + Lexer Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Lexer

+
+
+
public class Lexer
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(input:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(input: String)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + tokenize() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func tokenize() -> [Token]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html new file mode 100644 index 00000000..7f87ad22 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/NumberNode.html @@ -0,0 +1,358 @@ + + + + NumberNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

NumberNode

+
+
+
public class NumberNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + value + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let value: Float
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + init(value:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(value: Float)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html new file mode 100644 index 00000000..e1031b72 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/Parser.html @@ -0,0 +1,328 @@ + + + + Parser Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Parser

+
+
+
public class Parser
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + init(tokens:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(tokens: [Token])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parse() + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func parse() throws -> [ExprNode]
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html new file mode 100644 index 00000000..1f372c9b --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/PrototypeNode.html @@ -0,0 +1,358 @@ + + + + PrototypeNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

PrototypeNode

+
+
+
public class PrototypeNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + argumentNames + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public let argumentNames: [String]
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public init(name: String, argumentNames: [String])
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html new file mode 100644 index 00000000..a66afe2e --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Classes/VariableNode.html @@ -0,0 +1,298 @@ + + + + VariableNode Class Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

VariableNode

+
+
+
public class VariableNode : ExprNode
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + description + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public override var description: String { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html new file mode 100644 index 00000000..104d4fbf --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums.html @@ -0,0 +1,534 @@ + + + + Enumerations Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Enumerations

+

The following enumerations are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+
    +
  • +
    + + + + Token + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum Token
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + ParseError + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public enum ParseError : Error
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html new file mode 100644 index 00000000..c32bf493 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/CascadeDirection.html @@ -0,0 +1,508 @@ + + + + CascadeDirection Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CascadeDirection

+
+
+
public enum CascadeDirection
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + topToBottom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case topToBottom
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + bottomToTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case bottomToTop
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leftToRight + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case leftToRight
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + rightToLeft + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case rightToLeft
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + radial(center:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case radial(center: CGPoint)
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case inverseRadial(center: CGPoint)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leadingToTrailing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var leadingToTrailing: CascadeDirection { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + trailingToLeading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var trailingToLeading: CascadeDirection { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html new file mode 100644 index 00000000..c66ce6a2 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroCoordinateSpace.html @@ -0,0 +1,328 @@ + + + + HeroCoordinateSpace Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCoordinateSpace

+
+
+
public enum HeroCoordinateSpace
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + global + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case global
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + local + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case local
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html new file mode 100644 index 00000000..d2a2fa93 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType.html @@ -0,0 +1,844 @@ + + + + HeroDefaultAnimationType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroDefaultAnimationType

+
+
+
public enum HeroDefaultAnimationType
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> HeroDefaultAnimationType?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html new file mode 100644 index 00000000..877cb861 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Direction.html @@ -0,0 +1,478 @@ + + + + Direction Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Direction

+
+
+
public enum Direction : HeroStringConvertible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + left + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case left
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + right + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case right
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + up + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case up
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + down + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case down
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func from(node: ExprNode) -> Direction?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + leading + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var leading: Direction { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + trailing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var trailing: Direction { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html new file mode 100644 index 00000000..b583e381 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroDefaultAnimationType/Strategy.html @@ -0,0 +1,358 @@ + + + + Strategy Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Strategy

+
+
+
public enum Strategy
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html new file mode 100644 index 00000000..2be51fcb --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroSnapshotType.html @@ -0,0 +1,393 @@ + + + + HeroSnapshotType Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroSnapshotType

+
+
+
public enum HeroSnapshotType
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + optimized + +
    +
    +
    +
    +
    +
    +

    Will optimize for different type of views +For custom views or views with masking, .optimizedDefault might create snapshots +that appear differently than the actual view. +In that case, use .normal or .slowRender to disable the optimization

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case optimized
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + normal + +
    +
    +
    +
    +
    +
    +

    snapshotView(afterScreenUpdates:)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case normal
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + layerRender + +
    +
    +
    +
    +
    +
    +

    layer.render(in: currentContext)

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case layerRender
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + noSnapshot + +
    +
    +
    +
    +
    +
    +

    will not create snapshot. animate the view directly. +This will mess up the view hierarchy, therefore, view controllers have to rebuild +its view structure after the transition finishes

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case noSnapshot
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html new file mode 100644 index 00000000..3d100544 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroTransitionState.html @@ -0,0 +1,418 @@ + + + + HeroTransitionState Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransitionState

+
+
+
public enum HeroTransitionState : Int
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + possible + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case possible
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + notified + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case notified
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + starting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case starting
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + animating + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case animating
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + completing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case completing
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html new file mode 100644 index 00000000..b7531b28 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/HeroViewOrderingStrategy.html @@ -0,0 +1,358 @@ + + + + HeroViewOrderingStrategy Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroViewOrderingStrategy

+
+
+
public enum HeroViewOrderingStrategy
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + auto + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case auto
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sourceViewOnTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case sourceViewOnTop
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + destinationViewOnTop + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case destinationViewOnTop
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html new file mode 100644 index 00000000..26ec7263 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/ParseError.html @@ -0,0 +1,448 @@ + + + + ParseError Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

ParseError

+
+
+
public enum ParseError : Error
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html new file mode 100644 index 00000000..41cccbb6 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Enums/Token.html @@ -0,0 +1,448 @@ + + + + Token Enumeration Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Token

+
+
+
public enum Token
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + identifier(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case identifier(String, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + number(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case number(Float, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parensOpen(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case parensOpen(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + parensClose(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case parensClose(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + comma(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case comma(CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + other(_:_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    case other(String, CountableRange<Int>)
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html new file mode 100644 index 00000000..b875e14d --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions.html @@ -0,0 +1,548 @@ + + + + Extensions Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Extensions

+

The following extensions are available globally.

+ +
+
+ +
+
+
+
    +
  • +
    + + + + HeroDebugView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension HeroDebugView: UIGestureRecognizerDelegate
    + +
    +
    + +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CAMediaTimingFunction + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension CAMediaTimingFunction
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + CATransform3D + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension CATransform3D: Equatable
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + UIView + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIView
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + UIViewController + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension UIViewController
    + +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UINavigationController
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + UITabBarController + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    extension UITabBarController
    + +
    +
    +
    +
    +
  • +
+
+
+
    +
  • +
    + + + + String + +
    +
    +
    +
    +
    +
    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public extension String
    + +
    +
    +
    +
    +
  • +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html new file mode 100644 index 00000000..53ebe48c --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CAMediaTimingFunction.html @@ -0,0 +1,567 @@ + + + + CAMediaTimingFunction Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CAMediaTimingFunction

+
+
+
public extension CAMediaTimingFunction
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + linear + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let linear: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeIn + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeIn: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeOut + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeOut: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeInOut + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeInOut: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + standard + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let standard: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + deceleration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let deceleration: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + acceleration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let acceleration: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + sharp + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let sharp: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + easeOutBack + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static let easeOutBack: CAMediaTimingFunction
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + from(name:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func from(name: String) -> CAMediaTimingFunction?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html new file mode 100644 index 00000000..7766c3dd --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/CATransform3D.html @@ -0,0 +1,296 @@ + + + + CATransform3D Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

CATransform3D

+
+
+
extension CATransform3D: Equatable
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + ==(_:_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static func == (lhs: CATransform3D, rhs: CATransform3D) -> Bool
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html new file mode 100644 index 00000000..fea8b8e5 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/HeroDebugView.html @@ -0,0 +1,279 @@ + + + + HeroDebugView Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + + + + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html new file mode 100644 index 00000000..49b8309a --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/String.html @@ -0,0 +1,297 @@ + + + + String Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

String

+
+
+
public extension String
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + match(regex:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public func match(regex: String) -> (String, CountableRange<Int>)?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html new file mode 100644 index 00000000..cd585556 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UINavigationController.html @@ -0,0 +1,279 @@ + + + + UINavigationController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UINavigationController

+ +
+
+ +
+
+
+
    +
  • +
    + + + + Operation + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html new file mode 100644 index 00000000..d3578269 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UITabBarController.html @@ -0,0 +1,328 @@ + + + + UITabBarController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UITabBarController

+
+
+
extension UITabBarController
+ +
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html new file mode 100644 index 00000000..83f6ec6f --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIView.html @@ -0,0 +1,421 @@ + + + + UIView Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UIView

+
+
+
public extension UIView
+ +
+
+ +
+
+ +
+
+
+
    +
  • +
    + + + + heroID + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var heroID: String? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isHeroEnabled + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var isHeroEnabled: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var isHeroEnabledForSubviews: Bool { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + heroModifiers + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var heroModifiers: [HeroModifier]? { get set }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + heroModifierString + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    @IBInspectable
    +var heroModifierString: String? { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html new file mode 100644 index 00000000..c662f574 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Extensions/UIViewController.html @@ -0,0 +1,636 @@ + + + + UIViewController Extension Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

UIViewController

+
+
+
public extension UIViewController
+ +
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html new file mode 100644 index 00000000..a44d8efa --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Functions.html @@ -0,0 +1,292 @@ + + + + Functions Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Functions

+

The following functions are available globally.

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html new file mode 100644 index 00000000..3cf58fc9 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols.html @@ -0,0 +1,531 @@ + + + + Protocols Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Protocols

+

The following protocols are available globally.

+ +
+
+ +
+
+
+ +
+
+
    +
  • + +
    +
    +
    +
    +
    +

    Allows a view to create their own custom snapshot when using Optimized snapshot

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public protocol HeroCustomSnapshotView
    + +
    +
    + +
    +
    +
  • +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html new file mode 100644 index 00000000..a432928f --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroAnimator.html @@ -0,0 +1,508 @@ + + + + HeroAnimator Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroAnimator

+
+
+
public protocol HeroAnimator : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html new file mode 100644 index 00000000..b66efbcb --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCompatible.html @@ -0,0 +1,336 @@ + + + + HeroCompatible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCompatible

+
+
+
public protocol HeroCompatible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + CompatibleType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    associatedtype CompatibleType
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + hero + + + Default implementation + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +

    Default Implementation

    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var hero: HeroExtension<CompatibleType> { get set }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html new file mode 100644 index 00000000..13438a61 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroCustomSnapshotView.html @@ -0,0 +1,298 @@ + + + + HeroCustomSnapshotView Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroCustomSnapshotView

+
+
+
public protocol HeroCustomSnapshotView
+ +
+
+

Allows a view to create their own custom snapshot when using Optimized snapshot

+ +
+
+ +
+
+
+
    +
  • +
    + + + + heroSnapshot + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    var heroSnapshot: UIView? { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html new file mode 100644 index 00000000..05ac19c9 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroPreprocessor.html @@ -0,0 +1,328 @@ + + + + HeroPreprocessor Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroPreprocessor

+
+
+
public protocol HeroPreprocessor : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html new file mode 100644 index 00000000..a60b00ad --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroProgressUpdateObserver.html @@ -0,0 +1,298 @@ + + + + HeroProgressUpdateObserver Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroProgressUpdateObserver

+
+
+
public protocol HeroProgressUpdateObserver : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html new file mode 100644 index 00000000..e07f639f --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroStringConvertible.html @@ -0,0 +1,298 @@ + + + + HeroStringConvertible Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroStringConvertible

+
+
+
public protocol HeroStringConvertible
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + from(node:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    static func from(node: ExprNode) -> `Self`?
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html new file mode 100644 index 00000000..8b8cafc9 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroTransitionDelegate.html @@ -0,0 +1,328 @@ + + + + HeroTransitionDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTransitionDelegate

+
+
+
public protocol HeroTransitionDelegate : AnyObject
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html new file mode 100644 index 00000000..29cfaf1d --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Protocols/HeroViewControllerDelegate.html @@ -0,0 +1,548 @@ + + + + HeroViewControllerDelegate Protocol Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroViewControllerDelegate

+
+
+
@objc
+public protocol HeroViewControllerDelegate
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html new file mode 100644 index 00000000..05a612f4 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs.html @@ -0,0 +1,328 @@ + + + + Structures Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

Structures

+

The following structures are available globally.

+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html new file mode 100644 index 00000000..fd2c797c --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroConditionalContext.html @@ -0,0 +1,658 @@ + + + + HeroConditionalContext Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroConditionalContext

+
+
+
public struct HeroConditionalContext
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + view + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public weak var view: UIView!
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAppearing + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public private(set) var isAppearing: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isPresenting + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isPresenting: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isInTabbarController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isInTabbarController: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isInNavbarController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isInNavbarController: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isMatched + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isMatched: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + isAncestorViewMatched + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var isAncestorViewMatched: Bool { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + matchedView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var matchedView: UIView? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + matchedAncestorView + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var matchedAncestorView: (UIView, UIView)? { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + fromViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var fromViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + toViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var toViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + currentViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var currentViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + otherViewController + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var otherViewController: UIViewController { get }
    + +
    +
    + +
    +
    +
  • +
+
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html new file mode 100644 index 00000000..31ba2130 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/Structs/HeroTargetState.html @@ -0,0 +1,1444 @@ + + + + HeroTargetState Structure Reference + + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+

HeroTargetState

+
+
+
public struct HeroTargetState
+ +
+
+

Undocumented

+ +
+
+ +
+
+
+
    +
  • +
    + + + + beginState + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var beginState: [HeroModifier]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + conditionalModifiers + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var conditionalModifiers: [((HeroConditionalContext) -> Bool, [HeroModifier])]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + position + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var position: CGPoint?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + size + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var size: CGSize?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + transform + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var transform: CATransform3D?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + opacity + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var opacity: Float?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cornerRadius + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cornerRadius: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + backgroundColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var backgroundColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + zPosition + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var zPosition: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsRect + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentsRect: CGRect?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + contentsScale + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var contentsScale: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderWidth + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderWidth: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + borderColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var borderColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowColor + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowColor: CGColor?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOpacity + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowOpacity: Float?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowOffset + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowOffset: CGSize?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowRadius + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowRadius: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + shadowPath + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var shadowPath: CGPath?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + masksToBounds + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var masksToBounds: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + displayShadow + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var displayShadow: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + overlay + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var overlay: (color: CGColor, opacity: CGFloat)?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + spring + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var spring: (CGFloat, CGFloat)?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + delay + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var delay: TimeInterval
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + duration + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var duration: TimeInterval?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + timingFunction + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var timingFunction: CAMediaTimingFunction?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + arc + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var arc: CGFloat?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + source + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var source: String?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + cascade + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var cascade: (TimeInterval, CascadeDirection, Bool)?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var ignoreSubviewModifiers: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + coordinateSpace + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var coordinateSpace: HeroCoordinateSpace?
    + +
    +
    + +
    +
    +
  • +
  • + +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var useScaleBasedSizeChange: Bool?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + snapshotType + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var snapshotType: HeroSnapshotType?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + nonFade + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var nonFade: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + forceAnimate + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var forceAnimate: Bool
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + custom + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public var custom: [String : Any]?
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(_:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(_ modifier: HeroModifier)
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + append(contentsOf:) + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public mutating func append(contentsOf modifiers: [HeroModifier])
    + +
    +
    + +
    +
    +
  • +
  • +
    + + + + subscript(_:) + +
    +
    +
    +
    +
    +
    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public subscript(key: String) -> Any? { get set }
    + +
    +
    +
    +

    Return Value

    +

    custom item for a specific key

    +
    + +
    +
    +
  • +
+
+
+ +
+
+
+ +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css new file mode 100644 index 00000000..d0db0e13 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/highlight.css @@ -0,0 +1,200 @@ +/* Credit to https://gist.github.com/wataru420/2048287 */ +.highlight { + /* Comment */ + /* Error */ + /* Keyword */ + /* Operator */ + /* Comment.Multiline */ + /* Comment.Preproc */ + /* Comment.Single */ + /* Comment.Special */ + /* Generic.Deleted */ + /* Generic.Deleted.Specific */ + /* Generic.Emph */ + /* Generic.Error */ + /* Generic.Heading */ + /* Generic.Inserted */ + /* Generic.Inserted.Specific */ + /* Generic.Output */ + /* Generic.Prompt */ + /* Generic.Strong */ + /* Generic.Subheading */ + /* Generic.Traceback */ + /* Keyword.Constant */ + /* Keyword.Declaration */ + /* Keyword.Pseudo */ + /* Keyword.Reserved */ + /* Keyword.Type */ + /* Literal.Number */ + /* Literal.String */ + /* Name.Attribute */ + /* Name.Builtin */ + /* Name.Class */ + /* Name.Constant */ + /* Name.Entity */ + /* Name.Exception */ + /* Name.Function */ + /* Name.Namespace */ + /* Name.Tag */ + /* Name.Variable */ + /* Operator.Word */ + /* Text.Whitespace */ + /* Literal.Number.Float */ + /* Literal.Number.Hex */ + /* Literal.Number.Integer */ + /* Literal.Number.Oct */ + /* Literal.String.Backtick */ + /* Literal.String.Char */ + /* Literal.String.Doc */ + /* Literal.String.Double */ + /* Literal.String.Escape */ + /* Literal.String.Heredoc */ + /* Literal.String.Interpol */ + /* Literal.String.Other */ + /* Literal.String.Regex */ + /* Literal.String.Single */ + /* Literal.String.Symbol */ + /* Name.Builtin.Pseudo */ + /* Name.Variable.Class */ + /* Name.Variable.Global */ + /* Name.Variable.Instance */ + /* Literal.Number.Integer.Long */ } + .highlight .c { + color: #999988; + font-style: italic; } + .highlight .err { + color: #a61717; + background-color: #e3d2d2; } + .highlight .k { + color: #000000; + font-weight: bold; } + .highlight .o { + color: #000000; + font-weight: bold; } + .highlight .cm { + color: #999988; + font-style: italic; } + .highlight .cp { + color: #999999; + font-weight: bold; } + .highlight .c1 { + color: #999988; + font-style: italic; } + .highlight .cs { + color: #999999; + font-weight: bold; + font-style: italic; } + .highlight .gd { + color: #000000; + background-color: #ffdddd; } + .highlight .gd .x { + color: #000000; + background-color: #ffaaaa; } + .highlight .ge { + color: #000000; + font-style: italic; } + .highlight .gr { + color: #aa0000; } + .highlight .gh { + color: #999999; } + .highlight .gi { + color: #000000; + background-color: #ddffdd; } + .highlight .gi .x { + color: #000000; + background-color: #aaffaa; } + .highlight .go { + color: #888888; } + .highlight .gp { + color: #555555; } + .highlight .gs { + font-weight: bold; } + .highlight .gu { + color: #aaaaaa; } + .highlight .gt { + color: #aa0000; } + .highlight .kc { + color: #000000; + font-weight: bold; } + .highlight .kd { + color: #000000; + font-weight: bold; } + .highlight .kp { + color: #000000; + font-weight: bold; } + .highlight .kr { + color: #000000; + font-weight: bold; } + .highlight .kt { + color: #445588; } + .highlight .m { + color: #009999; } + .highlight .s { + color: #d14; } + .highlight .na { + color: #008080; } + .highlight .nb { + color: #0086B3; } + .highlight .nc { + color: #445588; + font-weight: bold; } + .highlight .no { + color: #008080; } + .highlight .ni { + color: #800080; } + .highlight .ne { + color: #990000; + font-weight: bold; } + .highlight .nf { + color: #990000; } + .highlight .nn { + color: #555555; } + .highlight .nt { + color: #000080; } + .highlight .nv { + color: #008080; } + .highlight .ow { + color: #000000; + font-weight: bold; } + .highlight .w { + color: #bbbbbb; } + .highlight .mf { + color: #009999; } + .highlight .mh { + color: #009999; } + .highlight .mi { + color: #009999; } + .highlight .mo { + color: #009999; } + .highlight .sb { + color: #d14; } + .highlight .sc { + color: #d14; } + .highlight .sd { + color: #d14; } + .highlight .s2 { + color: #d14; } + .highlight .se { + color: #d14; } + .highlight .sh { + color: #d14; } + .highlight .si { + color: #d14; } + .highlight .sx { + color: #d14; } + .highlight .sr { + color: #009926; } + .highlight .s1 { + color: #d14; } + .highlight .ss { + color: #990073; } + .highlight .bp { + color: #999999; } + .highlight .vc { + color: #008080; } + .highlight .vg { + color: #008080; } + .highlight .vi { + color: #008080; } + .highlight .il { + color: #009999; } diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css new file mode 100644 index 00000000..833be0d2 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/css/jazzy.css @@ -0,0 +1,378 @@ +*, *:before, *:after { + box-sizing: inherit; } + +body { + margin: 0; + background: #fff; + color: #333; + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + letter-spacing: .2px; + -webkit-font-smoothing: antialiased; + box-sizing: border-box; } + +h1 { + font-size: 2rem; + font-weight: 700; + margin: 1.275em 0 0.6em; } + +h2 { + font-size: 1.75rem; + font-weight: 700; + margin: 1.275em 0 0.3em; } + +h3 { + font-size: 1.5rem; + font-weight: 700; + margin: 1em 0 0.3em; } + +h4 { + font-size: 1.25rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h5 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; } + +h6 { + font-size: 1rem; + font-weight: 700; + margin: 1.275em 0 0.85em; + color: #777; } + +p { + margin: 0 0 1em; } + +ul, ol { + padding: 0 0 0 2em; + margin: 0 0 0.85em; } + +blockquote { + margin: 0 0 0.85em; + padding: 0 15px; + color: #858585; + border-left: 4px solid #e5e5e5; } + +img { + max-width: 100%; } + +a { + color: #4183c4; + text-decoration: none; } + a:hover, a:focus { + outline: 0; + text-decoration: underline; } + a.discouraged { + text-decoration: line-through; } + a.discouraged:hover, a.discouraged:focus { + text-decoration: underline line-through; } + +table { + background: #fff; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + overflow: auto; + margin: 0 0 0.85em; } + +tr:nth-child(2n) { + background-color: #fbfbfb; } + +th, td { + padding: 6px 13px; + border: 1px solid #ddd; } + +pre { + margin: 0 0 1.275em; + padding: .85em 1em; + overflow: auto; + background: #f7f7f7; + font-size: .85em; + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +code { + font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; } + +p > code, li > code { + background: #f7f7f7; + padding: .2em; } + p > code:before, p > code:after, li > code:before, li > code:after { + letter-spacing: -.2em; + content: "\00a0"; } + +pre code { + padding: 0; + white-space: pre; } + +.content-wrapper { + display: flex; + flex-direction: column; } + @media (min-width: 768px) { + .content-wrapper { + flex-direction: row; } } + +.header { + display: flex; + padding: 8px; + font-size: 0.875em; + background: #444; + color: #999; } + +.header-col { + margin: 0; + padding: 0 8px; } + +.header-col--primary { + flex: 1; } + +.header-link { + color: #fff; } + +.header-icon { + padding-right: 6px; + vertical-align: -4px; + height: 16px; } + +.breadcrumbs { + font-size: 0.875em; + padding: 8px 16px; + margin: 0; + background: #fbfbfb; + border-bottom: 1px solid #ddd; } + +.carat { + height: 10px; + margin: 0 5px; } + +.navigation { + order: 2; } + @media (min-width: 768px) { + .navigation { + order: 1; + width: 25%; + max-width: 300px; + padding-bottom: 64px; + overflow: hidden; + word-wrap: normal; + background: #fbfbfb; + border-right: 1px solid #ddd; } } + +.nav-groups { + list-style-type: none; + padding-left: 0; } + +.nav-group-name { + border-bottom: 1px solid #ddd; + padding: 8px 0 8px 16px; } + +.nav-group-name-link { + color: #333; } + +.nav-group-tasks { + margin: 8px 0; + padding: 0 0 0 8px; } + +.nav-group-task { + font-size: 1em; + list-style-type: none; + white-space: nowrap; } + +.nav-group-task-link { + color: #808080; } + +.main-content { + order: 1; } + @media (min-width: 768px) { + .main-content { + order: 2; + flex: 1; + padding-bottom: 60px; } } + +.section { + padding: 0 32px; + border-bottom: 1px solid #ddd; } + +.section-content { + max-width: 834px; + margin: 0 auto; + padding: 16px 0; } + +.section-name { + color: #666; + display: block; } + +.declaration .highlight { + overflow-x: initial; + padding: 8px 0; + margin: 0; + background-color: transparent; + border: none; } + +.task-group-section { + border-top: 1px solid #ddd; } + +.task-group { + padding-top: 0px; } + +.task-name-container a[name]:before { + content: ""; + display: block; } + +.item-container { + padding: 0; } + +.item { + padding-top: 8px; + width: 100%; + list-style-type: none; } + .item a[name]:before { + content: ""; + display: block; } + .item .token, .item .direct-link { + padding-left: 3px; + margin-left: 0px; + font-size: 1rem; } + .item .declaration-note { + font-size: .85em; + color: #808080; + font-style: italic; } + +.pointer-container { + border-bottom: 1px solid #ddd; + left: -23px; + padding-bottom: 13px; + position: relative; + width: 110%; } + +.pointer { + left: 21px; + top: 7px; + display: block; + position: absolute; + width: 12px; + height: 12px; + border-left: 1px solid #ddd; + border-top: 1px solid #ddd; + background: #fff; + transform: rotate(45deg); } + +.height-container { + display: none; + position: relative; + width: 100%; + overflow: hidden; } + .height-container .section { + background: #fff; + border: 1px solid #ddd; + border-top-width: 0; + padding-top: 10px; + padding-bottom: 5px; + padding: 8px 16px; } + +.aside, .language { + padding: 6px 12px; + margin: 12px 0; + border-left: 5px solid #dddddd; + overflow-y: hidden; } + .aside .aside-title, .language .aside-title { + font-size: 9px; + letter-spacing: 2px; + text-transform: uppercase; + padding-bottom: 0; + margin: 0; + color: #aaa; + -webkit-user-select: none; } + .aside p:last-child, .language p:last-child { + margin-bottom: 0; } + +.language { + border-left: 5px solid #cde9f4; } + .language .aside-title { + color: #4183c4; } + +.aside-warning, .aside-deprecated, .aside-unavailable { + border-left: 5px solid #ff6666; } + .aside-warning .aside-title, .aside-deprecated .aside-title, .aside-unavailable .aside-title { + color: #ff0000; } + +.graybox { + border-collapse: collapse; + width: 100%; } + .graybox p { + margin: 0; + word-break: break-word; + min-width: 50px; } + .graybox td { + border: 1px solid #ddd; + padding: 5px 25px 5px 10px; + vertical-align: middle; } + .graybox tr td:first-of-type { + text-align: right; + padding: 7px; + vertical-align: top; + word-break: normal; + width: 40px; } + +.slightly-smaller { + font-size: 0.9em; } + +.footer { + padding: 8px 16px; + background: #444; + color: #ddd; + font-size: 0.8em; } + .footer p { + margin: 8px 0; } + .footer a { + color: #fff; } + +html.dash .header, html.dash .breadcrumbs, html.dash .navigation { + display: none; } + +html.dash .height-container { + display: block; } + +form[role=search] input { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 24px; + padding: 0 10px; + margin: 0; + border: none; + border-radius: 1em; } + .loading form[role=search] input { + background: white url(../img/spinner.gif) center right 4px no-repeat; } + +form[role=search] .tt-menu { + margin: 0; + min-width: 300px; + background: #fbfbfb; + color: #333; + border: 1px solid #ddd; } + +form[role=search] .tt-highlight { + font-weight: bold; } + +form[role=search] .tt-suggestion { + font: 16px/1.7 "Helvetica Neue", Helvetica, Arial, sans-serif; + padding: 0 8px; } + form[role=search] .tt-suggestion span { + display: table-cell; + white-space: nowrap; } + form[role=search] .tt-suggestion .doc-parent-name { + width: 100%; + text-align: right; + font-weight: normal; + font-size: 0.9em; + padding-left: 16px; } + +form[role=search] .tt-suggestion:hover, +form[role=search] .tt-suggestion.tt-cursor { + cursor: pointer; + background-color: #4183c4; + color: #fff; } + +form[role=search] .tt-suggestion:hover .doc-parent-name, +form[role=search] .tt-suggestion.tt-cursor .doc-parent-name { + color: #fff; } diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png b/docs/docsets/Hero.docset/Contents/Resources/Documents/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html b/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html new file mode 100644 index 00000000..dfc1ce90 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/index.html @@ -0,0 +1,398 @@ + + + + Hero Reference + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+ +

+ +

Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit’s cumbersome transition APIs—making custom transitions an easy task for developers.

+ +

Carthage compatible +Version +License +Xcode 9.0+ +iOS 8.0+ +Swift 4.0+ +中文 README +Donate

+ +

       +

+ +

Hero is similar to Keynote’s Magic Move. It checks the heroID property on all source and destination views. Every matched view pair is then automatically transitioned from its old state to its new state.

+ +

Hero can also construct animations for unmatched views. It is easy to define these animations via the heroModifiers property. Hero will run these animations alongside the Magic Move animations. All of these animations can be interactively controlled by user gestures.

+ +

At view controller level, Hero provides several template transitions that you can set through heroModalAnimationType, heroNavigationAnimationType, and heroTabBarAnimationType. These can be used as the foundation of your custom transitions. Combine with heroID & heroModifiers to make your own unique transitions.

+ +

       +

+ +

By default, Hero provides dynamic duration based on the Material Design Motion Guide. Duration is automatically determined by changes to distance and size—saving you the hassle, while providing consistent and delightful animations.

+ +

Hero doesn’t make any assumptions about how the view is built or structured. It won’t modify any of your views’ states other than hiding them during the animation. This makes it work with Auto Layout, programmatic layout, UICollectionView (without modifying its layout object), UITableView, UINavigationController, UITabBarController, etc…

+ + +

Checkout the Example Gallery Blog Post for a general idea of what you can achieve with Hero

+

Usage Example 1

+ +

+
View Controller 1
+
redView.hero.id = "ironMan"
+blackView.hero.id = "batMan"
+
+
View Controller 2
+
self.hero.isEnabled = true
+redView.hero.id = "ironMan"
+blackView.hero.id = "batMan"
+whiteView.hero.modifiers = [.translate(y:100)]
+
+

Usage Example 2

+ +

+
View Controller 1
+
greyView.hero.id = "skyWalker"
+
+
View Controller 2
+
self.hero.isEnabled = true
+greyView.hero.id = "skyWalker"
+
+// collectionView is the parent view of all red cells
+collectionView.hero.modifiers = [.cascade]
+for cell in redCells {
+    cell.hero.modifiers = [.fade, .scale(0.5)]
+}
+
+ +

You can do these in the storyboard too!

+ +

+

+

Installation

+

CocoaPods

+ +

Add the following entry to your Podfile:

+
pod 'Hero'
+
+ +

Then run pod install.

+ +

Don’t forget to import Hero in every file you’d like to use Hero.

+

Carthage

+ +

Add the following entry to your Cartfile:

+
github "HeroTransitions/Hero"
+
+ +

Then run carthage update.

+ +

If this is your first time using Carthage in the project, you’ll need to go through some additional steps as explained over at Carthage.

+

Swift Package Manager

+ +

To integrate using Apple’s Swift package manager, add the following as a dependency to your Package.swift:

+
.package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.3.0"))
+
+ +

and then specify "Hero" as a dependency of the Target in which you wish to use Hero. +Here’s an example PackageDescription:

+
// swift-tools-version:4.0
+import PackageDescription
+
+let package = Package(
+    name: "MyPackage",
+    products: [
+        .library(
+            name: "MyPackage",
+            targets: ["MyPackage"]),
+    ],
+    dependencies: [
+        .package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.3.0"))
+    ],
+    targets: [
+        .target(
+            name: "MyPackage",
+            dependencies: ["Hero"])
+    ]
+)
+
+

Manually

+ +
    +
  • Drag the Sources folder anywhere in your project.
  • +
+

Documentations

+ +

Checkout the WIKI PAGES (Usage Guide) for documentations.

+ +

For more up-to-date ones, please see the header-doc. (use alt+click in Xcode) +

+

Interactive Transition Tutorials

+ +

Interactive transitions with Hero (Part 1)

+

FAQ

+

Not able to use Hero transition even when self.hero.isEnabled is set to true

+ +

Make sure that you have also enabled self.hero.isEnabled on the navigation controller if you are doing a push/pop inside the navigation controller.

+

Views being covered by another matched view during the transition

+ +

Matched views use global coordinate space while unmatched views use local coordinate space by default. Local coordinate spaced views might be covered by other global coordinate spaced views. To solve this, use the useGlobalCoordinateSpace modifier on the views being covered. Checkout Coordinate Space Wiki page for details.

+

Push animation is shown along side my custom animation

+ +

This is the default animation for navigation controller provided by Hero. To disable the push animation, set self.hero.navigationAnimationType to .fade or .none on the navigation controller.

+

How do I use a different default animation when dismissing

+ +

You can use the animation type .selectBy(presenting:dismissing) to specify a different default animation for dismiss.

+ +

For example:

+
    self.hero.modalAnimationType = .selectBy(presenting:.zoom, dismissing:.zoomOut)
+
+

Contribute

+ +

We welcome any contributions. Please read the Contribution Guide.

+ +
+
+ + +
+
+ + + + diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js new file mode 100755 index 00000000..c31dc05e --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js new file mode 100644 index 00000000..e3d1ab90 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jazzy.search.js @@ -0,0 +1,70 @@ +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0=this.length)return z.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},z.QueryLexer.prototype.width=function(){return this.pos-this.start},z.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},z.QueryLexer.prototype.backup=function(){this.pos-=1},z.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.more=function(){return this.pos', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$input.attr({ + "aria-activedescendant": "", + "aria-owns": this.$input.attr("id") + "_listbox", + role: "combobox", + "aria-readonly": "true", + "aria-autocomplete": "list" + }); + $(www.menu).attr("id", this.$input.attr("id") + "_listbox"); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/docsets/Hero.docset/Contents/Resources/Documents/search.json b/docs/docsets/Hero.docset/Contents/Resources/Documents/search.json new file mode 100644 index 00000000..0ae2f538 --- /dev/null +++ b/docs/docsets/Hero.docset/Contents/Resources/Documents/search.json @@ -0,0 +1 @@ +{"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV4viewSo6UIViewCSgvp":{"name":"view","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV11isAppearingSbvp":{"name":"isAppearing","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV12isPresentingSbvp":{"name":"isPresenting","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV20isInTabbarControllerSbvp":{"name":"isInTabbarController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV20isInNavbarControllerSbvp":{"name":"isInNavbarController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV9isMatchedSbvp":{"name":"isMatched","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV21isAncestorViewMatchedSbvp":{"name":"isAncestorViewMatched","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV11matchedViewSo6UIViewCSgvp":{"name":"matchedView","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV19matchedAncestorViewSo6UIViewC_AFtSgvp":{"name":"matchedAncestorView","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV18fromViewControllerSo06UIViewF0Cvp":{"name":"fromViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV16toViewControllerSo06UIViewF0Cvp":{"name":"toViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV21currentViewControllerSo06UIViewF0Cvp":{"name":"currentViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV19otherViewControllerSo06UIViewF0Cvp":{"name":"otherViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV05beginC0SayAA0A8ModifierCGSgvp":{"name":"beginState","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV20conditionalModifiersSaySbAA0A18ConditionalContextVc_SayAA0A8ModifierCGtGSgvp":{"name":"conditionalModifiers","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV8positionSo7CGPointVSgvp":{"name":"position","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV4sizeSo6CGSizeVSgvp":{"name":"size","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV9transformSo13CATransform3DVSgvp":{"name":"transform","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7opacitySfSgvp":{"name":"opacity","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12cornerRadius12CoreGraphics7CGFloatVSgvp":{"name":"cornerRadius","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV15backgroundColorSo10CGColorRefaSgvp":{"name":"backgroundColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV9zPosition12CoreGraphics7CGFloatVSgvp":{"name":"zPosition","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12contentsRectSo6CGRectVSgvp":{"name":"contentsRect","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13contentsScale12CoreGraphics7CGFloatVSgvp":{"name":"contentsScale","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11borderWidth12CoreGraphics7CGFloatVSgvp":{"name":"borderWidth","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11borderColorSo10CGColorRefaSgvp":{"name":"borderColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11shadowColorSo10CGColorRefaSgvp":{"name":"shadowColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13shadowOpacitySfSgvp":{"name":"shadowOpacity","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12shadowOffsetSo6CGSizeVSgvp":{"name":"shadowOffset","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12shadowRadius12CoreGraphics7CGFloatVSgvp":{"name":"shadowRadius","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV10shadowPathSo9CGPathRefaSgvp":{"name":"shadowPath","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13masksToBoundsSbSgvp":{"name":"masksToBounds","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13displayShadowSbvp":{"name":"displayShadow","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7overlaySo10CGColorRefa5color_12CoreGraphics7CGFloatV7opacitytSgvp":{"name":"overlay","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6spring12CoreGraphics7CGFloatV_AGtSgvp":{"name":"spring","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV5delaySdvp":{"name":"delay","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV8durationSdSgvp":{"name":"duration","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV14timingFunctionSo013CAMediaTimingE0CSgvp":{"name":"timingFunction","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV3arc12CoreGraphics7CGFloatVSgvp":{"name":"arc","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6sourceSSSgvp":{"name":"source","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7cascadeSd_AA16CascadeDirectionOSbtSgvp":{"name":"cascade","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV22ignoreSubviewModifiersSbSgvp":{"name":"ignoreSubviewModifiers","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV15coordinateSpaceAA0a10CoordinateE0OSgvp":{"name":"coordinateSpace","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV23useScaleBasedSizeChangeSbSgvp":{"name":"useScaleBasedSizeChange","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12snapshotTypeAA0a8SnapshotE0OSgvp":{"name":"snapshotType","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7nonFadeSbvp":{"name":"nonFade","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12forceAnimateSbvp":{"name":"forceAnimate","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6customSDySSypGSgvp":{"name":"custom","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6appendyyAA0A8ModifierCF":{"name":"append(_:)","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6append10contentsOfySayAA0A8ModifierCG_tF":{"name":"append(contentsOf:)","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateVyypSgSScip":{"name":"subscript(_:)","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html":{"name":"HeroTargetState","abstract":"

Undocumented

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

Undocumented

"},"Protocols/HeroTransitionDelegate.html#/s:4Hero0A18TransitionDelegateP04heroB0_9didUpdateyAA0aB0C_AA0aB5StateOtF":{"name":"heroTransition(_:didUpdate:)","abstract":"

Undocumented

","parent_name":"HeroTransitionDelegate"},"Protocols/HeroTransitionDelegate.html#/s:4Hero0A18TransitionDelegateP04heroB0_9didUpdateyAA0aB0C_SdtF":{"name":"heroTransition(_:didUpdate:)","abstract":"

Undocumented

","parent_name":"HeroTransitionDelegate"},"Protocols/HeroStringConvertible.html#/s:4Hero0A17StringConvertibleP4from4nodexSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroStringConvertible"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartAnimatingFromViewController:":{"name":"heroWillStartAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndAnimatingFromViewController:":{"name":"heroDidEndAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelAnimatingFromViewController:":{"name":"heroDidCancelAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartTransition":{"name":"heroWillStartTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndTransition":{"name":"heroDidEndTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelTransition":{"name":"heroDidCancelTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartAnimatingToViewController:":{"name":"heroWillStartAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndAnimatingToViewController:":{"name":"heroDidEndAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelAnimatingToViewController:":{"name":"heroDidCancelAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroProgressUpdateObserver.html#/s:4Hero0A22ProgressUpdateObserverP07heroDidcB08progressySd_tF":{"name":"heroDidUpdateProgress(progress:)","abstract":"

Undocumented

","parent_name":"HeroProgressUpdateObserver"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP10canAnimate4view9appearingSbSo6UIViewC_SbtF":{"name":"canAnimate(view:appearing:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP7animate9fromViews02toE0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP5cleanyyF":{"name":"clean()","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP6seekTo10timePassedySd_tF":{"name":"seekTo(timePassed:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP5apply5state2toyAA0A11TargetStateV_So6UIViewCtF":{"name":"apply(state:to:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP12changeTarget5state13isDestination2toyAA0aD5StateV_SbSo6UIViewCtF":{"name":"changeTarget(state:isDestination:to:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroPreprocessor.html#/s:4Hero0A12PreprocessorP4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroPreprocessor"},"Protocols/HeroPreprocessor.html#/s:4Hero0A12PreprocessorP7process9fromViews02toE0ySaySo6UIViewCG_AItF":{"name":"process(fromViews:toViews:)","abstract":"

Undocumented

","parent_name":"HeroPreprocessor"},"Protocols/HeroCustomSnapshotView.html#/s:4Hero0A18CustomSnapshotViewP04heroC0So6UIViewCSgvp":{"name":"heroSnapshot","abstract":"

Undocumented

","parent_name":"HeroCustomSnapshotView"},"Protocols/HeroCompatible.html#/s:4Hero0A10CompatibleP0B4TypeQa":{"name":"CompatibleType","abstract":"

Undocumented

","parent_name":"HeroCompatible"},"Protocols/HeroCompatible.html#/s:4Hero0A10CompatibleP4heroAA0A9ExtensionCy0B4TypeQzGvp":{"name":"hero","abstract":"

Undocumented

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

Undocumented

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

Allows a view to create their own custom snapshot when using Optimized snapshot

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

"},"Functions.html#/s:4Hero2eeoiySbAA8ExprNodeC_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Extensions/HeroDebugView.html#/gestureRecognizerShouldBegin(_:)":{"name":"gestureRecognizerShouldBegin(_:)","parent_name":"HeroDebugView"},"Extensions/UINavigationController.html#/Operation":{"name":"Operation","parent_name":"UINavigationController"},"Extensions/String.html#/s:SS4HeroE5match5regexSS_SnySiGtSgSS_tF":{"name":"match(regex:)","abstract":"

Undocumented

","parent_name":"String"},"Extensions/UITabBarController.html#/s:So18UITabBarControllerC4HeroE07heroTabB13AnimationTypeAC0d7DefaultgH0Ovp":{"name":"heroTabBarAnimationType","abstract":"

Undocumented

","parent_name":"UITabBarController"},"Extensions/UITabBarController.html#/c:@CM@Hero@@objc(cs)UITabBarController(py)heroTabBarAnimationTypeString":{"name":"heroTabBarAnimationTypeString","abstract":"

Undocumented

","parent_name":"UITabBarController"},"Extensions/UINavigationController.html#/s:So22UINavigationControllerC4HeroE27heroNavigationAnimationTypeAC0c7DefaultfG0Ovp":{"name":"heroNavigationAnimationType","abstract":"

Undocumented

","parent_name":"UINavigationController"},"Extensions/UINavigationController.html#/c:@CM@Hero@@objc(cs)UINavigationController(py)heroNavigationAnimationTypeString":{"name":"heroNavigationAnimationTypeString","abstract":"

Undocumented

","parent_name":"UINavigationController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE22heroModalAnimationTypeAC0c7DefaultfG0Ovp":{"name":"heroModalAnimationType","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(py)heroModalAnimationTypeString":{"name":"heroModalAnimationTypeString","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(py)isHeroEnabled":{"name":"isHeroEnabled","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)ht_dismiss:":{"name":"ht_dismiss(_:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE015heroReplaceViewB04withyAB_tF":{"name":"heroReplaceViewController(with:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)hero_dismissViewController":{"name":"hero_dismissViewController()","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)hero_unwindToRootViewController":{"name":"hero_unwindToRootViewController()","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB0yyABF":{"name":"hero_unwindToViewController(_:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB012withSelectory10ObjectiveC0I0V_tF":{"name":"hero_unwindToViewController(withSelector:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB09withClassyyXlXp_tF":{"name":"hero_unwindToViewController(withClass:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB014withMatchBlockySbABXE_tF":{"name":"hero_unwindToViewController(withMatchBlock:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE016hero_replaceViewB04withyAB_tF":{"name":"hero_replaceViewController(with:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)heroID":{"name":"heroID","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)isHeroEnabled":{"name":"isHeroEnabled","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)isHeroEnabledForSubviews":{"name":"isHeroEnabledForSubviews","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/s:So6UIViewC4HeroE13heroModifiersSayAC0B8ModifierCGSgvp":{"name":"heroModifiers","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)heroModifierString":{"name":"heroModifierString","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/CATransform3D.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"CATransform3D"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE6linearABvpZ":{"name":"linear","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE6easeInABvpZ":{"name":"easeIn","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE7easeOutABvpZ":{"name":"easeOut","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE9easeInOutABvpZ":{"name":"easeInOut","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE8standardABvpZ":{"name":"standard","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE12decelerationABvpZ":{"name":"deceleration","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE12accelerationABvpZ":{"name":"acceleration","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE5sharpABvpZ":{"name":"sharp","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE11easeOutBackABvpZ":{"name":"easeOutBack","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE4from4nameABSgSS_tFZ":{"name":"from(name:)","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/HeroDebugView.html#/c:@CM@Hero@objc(cs)HeroDebugView(im)gestureRecognizerShouldBegin:":{"name":"gestureRecognizerShouldBegin(_:)","abstract":"

Undocumented

","parent_name":"HeroDebugView"},"Extensions/HeroDebugView.html":{"name":"HeroDebugView"},"Extensions/CAMediaTimingFunction.html":{"name":"CAMediaTimingFunction"},"Extensions/CATransform3D.html":{"name":"CATransform3D"},"Extensions/UIView.html":{"name":"UIView"},"Extensions/UIViewController.html":{"name":"UIViewController"},"Extensions/UINavigationController.html":{"name":"UINavigationController"},"Extensions/UITabBarController.html":{"name":"UITabBarController"},"Extensions/String.html":{"name":"String"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8possibleyA2CmF":{"name":"possible","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8notifiedyA2CmF":{"name":"notified","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8startingyA2CmF":{"name":"starting","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO9animatingyA2CmF":{"name":"animating","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO10completingyA2CmF":{"name":"completing","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO16forceLeftToRightyA2EmF":{"name":"forceLeftToRight","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO16forceRightToLeftyA2EmF":{"name":"forceRightToLeft","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO13userInterfaceyA2EmF":{"name":"userInterface","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4leftyA2EmF":{"name":"left","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO5rightyA2EmF":{"name":"right","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO2upyA2EmF":{"name":"up","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4downyA2EmF":{"name":"down","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4from4nodeAESgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO7leadingAEvpZ":{"name":"leading","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO8trailingAEvpZ":{"name":"trailing","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html":{"name":"Direction","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType/Strategy.html":{"name":"Strategy","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4autoyA2CmF":{"name":"auto","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4pushyA2C9DirectionO_tcACmF":{"name":"push(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4pullyA2C9DirectionO_tcACmF":{"name":"pull(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5coveryA2C9DirectionO_tcACmF":{"name":"cover(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7uncoveryA2C9DirectionO_tcACmF":{"name":"uncover(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5slideyA2C9DirectionO_tcACmF":{"name":"slide(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO9zoomSlideyA2C9DirectionO_tcACmF":{"name":"zoomSlide(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO6pageInyA2C9DirectionO_tcACmF":{"name":"pageIn(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7pageOutyA2C9DirectionO_tcACmF":{"name":"pageOut(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4fadeyA2CmF":{"name":"fade","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4zoomyA2CmF":{"name":"zoom","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7zoomOutyA2CmF":{"name":"zoomOut","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO8selectByyA2C_ACtcACmF":{"name":"selectBy(presenting:dismissing:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO11autoReverse10presentingA2C_tFZ":{"name":"autoReverse(presenting:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4noneyA2CmF":{"name":"none","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5labelSSSgvp":{"name":"label","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4from4nodeACSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11topToBottomyA2CmF":{"name":"topToBottom","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11bottomToTopyA2CmF":{"name":"bottomToTop","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11leftToRightyA2CmF":{"name":"leftToRight","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11rightToLeftyA2CmF":{"name":"rightToLeft","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO6radialyACSo7CGPointV_tcACmF":{"name":"radial(center:)","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO13inverseRadialyACSo7CGPointV_tcACmF":{"name":"inverseRadial(center:)","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO17leadingToTrailingACvpZ":{"name":"leadingToTrailing","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO17trailingToLeadingACvpZ":{"name":"trailingToLeading","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/ParseError.html#/s:4Hero10ParseErrorO13unexpectTokenyA2CmF":{"name":"unexpectToken","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO17undefinedOperatoryACSScACmF":{"name":"undefinedOperator(_:)","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO15expectCharacteryACSJcACmF":{"name":"expectCharacter(_:)","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO16expectExpressionyA2CmF":{"name":"expectExpression","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO18expectArgumentListyA2CmF":{"name":"expectArgumentList","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO18expectFunctionNameyA2CmF":{"name":"expectFunctionName","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/Token.html#/s:4Hero5TokenO10identifieryACSS_SnySiGtcACmF":{"name":"identifier(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO6numberyACSf_SnySiGtcACmF":{"name":"number(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO10parensOpenyACSnySiGcACmF":{"name":"parensOpen(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO11parensCloseyACSnySiGcACmF":{"name":"parensClose(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO5commayACSnySiGcACmF":{"name":"comma(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO5otheryACSS_SnySiGtcACmF":{"name":"other(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO4autoyA2CmF":{"name":"auto","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO06sourceB5OnTopyA2CmF":{"name":"sourceViewOnTop","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO011destinationB5OnTopyA2CmF":{"name":"destinationViewOnTop","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroCoordinateSpace.html#/s:4Hero0A15CoordinateSpaceO6globalyA2CmF":{"name":"global","abstract":"

Undocumented

","parent_name":"HeroCoordinateSpace"},"Enums/HeroCoordinateSpace.html#/s:4Hero0A15CoordinateSpaceO5localyA2CmF":{"name":"local","abstract":"

Undocumented

","parent_name":"HeroCoordinateSpace"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO9optimizedyA2CmF":{"name":"optimized","abstract":"

Will optimize for different type of views","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO6normalyA2CmF":{"name":"normal","abstract":"

snapshotView(afterScreenUpdates:)

","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO11layerRenderyA2CmF":{"name":"layerRender","abstract":"

layer.render(in: currentContext)

","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO02noB0yA2CmF":{"name":"noSnapshot","abstract":"

will not create snapshot. animate the view directly.","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html":{"name":"HeroSnapshotType","abstract":"

Undocumented

"},"Enums/HeroCoordinateSpace.html":{"name":"HeroCoordinateSpace","abstract":"

Undocumented

"},"Enums/HeroViewOrderingStrategy.html":{"name":"HeroViewOrderingStrategy","abstract":"

Undocumented

"},"Enums/Token.html":{"name":"Token","abstract":"

Undocumented

"},"Enums/ParseError.html":{"name":"ParseError","abstract":"

Undocumented

"},"Enums/CascadeDirection.html":{"name":"CascadeDirection","abstract":"

Undocumented

"},"Enums/HeroDefaultAnimationType.html":{"name":"HeroDefaultAnimationType","abstract":"

Undocumented

"},"Enums/HeroTransitionState.html":{"name":"HeroTransitionState","abstract":"

Undocumented

"},"Classes/HeroDebugPlugin.html#/showOnTop":{"name":"showOnTop","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/animate(fromViews:toViews:)":{"name":"animate(fromViews:toViews:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/resume(timePassed:reverse:)":{"name":"resume(timePassed:reverse:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/clean()":{"name":"clean()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/onDone()":{"name":"onDone()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/onProcessSliderChanged(progress:)":{"name":"onProcessSliderChanged(progress:)","parent_name":"HeroDebugPlugin"},"Classes/Hero.html#/s:4HeroAAC6sharedAA0A10TransitionCvpZ":{"name":"shared","abstract":"

Shared singleton object for controlling the transition

","parent_name":"Hero"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC16defaultAnimationAA0a7DefaultD4TypeOvp":{"name":"defaultAnimation","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC14containerColorSo7UIColorCvp":{"name":"containerColor","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC20viewOrderingStrategyAA0a4ViewdE0Ovp":{"name":"viewOrderingStrategy","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC33defaultAnimationDirectionStrategyAA0a7DefaultD4TypeO0F0Ovp":{"name":"defaultAnimationDirectionStrategy","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5stateAA0aB5StateOvp":{"name":"state","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC15isTransitioningSbvp":{"name":"isTransitioning","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC12isPresentingSbvp":{"name":"isPresenting","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC13transitioningSbvp":{"name":"transitioning","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC10presentingSbvp":{"name":"presenting","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC9containerSo6UIViewCSgvp":{"name":"container","abstract":"

container we created to hold all animating views, will be a subview of the","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC16toViewControllerSo06UIViewE0CSgvp":{"name":"toViewController","abstract":"

destination view controller

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC18fromViewControllerSo06UIViewE0CSgvp":{"name":"fromViewController","abstract":"

source view controller

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC7contextAA0A7ContextCSgvp":{"name":"context","abstract":"

context object holding transition informations

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC11interactiveSbvp":{"name":"interactive","abstract":"

whether or not we are handling transition interactively

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC13totalDurationSdvp":{"name":"totalDuration","abstract":"

max duration needed by the animators

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8progressSdvp":{"name":"progress","abstract":"

progress of the current transition. 0 if no transition is happening

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@M@Hero@objc(cs)HeroTransition(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC24observeForProgressUpdate8observeryAA0aeF8Observer_p_tF":{"name":"observeForProgressUpdate(observer:)","abstract":"

Receive callbacks on each animation frame.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC7animateyyF":{"name":"animate()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8complete8finishedySb_tF":{"name":"complete(finished:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC10transition4from2to2in10completionySo16UIViewControllerC_AJSo0H0CySbcSgtF":{"name":"transition(from:to:in:completion:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6updateyy12CoreGraphics7CGFloatVF":{"name":"update(_:)","abstract":"

Update the progress for the interactive transition.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6finish7animateySb_tF":{"name":"finish(animate:)","abstract":"

Finish the interactive transition.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6cancel7animateySb_tF":{"name":"cancel(animate:)","abstract":"

Cancel the interactive transition.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5apply9modifiers2toySayAA0A8ModifierCG_So6UIViewCtF":{"name":"apply(modifiers:to:)","abstract":"

Override modifiers during an interactive animation.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC12changeTarget9modifiers13isDestination2toySayAA0A8ModifierCG_SbSo6UIViewCtF":{"name":"changeTarget(modifiers:isDestination:to:)","abstract":"

Override target state during an interactive animation.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5startyyF":{"name":"start()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:willShowViewController:animated:":{"name":"navigationController(_:willShow:animated:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:didShowViewController:animated:":{"name":"navigationController(_:didShow:animated:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:animationControllerForOperation:fromViewController:toViewController:":{"name":"navigationController(_:animationControllerFor:from:to:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:interactionControllerForAnimationController:":{"name":"navigationController(_:interactionControllerFor:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:shouldSelectViewController:":{"name":"tabBarController(_:shouldSelect:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:interactionControllerForAnimationController:":{"name":"tabBarController(_:interactionControllerFor:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:animationControllerForTransitionFromViewController:toViewController:":{"name":"tabBarController(_:animationControllerForTransitionFrom:to:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationControllerForPresentedController:presentingController:sourceController:":{"name":"animationController(forPresented:presenting:source:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationControllerForDismissedController:":{"name":"animationController(forDismissed:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)interactionControllerForDismissal:":{"name":"interactionControllerForDismissal(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)interactionControllerForPresentation:":{"name":"interactionControllerForPresentation(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animateTransition:":{"name":"animateTransition(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)transitionDuration:":{"name":"transitionDuration(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationEnded:":{"name":"animationEnded(_:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(py)wantsInteractiveStart":{"name":"wantsInteractiveStart","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)startInteractiveTransition:":{"name":"startInteractiveTransition(_:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/Parser.html#/s:4Hero6ParserC6tokensACSayAA5TokenOG_tcfc":{"name":"init(tokens:)","abstract":"

Undocumented

","parent_name":"Parser"},"Classes/Parser.html#/s:4Hero6ParserC5parseSayAA8ExprNodeCGyKF":{"name":"parse()","abstract":"

Undocumented

","parent_name":"Parser"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC9prototypeAA09PrototypeC0Cvp":{"name":"prototype","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC4bodyAA04ExprC0Cvp":{"name":"body","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC9prototype4bodyAcA09PrototypeC0C_AA04ExprC0Ctcfc":{"name":"init(prototype:body:)","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC13argumentNamesSaySSGvp":{"name":"argumentNames","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC4name13argumentNamesACSS_SaySSGtcfc":{"name":"init(name:argumentNames:)","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC9argumentsSayAA04ExprC0CGvp":{"name":"arguments","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC4name9argumentsACSS_SayAA04ExprC0CGtcfc":{"name":"init(name:arguments:)","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC3lhsAA04ExprD0Cvp":{"name":"lhs","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC3rhsAA04ExprD0Cvp":{"name":"rhs","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC4name3lhs3rhsACSS_AA04ExprD0CAHtcfc":{"name":"init(name:lhs:rhs:)","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/VariableNode.html#/s:4Hero12VariableNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"VariableNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC5valueSfvp":{"name":"value","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC5valueACSf_tcfc":{"name":"init(value:)","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC5rangeSnySiGvp":{"name":"range","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC4nameSSvp":{"name":"name","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC4nameACSS_tcfc":{"name":"init(name:)","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/Lexer.html#/s:4Hero5LexerC5inputACSS_tcfc":{"name":"init(input:)","abstract":"

Undocumented

","parent_name":"Lexer"},"Classes/Lexer.html#/s:4Hero5LexerC8tokenizeSayAA5TokenOGyF":{"name":"tokenize()","abstract":"

Undocumented

","parent_name":"Lexer"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7contextAA0A7ContextCSgvp":{"name":"context","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC23requirePerFrameCallbackSbvp":{"name":"requirePerFrameCallback","abstract":"

Determines whether or not to receive seekTo callback on every frame.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/c:@M@Hero@objc(cs)HeroPlugin(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7process9fromViews02toE0ySaySo6UIViewCG_AItF":{"name":"process(fromViews:toViews:)","abstract":"

Called before any animation.","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC10canAnimate4view9appearingSbSo6UIViewC_SbtF":{"name":"canAnimate(view:appearing:)","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7animate9fromViews02toE0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","abstract":"

Perform the animation.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC5cleanyyF":{"name":"clean()","abstract":"

Called when all animations are completed.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6seekTo10timePassedySd_tF":{"name":"seekTo(timePassed:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC5apply5state2toyAA0A11TargetStateV_So6UIViewCtF":{"name":"apply(state:to:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC12changeTarget5state13isDestination2toyAA0aD5StateV_SbSo6UIViewCtF":{"name":"changeTarget(state:isDestination:to:)","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC9isEnabledSbvpZ":{"name":"isEnabled","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6enableyyFZ":{"name":"enable()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7disableyyFZ":{"name":"disable()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13applyFunctionACyAA0A11TargetStateVzc_tcfc":{"name":"init(applyFunction:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWithyACSayACGFZ":{"name":"beginWith(_:)","abstract":"

Apply modifiers directly to the view at the start of the transition.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWith9modifiersACSayACG_tFZ":{"name":"beginWith(modifiers:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWithyA2Cd_tFZ":{"name":"beginWith(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC24useGlobalCoordinateSpaceACvpZ":{"name":"useGlobalCoordinateSpace","abstract":"

Use global coordinate space.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22ignoreSubviewModifiersACvpZ":{"name":"ignoreSubviewModifiers","abstract":"

ignore all heroModifiers attributes for a view’s direct subviews.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22ignoreSubviewModifiers9recursiveACSb_tFZ":{"name":"ignoreSubviewModifiers(recursive:)","abstract":"

ignore all heroModifiers attributes for a view’s subviews.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC20useOptimizedSnapshotACvpZ":{"name":"useOptimizedSnapshot","abstract":"

Will create snapshot optimized for different view type.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC17useNormalSnapshotACvpZ":{"name":"useNormalSnapshot","abstract":"

Create snapshot using snapshotView(afterScreenUpdates:).

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22useLayerRenderSnapshotACvpZ":{"name":"useLayerRenderSnapshot","abstract":"

Create snapshot using layer.render(in: currentContext).","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13useNoSnapshotACvpZ":{"name":"useNoSnapshot","abstract":"

Force Hero to not create any snapshot when animating this view.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12forceAnimateACvpZ":{"name":"forceAnimate","abstract":"

Force the view to animate.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC23useScaleBasedSizeChangeACvpZ":{"name":"useScaleBasedSizeChange","abstract":"

Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4from4nodeACSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4fadeACvpZ":{"name":"fade","abstract":"

Fade the view during transition

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12forceNonFadeACvpZ":{"name":"forceNonFade","abstract":"

Force don’t fade view during transition

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC8positionyACSo7CGPointVFZ":{"name":"position(_:)","abstract":"

Set the position for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4sizeyACSo6CGSizeVFZ":{"name":"size(_:)","abstract":"

Set the size for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9transformyACSo13CATransform3DVFZ":{"name":"transform(_:)","abstract":"

Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11perspectiveyAC12CoreGraphics7CGFloatVFZ":{"name":"perspective(_:)","abstract":"

Set the perspective on the transform. use in combination with the rotate modifier.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5scale1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"scale(x:y:z:)","abstract":"

Scale 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5scaleyAC12CoreGraphics7CGFloatVFZ":{"name":"scale(_:)","abstract":"

Scale in x & y axis

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9translate1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"translate(x:y:z:)","abstract":"

Translate 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9translate_1zACSo7CGPointV_12CoreGraphics7CGFloatVtFZ":{"name":"translate(_:z:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotate1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"rotate(x:y:z:)","abstract":"

Rotate 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotate_1zACSo7CGPointV_12CoreGraphics7CGFloatVtFZ":{"name":"rotate(_:z:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotateyAC12CoreGraphics7CGFloatVFZ":{"name":"rotate(_:)","abstract":"

Rotate 2d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7opacityyAC12CoreGraphics7CGFloatVFZ":{"name":"opacity(_:)","abstract":"

Set the opacity for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC15backgroundColoryACSo7UIColorCFZ":{"name":"backgroundColor(_:)","abstract":"

Set the backgroundColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12cornerRadiusyAC12CoreGraphics7CGFloatVFZ":{"name":"cornerRadius(_:)","abstract":"

Set the cornerRadius for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9zPositionyAC12CoreGraphics7CGFloatVFZ":{"name":"zPosition(_:)","abstract":"

Set the zPosition for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12contentsRectyACSo6CGRectVFZ":{"name":"contentsRect(_:)","abstract":"

Set the contentsRect for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13contentsScaleyAC12CoreGraphics7CGFloatVFZ":{"name":"contentsScale(_:)","abstract":"

Set the contentsScale for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11borderWidthyAC12CoreGraphics7CGFloatVFZ":{"name":"borderWidth(_:)","abstract":"

Set the borderWidth for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11borderColoryACSo7UIColorCFZ":{"name":"borderColor(_:)","abstract":"

Set the borderColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11shadowColoryACSo7UIColorCFZ":{"name":"shadowColor(_:)","abstract":"

Set the shadowColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13shadowOpacityyAC12CoreGraphics7CGFloatVFZ":{"name":"shadowOpacity(_:)","abstract":"

Set the shadowOpacity for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12shadowOffsetyACSo6CGSizeVFZ":{"name":"shadowOffset(_:)","abstract":"

Set the shadowOffset for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12shadowRadiusyAC12CoreGraphics7CGFloatVFZ":{"name":"shadowRadius(_:)","abstract":"

Set the shadowRadius for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC10shadowPathyACSo9CGPathRefaFZ":{"name":"shadowPath(_:)","abstract":"

Set the shadowPath for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13masksToBoundsyACSbFZ":{"name":"masksToBounds(_:)","abstract":"

Set the masksToBounds for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7overlay5color7opacityACSo7UIColorC_12CoreGraphics7CGFloatVtFZ":{"name":"overlay(color:opacity:)","abstract":"

Create an overlay on the animating view.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC8durationyACSdFZ":{"name":"duration(_:)","abstract":"

Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC20durationMatchLongestACvpZ":{"name":"durationMatchLongest","abstract":"

Sets the duration of the animation for a given view to match the longest animation of the transition.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5delayyACSdFZ":{"name":"delay(_:)","abstract":"

Sets the delay of the animation for a given view.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14timingFunctionyACSo013CAMediaTimingD0CFZ":{"name":"timingFunction(_:)","abstract":"

Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6spring9stiffness7dampingAC12CoreGraphics7CGFloatV_AItFZ":{"name":"spring(stiffness:damping:)","abstract":"

(iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6source6heroIDACSS_tFZ":{"name":"source(heroID:)","abstract":"

Transition from/to the state of the view with matching heroID","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC3arcACvpZ":{"name":"arc","abstract":"

Works in combination with position modifier to apply a natural curve when moving to the destination.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC3arc9intensityAC12CoreGraphics7CGFloatV_tFZ":{"name":"arc(intensity:)","abstract":"

Works in combination with position modifier to apply a natural curve when moving to the destination.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7cascadeACvpZ":{"name":"cascade","abstract":"

Cascade applys increasing delay modifiers to subviews

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7cascade5delta9direction17delayMatchedViewsACSd_AA16CascadeDirectionOSbtFZ":{"name":"cascade(delta:direction:delayMatchedViews:)","abstract":"

Cascade applys increasing delay modifiers to subviews

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4whenyACSbAA0A18ConditionalContextVc_SayACGtFZ":{"name":"when(_:_:)","abstract":"

Apply modifiers only if the condition return true.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4whenyACSbAA0A18ConditionalContextVc_ACdtFZ":{"name":"when(_:_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11whenMatchedyA2Cd_tFZ":{"name":"whenMatched(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14whenPresentingyA2Cd_tFZ":{"name":"whenPresenting(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14whenDismissingyA2Cd_tFZ":{"name":"whenDismissing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13whenAppearingyA2Cd_tFZ":{"name":"whenAppearing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC16whenDisappearingyA2Cd_tFZ":{"name":"whenDisappearing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroContext.html#/s:4Hero0A7ContextC9containerSo6UIViewCvp":{"name":"container","abstract":"

The container holding all of the animating views

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC9fromViewsSaySo6UIViewCGvp":{"name":"fromViews","abstract":"

A flattened list of all views from source ViewController

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC7toViewsSaySo6UIViewCGvp":{"name":"toViews","abstract":"

A flattened list of all views from destination ViewController

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC10sourceView3forSo6UIViewCSgSS_tF":{"name":"sourceView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC15destinationView3forSo6UIViewCSgSS_tF":{"name":"destinationView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC10pairedView3forSo6UIViewCSgAG_tF":{"name":"pairedView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC12snapshotView3forSo6UIViewCAG_tF":{"name":"snapshotView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextCyAA0A11TargetStateVSgSo6UIViewCcip":{"name":"subscript(_:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC5cleanyyF":{"name":"clean()","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC4hide4viewySo6UIViewC_tF":{"name":"hide(view:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC6unhide4viewySo6UIViewC_tF":{"name":"unhide(view:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionC4basexvp":{"name":"base","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE2idSSSgvp":{"name":"id","abstract":"

ID is the identifier for the view. When doing a transition between two view controllers,","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE9isEnabledSbvp":{"name":"isEnabled","abstract":"

isEnabled allows to specify whether a view and its subviews should be consider for animations.","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE20isEnabledForSubviewsSbvp":{"name":"isEnabledForSubviews","abstract":"

isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations.","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE9modifiersSayAA0A8ModifierCGSgvp":{"name":"modifiers","abstract":"

Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift for available modifiers.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE14modifierStringSSSgvp":{"name":"modifierString","abstract":"

modifierString** provides another way to set modifiers. It can be assigned through storyboard.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE18modalAnimationTypeAA0a7DefaultfG0Ovp":{"name":"modalAnimationType","abstract":"

default hero animation type for presenting & dismissing modally

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE24modalAnimationTypeStringSSSgvp":{"name":"modalAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE9isEnabledSbvp":{"name":"isEnabled","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo22UINavigationControllerCRbzlE23navigationAnimationTypeAA0a7DefaultfG0Ovp":{"name":"navigationAnimationType","abstract":"

default hero animation type for push and pop within the navigation controller

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo22UINavigationControllerCRbzlE29navigationAnimationTypeStringSSSgvp":{"name":"navigationAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo18UITabBarControllerCRbzlE03tabD13AnimationTypeAA0a7DefaultgH0Ovp":{"name":"tabBarAnimationType","abstract":"

default hero animation type for switching tabs within the tab bar controller

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo18UITabBarControllerCRbzlE03tabD19AnimationTypeStringSSSgvp":{"name":"tabBarAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE011dismissViewD010completionyyycSg_tF":{"name":"dismissViewController(completion:)","abstract":"

Dismiss the current view controller with animation. Will perform a navigationController.popViewController","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE016unwindToRootViewD0yyF":{"name":"unwindToRootViewController()","abstract":"

Unwind to the root view controller using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD0yyAEF":{"name":"unwindToViewController(_:)","abstract":"

Unwind to a specific view controller using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD012withSelectory10ObjectiveC0I0V_tF":{"name":"unwindToViewController(withSelector:)","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD09withClassyyXlXp_tF":{"name":"unwindToViewController(withClass:)","abstract":"

Unwind to a view controller with given class using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD014withMatchBlockySbAEXE_tF":{"name":"unwindToViewController(withMatchBlock:)","abstract":"

Unwind to a view controller that the matchBlock returns true on.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE011replaceViewD04with10completionyAE_yycSgtF":{"name":"replaceViewController(with:completion:)","abstract":"

Replace the current view controller with another VC on the navigation/modal stack.

","parent_name":"HeroExtension"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC9showOnTopSbvpZ":{"name":"showOnTop","abstract":"

Undocumented

","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC7animate9fromViews02toF0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC5cleanyyF":{"name":"clean()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC6onDoneyyF":{"name":"onDone()","abstract":"

Undocumented

","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC22onProcessSliderChanged8progressySf_tF":{"name":"onProcessSliderChanged(progress:)","abstract":"

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

The singleton class/object for controlling interactive transitions.

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

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

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

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} \ No newline at end of file diff --git a/docs/docsets/Hero.docset/Contents/Resources/docSet.dsidx b/docs/docsets/Hero.docset/Contents/Resources/docSet.dsidx new file mode 100644 index 0000000000000000000000000000000000000000..e228c262f6c44c7953d1a49e292d876c60a278cb GIT binary patch literal 114688 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 literal 0 HcmV?d00001 diff --git a/docs/docsets/Hero.tgz b/docs/docsets/Hero.tgz new file mode 100644 index 0000000000000000000000000000000000000000..61643e52139386ad700acd6f6c32439117b9a294 GIT binary patch literal 156873 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 z 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 DP9iR3RWQAs}z^2%Qw!YHLL% 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 ThkF0B|AOF5v7-amM+)~}%eyrw literal 0 HcmV?d00001 diff --git a/docs/img/carat.png b/docs/img/carat.png new file mode 100755 index 0000000000000000000000000000000000000000..29d2f7fd4955fca6bc6fb740e0373a2c358c398e GIT binary patch literal 274 zcmeAS@N?(olHy`uVBq!ia0vp^0zfRo!3HEV4DF?Wlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqAi{-jv*Ddl5#RKJQ5NTUZgiPI4RUKGIKU?u8L&ndhX1t za+0CMVUnT(Gnb}ei=c~x==tMH^F1_tBocXwcoSWoO-SZY-o>!8%^=Bms)(~h;m_U( zXNixk28L}0LS5-jKyq@#2gyS|J&f#pGCLkTc<@2s1dqeyqJ*Rc0tSIETAgmODY;(s z2y|Mcp&2}7rpBprBBB~1qM1`N+}4SoxYVPqsXi&l`rxZp{(w0iSy$Nv5*Vy!RapG^ S^0y4=eg;ohKbLh*2~7a!Pg}VF literal 0 HcmV?d00001 diff --git a/docs/img/dash.png b/docs/img/dash.png new file mode 100755 index 0000000000000000000000000000000000000000..6f694c7a012b417908da3687a0a39aa182e91c74 GIT binary patch literal 1338 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 literal 0 HcmV?d00001 diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 00000000..dfc1ce90 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,398 @@ + + + + Hero Reference + + + + + + + + + + + + + + + +
+

+ + Hero 1.5.0 Docs + + (24% documented) +

+ +

+

+ +
+

+ +

+ + + View on GitHub + +

+ +

+ + + Install in Dash + +

+
+ + + +
+ +
+ +
+
+ +

+ +

Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit’s cumbersome transition APIs—making custom transitions an easy task for developers.

+ +

Carthage compatible +Version +License +Xcode 9.0+ +iOS 8.0+ +Swift 4.0+ +中文 README +Donate

+ +

       +

+ +

Hero is similar to Keynote’s Magic Move. It checks the heroID property on all source and destination views. Every matched view pair is then automatically transitioned from its old state to its new state.

+ +

Hero can also construct animations for unmatched views. It is easy to define these animations via the heroModifiers property. Hero will run these animations alongside the Magic Move animations. All of these animations can be interactively controlled by user gestures.

+ +

At view controller level, Hero provides several template transitions that you can set through heroModalAnimationType, heroNavigationAnimationType, and heroTabBarAnimationType. These can be used as the foundation of your custom transitions. Combine with heroID & heroModifiers to make your own unique transitions.

+ +

       +

+ +

By default, Hero provides dynamic duration based on the Material Design Motion Guide. Duration is automatically determined by changes to distance and size—saving you the hassle, while providing consistent and delightful animations.

+ +

Hero doesn’t make any assumptions about how the view is built or structured. It won’t modify any of your views’ states other than hiding them during the animation. This makes it work with Auto Layout, programmatic layout, UICollectionView (without modifying its layout object), UITableView, UINavigationController, UITabBarController, etc…

+ + +

Checkout the Example Gallery Blog Post for a general idea of what you can achieve with Hero

+

Usage Example 1

+ +

+
View Controller 1
+
redView.hero.id = "ironMan"
+blackView.hero.id = "batMan"
+
+
View Controller 2
+
self.hero.isEnabled = true
+redView.hero.id = "ironMan"
+blackView.hero.id = "batMan"
+whiteView.hero.modifiers = [.translate(y:100)]
+
+

Usage Example 2

+ +

+
View Controller 1
+
greyView.hero.id = "skyWalker"
+
+
View Controller 2
+
self.hero.isEnabled = true
+greyView.hero.id = "skyWalker"
+
+// collectionView is the parent view of all red cells
+collectionView.hero.modifiers = [.cascade]
+for cell in redCells {
+    cell.hero.modifiers = [.fade, .scale(0.5)]
+}
+
+ +

You can do these in the storyboard too!

+ +

+

+

Installation

+

CocoaPods

+ +

Add the following entry to your Podfile:

+
pod 'Hero'
+
+ +

Then run pod install.

+ +

Don’t forget to import Hero in every file you’d like to use Hero.

+

Carthage

+ +

Add the following entry to your Cartfile:

+
github "HeroTransitions/Hero"
+
+ +

Then run carthage update.

+ +

If this is your first time using Carthage in the project, you’ll need to go through some additional steps as explained over at Carthage.

+

Swift Package Manager

+ +

To integrate using Apple’s Swift package manager, add the following as a dependency to your Package.swift:

+
.package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.3.0"))
+
+ +

and then specify "Hero" as a dependency of the Target in which you wish to use Hero. +Here’s an example PackageDescription:

+
// swift-tools-version:4.0
+import PackageDescription
+
+let package = Package(
+    name: "MyPackage",
+    products: [
+        .library(
+            name: "MyPackage",
+            targets: ["MyPackage"]),
+    ],
+    dependencies: [
+        .package(url: "https://github.com/HeroTransitions/Hero.git", .upToNextMajor(from: "1.3.0"))
+    ],
+    targets: [
+        .target(
+            name: "MyPackage",
+            dependencies: ["Hero"])
+    ]
+)
+
+

Manually

+ +
    +
  • Drag the Sources folder anywhere in your project.
  • +
+

Documentations

+ +

Checkout the WIKI PAGES (Usage Guide) for documentations.

+ +

For more up-to-date ones, please see the header-doc. (use alt+click in Xcode) +

+

Interactive Transition Tutorials

+ +

Interactive transitions with Hero (Part 1)

+

FAQ

+

Not able to use Hero transition even when self.hero.isEnabled is set to true

+ +

Make sure that you have also enabled self.hero.isEnabled on the navigation controller if you are doing a push/pop inside the navigation controller.

+

Views being covered by another matched view during the transition

+ +

Matched views use global coordinate space while unmatched views use local coordinate space by default. Local coordinate spaced views might be covered by other global coordinate spaced views. To solve this, use the useGlobalCoordinateSpace modifier on the views being covered. Checkout Coordinate Space Wiki page for details.

+

Push animation is shown along side my custom animation

+ +

This is the default animation for navigation controller provided by Hero. To disable the push animation, set self.hero.navigationAnimationType to .fade or .none on the navigation controller.

+

How do I use a different default animation when dismissing

+ +

You can use the animation type .selectBy(presenting:dismissing) to specify a different default animation for dismiss.

+ +

For example:

+
    self.hero.modalAnimationType = .selectBy(presenting:.zoom, dismissing:.zoomOut)
+
+

Contribute

+ +

We welcome any contributions. Please read the Contribution Guide.

+ +
+
+ + +
+
+ + +
+ diff --git a/docs/js/jazzy.js b/docs/js/jazzy.js new file mode 100755 index 00000000..c31dc05e --- /dev/null +++ b/docs/js/jazzy.js @@ -0,0 +1,59 @@ +window.jazzy = {'docset': false} +if (typeof window.dash != 'undefined') { + document.documentElement.className += ' dash' + window.jazzy.docset = true +} +if (navigator.userAgent.match(/xcode/i)) { + document.documentElement.className += ' xcode' + window.jazzy.docset = true +} + +function toggleItem($link, $content) { + var animationDuration = 300; + $link.toggleClass('token-open'); + $content.slideToggle(animationDuration); +} + +function itemLinkToContent($link) { + return $link.parent().parent().next(); +} + +// On doc load + hash-change, open any targetted item +function openCurrentItemIfClosed() { + if (window.jazzy.docset) { + return; + } + var $link = $(`.token[href="${location.hash}"]`); + $content = itemLinkToContent($link); + if ($content.is(':hidden')) { + toggleItem($link, $content); + } +} + +$(openCurrentItemIfClosed); +$(window).on('hashchange', openCurrentItemIfClosed); + +// On item link ('token') click, toggle its discussion +$('.token').on('click', function(event) { + if (window.jazzy.docset) { + return; + } + var $link = $(this); + toggleItem($link, itemLinkToContent($link)); + + // Keeps the document from jumping to the hash. + var href = $link.attr('href'); + if (history.pushState) { + history.pushState({}, '', href); + } else { + location.hash = href; + } + event.preventDefault(); +}); + +// Clicks on links to the current, closed, item need to open the item +$("a:not('.token')").on('click', function() { + if (location == this.href) { + openCurrentItemIfClosed(); + } +}); diff --git a/docs/js/jazzy.search.js b/docs/js/jazzy.search.js new file mode 100644 index 00000000..e3d1ab90 --- /dev/null +++ b/docs/js/jazzy.search.js @@ -0,0 +1,70 @@ +$(function(){ + var $typeahead = $('[data-typeahead]'); + var $form = $typeahead.parents('form'); + var searchURL = $form.attr('action'); + + function displayTemplate(result) { + return result.name; + } + + function suggestionTemplate(result) { + var t = '
'; + t += '' + result.name + ''; + if (result.parent_name) { + t += '' + result.parent_name + ''; + } + t += '
'; + return t; + } + + $typeahead.one('focus', function() { + $form.addClass('loading'); + + $.getJSON(searchURL).then(function(searchData) { + const searchIndex = lunr(function() { + this.ref('url'); + this.field('name'); + this.field('abstract'); + for (const [url, doc] of Object.entries(searchData)) { + this.add({url: url, name: doc.name, abstract: doc.abstract}); + } + }); + + $typeahead.typeahead( + { + highlight: true, + minLength: 3, + autoselect: true + }, + { + limit: 10, + display: displayTemplate, + templates: { suggestion: suggestionTemplate }, + source: function(query, sync) { + const lcSearch = query.toLowerCase(); + const results = searchIndex.query(function(q) { + q.term(lcSearch, { boost: 100 }); + q.term(lcSearch, { + boost: 10, + wildcard: lunr.Query.wildcard.TRAILING + }); + }).map(function(result) { + var doc = searchData[result.ref]; + doc.url = result.ref; + return doc; + }); + sync(results); + } + } + ); + $form.removeClass('loading'); + $typeahead.trigger('focus'); + }); + }); + + var baseURL = searchURL.slice(0, -"search.json".length); + + $typeahead.on('typeahead:select', function(e, result) { + window.location = baseURL + result.url; + }); +}); diff --git a/docs/js/jquery.min.js b/docs/js/jquery.min.js new file mode 100644 index 00000000..a1c07fd8 --- /dev/null +++ b/docs/js/jquery.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.4.1",k=function(e,t){return new k.fn.init(e,t)},p=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;function d(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp($),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+$),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),ne=function(e,t,n){var r="0x"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=k),o=(l=h(t)).length;while(o--)l[o]="#"+s+" "+xe(l[o]);c=l.join(","),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+k+"-]").length||v.push("~="),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+k+"+*").length||v.push(".#.+[+~]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",$)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&p(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):"string"!=typeof n?k.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i,ge={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;nx",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function Ae(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(R)||[""]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(R)||[""]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,"events")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t\x20\t\r\n\f]*)[^>]*)\/>/gi,qe=/\s*$/g;function Oe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&k(e).children("tbody")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\?(?=&|$)|\?\?/;k.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Gt.pop()||k.expando+"_"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Yt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||k.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,"position"),c=k(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=k.css(e,"top"),u=k.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===k.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===k.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,"borderTopWidth",!0),i.left+=k.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-k.css(r,"marginTop",!0),left:t.left-i.left-k.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===k.css(e,"position"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each(["top","left"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+"px":t})}),k.each({Height:"height",Width:"width"},function(a,s){k.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){k.fn[n]=function(e,t){return 0=this.length)return z.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},z.QueryLexer.prototype.width=function(){return this.pos-this.start},z.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},z.QueryLexer.prototype.backup=function(){this.pos-=1},z.QueryLexer.prototype.acceptDigitRun=function(){for(var e,t;47<(t=(e=this.next()).charCodeAt(0))&&t<58;);e!=z.QueryLexer.EOS&&this.backup()},z.QueryLexer.prototype.more=function(){return this.pos', + menu: '
' + }; + } + function buildSelectors(classes) { + var selectors = {}; + _.each(classes, function(v, k) { + selectors[k] = "." + v; + }); + return selectors; + } + function buildCss() { + var css = { + wrapper: { + position: "relative", + display: "inline-block" + }, + hint: { + position: "absolute", + top: "0", + left: "0", + borderColor: "transparent", + boxShadow: "none", + opacity: "1" + }, + input: { + position: "relative", + verticalAlign: "top", + backgroundColor: "transparent" + }, + inputWithNoHint: { + position: "relative", + verticalAlign: "top" + }, + menu: { + position: "absolute", + top: "100%", + left: "0", + zIndex: "100", + display: "none" + }, + ltr: { + left: "0", + right: "auto" + }, + rtl: { + left: "auto", + right: " 0" + } + }; + if (_.isMsie()) { + _.mixin(css.input, { + backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)" + }); + } + return css; + } + }(); + var EventBus = function() { + "use strict"; + var namespace, deprecationMap; + namespace = "typeahead:"; + deprecationMap = { + render: "rendered", + cursorchange: "cursorchanged", + select: "selected", + autocomplete: "autocompleted" + }; + function EventBus(o) { + if (!o || !o.el) { + $.error("EventBus initialized without el"); + } + this.$el = $(o.el); + } + _.mixin(EventBus.prototype, { + _trigger: function(type, args) { + var $e = $.Event(namespace + type); + this.$el.trigger.call(this.$el, $e, args || []); + return $e; + }, + before: function(type) { + var args, $e; + args = [].slice.call(arguments, 1); + $e = this._trigger("before" + type, args); + return $e.isDefaultPrevented(); + }, + trigger: function(type) { + var deprecatedType; + this._trigger(type, [].slice.call(arguments, 1)); + if (deprecatedType = deprecationMap[type]) { + this._trigger(deprecatedType, [].slice.call(arguments, 1)); + } + } + }); + return EventBus; + }(); + var EventEmitter = function() { + "use strict"; + var splitter = /\s+/, nextTick = getNextTick(); + return { + onSync: onSync, + onAsync: onAsync, + off: off, + trigger: trigger + }; + function on(method, types, cb, context) { + var type; + if (!cb) { + return this; + } + types = types.split(splitter); + cb = context ? bindContext(cb, context) : cb; + this._callbacks = this._callbacks || {}; + while (type = types.shift()) { + this._callbacks[type] = this._callbacks[type] || { + sync: [], + async: [] + }; + this._callbacks[type][method].push(cb); + } + return this; + } + function onAsync(types, cb, context) { + return on.call(this, "async", types, cb, context); + } + function onSync(types, cb, context) { + return on.call(this, "sync", types, cb, context); + } + function off(types) { + var type; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + while (type = types.shift()) { + delete this._callbacks[type]; + } + return this; + } + function trigger(types) { + var type, callbacks, args, syncFlush, asyncFlush; + if (!this._callbacks) { + return this; + } + types = types.split(splitter); + args = [].slice.call(arguments, 1); + while ((type = types.shift()) && (callbacks = this._callbacks[type])) { + syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args)); + asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args)); + syncFlush() && nextTick(asyncFlush); + } + return this; + } + function getFlush(callbacks, context, args) { + return flush; + function flush() { + var cancelled; + for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) { + cancelled = callbacks[i].apply(context, args) === false; + } + return !cancelled; + } + } + function getNextTick() { + var nextTickFn; + if (window.setImmediate) { + nextTickFn = function nextTickSetImmediate(fn) { + setImmediate(function() { + fn(); + }); + }; + } else { + nextTickFn = function nextTickSetTimeout(fn) { + setTimeout(function() { + fn(); + }, 0); + }; + } + return nextTickFn; + } + function bindContext(fn, context) { + return fn.bind ? fn.bind(context) : function() { + fn.apply(context, [].slice.call(arguments, 0)); + }; + } + }(); + var highlight = function(doc) { + "use strict"; + var defaults = { + node: null, + pattern: null, + tagName: "strong", + className: null, + wordsOnly: false, + caseSensitive: false, + diacriticInsensitive: false + }; + var accented = { + A: "[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]", + B: "[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]", + C: "[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]", + D: "[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]", + E: "[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]", + F: "[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]", + G: "[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]", + H: "[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]", + I: "[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]", + J: "[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]", + K: "[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]", + L: "[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]", + M: "[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]", + N: "[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]", + O: "[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]", + P: "[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]", + Q: "[Qqℚ⒬Ⓠⓠ㏃Qq]", + R: "[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]", + S: "[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]", + T: "[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]", + U: "[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]", + V: "[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]", + W: "[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]", + X: "[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]", + Y: "[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]", + Z: "[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]" + }; + return function hightlight(o) { + var regex; + o = _.mixin({}, defaults, o); + if (!o.node || !o.pattern) { + return; + } + o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ]; + regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive); + traverse(o.node, hightlightTextNode); + function hightlightTextNode(textNode) { + var match, patternNode, wrapperNode; + if (match = regex.exec(textNode.data)) { + wrapperNode = doc.createElement(o.tagName); + o.className && (wrapperNode.className = o.className); + patternNode = textNode.splitText(match.index); + patternNode.splitText(match[0].length); + wrapperNode.appendChild(patternNode.cloneNode(true)); + textNode.parentNode.replaceChild(wrapperNode, patternNode); + } + return !!match; + } + function traverse(el, hightlightTextNode) { + var childNode, TEXT_NODE_TYPE = 3; + for (var i = 0; i < el.childNodes.length; i++) { + childNode = el.childNodes[i]; + if (childNode.nodeType === TEXT_NODE_TYPE) { + i += hightlightTextNode(childNode) ? 1 : 0; + } else { + traverse(childNode, hightlightTextNode); + } + } + } + }; + function accent_replacer(chr) { + return accented[chr.toUpperCase()] || chr; + } + function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) { + var escapedPatterns = [], regexStr; + for (var i = 0, len = patterns.length; i < len; i++) { + var escapedWord = _.escapeRegExChars(patterns[i]); + if (diacriticInsensitive) { + escapedWord = escapedWord.replace(/\S/g, accent_replacer); + } + escapedPatterns.push(escapedWord); + } + regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")"; + return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i"); + } + }(window.document); + var Input = function() { + "use strict"; + var specialKeyCodeMap; + specialKeyCodeMap = { + 9: "tab", + 27: "esc", + 37: "left", + 39: "right", + 13: "enter", + 38: "up", + 40: "down" + }; + function Input(o, www) { + o = o || {}; + if (!o.input) { + $.error("input is missing"); + } + www.mixin(this); + this.$hint = $(o.hint); + this.$input = $(o.input); + this.$input.attr({ + "aria-activedescendant": "", + "aria-owns": this.$input.attr("id") + "_listbox", + role: "combobox", + "aria-readonly": "true", + "aria-autocomplete": "list" + }); + $(www.menu).attr("id", this.$input.attr("id") + "_listbox"); + this.query = this.$input.val(); + this.queryWhenFocused = this.hasFocus() ? this.query : null; + this.$overflowHelper = buildOverflowHelper(this.$input); + this._checkLanguageDirection(); + if (this.$hint.length === 0) { + this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop; + } + this.onSync("cursorchange", this._updateDescendent); + } + Input.normalizeQuery = function(str) { + return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " "); + }; + _.mixin(Input.prototype, EventEmitter, { + _onBlur: function onBlur() { + this.resetInputValue(); + this.trigger("blurred"); + }, + _onFocus: function onFocus() { + this.queryWhenFocused = this.query; + this.trigger("focused"); + }, + _onKeydown: function onKeydown($e) { + var keyName = specialKeyCodeMap[$e.which || $e.keyCode]; + this._managePreventDefault(keyName, $e); + if (keyName && this._shouldTrigger(keyName, $e)) { + this.trigger(keyName + "Keyed", $e); + } + }, + _onInput: function onInput() { + this._setQuery(this.getInputValue()); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + _managePreventDefault: function managePreventDefault(keyName, $e) { + var preventDefault; + switch (keyName) { + case "up": + case "down": + preventDefault = !withModifier($e); + break; + + default: + preventDefault = false; + } + preventDefault && $e.preventDefault(); + }, + _shouldTrigger: function shouldTrigger(keyName, $e) { + var trigger; + switch (keyName) { + case "tab": + trigger = !withModifier($e); + break; + + default: + trigger = true; + } + return trigger; + }, + _checkLanguageDirection: function checkLanguageDirection() { + var dir = (this.$input.css("direction") || "ltr").toLowerCase(); + if (this.dir !== dir) { + this.dir = dir; + this.$hint.attr("dir", dir); + this.trigger("langDirChanged", dir); + } + }, + _setQuery: function setQuery(val, silent) { + var areEquivalent, hasDifferentWhitespace; + areEquivalent = areQueriesEquivalent(val, this.query); + hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false; + this.query = val; + if (!silent && !areEquivalent) { + this.trigger("queryChanged", this.query); + } else if (!silent && hasDifferentWhitespace) { + this.trigger("whitespaceChanged", this.query); + } + }, + _updateDescendent: function updateDescendent(event, id) { + this.$input.attr("aria-activedescendant", id); + }, + bind: function() { + var that = this, onBlur, onFocus, onKeydown, onInput; + onBlur = _.bind(this._onBlur, this); + onFocus = _.bind(this._onFocus, this); + onKeydown = _.bind(this._onKeydown, this); + onInput = _.bind(this._onInput, this); + this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown); + if (!_.isMsie() || _.isMsie() > 9) { + this.$input.on("input.tt", onInput); + } else { + this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) { + if (specialKeyCodeMap[$e.which || $e.keyCode]) { + return; + } + _.defer(_.bind(that._onInput, that, $e)); + }); + } + return this; + }, + focus: function focus() { + this.$input.focus(); + }, + blur: function blur() { + this.$input.blur(); + }, + getLangDir: function getLangDir() { + return this.dir; + }, + getQuery: function getQuery() { + return this.query || ""; + }, + setQuery: function setQuery(val, silent) { + this.setInputValue(val); + this._setQuery(val, silent); + }, + hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() { + return this.query !== this.queryWhenFocused; + }, + getInputValue: function getInputValue() { + return this.$input.val(); + }, + setInputValue: function setInputValue(value) { + this.$input.val(value); + this.clearHintIfInvalid(); + this._checkLanguageDirection(); + }, + resetInputValue: function resetInputValue() { + this.setInputValue(this.query); + }, + getHint: function getHint() { + return this.$hint.val(); + }, + setHint: function setHint(value) { + this.$hint.val(value); + }, + clearHint: function clearHint() { + this.setHint(""); + }, + clearHintIfInvalid: function clearHintIfInvalid() { + var val, hint, valIsPrefixOfHint, isValid; + val = this.getInputValue(); + hint = this.getHint(); + valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0; + isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow(); + !isValid && this.clearHint(); + }, + hasFocus: function hasFocus() { + return this.$input.is(":focus"); + }, + hasOverflow: function hasOverflow() { + var constraint = this.$input.width() - 2; + this.$overflowHelper.text(this.getInputValue()); + return this.$overflowHelper.width() >= constraint; + }, + isCursorAtEnd: function() { + var valueLength, selectionStart, range; + valueLength = this.$input.val().length; + selectionStart = this.$input[0].selectionStart; + if (_.isNumber(selectionStart)) { + return selectionStart === valueLength; + } else if (document.selection) { + range = document.selection.createRange(); + range.moveStart("character", -valueLength); + return valueLength === range.text.length; + } + return true; + }, + destroy: function destroy() { + this.$hint.off(".tt"); + this.$input.off(".tt"); + this.$overflowHelper.remove(); + this.$hint = this.$input = this.$overflowHelper = $("
"); + } + }); + return Input; + function buildOverflowHelper($input) { + return $('').css({ + position: "absolute", + visibility: "hidden", + whiteSpace: "pre", + fontFamily: $input.css("font-family"), + fontSize: $input.css("font-size"), + fontStyle: $input.css("font-style"), + fontVariant: $input.css("font-variant"), + fontWeight: $input.css("font-weight"), + wordSpacing: $input.css("word-spacing"), + letterSpacing: $input.css("letter-spacing"), + textIndent: $input.css("text-indent"), + textRendering: $input.css("text-rendering"), + textTransform: $input.css("text-transform") + }).insertAfter($input); + } + function areQueriesEquivalent(a, b) { + return Input.normalizeQuery(a) === Input.normalizeQuery(b); + } + function withModifier($e) { + return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey; + } + }(); + var Dataset = function() { + "use strict"; + var keys, nameGenerator; + keys = { + dataset: "tt-selectable-dataset", + val: "tt-selectable-display", + obj: "tt-selectable-object" + }; + nameGenerator = _.getIdGenerator(); + function Dataset(o, www) { + o = o || {}; + o.templates = o.templates || {}; + o.templates.notFound = o.templates.notFound || o.templates.empty; + if (!o.source) { + $.error("missing source"); + } + if (!o.node) { + $.error("missing node"); + } + if (o.name && !isValidName(o.name)) { + $.error("invalid dataset name: " + o.name); + } + www.mixin(this); + this.highlight = !!o.highlight; + this.name = _.toStr(o.name || nameGenerator()); + this.limit = o.limit || 5; + this.displayFn = getDisplayFn(o.display || o.displayKey); + this.templates = getTemplates(o.templates, this.displayFn); + this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source; + this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async; + this._resetLastSuggestion(); + this.$el = $(o.node).attr("role", "presentation").addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name); + } + Dataset.extractData = function extractData(el) { + var $el = $(el); + if ($el.data(keys.obj)) { + return { + dataset: $el.data(keys.dataset) || "", + val: $el.data(keys.val) || "", + obj: $el.data(keys.obj) || null + }; + } + return null; + }; + _.mixin(Dataset.prototype, EventEmitter, { + _overwrite: function overwrite(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (this.async && this.templates.pending) { + this._renderPending(query); + } else if (!this.async && this.templates.notFound) { + this._renderNotFound(query); + } else { + this._empty(); + } + this.trigger("rendered", suggestions, false, this.name); + }, + _append: function append(query, suggestions) { + suggestions = suggestions || []; + if (suggestions.length && this.$lastSuggestion.length) { + this._appendSuggestions(query, suggestions); + } else if (suggestions.length) { + this._renderSuggestions(query, suggestions); + } else if (!this.$lastSuggestion.length && this.templates.notFound) { + this._renderNotFound(query); + } + this.trigger("rendered", suggestions, true, this.name); + }, + _renderSuggestions: function renderSuggestions(query, suggestions) { + var $fragment; + $fragment = this._getSuggestionsFragment(query, suggestions); + this.$lastSuggestion = $fragment.children().last(); + this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions)); + }, + _appendSuggestions: function appendSuggestions(query, suggestions) { + var $fragment, $lastSuggestion; + $fragment = this._getSuggestionsFragment(query, suggestions); + $lastSuggestion = $fragment.children().last(); + this.$lastSuggestion.after($fragment); + this.$lastSuggestion = $lastSuggestion; + }, + _renderPending: function renderPending(query) { + var template = this.templates.pending; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _renderNotFound: function renderNotFound(query) { + var template = this.templates.notFound; + this._resetLastSuggestion(); + template && this.$el.html(template({ + query: query, + dataset: this.name + })); + }, + _empty: function empty() { + this.$el.empty(); + this._resetLastSuggestion(); + }, + _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) { + var that = this, fragment; + fragment = document.createDocumentFragment(); + _.each(suggestions, function getSuggestionNode(suggestion) { + var $el, context; + context = that._injectQuery(query, suggestion); + $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable); + fragment.appendChild($el[0]); + }); + this.highlight && highlight({ + className: this.classes.highlight, + node: fragment, + pattern: query + }); + return $(fragment); + }, + _getFooter: function getFooter(query, suggestions) { + return this.templates.footer ? this.templates.footer({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _getHeader: function getHeader(query, suggestions) { + return this.templates.header ? this.templates.header({ + query: query, + suggestions: suggestions, + dataset: this.name + }) : null; + }, + _resetLastSuggestion: function resetLastSuggestion() { + this.$lastSuggestion = $(); + }, + _injectQuery: function injectQuery(query, obj) { + return _.isObject(obj) ? _.mixin({ + _query: query + }, obj) : obj; + }, + update: function update(query) { + var that = this, canceled = false, syncCalled = false, rendered = 0; + this.cancel(); + this.cancel = function cancel() { + canceled = true; + that.cancel = $.noop; + that.async && that.trigger("asyncCanceled", query, that.name); + }; + this.source(query, sync, async); + !syncCalled && sync([]); + function sync(suggestions) { + if (syncCalled) { + return; + } + syncCalled = true; + suggestions = (suggestions || []).slice(0, that.limit); + rendered = suggestions.length; + that._overwrite(query, suggestions); + if (rendered < that.limit && that.async) { + that.trigger("asyncRequested", query, that.name); + } + } + function async(suggestions) { + suggestions = suggestions || []; + if (!canceled && rendered < that.limit) { + that.cancel = $.noop; + var idx = Math.abs(rendered - that.limit); + rendered += idx; + that._append(query, suggestions.slice(0, idx)); + that.async && that.trigger("asyncReceived", query, that.name); + } + } + }, + cancel: $.noop, + clear: function clear() { + this._empty(); + this.cancel(); + this.trigger("cleared"); + }, + isEmpty: function isEmpty() { + return this.$el.is(":empty"); + }, + destroy: function destroy() { + this.$el = $("
"); + } + }); + return Dataset; + function getDisplayFn(display) { + display = display || _.stringify; + return _.isFunction(display) ? display : displayFn; + function displayFn(obj) { + return obj[display]; + } + } + function getTemplates(templates, displayFn) { + return { + notFound: templates.notFound && _.templatify(templates.notFound), + pending: templates.pending && _.templatify(templates.pending), + header: templates.header && _.templatify(templates.header), + footer: templates.footer && _.templatify(templates.footer), + suggestion: templates.suggestion || suggestionTemplate + }; + function suggestionTemplate(context) { + return $('
').attr("id", _.guid()).text(displayFn(context)); + } + } + function isValidName(str) { + return /^[_a-zA-Z0-9-]+$/.test(str); + } + }(); + var Menu = function() { + "use strict"; + function Menu(o, www) { + var that = this; + o = o || {}; + if (!o.node) { + $.error("node is required"); + } + www.mixin(this); + this.$node = $(o.node); + this.query = null; + this.datasets = _.map(o.datasets, initializeDataset); + function initializeDataset(oDataset) { + var node = that.$node.find(oDataset.node).first(); + oDataset.node = node.length ? node : $("
").appendTo(that.$node); + return new Dataset(oDataset, www); + } + } + _.mixin(Menu.prototype, EventEmitter, { + _onSelectableClick: function onSelectableClick($e) { + this.trigger("selectableClicked", $($e.currentTarget)); + }, + _onRendered: function onRendered(type, dataset, suggestions, async) { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetRendered", dataset, suggestions, async); + }, + _onCleared: function onCleared() { + this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty()); + this.trigger("datasetCleared"); + }, + _propagate: function propagate() { + this.trigger.apply(this, arguments); + }, + _allDatasetsEmpty: function allDatasetsEmpty() { + return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) { + var isEmpty = dataset.isEmpty(); + this.$node.attr("aria-expanded", !isEmpty); + return isEmpty; + }, this)); + }, + _getSelectables: function getSelectables() { + return this.$node.find(this.selectors.selectable); + }, + _removeCursor: function _removeCursor() { + var $selectable = this.getActiveSelectable(); + $selectable && $selectable.removeClass(this.classes.cursor); + }, + _ensureVisible: function ensureVisible($el) { + var elTop, elBottom, nodeScrollTop, nodeHeight; + elTop = $el.position().top; + elBottom = elTop + $el.outerHeight(true); + nodeScrollTop = this.$node.scrollTop(); + nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10); + if (elTop < 0) { + this.$node.scrollTop(nodeScrollTop + elTop); + } else if (nodeHeight < elBottom) { + this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight)); + } + }, + bind: function() { + var that = this, onSelectableClick; + onSelectableClick = _.bind(this._onSelectableClick, this); + this.$node.on("click.tt", this.selectors.selectable, onSelectableClick); + this.$node.on("mouseover", this.selectors.selectable, function() { + that.setCursor($(this)); + }); + this.$node.on("mouseleave", function() { + that._removeCursor(); + }); + _.each(this.datasets, function(dataset) { + dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that); + }); + return this; + }, + isOpen: function isOpen() { + return this.$node.hasClass(this.classes.open); + }, + open: function open() { + this.$node.scrollTop(0); + this.$node.addClass(this.classes.open); + }, + close: function close() { + this.$node.attr("aria-expanded", false); + this.$node.removeClass(this.classes.open); + this._removeCursor(); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.attr("dir", dir); + }, + selectableRelativeToCursor: function selectableRelativeToCursor(delta) { + var $selectables, $oldCursor, oldIndex, newIndex; + $oldCursor = this.getActiveSelectable(); + $selectables = this._getSelectables(); + oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1; + newIndex = oldIndex + delta; + newIndex = (newIndex + 1) % ($selectables.length + 1) - 1; + newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex; + return newIndex === -1 ? null : $selectables.eq(newIndex); + }, + setCursor: function setCursor($selectable) { + this._removeCursor(); + if ($selectable = $selectable && $selectable.first()) { + $selectable.addClass(this.classes.cursor); + this._ensureVisible($selectable); + } + }, + getSelectableData: function getSelectableData($el) { + return $el && $el.length ? Dataset.extractData($el) : null; + }, + getActiveSelectable: function getActiveSelectable() { + var $selectable = this._getSelectables().filter(this.selectors.cursor).first(); + return $selectable.length ? $selectable : null; + }, + getTopSelectable: function getTopSelectable() { + var $selectable = this._getSelectables().first(); + return $selectable.length ? $selectable : null; + }, + update: function update(query) { + var isValidUpdate = query !== this.query; + if (isValidUpdate) { + this.query = query; + _.each(this.datasets, updateDataset); + } + return isValidUpdate; + function updateDataset(dataset) { + dataset.update(query); + } + }, + empty: function empty() { + _.each(this.datasets, clearDataset); + this.query = null; + this.$node.addClass(this.classes.empty); + function clearDataset(dataset) { + dataset.clear(); + } + }, + destroy: function destroy() { + this.$node.off(".tt"); + this.$node = $("
"); + _.each(this.datasets, destroyDataset); + function destroyDataset(dataset) { + dataset.destroy(); + } + } + }); + return Menu; + }(); + var Status = function() { + "use strict"; + function Status(options) { + this.$el = $("", { + role: "status", + "aria-live": "polite" + }).css({ + position: "absolute", + padding: "0", + border: "0", + height: "1px", + width: "1px", + "margin-bottom": "-1px", + "margin-right": "-1px", + overflow: "hidden", + clip: "rect(0 0 0 0)", + "white-space": "nowrap" + }); + options.$input.after(this.$el); + _.each(options.menu.datasets, _.bind(function(dataset) { + if (dataset.onSync) { + dataset.onSync("rendered", _.bind(this.update, this)); + dataset.onSync("cleared", _.bind(this.cleared, this)); + } + }, this)); + } + _.mixin(Status.prototype, { + update: function update(event, suggestions) { + var length = suggestions.length; + var words; + if (length === 1) { + words = { + result: "result", + is: "is" + }; + } else { + words = { + result: "results", + is: "are" + }; + } + this.$el.text(length + " " + words.result + " " + words.is + " available, use up and down arrow keys to navigate."); + }, + cleared: function() { + this.$el.text(""); + } + }); + return Status; + }(); + var DefaultMenu = function() { + "use strict"; + var s = Menu.prototype; + function DefaultMenu() { + Menu.apply(this, [].slice.call(arguments, 0)); + } + _.mixin(DefaultMenu.prototype, Menu.prototype, { + open: function open() { + !this._allDatasetsEmpty() && this._show(); + return s.open.apply(this, [].slice.call(arguments, 0)); + }, + close: function close() { + this._hide(); + return s.close.apply(this, [].slice.call(arguments, 0)); + }, + _onRendered: function onRendered() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onRendered.apply(this, [].slice.call(arguments, 0)); + }, + _onCleared: function onCleared() { + if (this._allDatasetsEmpty()) { + this._hide(); + } else { + this.isOpen() && this._show(); + } + return s._onCleared.apply(this, [].slice.call(arguments, 0)); + }, + setLanguageDirection: function setLanguageDirection(dir) { + this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl); + return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0)); + }, + _hide: function hide() { + this.$node.hide(); + }, + _show: function show() { + this.$node.css("display", "block"); + } + }); + return DefaultMenu; + }(); + var Typeahead = function() { + "use strict"; + function Typeahead(o, www) { + var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged; + o = o || {}; + if (!o.input) { + $.error("missing input"); + } + if (!o.menu) { + $.error("missing menu"); + } + if (!o.eventBus) { + $.error("missing event bus"); + } + www.mixin(this); + this.eventBus = o.eventBus; + this.minLength = _.isNumber(o.minLength) ? o.minLength : 1; + this.input = o.input; + this.menu = o.menu; + this.enabled = true; + this.autoselect = !!o.autoselect; + this.active = false; + this.input.hasFocus() && this.activate(); + this.dir = this.input.getLangDir(); + this._hacks(); + this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this); + onFocused = c(this, "activate", "open", "_onFocused"); + onBlurred = c(this, "deactivate", "_onBlurred"); + onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed"); + onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed"); + onEscKeyed = c(this, "isActive", "_onEscKeyed"); + onUpKeyed = c(this, "isActive", "open", "_onUpKeyed"); + onDownKeyed = c(this, "isActive", "open", "_onDownKeyed"); + onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed"); + onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed"); + onQueryChanged = c(this, "_openIfActive", "_onQueryChanged"); + onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged"); + this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this); + } + _.mixin(Typeahead.prototype, { + _hacks: function hacks() { + var $input, $menu; + $input = this.input.$input || $("
"); + $menu = this.menu.$node || $("
"); + $input.on("blur.tt", function($e) { + var active, isActive, hasActive; + active = document.activeElement; + isActive = $menu.is(active); + hasActive = $menu.has(active).length > 0; + if (_.isMsie() && (isActive || hasActive)) { + $e.preventDefault(); + $e.stopImmediatePropagation(); + _.defer(function() { + $input.focus(); + }); + } + }); + $menu.on("mousedown.tt", function($e) { + $e.preventDefault(); + }); + }, + _onSelectableClicked: function onSelectableClicked(type, $el) { + this.select($el); + }, + _onDatasetCleared: function onDatasetCleared() { + this._updateHint(); + }, + _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) { + this._updateHint(); + if (this.autoselect) { + var cursorClass = this.selectors.cursor.substr(1); + this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass); + } + this.eventBus.trigger("render", suggestions, async, dataset); + }, + _onAsyncRequested: function onAsyncRequested(type, dataset, query) { + this.eventBus.trigger("asyncrequest", query, dataset); + }, + _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) { + this.eventBus.trigger("asynccancel", query, dataset); + }, + _onAsyncReceived: function onAsyncReceived(type, dataset, query) { + this.eventBus.trigger("asyncreceive", query, dataset); + }, + _onFocused: function onFocused() { + this._minLengthMet() && this.menu.update(this.input.getQuery()); + }, + _onBlurred: function onBlurred() { + if (this.input.hasQueryChangedSinceLastFocus()) { + this.eventBus.trigger("change", this.input.getQuery()); + } + }, + _onEnterKeyed: function onEnterKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + if (this.select($selectable)) { + $e.preventDefault(); + $e.stopPropagation(); + } + } else if (this.autoselect) { + if (this.select(this.menu.getTopSelectable())) { + $e.preventDefault(); + $e.stopPropagation(); + } + } + }, + _onTabKeyed: function onTabKeyed(type, $e) { + var $selectable; + if ($selectable = this.menu.getActiveSelectable()) { + this.select($selectable) && $e.preventDefault(); + } else if ($selectable = this.menu.getTopSelectable()) { + this.autocomplete($selectable) && $e.preventDefault(); + } + }, + _onEscKeyed: function onEscKeyed() { + this.close(); + }, + _onUpKeyed: function onUpKeyed() { + this.moveCursor(-1); + }, + _onDownKeyed: function onDownKeyed() { + this.moveCursor(+1); + }, + _onLeftKeyed: function onLeftKeyed() { + if (this.dir === "rtl" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onRightKeyed: function onRightKeyed() { + if (this.dir === "ltr" && this.input.isCursorAtEnd()) { + this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable()); + } + }, + _onQueryChanged: function onQueryChanged(e, query) { + this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty(); + }, + _onWhitespaceChanged: function onWhitespaceChanged() { + this._updateHint(); + }, + _onLangDirChanged: function onLangDirChanged(e, dir) { + if (this.dir !== dir) { + this.dir = dir; + this.menu.setLanguageDirection(dir); + } + }, + _openIfActive: function openIfActive() { + this.isActive() && this.open(); + }, + _minLengthMet: function minLengthMet(query) { + query = _.isString(query) ? query : this.input.getQuery() || ""; + return query.length >= this.minLength; + }, + _updateHint: function updateHint() { + var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match; + $selectable = this.menu.getTopSelectable(); + data = this.menu.getSelectableData($selectable); + val = this.input.getInputValue(); + if (data && !_.isBlankString(val) && !this.input.hasOverflow()) { + query = Input.normalizeQuery(val); + escapedQuery = _.escapeRegExChars(query); + frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i"); + match = frontMatchRegEx.exec(data.val); + match && this.input.setHint(val + match[1]); + } else { + this.input.clearHint(); + } + }, + isEnabled: function isEnabled() { + return this.enabled; + }, + enable: function enable() { + this.enabled = true; + }, + disable: function disable() { + this.enabled = false; + }, + isActive: function isActive() { + return this.active; + }, + activate: function activate() { + if (this.isActive()) { + return true; + } else if (!this.isEnabled() || this.eventBus.before("active")) { + return false; + } else { + this.active = true; + this.eventBus.trigger("active"); + return true; + } + }, + deactivate: function deactivate() { + if (!this.isActive()) { + return true; + } else if (this.eventBus.before("idle")) { + return false; + } else { + this.active = false; + this.close(); + this.eventBus.trigger("idle"); + return true; + } + }, + isOpen: function isOpen() { + return this.menu.isOpen(); + }, + open: function open() { + if (!this.isOpen() && !this.eventBus.before("open")) { + this.menu.open(); + this._updateHint(); + this.eventBus.trigger("open"); + } + return this.isOpen(); + }, + close: function close() { + if (this.isOpen() && !this.eventBus.before("close")) { + this.menu.close(); + this.input.clearHint(); + this.input.resetInputValue(); + this.eventBus.trigger("close"); + } + return !this.isOpen(); + }, + setVal: function setVal(val) { + this.input.setQuery(_.toStr(val)); + }, + getVal: function getVal() { + return this.input.getQuery(); + }, + select: function select($selectable) { + var data = this.menu.getSelectableData($selectable); + if (data && !this.eventBus.before("select", data.obj, data.dataset)) { + this.input.setQuery(data.val, true); + this.eventBus.trigger("select", data.obj, data.dataset); + this.close(); + return true; + } + return false; + }, + autocomplete: function autocomplete($selectable) { + var query, data, isValid; + query = this.input.getQuery(); + data = this.menu.getSelectableData($selectable); + isValid = data && query !== data.val; + if (isValid && !this.eventBus.before("autocomplete", data.obj, data.dataset)) { + this.input.setQuery(data.val); + this.eventBus.trigger("autocomplete", data.obj, data.dataset); + return true; + } + return false; + }, + moveCursor: function moveCursor(delta) { + var query, $candidate, data, suggestion, datasetName, cancelMove, id; + query = this.input.getQuery(); + $candidate = this.menu.selectableRelativeToCursor(delta); + data = this.menu.getSelectableData($candidate); + suggestion = data ? data.obj : null; + datasetName = data ? data.dataset : null; + id = $candidate ? $candidate.attr("id") : null; + this.input.trigger("cursorchange", id); + cancelMove = this._minLengthMet() && this.menu.update(query); + if (!cancelMove && !this.eventBus.before("cursorchange", suggestion, datasetName)) { + this.menu.setCursor($candidate); + if (data) { + this.input.setInputValue(data.val); + } else { + this.input.resetInputValue(); + this._updateHint(); + } + this.eventBus.trigger("cursorchange", suggestion, datasetName); + return true; + } + return false; + }, + destroy: function destroy() { + this.input.destroy(); + this.menu.destroy(); + } + }); + return Typeahead; + function c(ctx) { + var methods = [].slice.call(arguments, 1); + return function() { + var args = [].slice.call(arguments); + _.each(methods, function(method) { + return ctx[method].apply(ctx, args); + }); + }; + } + }(); + (function() { + "use strict"; + var old, keys, methods; + old = $.fn.typeahead; + keys = { + www: "tt-www", + attrs: "tt-attrs", + typeahead: "tt-typeahead" + }; + methods = { + initialize: function initialize(o, datasets) { + var www; + datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1); + o = o || {}; + www = WWW(o.classNames); + return this.each(attach); + function attach() { + var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor; + _.each(datasets, function(d) { + d.highlight = !!o.highlight; + }); + $input = $(this); + $wrapper = $(www.html.wrapper); + $hint = $elOrNull(o.hint); + $menu = $elOrNull(o.menu); + defaultHint = o.hint !== false && !$hint; + defaultMenu = o.menu !== false && !$menu; + defaultHint && ($hint = buildHintFromInput($input, www)); + defaultMenu && ($menu = $(www.html.menu).css(www.css.menu)); + $hint && $hint.val(""); + $input = prepInput($input, www); + if (defaultHint || defaultMenu) { + $wrapper.css(www.css.wrapper); + $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint); + $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null); + } + MenuConstructor = defaultMenu ? DefaultMenu : Menu; + eventBus = new EventBus({ + el: $input + }); + input = new Input({ + hint: $hint, + input: $input + }, www); + menu = new MenuConstructor({ + node: $menu, + datasets: datasets + }, www); + status = new Status({ + $input: $input, + menu: menu + }); + typeahead = new Typeahead({ + input: input, + menu: menu, + eventBus: eventBus, + minLength: o.minLength, + autoselect: o.autoselect + }, www); + $input.data(keys.www, www); + $input.data(keys.typeahead, typeahead); + } + }, + isEnabled: function isEnabled() { + var enabled; + ttEach(this.first(), function(t) { + enabled = t.isEnabled(); + }); + return enabled; + }, + enable: function enable() { + ttEach(this, function(t) { + t.enable(); + }); + return this; + }, + disable: function disable() { + ttEach(this, function(t) { + t.disable(); + }); + return this; + }, + isActive: function isActive() { + var active; + ttEach(this.first(), function(t) { + active = t.isActive(); + }); + return active; + }, + activate: function activate() { + ttEach(this, function(t) { + t.activate(); + }); + return this; + }, + deactivate: function deactivate() { + ttEach(this, function(t) { + t.deactivate(); + }); + return this; + }, + isOpen: function isOpen() { + var open; + ttEach(this.first(), function(t) { + open = t.isOpen(); + }); + return open; + }, + open: function open() { + ttEach(this, function(t) { + t.open(); + }); + return this; + }, + close: function close() { + ttEach(this, function(t) { + t.close(); + }); + return this; + }, + select: function select(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.select($el); + }); + return success; + }, + autocomplete: function autocomplete(el) { + var success = false, $el = $(el); + ttEach(this.first(), function(t) { + success = t.autocomplete($el); + }); + return success; + }, + moveCursor: function moveCursoe(delta) { + var success = false; + ttEach(this.first(), function(t) { + success = t.moveCursor(delta); + }); + return success; + }, + val: function val(newVal) { + var query; + if (!arguments.length) { + ttEach(this.first(), function(t) { + query = t.getVal(); + }); + return query; + } else { + ttEach(this, function(t) { + t.setVal(_.toStr(newVal)); + }); + return this; + } + }, + destroy: function destroy() { + ttEach(this, function(typeahead, $input) { + revert($input); + typeahead.destroy(); + }); + return this; + } + }; + $.fn.typeahead = function(method) { + if (methods[method]) { + return methods[method].apply(this, [].slice.call(arguments, 1)); + } else { + return methods.initialize.apply(this, arguments); + } + }; + $.fn.typeahead.noConflict = function noConflict() { + $.fn.typeahead = old; + return this; + }; + function ttEach($els, fn) { + $els.each(function() { + var $input = $(this), typeahead; + (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input); + }); + } + function buildHintFromInput($input, www) { + return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({ + readonly: true, + required: false + }).removeAttr("id name placeholder").removeClass("required").attr({ + spellcheck: "false", + tabindex: -1 + }); + } + function prepInput($input, www) { + $input.data(keys.attrs, { + dir: $input.attr("dir"), + autocomplete: $input.attr("autocomplete"), + spellcheck: $input.attr("spellcheck"), + style: $input.attr("style") + }); + $input.addClass(www.classes.input).attr({ + spellcheck: false + }); + try { + !$input.attr("dir") && $input.attr("dir", "auto"); + } catch (e) {} + return $input; + } + function getBackgroundStyles($el) { + return { + backgroundAttachment: $el.css("background-attachment"), + backgroundClip: $el.css("background-clip"), + backgroundColor: $el.css("background-color"), + backgroundImage: $el.css("background-image"), + backgroundOrigin: $el.css("background-origin"), + backgroundPosition: $el.css("background-position"), + backgroundRepeat: $el.css("background-repeat"), + backgroundSize: $el.css("background-size") + }; + } + function revert($input) { + var www, $wrapper; + www = $input.data(keys.www); + $wrapper = $input.parent().filter(www.selectors.wrapper); + _.each($input.data(keys.attrs), function(val, key) { + _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val); + }); + $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input); + if ($wrapper.length) { + $input.detach().insertAfter($wrapper); + $wrapper.remove(); + } + } + function $elOrNull(obj) { + var isValid, $el; + isValid = _.isJQuery(obj) || _.isElement(obj); + $el = isValid ? $(obj).first() : []; + return $el.length ? $el : null; + } + })(); +}); \ No newline at end of file diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 00000000..0ae2f538 --- /dev/null +++ b/docs/search.json @@ -0,0 +1 @@ +{"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV4viewSo6UIViewCSgvp":{"name":"view","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV11isAppearingSbvp":{"name":"isAppearing","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV12isPresentingSbvp":{"name":"isPresenting","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV20isInTabbarControllerSbvp":{"name":"isInTabbarController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV20isInNavbarControllerSbvp":{"name":"isInNavbarController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV9isMatchedSbvp":{"name":"isMatched","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV21isAncestorViewMatchedSbvp":{"name":"isAncestorViewMatched","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV11matchedViewSo6UIViewCSgvp":{"name":"matchedView","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV19matchedAncestorViewSo6UIViewC_AFtSgvp":{"name":"matchedAncestorView","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV18fromViewControllerSo06UIViewF0Cvp":{"name":"fromViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV16toViewControllerSo06UIViewF0Cvp":{"name":"toViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV21currentViewControllerSo06UIViewF0Cvp":{"name":"currentViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroConditionalContext.html#/s:4Hero0A18ConditionalContextV19otherViewControllerSo06UIViewF0Cvp":{"name":"otherViewController","abstract":"

Undocumented

","parent_name":"HeroConditionalContext"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV05beginC0SayAA0A8ModifierCGSgvp":{"name":"beginState","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV20conditionalModifiersSaySbAA0A18ConditionalContextVc_SayAA0A8ModifierCGtGSgvp":{"name":"conditionalModifiers","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV8positionSo7CGPointVSgvp":{"name":"position","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV4sizeSo6CGSizeVSgvp":{"name":"size","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV9transformSo13CATransform3DVSgvp":{"name":"transform","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7opacitySfSgvp":{"name":"opacity","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12cornerRadius12CoreGraphics7CGFloatVSgvp":{"name":"cornerRadius","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV15backgroundColorSo10CGColorRefaSgvp":{"name":"backgroundColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV9zPosition12CoreGraphics7CGFloatVSgvp":{"name":"zPosition","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12contentsRectSo6CGRectVSgvp":{"name":"contentsRect","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13contentsScale12CoreGraphics7CGFloatVSgvp":{"name":"contentsScale","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11borderWidth12CoreGraphics7CGFloatVSgvp":{"name":"borderWidth","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11borderColorSo10CGColorRefaSgvp":{"name":"borderColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV11shadowColorSo10CGColorRefaSgvp":{"name":"shadowColor","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13shadowOpacitySfSgvp":{"name":"shadowOpacity","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12shadowOffsetSo6CGSizeVSgvp":{"name":"shadowOffset","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12shadowRadius12CoreGraphics7CGFloatVSgvp":{"name":"shadowRadius","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV10shadowPathSo9CGPathRefaSgvp":{"name":"shadowPath","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13masksToBoundsSbSgvp":{"name":"masksToBounds","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV13displayShadowSbvp":{"name":"displayShadow","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7overlaySo10CGColorRefa5color_12CoreGraphics7CGFloatV7opacitytSgvp":{"name":"overlay","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6spring12CoreGraphics7CGFloatV_AGtSgvp":{"name":"spring","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV5delaySdvp":{"name":"delay","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV8durationSdSgvp":{"name":"duration","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV14timingFunctionSo013CAMediaTimingE0CSgvp":{"name":"timingFunction","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV3arc12CoreGraphics7CGFloatVSgvp":{"name":"arc","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6sourceSSSgvp":{"name":"source","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7cascadeSd_AA16CascadeDirectionOSbtSgvp":{"name":"cascade","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV22ignoreSubviewModifiersSbSgvp":{"name":"ignoreSubviewModifiers","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV15coordinateSpaceAA0a10CoordinateE0OSgvp":{"name":"coordinateSpace","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV23useScaleBasedSizeChangeSbSgvp":{"name":"useScaleBasedSizeChange","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12snapshotTypeAA0a8SnapshotE0OSgvp":{"name":"snapshotType","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV7nonFadeSbvp":{"name":"nonFade","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV12forceAnimateSbvp":{"name":"forceAnimate","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6customSDySSypGSgvp":{"name":"custom","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6appendyyAA0A8ModifierCF":{"name":"append(_:)","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateV6append10contentsOfySayAA0A8ModifierCG_tF":{"name":"append(contentsOf:)","abstract":"

Undocumented

","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:4Hero0A11TargetStateVyypSgSScip":{"name":"subscript(_:)","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html#/s:s25ExpressibleByArrayLiteralP05arrayD0x0cD7ElementQzd_tcfc":{"name":"init(arrayLiteral:)","parent_name":"HeroTargetState"},"Structs/HeroTargetState.html":{"name":"HeroTargetState","abstract":"

Undocumented

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

Undocumented

"},"Protocols/HeroTransitionDelegate.html#/s:4Hero0A18TransitionDelegateP04heroB0_9didUpdateyAA0aB0C_AA0aB5StateOtF":{"name":"heroTransition(_:didUpdate:)","abstract":"

Undocumented

","parent_name":"HeroTransitionDelegate"},"Protocols/HeroTransitionDelegate.html#/s:4Hero0A18TransitionDelegateP04heroB0_9didUpdateyAA0aB0C_SdtF":{"name":"heroTransition(_:didUpdate:)","abstract":"

Undocumented

","parent_name":"HeroTransitionDelegate"},"Protocols/HeroStringConvertible.html#/s:4Hero0A17StringConvertibleP4from4nodexSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroStringConvertible"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartAnimatingFromViewController:":{"name":"heroWillStartAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndAnimatingFromViewController:":{"name":"heroDidEndAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelAnimatingFromViewController:":{"name":"heroDidCancelAnimatingFrom(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartTransition":{"name":"heroWillStartTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndTransition":{"name":"heroDidEndTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelTransition":{"name":"heroDidCancelTransition()","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroWillStartAnimatingToViewController:":{"name":"heroWillStartAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidEndAnimatingToViewController:":{"name":"heroDidEndAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroViewControllerDelegate.html#/c:@M@Hero@objc(pl)HeroViewControllerDelegate(im)heroDidCancelAnimatingToViewController:":{"name":"heroDidCancelAnimatingTo(viewController:)","abstract":"

Undocumented

","parent_name":"HeroViewControllerDelegate"},"Protocols/HeroProgressUpdateObserver.html#/s:4Hero0A22ProgressUpdateObserverP07heroDidcB08progressySd_tF":{"name":"heroDidUpdateProgress(progress:)","abstract":"

Undocumented

","parent_name":"HeroProgressUpdateObserver"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP10canAnimate4view9appearingSbSo6UIViewC_SbtF":{"name":"canAnimate(view:appearing:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP7animate9fromViews02toE0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP5cleanyyF":{"name":"clean()","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP6seekTo10timePassedySd_tF":{"name":"seekTo(timePassed:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP5apply5state2toyAA0A11TargetStateV_So6UIViewCtF":{"name":"apply(state:to:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroAnimator.html#/s:4Hero0A8AnimatorP12changeTarget5state13isDestination2toyAA0aD5StateV_SbSo6UIViewCtF":{"name":"changeTarget(state:isDestination:to:)","abstract":"

Undocumented

","parent_name":"HeroAnimator"},"Protocols/HeroPreprocessor.html#/s:4Hero0A12PreprocessorP4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroPreprocessor"},"Protocols/HeroPreprocessor.html#/s:4Hero0A12PreprocessorP7process9fromViews02toE0ySaySo6UIViewCG_AItF":{"name":"process(fromViews:toViews:)","abstract":"

Undocumented

","parent_name":"HeroPreprocessor"},"Protocols/HeroCustomSnapshotView.html#/s:4Hero0A18CustomSnapshotViewP04heroC0So6UIViewCSgvp":{"name":"heroSnapshot","abstract":"

Undocumented

","parent_name":"HeroCustomSnapshotView"},"Protocols/HeroCompatible.html#/s:4Hero0A10CompatibleP0B4TypeQa":{"name":"CompatibleType","abstract":"

Undocumented

","parent_name":"HeroCompatible"},"Protocols/HeroCompatible.html#/s:4Hero0A10CompatibleP4heroAA0A9ExtensionCy0B4TypeQzGvp":{"name":"hero","abstract":"

Undocumented

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

Undocumented

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

Allows a view to create their own custom snapshot when using Optimized snapshot

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

"},"Functions.html#/s:4Hero2eeoiySbAA8ExprNodeC_ADtF":{"name":"==(_:_:)","abstract":"

Undocumented

"},"Extensions/HeroDebugView.html#/gestureRecognizerShouldBegin(_:)":{"name":"gestureRecognizerShouldBegin(_:)","parent_name":"HeroDebugView"},"Extensions/UINavigationController.html#/Operation":{"name":"Operation","parent_name":"UINavigationController"},"Extensions/String.html#/s:SS4HeroE5match5regexSS_SnySiGtSgSS_tF":{"name":"match(regex:)","abstract":"

Undocumented

","parent_name":"String"},"Extensions/UITabBarController.html#/s:So18UITabBarControllerC4HeroE07heroTabB13AnimationTypeAC0d7DefaultgH0Ovp":{"name":"heroTabBarAnimationType","abstract":"

Undocumented

","parent_name":"UITabBarController"},"Extensions/UITabBarController.html#/c:@CM@Hero@@objc(cs)UITabBarController(py)heroTabBarAnimationTypeString":{"name":"heroTabBarAnimationTypeString","abstract":"

Undocumented

","parent_name":"UITabBarController"},"Extensions/UINavigationController.html#/s:So22UINavigationControllerC4HeroE27heroNavigationAnimationTypeAC0c7DefaultfG0Ovp":{"name":"heroNavigationAnimationType","abstract":"

Undocumented

","parent_name":"UINavigationController"},"Extensions/UINavigationController.html#/c:@CM@Hero@@objc(cs)UINavigationController(py)heroNavigationAnimationTypeString":{"name":"heroNavigationAnimationTypeString","abstract":"

Undocumented

","parent_name":"UINavigationController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE22heroModalAnimationTypeAC0c7DefaultfG0Ovp":{"name":"heroModalAnimationType","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(py)heroModalAnimationTypeString":{"name":"heroModalAnimationTypeString","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(py)isHeroEnabled":{"name":"isHeroEnabled","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)ht_dismiss:":{"name":"ht_dismiss(_:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE015heroReplaceViewB04withyAB_tF":{"name":"heroReplaceViewController(with:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)hero_dismissViewController":{"name":"hero_dismissViewController()","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/c:@CM@Hero@@objc(cs)UIViewController(im)hero_unwindToRootViewController":{"name":"hero_unwindToRootViewController()","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB0yyABF":{"name":"hero_unwindToViewController(_:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB012withSelectory10ObjectiveC0I0V_tF":{"name":"hero_unwindToViewController(withSelector:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB09withClassyyXlXp_tF":{"name":"hero_unwindToViewController(withClass:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE017hero_unwindToViewB014withMatchBlockySbABXE_tF":{"name":"hero_unwindToViewController(withMatchBlock:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIViewController.html#/s:So16UIViewControllerC4HeroE016hero_replaceViewB04withyAB_tF":{"name":"hero_replaceViewController(with:)","abstract":"

Undocumented

","parent_name":"UIViewController"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)heroID":{"name":"heroID","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)isHeroEnabled":{"name":"isHeroEnabled","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)isHeroEnabledForSubviews":{"name":"isHeroEnabledForSubviews","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/s:So6UIViewC4HeroE13heroModifiersSayAC0B8ModifierCGSgvp":{"name":"heroModifiers","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/UIView.html#/c:@CM@Hero@@objc(cs)UIView(py)heroModifierString":{"name":"heroModifierString","abstract":"

Undocumented

","parent_name":"UIView"},"Extensions/CATransform3D.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"CATransform3D"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE6linearABvpZ":{"name":"linear","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE6easeInABvpZ":{"name":"easeIn","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE7easeOutABvpZ":{"name":"easeOut","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE9easeInOutABvpZ":{"name":"easeInOut","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE8standardABvpZ":{"name":"standard","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE12decelerationABvpZ":{"name":"deceleration","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE12accelerationABvpZ":{"name":"acceleration","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE5sharpABvpZ":{"name":"sharp","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE11easeOutBackABvpZ":{"name":"easeOutBack","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/CAMediaTimingFunction.html#/s:So21CAMediaTimingFunctionC4HeroE4from4nameABSgSS_tFZ":{"name":"from(name:)","abstract":"

Undocumented

","parent_name":"CAMediaTimingFunction"},"Extensions/HeroDebugView.html#/c:@CM@Hero@objc(cs)HeroDebugView(im)gestureRecognizerShouldBegin:":{"name":"gestureRecognizerShouldBegin(_:)","abstract":"

Undocumented

","parent_name":"HeroDebugView"},"Extensions/HeroDebugView.html":{"name":"HeroDebugView"},"Extensions/CAMediaTimingFunction.html":{"name":"CAMediaTimingFunction"},"Extensions/CATransform3D.html":{"name":"CATransform3D"},"Extensions/UIView.html":{"name":"UIView"},"Extensions/UIViewController.html":{"name":"UIViewController"},"Extensions/UINavigationController.html":{"name":"UINavigationController"},"Extensions/UITabBarController.html":{"name":"UITabBarController"},"Extensions/String.html":{"name":"String"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8possibleyA2CmF":{"name":"possible","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8notifiedyA2CmF":{"name":"notified","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO8startingyA2CmF":{"name":"starting","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO9animatingyA2CmF":{"name":"animating","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroTransitionState.html#/s:4Hero0A15TransitionStateO10completingyA2CmF":{"name":"completing","abstract":"

Undocumented

","parent_name":"HeroTransitionState"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO16forceLeftToRightyA2EmF":{"name":"forceLeftToRight","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO16forceRightToLeftyA2EmF":{"name":"forceRightToLeft","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Strategy.html#/s:4Hero0A20DefaultAnimationTypeO8StrategyO13userInterfaceyA2EmF":{"name":"userInterface","abstract":"

Undocumented

","parent_name":"Strategy"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4leftyA2EmF":{"name":"left","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO5rightyA2EmF":{"name":"right","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO2upyA2EmF":{"name":"up","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4downyA2EmF":{"name":"down","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO4from4nodeAESgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO7leadingAEvpZ":{"name":"leading","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html#/s:4Hero0A20DefaultAnimationTypeO9DirectionO8trailingAEvpZ":{"name":"trailing","abstract":"

Undocumented

","parent_name":"Direction"},"Enums/HeroDefaultAnimationType/Direction.html":{"name":"Direction","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType/Strategy.html":{"name":"Strategy","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4autoyA2CmF":{"name":"auto","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4pushyA2C9DirectionO_tcACmF":{"name":"push(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4pullyA2C9DirectionO_tcACmF":{"name":"pull(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5coveryA2C9DirectionO_tcACmF":{"name":"cover(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7uncoveryA2C9DirectionO_tcACmF":{"name":"uncover(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5slideyA2C9DirectionO_tcACmF":{"name":"slide(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO9zoomSlideyA2C9DirectionO_tcACmF":{"name":"zoomSlide(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO6pageInyA2C9DirectionO_tcACmF":{"name":"pageIn(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7pageOutyA2C9DirectionO_tcACmF":{"name":"pageOut(direction:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4fadeyA2CmF":{"name":"fade","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4zoomyA2CmF":{"name":"zoom","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO7zoomOutyA2CmF":{"name":"zoomOut","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO8selectByyA2C_ACtcACmF":{"name":"selectBy(presenting:dismissing:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO11autoReverse10presentingA2C_tFZ":{"name":"autoReverse(presenting:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4noneyA2CmF":{"name":"none","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO5labelSSSgvp":{"name":"label","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/HeroDefaultAnimationType.html#/s:4Hero0A20DefaultAnimationTypeO4from4nodeACSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroDefaultAnimationType"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11topToBottomyA2CmF":{"name":"topToBottom","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11bottomToTopyA2CmF":{"name":"bottomToTop","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11leftToRightyA2CmF":{"name":"leftToRight","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO11rightToLeftyA2CmF":{"name":"rightToLeft","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO6radialyACSo7CGPointV_tcACmF":{"name":"radial(center:)","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO13inverseRadialyACSo7CGPointV_tcACmF":{"name":"inverseRadial(center:)","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO17leadingToTrailingACvpZ":{"name":"leadingToTrailing","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/CascadeDirection.html#/s:4Hero16CascadeDirectionO17trailingToLeadingACvpZ":{"name":"trailingToLeading","abstract":"

Undocumented

","parent_name":"CascadeDirection"},"Enums/ParseError.html#/s:4Hero10ParseErrorO13unexpectTokenyA2CmF":{"name":"unexpectToken","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO17undefinedOperatoryACSScACmF":{"name":"undefinedOperator(_:)","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO15expectCharacteryACSJcACmF":{"name":"expectCharacter(_:)","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO16expectExpressionyA2CmF":{"name":"expectExpression","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO18expectArgumentListyA2CmF":{"name":"expectArgumentList","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/ParseError.html#/s:4Hero10ParseErrorO18expectFunctionNameyA2CmF":{"name":"expectFunctionName","abstract":"

Undocumented

","parent_name":"ParseError"},"Enums/Token.html#/s:4Hero5TokenO10identifieryACSS_SnySiGtcACmF":{"name":"identifier(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO6numberyACSf_SnySiGtcACmF":{"name":"number(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO10parensOpenyACSnySiGcACmF":{"name":"parensOpen(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO11parensCloseyACSnySiGcACmF":{"name":"parensClose(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO5commayACSnySiGcACmF":{"name":"comma(_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/Token.html#/s:4Hero5TokenO5otheryACSS_SnySiGtcACmF":{"name":"other(_:_:)","abstract":"

Undocumented

","parent_name":"Token"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO4autoyA2CmF":{"name":"auto","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO06sourceB5OnTopyA2CmF":{"name":"sourceViewOnTop","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroViewOrderingStrategy.html#/s:4Hero0A20ViewOrderingStrategyO011destinationB5OnTopyA2CmF":{"name":"destinationViewOnTop","abstract":"

Undocumented

","parent_name":"HeroViewOrderingStrategy"},"Enums/HeroCoordinateSpace.html#/s:4Hero0A15CoordinateSpaceO6globalyA2CmF":{"name":"global","abstract":"

Undocumented

","parent_name":"HeroCoordinateSpace"},"Enums/HeroCoordinateSpace.html#/s:4Hero0A15CoordinateSpaceO5localyA2CmF":{"name":"local","abstract":"

Undocumented

","parent_name":"HeroCoordinateSpace"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO9optimizedyA2CmF":{"name":"optimized","abstract":"

Will optimize for different type of views","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO6normalyA2CmF":{"name":"normal","abstract":"

snapshotView(afterScreenUpdates:)

","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO11layerRenderyA2CmF":{"name":"layerRender","abstract":"

layer.render(in: currentContext)

","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html#/s:4Hero0A12SnapshotTypeO02noB0yA2CmF":{"name":"noSnapshot","abstract":"

will not create snapshot. animate the view directly.","parent_name":"HeroSnapshotType"},"Enums/HeroSnapshotType.html":{"name":"HeroSnapshotType","abstract":"

Undocumented

"},"Enums/HeroCoordinateSpace.html":{"name":"HeroCoordinateSpace","abstract":"

Undocumented

"},"Enums/HeroViewOrderingStrategy.html":{"name":"HeroViewOrderingStrategy","abstract":"

Undocumented

"},"Enums/Token.html":{"name":"Token","abstract":"

Undocumented

"},"Enums/ParseError.html":{"name":"ParseError","abstract":"

Undocumented

"},"Enums/CascadeDirection.html":{"name":"CascadeDirection","abstract":"

Undocumented

"},"Enums/HeroDefaultAnimationType.html":{"name":"HeroDefaultAnimationType","abstract":"

Undocumented

"},"Enums/HeroTransitionState.html":{"name":"HeroTransitionState","abstract":"

Undocumented

"},"Classes/HeroDebugPlugin.html#/showOnTop":{"name":"showOnTop","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/animate(fromViews:toViews:)":{"name":"animate(fromViews:toViews:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/resume(timePassed:reverse:)":{"name":"resume(timePassed:reverse:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/clean()":{"name":"clean()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/onDone()":{"name":"onDone()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/onProcessSliderChanged(progress:)":{"name":"onProcessSliderChanged(progress:)","parent_name":"HeroDebugPlugin"},"Classes/Hero.html#/s:4HeroAAC6sharedAA0A10TransitionCvpZ":{"name":"shared","abstract":"

Shared singleton object for controlling the transition

","parent_name":"Hero"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8delegateAA0aB8Delegate_pSgvp":{"name":"delegate","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC16defaultAnimationAA0a7DefaultD4TypeOvp":{"name":"defaultAnimation","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC14containerColorSo7UIColorCvp":{"name":"containerColor","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC24isUserInteractionEnabledSbvp":{"name":"isUserInteractionEnabled","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC20viewOrderingStrategyAA0a4ViewdE0Ovp":{"name":"viewOrderingStrategy","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC33defaultAnimationDirectionStrategyAA0a7DefaultD4TypeO0F0Ovp":{"name":"defaultAnimationDirectionStrategy","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5stateAA0aB5StateOvp":{"name":"state","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC15isTransitioningSbvp":{"name":"isTransitioning","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC12isPresentingSbvp":{"name":"isPresenting","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC13transitioningSbvp":{"name":"transitioning","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC10presentingSbvp":{"name":"presenting","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC9containerSo6UIViewCSgvp":{"name":"container","abstract":"

container we created to hold all animating views, will be a subview of the","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC16toViewControllerSo06UIViewE0CSgvp":{"name":"toViewController","abstract":"

destination view controller

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC18fromViewControllerSo06UIViewE0CSgvp":{"name":"fromViewController","abstract":"

source view controller

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC7contextAA0A7ContextCSgvp":{"name":"context","abstract":"

context object holding transition informations

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC11interactiveSbvp":{"name":"interactive","abstract":"

whether or not we are handling transition interactively

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC13totalDurationSdvp":{"name":"totalDuration","abstract":"

max duration needed by the animators

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8progressSdvp":{"name":"progress","abstract":"

progress of the current transition. 0 if no transition is happening

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@M@Hero@objc(cs)HeroTransition(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC24observeForProgressUpdate8observeryAA0aeF8Observer_p_tF":{"name":"observeForProgressUpdate(observer:)","abstract":"

Receive callbacks on each animation frame.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC7animateyyF":{"name":"animate()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC8complete8finishedySb_tF":{"name":"complete(finished:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC10transition4from2to2in10completionySo16UIViewControllerC_AJSo0H0CySbcSgtF":{"name":"transition(from:to:in:completion:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6updateyy12CoreGraphics7CGFloatVF":{"name":"update(_:)","abstract":"

Update the progress for the interactive transition.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6finish7animateySb_tF":{"name":"finish(animate:)","abstract":"

Finish the interactive transition.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC6cancel7animateySb_tF":{"name":"cancel(animate:)","abstract":"

Cancel the interactive transition.","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5apply9modifiers2toySayAA0A8ModifierCG_So6UIViewCtF":{"name":"apply(modifiers:to:)","abstract":"

Override modifiers during an interactive animation.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC12changeTarget9modifiers13isDestination2toySayAA0A8ModifierCG_SbSo6UIViewCtF":{"name":"changeTarget(modifiers:isDestination:to:)","abstract":"

Override target state during an interactive animation.

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/s:4Hero0A10TransitionC5startyyF":{"name":"start()","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:willShowViewController:animated:":{"name":"navigationController(_:willShow:animated:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:didShowViewController:animated:":{"name":"navigationController(_:didShow:animated:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:animationControllerForOperation:fromViewController:toViewController:":{"name":"navigationController(_:animationControllerFor:from:to:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)navigationController:interactionControllerForAnimationController:":{"name":"navigationController(_:interactionControllerFor:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:shouldSelectViewController:":{"name":"tabBarController(_:shouldSelect:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:interactionControllerForAnimationController:":{"name":"tabBarController(_:interactionControllerFor:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)tabBarController:animationControllerForTransitionFromViewController:toViewController:":{"name":"tabBarController(_:animationControllerForTransitionFrom:to:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationControllerForPresentedController:presentingController:sourceController:":{"name":"animationController(forPresented:presenting:source:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationControllerForDismissedController:":{"name":"animationController(forDismissed:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)interactionControllerForDismissal:":{"name":"interactionControllerForDismissal(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)interactionControllerForPresentation:":{"name":"interactionControllerForPresentation(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animateTransition:":{"name":"animateTransition(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)transitionDuration:":{"name":"transitionDuration(using:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)animationEnded:":{"name":"animationEnded(_:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(py)wantsInteractiveStart":{"name":"wantsInteractiveStart","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/HeroTransition.html#/c:@CM@Hero@objc(cs)HeroTransition(im)startInteractiveTransition:":{"name":"startInteractiveTransition(_:)","abstract":"

Undocumented

","parent_name":"HeroTransition"},"Classes/Parser.html#/s:4Hero6ParserC6tokensACSayAA5TokenOG_tcfc":{"name":"init(tokens:)","abstract":"

Undocumented

","parent_name":"Parser"},"Classes/Parser.html#/s:4Hero6ParserC5parseSayAA8ExprNodeCGyKF":{"name":"parse()","abstract":"

Undocumented

","parent_name":"Parser"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC9prototypeAA09PrototypeC0Cvp":{"name":"prototype","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC4bodyAA04ExprC0Cvp":{"name":"body","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/FunctionNode.html#/s:4Hero12FunctionNodeC9prototype4bodyAcA09PrototypeC0C_AA04ExprC0Ctcfc":{"name":"init(prototype:body:)","abstract":"

Undocumented

","parent_name":"FunctionNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC13argumentNamesSaySSGvp":{"name":"argumentNames","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/PrototypeNode.html#/s:4Hero13PrototypeNodeC4name13argumentNamesACSS_SaySSGtcfc":{"name":"init(name:argumentNames:)","abstract":"

Undocumented

","parent_name":"PrototypeNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC9argumentsSayAA04ExprC0CGvp":{"name":"arguments","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/CallNode.html#/s:4Hero8CallNodeC4name9argumentsACSS_SayAA04ExprC0CGtcfc":{"name":"init(name:arguments:)","abstract":"

Undocumented

","parent_name":"CallNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC3lhsAA04ExprD0Cvp":{"name":"lhs","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC3rhsAA04ExprD0Cvp":{"name":"rhs","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/BinaryOpNode.html#/s:4Hero12BinaryOpNodeC4name3lhs3rhsACSS_AA04ExprD0CAHtcfc":{"name":"init(name:lhs:rhs:)","abstract":"

Undocumented

","parent_name":"BinaryOpNode"},"Classes/VariableNode.html#/s:4Hero12VariableNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"VariableNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC5valueSfvp":{"name":"value","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC11descriptionSSvp":{"name":"description","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/NumberNode.html#/s:4Hero10NumberNodeC5valueACSf_tcfc":{"name":"init(value:)","abstract":"

Undocumented

","parent_name":"NumberNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC5rangeSnySiGvp":{"name":"range","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC4nameSSvp":{"name":"name","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:s23CustomStringConvertibleP11descriptionSSvp":{"name":"description","parent_name":"ExprNode"},"Classes/ExprNode.html#/s:4Hero8ExprNodeC4nameACSS_tcfc":{"name":"init(name:)","abstract":"

Undocumented

","parent_name":"ExprNode"},"Classes/Lexer.html#/s:4Hero5LexerC5inputACSS_tcfc":{"name":"init(input:)","abstract":"

Undocumented

","parent_name":"Lexer"},"Classes/Lexer.html#/s:4Hero5LexerC8tokenizeSayAA5TokenOGyF":{"name":"tokenize()","abstract":"

Undocumented

","parent_name":"Lexer"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC4heroAA0A10TransitionCSgvp":{"name":"hero","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7contextAA0A7ContextCSgvp":{"name":"context","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC23requirePerFrameCallbackSbvp":{"name":"requirePerFrameCallback","abstract":"

Determines whether or not to receive seekTo callback on every frame.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/c:@M@Hero@objc(cs)HeroPlugin(im)init":{"name":"init()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7process9fromViews02toE0ySaySo6UIViewCG_AItF":{"name":"process(fromViews:toViews:)","abstract":"

Called before any animation.","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC10canAnimate4view9appearingSbSo6UIViewC_SbtF":{"name":"canAnimate(view:appearing:)","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7animate9fromViews02toE0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","abstract":"

Perform the animation.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC5cleanyyF":{"name":"clean()","abstract":"

Called when all animations are completed.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6seekTo10timePassedySd_tF":{"name":"seekTo(timePassed:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC5apply5state2toyAA0A11TargetStateV_So6UIViewCtF":{"name":"apply(state:to:)","abstract":"

For supporting interactive animation only.

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC12changeTarget5state13isDestination2toyAA0aD5StateV_SbSo6UIViewCtF":{"name":"changeTarget(state:isDestination:to:)","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC9isEnabledSbvpZ":{"name":"isEnabled","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC6enableyyFZ":{"name":"enable()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroPlugin.html#/s:4Hero0A6PluginC7disableyyFZ":{"name":"disable()","abstract":"

Undocumented

","parent_name":"HeroPlugin"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13applyFunctionACyAA0A11TargetStateVzc_tcfc":{"name":"init(applyFunction:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWithyACSayACGFZ":{"name":"beginWith(_:)","abstract":"

Apply modifiers directly to the view at the start of the transition.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWith9modifiersACSayACG_tFZ":{"name":"beginWith(modifiers:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9beginWithyA2Cd_tFZ":{"name":"beginWith(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC24useGlobalCoordinateSpaceACvpZ":{"name":"useGlobalCoordinateSpace","abstract":"

Use global coordinate space.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22ignoreSubviewModifiersACvpZ":{"name":"ignoreSubviewModifiers","abstract":"

ignore all heroModifiers attributes for a view’s direct subviews.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22ignoreSubviewModifiers9recursiveACSb_tFZ":{"name":"ignoreSubviewModifiers(recursive:)","abstract":"

ignore all heroModifiers attributes for a view’s subviews.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC20useOptimizedSnapshotACvpZ":{"name":"useOptimizedSnapshot","abstract":"

Will create snapshot optimized for different view type.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC17useNormalSnapshotACvpZ":{"name":"useNormalSnapshot","abstract":"

Create snapshot using snapshotView(afterScreenUpdates:).

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC22useLayerRenderSnapshotACvpZ":{"name":"useLayerRenderSnapshot","abstract":"

Create snapshot using layer.render(in: currentContext).","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13useNoSnapshotACvpZ":{"name":"useNoSnapshot","abstract":"

Force Hero to not create any snapshot when animating this view.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12forceAnimateACvpZ":{"name":"forceAnimate","abstract":"

Force the view to animate.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC23useScaleBasedSizeChangeACvpZ":{"name":"useScaleBasedSizeChange","abstract":"

Force Hero use scale based size animation. This will convert all .size modifier into .scale modifier.","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4from4nodeACSgAA8ExprNodeC_tFZ":{"name":"from(node:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4fadeACvpZ":{"name":"fade","abstract":"

Fade the view during transition

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12forceNonFadeACvpZ":{"name":"forceNonFade","abstract":"

Force don’t fade view during transition

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC8positionyACSo7CGPointVFZ":{"name":"position(_:)","abstract":"

Set the position for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4sizeyACSo6CGSizeVFZ":{"name":"size(_:)","abstract":"

Set the size for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9transformyACSo13CATransform3DVFZ":{"name":"transform(_:)","abstract":"

Set the transform for the view to animate from/to. Will override previous perspective, scale, translate, & rotate modifiers

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11perspectiveyAC12CoreGraphics7CGFloatVFZ":{"name":"perspective(_:)","abstract":"

Set the perspective on the transform. use in combination with the rotate modifier.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5scale1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"scale(x:y:z:)","abstract":"

Scale 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5scaleyAC12CoreGraphics7CGFloatVFZ":{"name":"scale(_:)","abstract":"

Scale in x & y axis

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9translate1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"translate(x:y:z:)","abstract":"

Translate 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9translate_1zACSo7CGPointV_12CoreGraphics7CGFloatVtFZ":{"name":"translate(_:z:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotate1x1y1zAC12CoreGraphics7CGFloatV_A2JtFZ":{"name":"rotate(x:y:z:)","abstract":"

Rotate 3d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotate_1zACSo7CGPointV_12CoreGraphics7CGFloatVtFZ":{"name":"rotate(_:z:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6rotateyAC12CoreGraphics7CGFloatVFZ":{"name":"rotate(_:)","abstract":"

Rotate 2d

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7opacityyAC12CoreGraphics7CGFloatVFZ":{"name":"opacity(_:)","abstract":"

Set the opacity for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC15backgroundColoryACSo7UIColorCFZ":{"name":"backgroundColor(_:)","abstract":"

Set the backgroundColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12cornerRadiusyAC12CoreGraphics7CGFloatVFZ":{"name":"cornerRadius(_:)","abstract":"

Set the cornerRadius for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC9zPositionyAC12CoreGraphics7CGFloatVFZ":{"name":"zPosition(_:)","abstract":"

Set the zPosition for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12contentsRectyACSo6CGRectVFZ":{"name":"contentsRect(_:)","abstract":"

Set the contentsRect for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13contentsScaleyAC12CoreGraphics7CGFloatVFZ":{"name":"contentsScale(_:)","abstract":"

Set the contentsScale for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11borderWidthyAC12CoreGraphics7CGFloatVFZ":{"name":"borderWidth(_:)","abstract":"

Set the borderWidth for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11borderColoryACSo7UIColorCFZ":{"name":"borderColor(_:)","abstract":"

Set the borderColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11shadowColoryACSo7UIColorCFZ":{"name":"shadowColor(_:)","abstract":"

Set the shadowColor for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13shadowOpacityyAC12CoreGraphics7CGFloatVFZ":{"name":"shadowOpacity(_:)","abstract":"

Set the shadowOpacity for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12shadowOffsetyACSo6CGSizeVFZ":{"name":"shadowOffset(_:)","abstract":"

Set the shadowOffset for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC12shadowRadiusyAC12CoreGraphics7CGFloatVFZ":{"name":"shadowRadius(_:)","abstract":"

Set the shadowRadius for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC10shadowPathyACSo9CGPathRefaFZ":{"name":"shadowPath(_:)","abstract":"

Set the shadowPath for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13masksToBoundsyACSbFZ":{"name":"masksToBounds(_:)","abstract":"

Set the masksToBounds for the view to animate from/to.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7overlay5color7opacityACSo7UIColorC_12CoreGraphics7CGFloatVtFZ":{"name":"overlay(color:opacity:)","abstract":"

Create an overlay on the animating view.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC8durationyACSdFZ":{"name":"duration(_:)","abstract":"

Sets the duration of the animation for a given view. If not used, Hero will use determine the duration based on the distance and size changes.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC20durationMatchLongestACvpZ":{"name":"durationMatchLongest","abstract":"

Sets the duration of the animation for a given view to match the longest animation of the transition.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC5delayyACSdFZ":{"name":"delay(_:)","abstract":"

Sets the delay of the animation for a given view.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14timingFunctionyACSo013CAMediaTimingD0CFZ":{"name":"timingFunction(_:)","abstract":"

Sets the timing function of the animation for a given view. If not used, Hero will use determine the timing function based on whether or not the view is entering or exiting the screen.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6spring9stiffness7dampingAC12CoreGraphics7CGFloatV_AItFZ":{"name":"spring(stiffness:damping:)","abstract":"

(iOS 9+) Use spring animation with custom stiffness & damping. The duration will be automatically calculated. Will be ignored if arc, timingFunction, or duration is set.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC6source6heroIDACSS_tFZ":{"name":"source(heroID:)","abstract":"

Transition from/to the state of the view with matching heroID","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC3arcACvpZ":{"name":"arc","abstract":"

Works in combination with position modifier to apply a natural curve when moving to the destination.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC3arc9intensityAC12CoreGraphics7CGFloatV_tFZ":{"name":"arc(intensity:)","abstract":"

Works in combination with position modifier to apply a natural curve when moving to the destination.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7cascadeACvpZ":{"name":"cascade","abstract":"

Cascade applys increasing delay modifiers to subviews

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC7cascade5delta9direction17delayMatchedViewsACSd_AA16CascadeDirectionOSbtFZ":{"name":"cascade(delta:direction:delayMatchedViews:)","abstract":"

Cascade applys increasing delay modifiers to subviews

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4whenyACSbAA0A18ConditionalContextVc_SayACGtFZ":{"name":"when(_:_:)","abstract":"

Apply modifiers only if the condition return true.

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC4whenyACSbAA0A18ConditionalContextVc_ACdtFZ":{"name":"when(_:_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC11whenMatchedyA2Cd_tFZ":{"name":"whenMatched(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14whenPresentingyA2Cd_tFZ":{"name":"whenPresenting(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC14whenDismissingyA2Cd_tFZ":{"name":"whenDismissing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC13whenAppearingyA2Cd_tFZ":{"name":"whenAppearing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroModifier.html#/s:4Hero0A8ModifierC16whenDisappearingyA2Cd_tFZ":{"name":"whenDisappearing(_:)","abstract":"

Undocumented

","parent_name":"HeroModifier"},"Classes/HeroContext.html#/s:4Hero0A7ContextC9containerSo6UIViewCvp":{"name":"container","abstract":"

The container holding all of the animating views

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC9fromViewsSaySo6UIViewCGvp":{"name":"fromViews","abstract":"

A flattened list of all views from source ViewController

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC7toViewsSaySo6UIViewCGvp":{"name":"toViews","abstract":"

A flattened list of all views from destination ViewController

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC10sourceView3forSo6UIViewCSgSS_tF":{"name":"sourceView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC15destinationView3forSo6UIViewCSgSS_tF":{"name":"destinationView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC10pairedView3forSo6UIViewCSgAG_tF":{"name":"pairedView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC12snapshotView3forSo6UIViewCAG_tF":{"name":"snapshotView(for:)","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextCyAA0A11TargetStateVSgSo6UIViewCcip":{"name":"subscript(_:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC5cleanyyF":{"name":"clean()","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC4hide4viewySo6UIViewC_tF":{"name":"hide(view:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroContext.html#/s:4Hero0A7ContextC6unhide4viewySo6UIViewC_tF":{"name":"unhide(view:)","abstract":"

Undocumented

","parent_name":"HeroContext"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionC4basexvp":{"name":"base","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE2idSSSgvp":{"name":"id","abstract":"

ID is the identifier for the view. When doing a transition between two view controllers,","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE9isEnabledSbvp":{"name":"isEnabled","abstract":"

isEnabled allows to specify whether a view and its subviews should be consider for animations.","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE20isEnabledForSubviewsSbvp":{"name":"isEnabledForSubviews","abstract":"

isEnabledForSubviews allows to specify whether a view’s subviews should be consider for animations.","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE9modifiersSayAA0A8ModifierCGSgvp":{"name":"modifiers","abstract":"

Use modifiers to specify animations alongside the main transition. Checkout HeroModifier.swift for available modifiers.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo6UIViewCRbzlE14modifierStringSSSgvp":{"name":"modifierString","abstract":"

modifierString** provides another way to set modifiers. It can be assigned through storyboard.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE18modalAnimationTypeAA0a7DefaultfG0Ovp":{"name":"modalAnimationType","abstract":"

default hero animation type for presenting & dismissing modally

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE24modalAnimationTypeStringSSSgvp":{"name":"modalAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE9isEnabledSbvp":{"name":"isEnabled","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo22UINavigationControllerCRbzlE23navigationAnimationTypeAA0a7DefaultfG0Ovp":{"name":"navigationAnimationType","abstract":"

default hero animation type for push and pop within the navigation controller

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo22UINavigationControllerCRbzlE29navigationAnimationTypeStringSSSgvp":{"name":"navigationAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo18UITabBarControllerCRbzlE03tabD13AnimationTypeAA0a7DefaultgH0Ovp":{"name":"tabBarAnimationType","abstract":"

default hero animation type for switching tabs within the tab bar controller

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo18UITabBarControllerCRbzlE03tabD19AnimationTypeStringSSSgvp":{"name":"tabBarAnimationTypeString","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE011dismissViewD010completionyyycSg_tF":{"name":"dismissViewController(completion:)","abstract":"

Dismiss the current view controller with animation. Will perform a navigationController.popViewController","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE016unwindToRootViewD0yyF":{"name":"unwindToRootViewController()","abstract":"

Unwind to the root view controller using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD0yyAEF":{"name":"unwindToViewController(_:)","abstract":"

Unwind to a specific view controller using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD012withSelectory10ObjectiveC0I0V_tF":{"name":"unwindToViewController(withSelector:)","abstract":"

Undocumented

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD09withClassyyXlXp_tF":{"name":"unwindToViewController(withClass:)","abstract":"

Unwind to a view controller with given class using Hero

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE012unwindToViewD014withMatchBlockySbAEXE_tF":{"name":"unwindToViewController(withMatchBlock:)","abstract":"

Unwind to a view controller that the matchBlock returns true on.

","parent_name":"HeroExtension"},"Classes/HeroExtension.html#/s:4Hero0A9ExtensionCAASo16UIViewControllerCRbzlE011replaceViewD04with10completionyAE_yycSgtF":{"name":"replaceViewController(with:completion:)","abstract":"

Replace the current view controller with another VC on the navigation/modal stack.

","parent_name":"HeroExtension"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC9showOnTopSbvpZ":{"name":"showOnTop","abstract":"

Undocumented

","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC7animate9fromViews02toF0SdSaySo6UIViewCG_AItF":{"name":"animate(fromViews:toViews:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC6resume10timePassed7reverseS2d_SbtF":{"name":"resume(timePassed:reverse:)","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC5cleanyyF":{"name":"clean()","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC6onDoneyyF":{"name":"onDone()","abstract":"

Undocumented

","parent_name":"HeroDebugPlugin"},"Classes/HeroDebugPlugin.html#/s:4Hero0A11DebugPluginC22onProcessSliderChanged8progressySf_tF":{"name":"onProcessSliderChanged(progress:)","abstract":"

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

Undocumented

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

The singleton class/object for controlling interactive transitions.

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

The following classes are available globally.

"},"Enums.html":{"name":"Enumerations","abstract":"

The following enumerations are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"},"Functions.html":{"name":"Functions","abstract":"

The following functions are available globally.

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

The following protocols are available globally.

"},"Structs.html":{"name":"Structures","abstract":"

The following structures are available globally.

"}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json new file mode 100644 index 00000000..cde7bf14 --- /dev/null +++ b/docs/undocumented.json @@ -0,0 +1,4464 @@ +{ + "warnings": [ + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugPlugin.swift", + "line": 26, + "symbol": "HeroDebugPlugin", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugPlugin.swift", + "line": 27, + "symbol": "HeroDebugPlugin.showOnTop", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugPlugin.swift", + "line": 75, + "symbol": "HeroDebugPlugin", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugPlugin.swift", + "line": 76, + "symbol": "HeroDebugPlugin.onDone()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugPlugin.swift", + "line": 86, + "symbol": "HeroDebugPlugin.onProcessSliderChanged(progress:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugView.swift", + "line": 193, + "symbol": "HeroDebugView", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Debug Plugin/HeroDebugView.swift", + "line": 194, + "symbol": "HeroDebugView.gestureRecognizerShouldBegin(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 27, + "symbol": "CAMediaTimingFunction.linear", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 27, + "symbol": "CAMediaTimingFunction.linear", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 28, + "symbol": "CAMediaTimingFunction.easeIn", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 28, + "symbol": "CAMediaTimingFunction.easeIn", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 29, + "symbol": "CAMediaTimingFunction.easeOut", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 29, + "symbol": "CAMediaTimingFunction.easeOut", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 30, + "symbol": "CAMediaTimingFunction.easeInOut", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 30, + "symbol": "CAMediaTimingFunction.easeInOut", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 33, + "symbol": "CAMediaTimingFunction.standard", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 33, + "symbol": "CAMediaTimingFunction.standard", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 34, + "symbol": "CAMediaTimingFunction.deceleration", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 34, + "symbol": "CAMediaTimingFunction.deceleration", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 35, + "symbol": "CAMediaTimingFunction.acceleration", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 35, + "symbol": "CAMediaTimingFunction.acceleration", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 36, + "symbol": "CAMediaTimingFunction.sharp", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 36, + "symbol": "CAMediaTimingFunction.sharp", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 39, + "symbol": "CAMediaTimingFunction.easeOutBack", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 39, + "symbol": "CAMediaTimingFunction.easeOutBack", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 41, + "symbol": "CAMediaTimingFunction.from(name:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/CAMediaTimingFunction+Hero.swift", + "line": 41, + "symbol": "CAMediaTimingFunction.from(name:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 120, + "symbol": "UIView.heroID", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 120, + "symbol": "UIView.heroID", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 127, + "symbol": "UIView.isHeroEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 127, + "symbol": "UIView.isHeroEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 134, + "symbol": "UIView.isHeroEnabledForSubviews", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 134, + "symbol": "UIView.isHeroEnabledForSubviews", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 140, + "symbol": "UIView.heroModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 140, + "symbol": "UIView.heroModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 147, + "symbol": "UIView.heroModifierString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIView+Hero.swift", + "line": 147, + "symbol": "UIView.heroModifierString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 63, + "symbol": "HeroExtension.modalAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 63, + "symbol": "HeroExtension.modalAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 69, + "symbol": "HeroExtension.isEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 69, + "symbol": "HeroExtension.isEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 126, + "symbol": "UIViewController.heroModalAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 126, + "symbol": "UIViewController.heroModalAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 132, + "symbol": "UIViewController.heroModalAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 132, + "symbol": "UIViewController.heroModalAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 138, + "symbol": "UIViewController.isHeroEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 138, + "symbol": "UIViewController.isHeroEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 152, + "symbol": "HeroExtension.navigationAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 152, + "symbol": "HeroExtension.navigationAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 160, + "symbol": "UINavigationController.heroNavigationAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 160, + "symbol": "UINavigationController.heroNavigationAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 167, + "symbol": "UINavigationController.heroNavigationAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 167, + "symbol": "UINavigationController.heroNavigationAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 181, + "symbol": "HeroExtension.tabBarAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 181, + "symbol": "HeroExtension.tabBarAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 189, + "symbol": "UITabBarController.heroTabBarAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 189, + "symbol": "UITabBarController.heroTabBarAnimationType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 196, + "symbol": "UITabBarController.heroTabBarAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 196, + "symbol": "UITabBarController.heroTabBarAnimationTypeString", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 230, + "symbol": "HeroExtension.unwindToViewController(withSelector:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 230, + "symbol": "HeroExtension.unwindToViewController(withSelector:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 336, + "symbol": "UIViewController.ht_dismiss(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 336, + "symbol": "UIViewController.ht_dismiss(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 341, + "symbol": "UIViewController.heroReplaceViewController(with:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 341, + "symbol": "UIViewController.heroReplaceViewController(with:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 347, + "symbol": "UIViewController.hero_dismissViewController()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 347, + "symbol": "UIViewController.hero_dismissViewController()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 353, + "symbol": "UIViewController.hero_unwindToRootViewController()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 353, + "symbol": "UIViewController.hero_unwindToRootViewController()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 358, + "symbol": "UIViewController.hero_unwindToViewController(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 358, + "symbol": "UIViewController.hero_unwindToViewController(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 363, + "symbol": "UIViewController.hero_unwindToViewController(withSelector:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 363, + "symbol": "UIViewController.hero_unwindToViewController(withSelector:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 368, + "symbol": "UIViewController.hero_unwindToViewController(withClass:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 368, + "symbol": "UIViewController.hero_unwindToViewController(withClass:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 373, + "symbol": "UIViewController.hero_unwindToViewController(withMatchBlock:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 373, + "symbol": "UIViewController.hero_unwindToViewController(withMatchBlock:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 378, + "symbol": "UIViewController.hero_replaceViewController(with:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Extensions/UIViewController+Hero.swift", + "line": 378, + "symbol": "UIViewController.hero_replaceViewController(with:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 25, + "symbol": "HeroCompatible", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 25, + "symbol": "HeroCompatible", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 26, + "symbol": "HeroCompatible.CompatibleType", + "symbol_kind": "source.lang.swift.decl.associatedtype", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 26, + "symbol": "HeroCompatible.CompatibleType", + "symbol_kind": "source.lang.swift.decl.associatedtype", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 28, + "symbol": "HeroCompatible.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 28, + "symbol": "HeroCompatible.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 31, + "symbol": "HeroCompatible", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 31, + "symbol": "HeroCompatible", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 32, + "symbol": "HeroCompatible.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 32, + "symbol": "HeroCompatible.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 36, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 36, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 38, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 38, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 39, + "symbol": "HeroExtension.base", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 39, + "symbol": "HeroExtension.base", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 43, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 43, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 144, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 144, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 173, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 173, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 202, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroCompatible.swift", + "line": 202, + "symbol": "HeroExtension", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 25, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 25, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 82, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 82, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 293, + "symbol": "HeroContext.subscript(_:)", + "symbol_kind": "source.lang.swift.decl.function.subscript", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 293, + "symbol": "HeroContext.subscript(_:)", + "symbol_kind": "source.lang.swift.decl.function.subscript", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 302, + "symbol": "HeroContext.clean()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 302, + "symbol": "HeroContext.clean()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 312, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 312, + "symbol": "HeroContext", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 313, + "symbol": "HeroContext.hide(view:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 313, + "symbol": "HeroContext.hide(view:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 324, + "symbol": "HeroContext.unhide(view:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 324, + "symbol": "HeroContext.unhide(view:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 396, + "symbol": "HeroCustomSnapshotView.heroSnapshot", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroContext.swift", + "line": 396, + "symbol": "HeroCustomSnapshotView.heroSnapshot", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+Advanced.swift", + "line": 41, + "symbol": "HeroModifier.beginWith(modifiers:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+Advanced.swift", + "line": 41, + "symbol": "HeroModifier.beginWith(modifiers:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+Advanced.swift", + "line": 45, + "symbol": "HeroModifier.beginWith(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+Advanced.swift", + "line": 45, + "symbol": "HeroModifier.beginWith(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+HeroStringConvertible.swift", + "line": 27, + "symbol": "HeroModifier.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier+HeroStringConvertible.swift", + "line": 27, + "symbol": "HeroModifier.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 25, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 25, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 25, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 25, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 26, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 26, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 27, + "symbol": "HeroModifier.init(applyFunction:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 27, + "symbol": "HeroModifier.init(applyFunction:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 33, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 33, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 72, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 72, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 132, + "symbol": "HeroModifier.translate(_:z:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 132, + "symbol": "HeroModifier.translate(_:z:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 151, + "symbol": "HeroModifier.rotate(_:z:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 151, + "symbol": "HeroModifier.rotate(_:z:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 165, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 165, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 334, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 334, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 392, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 392, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 463, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 463, + "symbol": "HeroModifier", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 476, + "symbol": "HeroModifier.when(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 476, + "symbol": "HeroModifier.when(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 480, + "symbol": "HeroModifier.whenMatched(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 480, + "symbol": "HeroModifier.whenMatched(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 484, + "symbol": "HeroModifier.whenPresenting(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 484, + "symbol": "HeroModifier.whenPresenting(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 488, + "symbol": "HeroModifier.whenDismissing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 488, + "symbol": "HeroModifier.whenDismissing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 492, + "symbol": "HeroModifier.whenAppearing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 492, + "symbol": "HeroModifier.whenAppearing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 496, + "symbol": "HeroModifier.whenDisappearing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroModifier.swift", + "line": 496, + "symbol": "HeroModifier.whenDisappearing(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 25, + "symbol": "HeroPlugin", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 25, + "symbol": "HeroPlugin", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 27, + "symbol": "HeroPlugin.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 27, + "symbol": "HeroPlugin.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 29, + "symbol": "HeroPlugin.context", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 29, + "symbol": "HeroPlugin.context", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 45, + "symbol": "HeroPlugin.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 45, + "symbol": "HeroPlugin.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 130, + "symbol": "HeroPlugin.changeTarget(state:isDestination:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 130, + "symbol": "HeroPlugin.changeTarget(state:isDestination:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 134, + "symbol": "HeroPlugin", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 134, + "symbol": "HeroPlugin", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 135, + "symbol": "HeroPlugin.isEnabled", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 135, + "symbol": "HeroPlugin.isEnabled", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 147, + "symbol": "HeroPlugin.enable()", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 147, + "symbol": "HeroPlugin.enable()", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 150, + "symbol": "HeroPlugin.disable()", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroPlugin.swift", + "line": 150, + "symbol": "HeroPlugin.disable()", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 25, + "symbol": "HeroSnapshotType", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 25, + "symbol": "HeroSnapshotType", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 44, + "symbol": "HeroCoordinateSpace", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 44, + "symbol": "HeroCoordinateSpace", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 45, + "symbol": "HeroCoordinateSpace.global", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 45, + "symbol": "HeroCoordinateSpace.global", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 46, + "symbol": "HeroCoordinateSpace.local", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 46, + "symbol": "HeroCoordinateSpace.local", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 49, + "symbol": "HeroTargetState", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 49, + "symbol": "HeroTargetState", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 50, + "symbol": "HeroTargetState.beginState", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 50, + "symbol": "HeroTargetState.beginState", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 51, + "symbol": "HeroTargetState.conditionalModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 51, + "symbol": "HeroTargetState.conditionalModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 53, + "symbol": "HeroTargetState.position", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 53, + "symbol": "HeroTargetState.position", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 54, + "symbol": "HeroTargetState.size", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 54, + "symbol": "HeroTargetState.size", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 55, + "symbol": "HeroTargetState.transform", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 55, + "symbol": "HeroTargetState.transform", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 56, + "symbol": "HeroTargetState.opacity", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 56, + "symbol": "HeroTargetState.opacity", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 57, + "symbol": "HeroTargetState.cornerRadius", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 57, + "symbol": "HeroTargetState.cornerRadius", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 58, + "symbol": "HeroTargetState.backgroundColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 58, + "symbol": "HeroTargetState.backgroundColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 59, + "symbol": "HeroTargetState.zPosition", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 59, + "symbol": "HeroTargetState.zPosition", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 61, + "symbol": "HeroTargetState.contentsRect", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 61, + "symbol": "HeroTargetState.contentsRect", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 62, + "symbol": "HeroTargetState.contentsScale", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 62, + "symbol": "HeroTargetState.contentsScale", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 64, + "symbol": "HeroTargetState.borderWidth", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 64, + "symbol": "HeroTargetState.borderWidth", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 65, + "symbol": "HeroTargetState.borderColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 65, + "symbol": "HeroTargetState.borderColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 67, + "symbol": "HeroTargetState.shadowColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 67, + "symbol": "HeroTargetState.shadowColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 68, + "symbol": "HeroTargetState.shadowOpacity", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 68, + "symbol": "HeroTargetState.shadowOpacity", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 69, + "symbol": "HeroTargetState.shadowOffset", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 69, + "symbol": "HeroTargetState.shadowOffset", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 70, + "symbol": "HeroTargetState.shadowRadius", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 70, + "symbol": "HeroTargetState.shadowRadius", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 71, + "symbol": "HeroTargetState.shadowPath", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 71, + "symbol": "HeroTargetState.shadowPath", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 72, + "symbol": "HeroTargetState.masksToBounds", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 72, + "symbol": "HeroTargetState.masksToBounds", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 73, + "symbol": "HeroTargetState.displayShadow", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 73, + "symbol": "HeroTargetState.displayShadow", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 75, + "symbol": "HeroTargetState.overlay", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 75, + "symbol": "HeroTargetState.overlay", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 77, + "symbol": "HeroTargetState.spring", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 77, + "symbol": "HeroTargetState.spring", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 78, + "symbol": "HeroTargetState.delay", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 78, + "symbol": "HeroTargetState.delay", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 79, + "symbol": "HeroTargetState.duration", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 79, + "symbol": "HeroTargetState.duration", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 80, + "symbol": "HeroTargetState.timingFunction", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 80, + "symbol": "HeroTargetState.timingFunction", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 82, + "symbol": "HeroTargetState.arc", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 82, + "symbol": "HeroTargetState.arc", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 83, + "symbol": "HeroTargetState.source", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 83, + "symbol": "HeroTargetState.source", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 84, + "symbol": "HeroTargetState.cascade", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 84, + "symbol": "HeroTargetState.cascade", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 86, + "symbol": "HeroTargetState.ignoreSubviewModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 86, + "symbol": "HeroTargetState.ignoreSubviewModifiers", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 87, + "symbol": "HeroTargetState.coordinateSpace", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 87, + "symbol": "HeroTargetState.coordinateSpace", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 88, + "symbol": "HeroTargetState.useScaleBasedSizeChange", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 88, + "symbol": "HeroTargetState.useScaleBasedSizeChange", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 89, + "symbol": "HeroTargetState.snapshotType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 89, + "symbol": "HeroTargetState.snapshotType", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 91, + "symbol": "HeroTargetState.nonFade", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 91, + "symbol": "HeroTargetState.nonFade", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 92, + "symbol": "HeroTargetState.forceAnimate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 92, + "symbol": "HeroTargetState.forceAnimate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 93, + "symbol": "HeroTargetState.custom", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 93, + "symbol": "HeroTargetState.custom", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 99, + "symbol": "HeroTargetState.append(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 99, + "symbol": "HeroTargetState.append(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 103, + "symbol": "HeroTargetState.append(contentsOf:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 103, + "symbol": "HeroTargetState.append(contentsOf:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 125, + "symbol": "HeroTargetState", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTargetState.swift", + "line": 125, + "symbol": "HeroTargetState", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 25, + "symbol": "HeroPreprocessor", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 25, + "symbol": "HeroPreprocessor", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 26, + "symbol": "HeroPreprocessor.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 26, + "symbol": "HeroPreprocessor.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 27, + "symbol": "HeroPreprocessor.process(fromViews:toViews:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 27, + "symbol": "HeroPreprocessor.process(fromViews:toViews:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 30, + "symbol": "HeroAnimator", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 30, + "symbol": "HeroAnimator", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 31, + "symbol": "HeroAnimator.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 31, + "symbol": "HeroAnimator.hero", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 32, + "symbol": "HeroAnimator.canAnimate(view:appearing:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 32, + "symbol": "HeroAnimator.canAnimate(view:appearing:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 33, + "symbol": "HeroAnimator.animate(fromViews:toViews:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 33, + "symbol": "HeroAnimator.animate(fromViews:toViews:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 34, + "symbol": "HeroAnimator.clean()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 34, + "symbol": "HeroAnimator.clean()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 36, + "symbol": "HeroAnimator.seekTo(timePassed:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 36, + "symbol": "HeroAnimator.seekTo(timePassed:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 37, + "symbol": "HeroAnimator.resume(timePassed:reverse:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 37, + "symbol": "HeroAnimator.resume(timePassed:reverse:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 38, + "symbol": "HeroAnimator.apply(state:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 38, + "symbol": "HeroAnimator.apply(state:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 39, + "symbol": "HeroAnimator.changeTarget(state:isDestination:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 39, + "symbol": "HeroAnimator.changeTarget(state:isDestination:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 42, + "symbol": "HeroProgressUpdateObserver", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 42, + "symbol": "HeroProgressUpdateObserver", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 43, + "symbol": "HeroProgressUpdateObserver.heroDidUpdateProgress(progress:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 43, + "symbol": "HeroProgressUpdateObserver.heroDidUpdateProgress(progress:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 46, + "symbol": "HeroViewOrderingStrategy", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 46, + "symbol": "HeroViewOrderingStrategy", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.auto", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.auto", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.destinationViewOnTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.destinationViewOnTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.sourceViewOnTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroTypes.swift", + "line": 47, + "symbol": "HeroViewOrderingStrategy.sourceViewOnTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 25, + "symbol": "HeroViewControllerDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 25, + "symbol": "HeroViewControllerDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 26, + "symbol": "HeroViewControllerDelegate.heroWillStartAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 26, + "symbol": "HeroViewControllerDelegate.heroWillStartAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 27, + "symbol": "HeroViewControllerDelegate.heroDidEndAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 27, + "symbol": "HeroViewControllerDelegate.heroDidEndAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 28, + "symbol": "HeroViewControllerDelegate.heroDidCancelAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 28, + "symbol": "HeroViewControllerDelegate.heroDidCancelAnimatingFrom(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 30, + "symbol": "HeroViewControllerDelegate.heroWillStartTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 30, + "symbol": "HeroViewControllerDelegate.heroWillStartTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 31, + "symbol": "HeroViewControllerDelegate.heroDidEndTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 31, + "symbol": "HeroViewControllerDelegate.heroDidEndTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 32, + "symbol": "HeroViewControllerDelegate.heroDidCancelTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 32, + "symbol": "HeroViewControllerDelegate.heroDidCancelTransition()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 34, + "symbol": "HeroViewControllerDelegate.heroWillStartAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 34, + "symbol": "HeroViewControllerDelegate.heroWillStartAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 35, + "symbol": "HeroViewControllerDelegate.heroDidEndAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 35, + "symbol": "HeroViewControllerDelegate.heroDidEndAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 36, + "symbol": "HeroViewControllerDelegate.heroDidCancelAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/HeroViewControllerDelegate.swift", + "line": 36, + "symbol": "HeroViewControllerDelegate.heroDidCancelAnimatingTo(viewController:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/HeroStringConvertible.swift", + "line": 25, + "symbol": "HeroStringConvertible", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/HeroStringConvertible.swift", + "line": 25, + "symbol": "HeroStringConvertible", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/HeroStringConvertible.swift", + "line": 26, + "symbol": "HeroStringConvertible.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/HeroStringConvertible.swift", + "line": 26, + "symbol": "HeroStringConvertible.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 11, + "symbol": "Token", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 11, + "symbol": "Token", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 12, + "symbol": "Token.identifier(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 12, + "symbol": "Token.identifier(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 13, + "symbol": "Token.number(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 13, + "symbol": "Token.number(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 14, + "symbol": "Token.parensOpen(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 14, + "symbol": "Token.parensOpen(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 15, + "symbol": "Token.parensClose(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 15, + "symbol": "Token.parensClose(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 16, + "symbol": "Token.comma(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 16, + "symbol": "Token.comma(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 17, + "symbol": "Token.other(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 17, + "symbol": "Token.other(_:_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 30, + "symbol": "Lexer", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 30, + "symbol": "Lexer", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 32, + "symbol": "Lexer.init(input:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 32, + "symbol": "Lexer.init(input:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 35, + "symbol": "Lexer.tokenize()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Lexer.swift", + "line": 35, + "symbol": "Lexer.tokenize()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 11, + "symbol": "ExprNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 11, + "symbol": "ExprNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 12, + "symbol": "ExprNode.range", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 12, + "symbol": "ExprNode.range", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 13, + "symbol": "ExprNode.name", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 13, + "symbol": "ExprNode.name", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 17, + "symbol": "ExprNode.init(name:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 17, + "symbol": "ExprNode.init(name:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 22, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 22, + "symbol": "==(_:_:)", + "symbol_kind": "source.lang.swift.decl.function.free", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 26, + "symbol": "NumberNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 26, + "symbol": "NumberNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 27, + "symbol": "NumberNode.value", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 27, + "symbol": "NumberNode.value", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 28, + "symbol": "NumberNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 28, + "symbol": "NumberNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 31, + "symbol": "NumberNode.init(value:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 31, + "symbol": "NumberNode.init(value:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 37, + "symbol": "VariableNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 37, + "symbol": "VariableNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 38, + "symbol": "VariableNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 38, + "symbol": "VariableNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 43, + "symbol": "BinaryOpNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 43, + "symbol": "BinaryOpNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 44, + "symbol": "BinaryOpNode.lhs", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 44, + "symbol": "BinaryOpNode.lhs", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 45, + "symbol": "BinaryOpNode.rhs", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 45, + "symbol": "BinaryOpNode.rhs", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 46, + "symbol": "BinaryOpNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 46, + "symbol": "BinaryOpNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 49, + "symbol": "BinaryOpNode.init(name:lhs:rhs:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 49, + "symbol": "BinaryOpNode.init(name:lhs:rhs:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 56, + "symbol": "CallNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 56, + "symbol": "CallNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 57, + "symbol": "CallNode.arguments", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 57, + "symbol": "CallNode.arguments", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 58, + "symbol": "CallNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 58, + "symbol": "CallNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 61, + "symbol": "CallNode.init(name:arguments:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 61, + "symbol": "CallNode.init(name:arguments:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 67, + "symbol": "PrototypeNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 67, + "symbol": "PrototypeNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 68, + "symbol": "PrototypeNode.argumentNames", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 68, + "symbol": "PrototypeNode.argumentNames", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 69, + "symbol": "PrototypeNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 69, + "symbol": "PrototypeNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 72, + "symbol": "PrototypeNode.init(name:argumentNames:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 72, + "symbol": "PrototypeNode.init(name:argumentNames:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 78, + "symbol": "FunctionNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 78, + "symbol": "FunctionNode", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 79, + "symbol": "FunctionNode.prototype", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 79, + "symbol": "FunctionNode.prototype", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 80, + "symbol": "FunctionNode.body", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 80, + "symbol": "FunctionNode.body", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 81, + "symbol": "FunctionNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 81, + "symbol": "FunctionNode.description", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 84, + "symbol": "FunctionNode.init(prototype:body:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Nodes.swift", + "line": 84, + "symbol": "FunctionNode.init(prototype:body:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 11, + "symbol": "ParseError", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 11, + "symbol": "ParseError", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 12, + "symbol": "ParseError.unexpectToken", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 12, + "symbol": "ParseError.unexpectToken", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 13, + "symbol": "ParseError.undefinedOperator(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 13, + "symbol": "ParseError.undefinedOperator(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 15, + "symbol": "ParseError.expectCharacter(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 15, + "symbol": "ParseError.expectCharacter(_:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 16, + "symbol": "ParseError.expectExpression", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 16, + "symbol": "ParseError.expectExpression", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 17, + "symbol": "ParseError.expectArgumentList", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 17, + "symbol": "ParseError.expectArgumentList", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 18, + "symbol": "ParseError.expectFunctionName", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 18, + "symbol": "ParseError.expectFunctionName", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 21, + "symbol": "Parser", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 21, + "symbol": "Parser", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 25, + "symbol": "Parser.init(tokens:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 25, + "symbol": "Parser.init(tokens:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 156, + "symbol": "Parser.parse()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Parser.swift", + "line": 156, + "symbol": "Parser.parse()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Regex.swift", + "line": 13, + "symbol": "String.match(regex:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Parser/Regex.swift", + "line": 13, + "symbol": "String.match(regex:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 27, + "symbol": "CascadeDirection", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 27, + "symbol": "CascadeDirection", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 28, + "symbol": "CascadeDirection.topToBottom", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 28, + "symbol": "CascadeDirection.topToBottom", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 29, + "symbol": "CascadeDirection.bottomToTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 29, + "symbol": "CascadeDirection.bottomToTop", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 30, + "symbol": "CascadeDirection.leftToRight", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 30, + "symbol": "CascadeDirection.leftToRight", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 31, + "symbol": "CascadeDirection.rightToLeft", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 31, + "symbol": "CascadeDirection.rightToLeft", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 32, + "symbol": "CascadeDirection.radial(center:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 32, + "symbol": "CascadeDirection.radial(center:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 33, + "symbol": "CascadeDirection.inverseRadial(center:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 33, + "symbol": "CascadeDirection.inverseRadial(center:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 74, + "symbol": "CascadeDirection.leadingToTrailing", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 74, + "symbol": "CascadeDirection.leadingToTrailing", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 78, + "symbol": "CascadeDirection.trailingToLeading", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/CascadePreprocessor.swift", + "line": 78, + "symbol": "CascadeDirection.trailingToLeading", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 25, + "symbol": "HeroConditionalContext", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 25, + "symbol": "HeroConditionalContext", + "symbol_kind": "source.lang.swift.decl.struct", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 27, + "symbol": "HeroConditionalContext.view", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 27, + "symbol": "HeroConditionalContext.view", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 29, + "symbol": "HeroConditionalContext.isAppearing", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 29, + "symbol": "HeroConditionalContext.isAppearing", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 31, + "symbol": "HeroConditionalContext.isPresenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 31, + "symbol": "HeroConditionalContext.isPresenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 34, + "symbol": "HeroConditionalContext.isInTabbarController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 34, + "symbol": "HeroConditionalContext.isInTabbarController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 37, + "symbol": "HeroConditionalContext.isInNavbarController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 37, + "symbol": "HeroConditionalContext.isInNavbarController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 40, + "symbol": "HeroConditionalContext.isMatched", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 40, + "symbol": "HeroConditionalContext.isMatched", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 43, + "symbol": "HeroConditionalContext.isAncestorViewMatched", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 43, + "symbol": "HeroConditionalContext.isAncestorViewMatched", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 47, + "symbol": "HeroConditionalContext.matchedView", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 47, + "symbol": "HeroConditionalContext.matchedView", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 50, + "symbol": "HeroConditionalContext.matchedAncestorView", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 50, + "symbol": "HeroConditionalContext.matchedAncestorView", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 61, + "symbol": "HeroConditionalContext.fromViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 61, + "symbol": "HeroConditionalContext.fromViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 64, + "symbol": "HeroConditionalContext.toViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 64, + "symbol": "HeroConditionalContext.toViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 67, + "symbol": "HeroConditionalContext.currentViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 67, + "symbol": "HeroConditionalContext.currentViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 70, + "symbol": "HeroConditionalContext.otherViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/ConditionalPreprocessor.swift", + "line": 70, + "symbol": "HeroConditionalContext.otherViewController", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 25, + "symbol": "HeroDefaultAnimationType", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 25, + "symbol": "HeroDefaultAnimationType", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 26, + "symbol": "HeroDefaultAnimationType.Direction", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 26, + "symbol": "HeroDefaultAnimationType.Direction", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.down", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.down", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.left", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.left", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.right", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.right", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.up", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 27, + "symbol": "HeroDefaultAnimationType.Direction.up", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 28, + "symbol": "HeroDefaultAnimationType.Direction.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 28, + "symbol": "HeroDefaultAnimationType.Direction.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 40, + "symbol": "HeroDefaultAnimationType.Direction.leading", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 40, + "symbol": "HeroDefaultAnimationType.Direction.leading", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 44, + "symbol": "HeroDefaultAnimationType.Direction.trailing", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 44, + "symbol": "HeroDefaultAnimationType.Direction.trailing", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 49, + "symbol": "HeroDefaultAnimationType.Strategy", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 49, + "symbol": "HeroDefaultAnimationType.Strategy", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.forceLeftToRight", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.forceLeftToRight", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.forceRightToLeft", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.forceRightToLeft", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.userInterface", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 50, + "symbol": "HeroDefaultAnimationType.Strategy.userInterface", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 63, + "symbol": "HeroDefaultAnimationType.auto", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 63, + "symbol": "HeroDefaultAnimationType.auto", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 64, + "symbol": "HeroDefaultAnimationType.push(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 64, + "symbol": "HeroDefaultAnimationType.push(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 65, + "symbol": "HeroDefaultAnimationType.pull(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 65, + "symbol": "HeroDefaultAnimationType.pull(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 66, + "symbol": "HeroDefaultAnimationType.cover(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 66, + "symbol": "HeroDefaultAnimationType.cover(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 67, + "symbol": "HeroDefaultAnimationType.uncover(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 67, + "symbol": "HeroDefaultAnimationType.uncover(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 68, + "symbol": "HeroDefaultAnimationType.slide(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 68, + "symbol": "HeroDefaultAnimationType.slide(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 69, + "symbol": "HeroDefaultAnimationType.zoomSlide(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 69, + "symbol": "HeroDefaultAnimationType.zoomSlide(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 70, + "symbol": "HeroDefaultAnimationType.pageIn(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 70, + "symbol": "HeroDefaultAnimationType.pageIn(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 71, + "symbol": "HeroDefaultAnimationType.pageOut(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 71, + "symbol": "HeroDefaultAnimationType.pageOut(direction:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 72, + "symbol": "HeroDefaultAnimationType.fade", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 72, + "symbol": "HeroDefaultAnimationType.fade", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 73, + "symbol": "HeroDefaultAnimationType.zoom", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 73, + "symbol": "HeroDefaultAnimationType.zoom", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 74, + "symbol": "HeroDefaultAnimationType.zoomOut", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 74, + "symbol": "HeroDefaultAnimationType.zoomOut", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 76, + "symbol": "HeroDefaultAnimationType.selectBy(presenting:dismissing:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 76, + "symbol": "HeroDefaultAnimationType.selectBy(presenting:dismissing:)", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 78, + "symbol": "HeroDefaultAnimationType.autoReverse(presenting:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 78, + "symbol": "HeroDefaultAnimationType.autoReverse(presenting:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 82, + "symbol": "HeroDefaultAnimationType.none", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 82, + "symbol": "HeroDefaultAnimationType.none", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 160, + "symbol": "HeroDefaultAnimationType.label", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 160, + "symbol": "HeroDefaultAnimationType.label", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 174, + "symbol": "HeroDefaultAnimationType", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 174, + "symbol": "HeroDefaultAnimationType", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 175, + "symbol": "HeroDefaultAnimationType.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Preprocessors/DefaultAnimationPreprocessor.swift", + "line": 175, + "symbol": "HeroDefaultAnimationType.from(node:)", + "symbol_kind": "source.lang.swift.decl.function.method.static", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Animate.swift", + "line": 26, + "symbol": "HeroTransition.animate()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Animate.swift", + "line": 26, + "symbol": "HeroTransition.animate()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Complete.swift", + "line": 26, + "symbol": "HeroTransition.complete(finished:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Complete.swift", + "line": 26, + "symbol": "HeroTransition.complete(finished:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+CustomTransition.swift", + "line": 27, + "symbol": "HeroTransition.transition(from:to:in:completion:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+CustomTransition.swift", + "line": 27, + "symbol": "HeroTransition.transition(from:to:in:completion:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Start.swift", + "line": 26, + "symbol": "HeroTransition.start()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+Start.swift", + "line": 26, + "symbol": "HeroTransition.start()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 26, + "symbol": "HeroTransition.navigationController(_:willShow:animated:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 26, + "symbol": "HeroTransition.navigationController(_:willShow:animated:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 32, + "symbol": "HeroTransition.navigationController(_:didShow:animated:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 32, + "symbol": "HeroTransition.navigationController(_:didShow:animated:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 38, + "symbol": "HeroTransition.navigationController(_:animationControllerFor:from:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 38, + "symbol": "HeroTransition.navigationController(_:animationControllerFor:from:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 48, + "symbol": "HeroTransition.navigationController(_:interactionControllerFor:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UINavigationControllerDelegate.swift", + "line": 48, + "symbol": "HeroTransition.navigationController(_:interactionControllerFor:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 26, + "symbol": "HeroTransition.tabBarController(_:shouldSelect:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 26, + "symbol": "HeroTransition.tabBarController(_:shouldSelect:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 36, + "symbol": "HeroTransition.tabBarController(_:interactionControllerFor:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 36, + "symbol": "HeroTransition.tabBarController(_:interactionControllerFor:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 40, + "symbol": "HeroTransition.tabBarController(_:animationControllerForTransitionFrom:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UITabBarControllerDelegate.swift", + "line": 40, + "symbol": "HeroTransition.tabBarController(_:animationControllerForTransitionFrom:to:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 30, + "symbol": "HeroTransition.animationController(forPresented:presenting:source:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 30, + "symbol": "HeroTransition.animationController(forPresented:presenting:source:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 39, + "symbol": "HeroTransition.animationController(forDismissed:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 39, + "symbol": "HeroTransition.animationController(forDismissed:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 47, + "symbol": "HeroTransition.interactionControllerForDismissal(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 47, + "symbol": "HeroTransition.interactionControllerForDismissal(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 51, + "symbol": "HeroTransition.interactionControllerForPresentation(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 51, + "symbol": "HeroTransition.interactionControllerForPresentation(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 57, + "symbol": "HeroTransition.animateTransition(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 57, + "symbol": "HeroTransition.animateTransition(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 64, + "symbol": "HeroTransition.transitionDuration(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 64, + "symbol": "HeroTransition.transitionDuration(using:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 68, + "symbol": "HeroTransition.animationEnded(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 68, + "symbol": "HeroTransition.animationEnded(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 74, + "symbol": "HeroTransition.wantsInteractiveStart", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 74, + "symbol": "HeroTransition.wantsInteractiveStart", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 77, + "symbol": "HeroTransition.startInteractiveTransition(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition+UIViewControllerTransitioningDelegate.swift", + "line": 77, + "symbol": "HeroTransition.startInteractiveTransition(_:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 25, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 26, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 26, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 46, + "symbol": "HeroTransitionDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 46, + "symbol": "HeroTransitionDelegate", + "symbol_kind": "source.lang.swift.decl.protocol", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 47, + "symbol": "HeroTransitionDelegate.heroTransition(_:didUpdate:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 47, + "symbol": "HeroTransitionDelegate.heroTransition(_:didUpdate:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 48, + "symbol": "HeroTransitionDelegate.heroTransition(_:didUpdate:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 48, + "symbol": "HeroTransitionDelegate.heroTransition(_:didUpdate:)", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 51, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 51, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.class", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 52, + "symbol": "HeroTransition.delegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 52, + "symbol": "HeroTransition.delegate", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 54, + "symbol": "HeroTransition.defaultAnimation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 54, + "symbol": "HeroTransition.defaultAnimation", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 55, + "symbol": "HeroTransition.containerColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 55, + "symbol": "HeroTransition.containerColor", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 56, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 56, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 56, + "symbol": "HeroTransition.isUserInteractionEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 56, + "symbol": "HeroTransition.isUserInteractionEnabled", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 57, + "symbol": "HeroTransition.viewOrderingStrategy", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 57, + "symbol": "HeroTransition.viewOrderingStrategy", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 58, + "symbol": "HeroTransition.defaultAnimationDirectionStrategy", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 58, + "symbol": "HeroTransition.defaultAnimationDirectionStrategy", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 60, + "symbol": "HeroTransition.state", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 60, + "symbol": "HeroTransition.state", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 70, + "symbol": "HeroTransition.isTransitioning", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 70, + "symbol": "HeroTransition.isTransitioning", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 71, + "symbol": "HeroTransition.isPresenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 71, + "symbol": "HeroTransition.isPresenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 73, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 73, + "symbol": "HeroTransition", + "symbol_kind": "source.lang.swift.decl.extension", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 74, + "symbol": "HeroTransition.transitioning", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 74, + "symbol": "HeroTransition.transitioning", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 78, + "symbol": "HeroTransition.presenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 78, + "symbol": "HeroTransition.presenting", + "symbol_kind": "source.lang.swift.decl.var.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 177, + "symbol": "HeroTransition.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransition.swift", + "line": 177, + "symbol": "HeroTransition.init()", + "symbol_kind": "source.lang.swift.decl.function.method.instance", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 25, + "symbol": "HeroTransitionState", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 25, + "symbol": "HeroTransitionState", + "symbol_kind": "source.lang.swift.decl.enum", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 27, + "symbol": "HeroTransitionState.possible", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 27, + "symbol": "HeroTransitionState.possible", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 31, + "symbol": "HeroTransitionState.notified", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 31, + "symbol": "HeroTransitionState.notified", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 34, + "symbol": "HeroTransitionState.starting", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 34, + "symbol": "HeroTransitionState.starting", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 37, + "symbol": "HeroTransitionState.animating", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 37, + "symbol": "HeroTransitionState.animating", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 40, + "symbol": "HeroTransitionState.completing", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + }, + { + "file": "/Users/mattielloj/Workspace/Git/Hero/Sources/Transition/HeroTransitionState.swift", + "line": 40, + "symbol": "HeroTransitionState.completing", + "symbol_kind": "source.lang.swift.decl.enumelement", + "warning": "undocumented" + } + ], + "source_directory": "/Users/mattielloj/Workspace/Git/Hero" +} \ No newline at end of file From 800cd55df6f2c3018721b15d2bc33d09f8028457 Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Sun, 20 Oct 2019 23:55:55 -0400 Subject: [PATCH 05/16] GitIgnore xcode log files Signed-off-by: Joseph Mattiello --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index bd8202bb..e285cee2 100644 --- a/.gitignore +++ b/.gitignore @@ -67,4 +67,5 @@ fastlane/test_output # Gitbook node_modules -_book \ No newline at end of file +_book +xcodebuild.log From ba17f3a9700fb3b65fa1c2ca8809cd5960278534 Mon Sep 17 00:00:00 2001 From: Daniel Saidi Date: Tue, 8 Oct 2019 08:12:57 +0200 Subject: [PATCH 06/16] Remove access modifier warnings (#616) --- .../CAMediaTimingFunction+Hero.swift | 18 +++--- Sources/Extensions/CG+Hero.swift | 62 ++++++++++--------- Sources/Extensions/UIView+Hero.swift | 12 ++-- .../Extensions/UIViewController+Hero.swift | 44 ++++++------- Sources/HeroCompatible.swift | 2 +- Sources/Parser/Regex.swift | 2 +- .../HeroTransition+CustomTransition.swift | 2 +- 7 files changed, 72 insertions(+), 70 deletions(-) diff --git a/Sources/Extensions/CAMediaTimingFunction+Hero.swift b/Sources/Extensions/CAMediaTimingFunction+Hero.swift index e71ff4e1..57fcfcb8 100644 --- a/Sources/Extensions/CAMediaTimingFunction+Hero.swift +++ b/Sources/Extensions/CAMediaTimingFunction+Hero.swift @@ -24,19 +24,19 @@ import UIKit public extension CAMediaTimingFunction { // default - public static let linear = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) - public static let easeIn = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn) - public static let easeOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut) - public static let easeInOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) + static let linear = CAMediaTimingFunction(name: CAMediaTimingFunctionName.linear) + static let easeIn = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeIn) + static let easeOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeOut) + static let easeInOut = CAMediaTimingFunction(name: CAMediaTimingFunctionName.easeInEaseOut) // material - public static let standard = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.2, 1.0) - public static let deceleration = CAMediaTimingFunction(controlPoints: 0.0, 0.0, 0.2, 1) - public static let acceleration = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 1, 1) - public static let sharp = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.6, 1) + static let standard = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.2, 1.0) + static let deceleration = CAMediaTimingFunction(controlPoints: 0.0, 0.0, 0.2, 1) + static let acceleration = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 1, 1) + static let sharp = CAMediaTimingFunction(controlPoints: 0.4, 0.0, 0.6, 1) // easing.net - public static let easeOutBack = CAMediaTimingFunction(controlPoints: 0.175, 0.885, 0.32, 1.275) + static let easeOutBack = CAMediaTimingFunction(controlPoints: 0.175, 0.885, 0.32, 1.275) static func from(name: String) -> CAMediaTimingFunction? { switch name { diff --git a/Sources/Extensions/CG+Hero.swift b/Sources/Extensions/CG+Hero.swift index 76db88c5..d2f7d444 100644 --- a/Sources/Extensions/CG+Hero.swift +++ b/Sources/Extensions/CG+Hero.swift @@ -40,25 +40,25 @@ internal struct KeySet { } internal extension CGSize { - internal var center: CGPoint { + var center: CGPoint { return CGPoint(x: width / 2, y: height / 2) } - internal var point: CGPoint { + var point: CGPoint { return CGPoint(x: width, y: height) } - internal func transform(_ t: CGAffineTransform) -> CGSize { + func transform(_ t: CGAffineTransform) -> CGSize { return self.applying(t) } - internal func transform(_ t: CATransform3D) -> CGSize { + func transform(_ t: CATransform3D) -> CGSize { return self.applying(CATransform3DGetAffineTransform(t)) } } internal extension CGRect { - internal var center: CGPoint { + var center: CGPoint { return CGPoint(x: origin.x + width / 2, y: origin.y + height / 2) } - internal var bounds: CGRect { + var bounds: CGRect { return CGRect(origin: CGPoint.zero, size: size) } init(center: CGPoint, size: CGSize) { @@ -66,81 +66,83 @@ internal extension CGRect { } } -extension CGFloat { - internal func clamp(_ a: CGFloat, _ b: CGFloat) -> CGFloat { +internal extension CGFloat { + func clamp(_ a: CGFloat, _ b: CGFloat) -> CGFloat { return self < a ? a : (self > b ? b : self) } } -extension TimeInterval { - internal func clamp(_ a: TimeInterval, _ b: TimeInterval) -> TimeInterval { + +internal extension TimeInterval { + func clamp(_ a: TimeInterval, _ b: TimeInterval) -> TimeInterval { return self < a ? a : (self > b ? b : self) } } -extension CGPoint { - internal func translate(_ dx: CGFloat, dy: CGFloat) -> CGPoint { + +internal extension CGPoint { + func translate(_ dx: CGFloat, dy: CGFloat) -> CGPoint { return CGPoint(x: self.x + dx, y: self.y + dy) } - internal func transform(_ t: CGAffineTransform) -> CGPoint { + func transform(_ t: CGAffineTransform) -> CGPoint { return self.applying(t) } - internal func transform(_ t: CATransform3D) -> CGPoint { + func transform(_ t: CATransform3D) -> CGPoint { return self.applying(CATransform3DGetAffineTransform(t)) } - internal func distance(_ b: CGPoint) -> CGFloat { + func distance(_ b: CGPoint) -> CGFloat { return sqrt(pow(self.x - b.x, 2) + pow(self.y - b.y, 2)) } - internal static func + (left: CGPoint, right: CGPoint) -> CGPoint { + static func + (left: CGPoint, right: CGPoint) -> CGPoint { return CGPoint(x: left.x + right.x, y: left.y + right.y) } - internal static func - (left: CGPoint, right: CGPoint) -> CGPoint { + static func - (left: CGPoint, right: CGPoint) -> CGPoint { return CGPoint(x: left.x - right.x, y: left.y - right.y) } - internal static func / (left: CGPoint, right: CGFloat) -> CGPoint { + static func / (left: CGPoint, right: CGFloat) -> CGPoint { return CGPoint(x: left.x / right, y: left.y / right) } - internal static func / (left: CGPoint, right: CGPoint) -> CGPoint { + static func / (left: CGPoint, right: CGPoint) -> CGPoint { return CGPoint(x: left.x / right.x, y: left.y / right.y) } - internal static func * (left: CGPoint, right: CGFloat) -> CGPoint { + static func * (left: CGPoint, right: CGFloat) -> CGPoint { return CGPoint(x: left.x * right, y: left.y * right) } - internal static func * (left: CGPoint, right: CGSize) -> CGPoint { + static func * (left: CGPoint, right: CGSize) -> CGPoint { return CGPoint(x: left.x * right.width, y: left.y * right.height) } - internal static func * (left: CGFloat, right: CGPoint) -> CGPoint { + static func * (left: CGFloat, right: CGPoint) -> CGPoint { return right * left } - internal static func * (left: CGPoint, right: CGPoint) -> CGPoint { + static func * (left: CGPoint, right: CGPoint) -> CGPoint { return CGPoint(x: left.x * right.x, y: left.y * right.y) } - internal static prefix func - (point: CGPoint) -> CGPoint { + static prefix func - (point: CGPoint) -> CGPoint { return .zero - point } - internal static func abs(_ p: CGPoint) -> CGPoint { + static func abs(_ p: CGPoint) -> CGPoint { return CGPoint(x: Swift.abs(p.x), y: Swift.abs(p.y)) } } -extension CGSize { - internal static func * (left: CGSize, right: CGFloat) -> CGSize { +internal extension CGSize { + static func * (left: CGSize, right: CGFloat) -> CGSize { return CGSize(width: left.width * right, height: left.height * right) } - internal static func * (left: CGSize, right: CGSize) -> CGSize { + static func * (left: CGSize, right: CGSize) -> CGSize { return CGSize(width: left.width * right.width, height: left.height * right.height) } - internal static func / (left: CGSize, right: CGSize) -> CGSize { + static func / (left: CGSize, right: CGSize) -> CGSize { return CGSize(width: left.width / right.width, height: left.height / right.height) } - internal static func / (left: CGPoint, right: CGSize) -> CGPoint { + static func / (left: CGPoint, right: CGSize) -> CGPoint { return CGPoint(x: left.x / right.width, y: left.y / right.height) } } diff --git a/Sources/Extensions/UIView+Hero.swift b/Sources/Extensions/UIView+Hero.swift index 5f8de304..baad480a 100644 --- a/Sources/Extensions/UIView+Hero.swift +++ b/Sources/Extensions/UIView+Hero.swift @@ -49,7 +49,7 @@ public extension HeroExtension where Base: UIView { Whenever a pair is discovered, Hero will automatically transit the views from source state to the destination state. */ - public var id: String? { + var id: String? { get { return objc_getAssociatedObject(base, &type(of: base).AssociatedKeys.heroID) as? String } set { objc_setAssociatedObject(base, &type(of: base).AssociatedKeys.heroID, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } @@ -58,7 +58,7 @@ public extension HeroExtension where Base: UIView { **isEnabled** allows to specify whether a view and its subviews should be consider for animations. If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true */ - public var isEnabled: Bool { + var isEnabled: Bool { get { return objc_getAssociatedObject(base, &type(of: base).AssociatedKeys.heroEnabled) as? Bool ?? true } set { objc_setAssociatedObject(base, &type(of: base).AssociatedKeys.heroEnabled, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } @@ -67,7 +67,7 @@ public extension HeroExtension where Base: UIView { **isEnabledForSubviews** allows to specify whether a view's subviews should be consider for animations. If true, Hero will search through all the subviews for heroIds and modifiers. Defaults to true */ - public var isEnabledForSubviews: Bool { + var isEnabledForSubviews: Bool { get { return objc_getAssociatedObject(base, &type(of: base).AssociatedKeys.heroEnabledForSubviews) as? Bool ?? true } set { objc_setAssociatedObject(base, &type(of: base).AssociatedKeys.heroEnabledForSubviews, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } @@ -75,7 +75,7 @@ public extension HeroExtension where Base: UIView { /** Use **modifiers** to specify animations alongside the main transition. Checkout `HeroModifier.swift` for available modifiers. */ - public var modifiers: [HeroModifier]? { + var modifiers: [HeroModifier]? { get { return objc_getAssociatedObject(base, &type(of: base).AssociatedKeys.heroModifiers) as? [HeroModifier] } set { objc_setAssociatedObject(base, &type(of: base).AssociatedKeys.heroModifiers, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) } } @@ -83,7 +83,7 @@ public extension HeroExtension where Base: UIView { /** **modifierString** provides another way to set **modifiers**. It can be assigned through storyboard. */ - public var modifierString: String? { + var modifierString: String? { get { fatalError("Reverse lookup is not supported") } set { modifiers = newValue?.parse() } } @@ -137,7 +137,7 @@ public extension UIView { } @available(*, deprecated, message: "Use hero.modifiers instead") - public var heroModifiers: [HeroModifier]? { + var heroModifiers: [HeroModifier]? { get { return hero.modifiers } set { hero.modifiers = newValue } } diff --git a/Sources/Extensions/UIViewController+Hero.swift b/Sources/Extensions/UIViewController+Hero.swift index 12b4717a..0b9d3872 100644 --- a/Sources/Extensions/UIViewController+Hero.swift +++ b/Sources/Extensions/UIViewController+Hero.swift @@ -54,19 +54,19 @@ public extension HeroExtension where Base: UIViewController { } /// default hero animation type for presenting & dismissing modally - public var modalAnimationType: HeroDefaultAnimationType { + var modalAnimationType: HeroDefaultAnimationType { get { return config.modalAnimation } set { config.modalAnimation = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - public var modalAnimationTypeString: String? { + var modalAnimationTypeString: String? { get { return config.modalAnimation.label } set { config.modalAnimation = newValue?.parseOne() ?? .auto } } // TODO: can be moved to internal later (will still be accessible via IB) - public var isEnabled: Bool { + var isEnabled: Bool { get { return base.transitioningDelegate is HeroTransition } @@ -123,19 +123,19 @@ public extension UIViewController { } @available(*, deprecated, message: "Use hero.modalAnimationType instead") - public var heroModalAnimationType: HeroDefaultAnimationType { + var heroModalAnimationType: HeroDefaultAnimationType { get { return hero.modalAnimationType } set { hero.modalAnimationType = newValue } } @available(*, deprecated, message: "Use hero.modalAnimationTypeString instead") - @IBInspectable public var heroModalAnimationTypeString: String? { + @IBInspectable var heroModalAnimationTypeString: String? { get { return hero.modalAnimationTypeString } set { hero.modalAnimationTypeString = newValue } } @available(*, deprecated, message: "Use hero.isEnabled instead") - @IBInspectable public var isHeroEnabled: Bool { + @IBInspectable var isHeroEnabled: Bool { get { return hero.isEnabled } set { hero.isEnabled = newValue } } @@ -144,12 +144,12 @@ public extension UIViewController { public extension HeroExtension where Base: UINavigationController { /// default hero animation type for push and pop within the navigation controller - public var navigationAnimationType: HeroDefaultAnimationType { + var navigationAnimationType: HeroDefaultAnimationType { get { return config.navigationAnimation } set { config.navigationAnimation = newValue } } - public var navigationAnimationTypeString: String? { + var navigationAnimationTypeString: String? { get { return config.navigationAnimation.label } set { config.navigationAnimation = newValue?.parseOne() ?? .auto } } @@ -173,27 +173,27 @@ extension UINavigationController { public extension HeroExtension where Base: UITabBarController { /// default hero animation type for switching tabs within the tab bar controller - public var tabBarAnimationType: HeroDefaultAnimationType { + var tabBarAnimationType: HeroDefaultAnimationType { get { return config.tabBarAnimation } set { config.tabBarAnimation = newValue } } - public var tabBarAnimationTypeString: String? { + var tabBarAnimationTypeString: String? { get { return config.tabBarAnimation.label } set { config.tabBarAnimation = newValue?.parseOne() ?? .auto } } } -extension UITabBarController { +public extension UITabBarController { @available(*, deprecated, message: "Use hero.tabBarAnimationType instead") - public var heroTabBarAnimationType: HeroDefaultAnimationType { + var heroTabBarAnimationType: HeroDefaultAnimationType { get { return hero.tabBarAnimationType } set { hero.tabBarAnimationType = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) @available(*, deprecated, message: "Use hero.tabBarAnimationTypeString instead") - @IBInspectable public var heroTabBarAnimationTypeString: String? { + @IBInspectable var heroTabBarAnimationTypeString: String? { get { return hero.tabBarAnimationTypeString } set { hero.tabBarAnimationTypeString = newValue } } @@ -205,7 +205,7 @@ public extension HeroExtension where Base: UIViewController { Dismiss the current view controller with animation. Will perform a navigationController.popViewController if the current view controller is contained inside a navigationController */ - public func dismissViewController(completion: (() -> Void)? = nil) { + func dismissViewController(completion: (() -> Void)? = nil) { if let navigationController = base.navigationController, navigationController.viewControllers.first != base { navigationController.popViewController(animated: true) } else { @@ -216,32 +216,32 @@ public extension HeroExtension where Base: UIViewController { /** Unwind to the root view controller using Hero */ - public func unwindToRootViewController() { + func unwindToRootViewController() { unwindToViewController { $0.presentingViewController == nil } } /** Unwind to a specific view controller using Hero */ - public func unwindToViewController(_ toViewController: UIViewController) { + func unwindToViewController(_ toViewController: UIViewController) { unwindToViewController { $0 == toViewController } } - public func unwindToViewController(withSelector: Selector) { + func unwindToViewController(withSelector: Selector) { unwindToViewController { $0.responds(to: withSelector) } } /** Unwind to a view controller with given class using Hero */ - public func unwindToViewController(withClass: AnyClass) { + func unwindToViewController(withClass: AnyClass) { unwindToViewController { $0.isKind(of: withClass) } } /** Unwind to a view controller that the matchBlock returns true on. */ - public func unwindToViewController(withMatchBlock: (UIViewController) -> Bool) { + func unwindToViewController(withMatchBlock: (UIViewController) -> Bool) { var target: UIViewController? = nil var current: UIViewController? = base @@ -295,7 +295,7 @@ public extension HeroExtension where Base: UIViewController { /** Replace the current view controller with another VC on the navigation/modal stack. */ - public func replaceViewController(with next: UIViewController, completion: (() -> Void)? = nil) { + func replaceViewController(with next: UIViewController, completion: (() -> Void)? = nil) { let hero = next.transitioningDelegate as? HeroTransition ?? Hero.shared if hero.isTransitioning { @@ -332,12 +332,12 @@ public extension HeroExtension where Base: UIViewController { } extension UIViewController { - @available(*, deprecated: 0.1.4, message: "use hero.dismissViewController instead") + @available(*, deprecated, message: "use hero.dismissViewController instead") @IBAction public func ht_dismiss(_ sender: UIView) { hero.dismissViewController() } - @available(*, deprecated: 0.1.4, message: "use hero.replaceViewController(with:) instead") + @available(*, deprecated, message: "use hero.replaceViewController(with:) instead") public func heroReplaceViewController(with next: UIViewController) { hero.replaceViewController(with: next) } diff --git a/Sources/HeroCompatible.swift b/Sources/HeroCompatible.swift index 861fb192..a4c59cbe 100644 --- a/Sources/HeroCompatible.swift +++ b/Sources/HeroCompatible.swift @@ -29,7 +29,7 @@ public protocol HeroCompatible { } public extension HeroCompatible { - public var hero: HeroExtension { + var hero: HeroExtension { get { return HeroExtension(self) } set { } } diff --git a/Sources/Parser/Regex.swift b/Sources/Parser/Regex.swift index 50c1f92c..81528f7b 100755 --- a/Sources/Parser/Regex.swift +++ b/Sources/Parser/Regex.swift @@ -10,7 +10,7 @@ import Foundation var expressions = [String: NSRegularExpression]() public extension String { - public func match(regex: String) -> (String, CountableRange)? { + func match(regex: String) -> (String, CountableRange)? { let expression: NSRegularExpression if let exists = expressions[regex] { expression = exists diff --git a/Sources/Transition/HeroTransition+CustomTransition.swift b/Sources/Transition/HeroTransition+CustomTransition.swift index 150c1bef..7a01131b 100644 --- a/Sources/Transition/HeroTransition+CustomTransition.swift +++ b/Sources/Transition/HeroTransition+CustomTransition.swift @@ -24,7 +24,7 @@ import UIKit // custom transition helper, used in hero_replaceViewController public extension HeroTransition { - public func transition(from: UIViewController, to: UIViewController, in view: UIView, completion: ((Bool) -> Void)? = nil) { + func transition(from: UIViewController, to: UIViewController, in view: UIView, completion: ((Bool) -> Void)? = nil) { guard !isTransitioning else { return } self.state = .notified isPresenting = true From e2397164ba838345bfc70752d73170ff90f4f5cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thi=20Do=C3=A3n?= Date: Thu, 14 Mar 2019 17:02:44 +0900 Subject: [PATCH 07/16] Remove Swift files from framework bundle products --- Hero.xcodeproj/project.pbxproj | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Hero.xcodeproj/project.pbxproj b/Hero.xcodeproj/project.pbxproj index df9d5779..7bf74bdb 100644 --- a/Hero.xcodeproj/project.pbxproj +++ b/Hero.xcodeproj/project.pbxproj @@ -35,10 +35,6 @@ 2D1F7FE71E49DD90004D944B /* TVImageGalleryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D1F7FE61E49DD90004D944B /* TVImageGalleryViewController.swift */; }; 2D1F7FEA1E49DD90004D944B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 2D1F7FE81E49DD90004D944B /* Main.storyboard */; }; 2D1F7FF21E49E043004D944B /* Hero.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D1F7FBF1E49DCB5004D944B /* Hero.framework */; }; - 3676E7E32059525F0003B9DF /* UIView+Hero.swift in Headers */ = {isa = PBXBuildFile; fileRef = B101B2C91E561408007E7112 /* UIView+Hero.swift */; settings = {ATTRIBUTES = (Public, ); }; }; - 3676E7E4205952620003B9DF /* UIViewController+Hero.swift in Headers */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; settings = {ATTRIBUTES = (Public, ); }; }; - 3676E7E5205952690003B9DF /* UIView+Hero.swift in Headers */ = {isa = PBXBuildFile; fileRef = B101B2C91E561408007E7112 /* UIView+Hero.swift */; settings = {ATTRIBUTES = (Public, ); }; }; - 3676E7E62059526B0003B9DF /* UIViewController+Hero.swift in Headers */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; settings = {ATTRIBUTES = (Public, ); }; }; 4D307DF420E3C6DC00DD9F65 /* HeroModifier+Advanced.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D307DF320E3C6DC00DD9F65 /* HeroModifier+Advanced.swift */; }; 4D307DF520E3C6DC00DD9F65 /* HeroModifier+Advanced.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D307DF320E3C6DC00DD9F65 /* HeroModifier+Advanced.swift */; }; 5C5442AA2004092500E1E326 /* HeroCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */; }; @@ -676,8 +672,6 @@ buildActionMask = 2147483647; files = ( 2D1F7FDC1E49DD3C004D944B /* Hero.h in Headers */, - 3676E7E5205952690003B9DF /* UIView+Hero.swift in Headers */, - 3676E7E62059526B0003B9DF /* UIViewController+Hero.swift in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -686,8 +680,6 @@ buildActionMask = 2147483647; files = ( A306D3B61E1C7A2E00B6C23A /* Hero.h in Headers */, - 3676E7E32059525F0003B9DF /* UIView+Hero.swift in Headers */, - 3676E7E4205952620003B9DF /* UIViewController+Hero.swift in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; From faa6776d304c35ab8b232d015e38a9ebf7ab63dc Mon Sep 17 00:00:00 2001 From: Christopher Rogers Date: Mon, 12 Nov 2018 16:33:33 +0900 Subject: [PATCH 08/16] Use more minimal import This will have a minor benefit on app size for apps that don't use MetalKit since libswiftMetalKit.dylib will no longer be bundled. --- Sources/Extensions/CG+Hero.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/Extensions/CG+Hero.swift b/Sources/Extensions/CG+Hero.swift index d2f7d444..b3543743 100644 --- a/Sources/Extensions/CG+Hero.swift +++ b/Sources/Extensions/CG+Hero.swift @@ -20,7 +20,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -import MetalKit +import QuartzCore let π = CGFloat.pi From 0450d478d294bd62f75d5115f60cb5ee5e4f49ec Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 21 Oct 2019 00:25:55 -0400 Subject: [PATCH 09/16] Update Podspec imports to match source imports Signed-off-by: Joseph Mattiello --- Hero.podspec | 3 ++- Sources/Extensions/CAMediaTimingFunction+Hero.swift | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Hero.podspec b/Hero.podspec index 3812e485..879d05c0 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -18,7 +18,8 @@ Pod::Spec.new do |s| s.ios.deployment_target = '8.0' s.tvos.deployment_target = '9.0' - s.ios.frameworks = 'UIKit', 'Foundation' + s.ios.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' + s.tvos.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' s.requires_arc = true diff --git a/Sources/Extensions/CAMediaTimingFunction+Hero.swift b/Sources/Extensions/CAMediaTimingFunction+Hero.swift index 57fcfcb8..3e093e0b 100644 --- a/Sources/Extensions/CAMediaTimingFunction+Hero.swift +++ b/Sources/Extensions/CAMediaTimingFunction+Hero.swift @@ -21,6 +21,7 @@ // THE SOFTWARE. import UIKit +import QuartzCore public extension CAMediaTimingFunction { // default From d1a0c93da3510f0c6bac5b32aa5029aa088b517e Mon Sep 17 00:00:00 2001 From: Joseph Mattiello Date: Mon, 21 Oct 2019 00:26:40 -0400 Subject: [PATCH 10/16] Fix pod lib lint failures Signed-off-by: Joseph Mattiello --- .swift-version | 1 - Hero.podspec | 2 ++ 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100644 .swift-version diff --git a/.swift-version b/.swift-version deleted file mode 100644 index bf77d549..00000000 --- a/.swift-version +++ /dev/null @@ -1 +0,0 @@ -4.2 diff --git a/Hero.podspec b/Hero.podspec index 879d05c0..ac5f82f4 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -21,6 +21,8 @@ Pod::Spec.new do |s| s.ios.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' s.tvos.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' + s.swift_versions = '4.2' + s.requires_arc = true s.source_files = 'Sources/**/*.swift' From ecba387504768dad17309b634453ddb62a168d71 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 21 Oct 2019 01:03:40 -0400 Subject: [PATCH 11/16] Add Joe Mattiello into Podspec authors for publishing Signed-off-by: Joe Mattiello --- Hero.podspec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Hero.podspec b/Hero.podspec index ac5f82f4..2875b92f 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -12,7 +12,10 @@ Pod::Spec.new do |s| s.homepage = 'https://github.com/HeroTransitions/Hero' s.screenshots = 'https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true' s.license = 'MIT' - s.author = { 'Luke' => 'lzhaoyilun@gmail.com' } + s.author = { + 'Luke' => 'lzhaoyilun@gmail.com', + 'Joe Mattiello' => 'git@joemattiello.com' + } s.source = { git: 'https://github.com/HeroTransitions/Hero.git', tag: s.version.to_s } s.ios.deployment_target = '8.0' From 8d7a1518d02ae49795ed015613e7c97c52914554 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 21 Oct 2019 02:06:32 -0400 Subject: [PATCH 12/16] Deprecated messages to renamed Signed-off-by: Joe Mattiello --- Sources/Extensions/UIView+Hero.swift | 12 +++---- .../Extensions/UIViewController+Hero.swift | 36 +++++++++---------- Sources/Transition/HeroTransition.swift | 4 +-- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/Sources/Extensions/UIView+Hero.swift b/Sources/Extensions/UIView+Hero.swift index baad480a..95cbb6e6 100644 --- a/Sources/Extensions/UIView+Hero.swift +++ b/Sources/Extensions/UIView+Hero.swift @@ -116,34 +116,34 @@ public extension UIView { } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.id instead") + @available(*, renamed: "hero.id") @IBInspectable var heroID: String? { get { return hero.id } set { hero.id = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.isEnabled instead") + @available(*, renamed: "hero.isEnabled") @IBInspectable var isHeroEnabled: Bool { get { return hero.isEnabled } set { hero.isEnabled = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.isEnabledForSubviews instead") + @available(*, renamed: "hero.isEnabledForSubviews") @IBInspectable var isHeroEnabledForSubviews: Bool { get { return hero.isEnabledForSubviews } set { hero.isEnabledForSubviews = newValue } } - @available(*, deprecated, message: "Use hero.modifiers instead") + @available(*, renamed: "hero.modifiers") var heroModifiers: [HeroModifier]? { get { return hero.modifiers } set { hero.modifiers = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.modifierString instead") + @available(*, renamed: "hero.modifierString") @IBInspectable var heroModifierString: String? { get { fatalError("Reverse lookup is not supported") } set { hero.modifiers = newValue?.parse() } @@ -188,7 +188,7 @@ public extension UIView { } } - @available(*, deprecated, message: "Use hero.storedAplha instead") + @available(*, renamed: "hero.storedAplha") internal var heroStoredAlpha: CGFloat? { get { return hero.storedAlpha } set { hero.storedAlpha = newValue } diff --git a/Sources/Extensions/UIViewController+Hero.swift b/Sources/Extensions/UIViewController+Hero.swift index 0b9d3872..dea60dab 100644 --- a/Sources/Extensions/UIViewController+Hero.swift +++ b/Sources/Extensions/UIViewController+Hero.swift @@ -100,7 +100,7 @@ public extension UIViewController { static var heroConfig = "heroConfig" } - @available(*, deprecated, message: "Use hero.config instead") + @available(*, renamed: "hero.config") internal var heroConfig: HeroViewControllerConfig { get { return hero.config } set { hero.config = newValue } @@ -116,25 +116,25 @@ public extension UIViewController { set { hero.config.previousTabBarDelegate = newValue } } - @available(*, deprecated, message: "Use hero.storedSnapshot instead") + @available(*, renamed: "hero.storedSnapshot") internal var heroStoredSnapshot: UIView? { get { return hero.config.storedSnapshot } set { hero.config.storedSnapshot = newValue } } - @available(*, deprecated, message: "Use hero.modalAnimationType instead") + @available(*, renamed: "hero.modalAnimationType") var heroModalAnimationType: HeroDefaultAnimationType { get { return hero.modalAnimationType } set { hero.modalAnimationType = newValue } } - @available(*, deprecated, message: "Use hero.modalAnimationTypeString instead") + @available(*, renamed: "hero.modalAnimationTypeString") @IBInspectable var heroModalAnimationTypeString: String? { get { return hero.modalAnimationTypeString } set { hero.modalAnimationTypeString = newValue } } - @available(*, deprecated, message: "Use hero.isEnabled instead") + @available(*, renamed: "hero.isEnabled") @IBInspectable var isHeroEnabled: Bool { get { return hero.isEnabled } set { hero.isEnabled = newValue } @@ -156,14 +156,14 @@ public extension HeroExtension where Base: UINavigationController { } extension UINavigationController { - @available(*, deprecated, message: "Use hero.navigationAnimationType instead") + @available(*, renamed: "hero.navigationAnimationType") public var heroNavigationAnimationType: HeroDefaultAnimationType { get { return hero.navigationAnimationType } set { hero.navigationAnimationType = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.navigationAnimationTypeString instead") + @available(*, renamed: "hero.navigationAnimationTypeString") @IBInspectable public var heroNavigationAnimationTypeString: String? { get { return hero.navigationAnimationTypeString } set { hero.navigationAnimationTypeString = newValue } @@ -185,14 +185,14 @@ public extension HeroExtension where Base: UITabBarController { } public extension UITabBarController { - @available(*, deprecated, message: "Use hero.tabBarAnimationType instead") + @available(*, renamed: "hero.tabBarAnimationType") var heroTabBarAnimationType: HeroDefaultAnimationType { get { return hero.tabBarAnimationType } set { hero.tabBarAnimationType = newValue } } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.tabBarAnimationTypeString instead") + @available(*, renamed: "hero.tabBarAnimationTypeString") @IBInspectable var heroTabBarAnimationTypeString: String? { get { return hero.tabBarAnimationTypeString } set { hero.tabBarAnimationTypeString = newValue } @@ -332,49 +332,49 @@ public extension HeroExtension where Base: UIViewController { } extension UIViewController { - @available(*, deprecated, message: "use hero.dismissViewController instead") + @available(*, renamed: "hero.dismissViewController") @IBAction public func ht_dismiss(_ sender: UIView) { hero.dismissViewController() } - @available(*, deprecated, message: "use hero.replaceViewController(with:) instead") + @available(*, renamed: "hero.replaceViewController(with:)") public func heroReplaceViewController(with next: UIViewController) { hero.replaceViewController(with: next) } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.dismissViewController instead") + @available(*, renamed: "hero.dismissViewController") @IBAction public func hero_dismissViewController() { hero.dismissViewController() } // TODO: can be moved to internal later (will still be accessible via IB) - @available(*, deprecated, message: "Use hero.unwindToRootViewController instead") + @available(*, renamed: "hero.unwindToRootViewController") @IBAction public func hero_unwindToRootViewController() { hero.unwindToRootViewController() } - @available(*, deprecated, message: "Use hero.unwindToViewController(_:) instead") + @available(*, renamed: "hero.unwindToViewController(_:)") public func hero_unwindToViewController(_ toViewController: UIViewController) { hero.unwindToViewController(toViewController) } - @available(*, deprecated, message: "Use hero.unwindToViewController(withSelector:) instead") + @available(*, renamed: "hero.unwindToViewController(withSelector:)") public func hero_unwindToViewController(withSelector: Selector) { hero.unwindToViewController(withSelector: withSelector) } - @available(*, deprecated, message: "Use hero_unwindToViewController(withClass:) instead") + @available(*, renamed: "hero_unwindToViewController(withClass:)") public func hero_unwindToViewController(withClass: AnyClass) { hero.unwindToViewController(withClass: withClass) } - @available(*, deprecated, message: "Use hero.unwindToViewController(withMatchBlock:) instead") + @available(*, renamed: "hero.unwindToViewController(withMatchBlock:)") public func hero_unwindToViewController(withMatchBlock: (UIViewController) -> Bool) { hero.unwindToViewController(withMatchBlock: withMatchBlock) } - @available(*, deprecated, message: "Use hero.replaceViewController(with:) instead") + @available(*, renamed: "hero.replaceViewController(with:)") public func hero_replaceViewController(with next: UIViewController) { hero.replaceViewController(with: next) } diff --git a/Sources/Transition/HeroTransition.swift b/Sources/Transition/HeroTransition.swift index fc5d2167..a645db8d 100644 --- a/Sources/Transition/HeroTransition.swift +++ b/Sources/Transition/HeroTransition.swift @@ -70,11 +70,11 @@ open class HeroTransition: NSObject { public var isTransitioning: Bool { return state != .possible } public internal(set) var isPresenting: Bool = true - @available(*, deprecated, message: "Use isTransitioning instead") + @available(*, renamed: "isTransitioning") public var transitioning: Bool { return isTransitioning } - @available(*, deprecated, message: "Use isPresenting instead") + @available(*, renamed: "isPresenting") public var presenting: Bool { return isPresenting } From e017845503dd6581468996f7f4f0843780fb322a Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 21 Oct 2019 01:14:29 -0400 Subject: [PATCH 13/16] Add extra metadata to podspec Signed-off-by: Joe Mattiello --- Hero.podspec | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Hero.podspec b/Hero.podspec index 2875b92f..ead42126 100644 --- a/Hero.podspec +++ b/Hero.podspec @@ -1,30 +1,36 @@ # frozen_string_literal: true Pod::Spec.new do |s| - s.name = 'Hero' - s.version = '1.5.0' - s.summary = 'Elegant transition library for iOS' - - s.description = <<-DESC - Hero is a library for building iOS view controller transitions. It provides a declarative layer on top of the UIKit's cumbersome transition APIs. Making custom transitions an easy task for developers. + s.name = 'Hero' + s.version = '1.5.0' + s.summary = 'Elegant transition library for iOS' + + s.description = <<-DESC + Hero is a library for building iOS view controller transitions. + It provides a declarative layer on top of the UIKit's cumbersome transition APIs. + Making custom transitions an easy task for developers. DESC - s.homepage = 'https://github.com/HeroTransitions/Hero' - s.screenshots = 'https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true' - s.license = 'MIT' - s.author = { + s.homepage = 'https://github.com/HeroTransitions/Hero' + s.screenshots = 'https://github.com/HeroTransitions/Hero/blob/master/Resources/Hero.png?raw=true' + s.documentation_url = 'https://herotransitions.github.io/Hero/' + s.screenshots = [ https://git.io/JeRkv, https://git.io/JeRke, https://git.io/JeRkf, https://git.io/JeRkJ] + s.license = { :type => 'MIT' } + s.author = { 'Luke' => 'lzhaoyilun@gmail.com', 'Joe Mattiello' => 'git@joemattiello.com' } s.source = { git: 'https://github.com/HeroTransitions/Hero.git', tag: s.version.to_s } + s.cocoapods_version = '>= 1.4.0' + s.ios.deployment_target = '8.0' s.tvos.deployment_target = '9.0' s.ios.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' s.tvos.frameworks = 'UIKit', 'Foundation', 'QuartzCore', 'CoreGraphics', 'CoreMedia' - s.swift_versions = '4.2' + s.swift_version = '4.2' s.requires_arc = true From 4da4f6ead99cfee8be68faff18ba6a8fbee128ad Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 21 Oct 2019 01:29:11 -0400 Subject: [PATCH 14/16] Fix lint warnings and build errors in demo app Signed-off-by: Joe Mattiello --- Examples/Resources/UIKit+HeroExamples.swift | 12 +-- Hero.xcodeproj/project.pbxproj | 79 +++---------------- .../AppleHomePage/AppleHomePage.storyboard | 12 ++- Podfile | 3 +- Podfile.lock | 20 +---- Sources/Extensions/UIColor+HexString.swift | 33 ++++++++ .../Extensions/UIViewController+Hero.swift | 2 +- Sources/HeroCompatible.swift | 1 + .../Preprocessors/CascadePreprocessor.swift | 8 +- .../DefaultAnimationPreprocessor.swift | 8 +- Sources/SwiftSupport.swift | 3 - 11 files changed, 67 insertions(+), 114 deletions(-) create mode 100644 Sources/Extensions/UIColor+HexString.swift diff --git a/Examples/Resources/UIKit+HeroExamples.swift b/Examples/Resources/UIKit+HeroExamples.swift index 43a5e796..fc8e096f 100644 --- a/Examples/Resources/UIKit+HeroExamples.swift +++ b/Examples/Resources/UIKit+HeroExamples.swift @@ -23,7 +23,7 @@ import UIKit public extension UIView { - @IBInspectable public var cornerRadius: CGFloat { + @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } @@ -32,7 +32,7 @@ public extension UIView { layer.cornerRadius = newValue } } - @IBInspectable public var shadowRadius: CGFloat { + @IBInspectable var shadowRadius: CGFloat { get { return layer.shadowRadius } @@ -41,7 +41,7 @@ public extension UIView { layer.shadowRadius = newValue } } - @IBInspectable public var shadowOpacity: Float { + @IBInspectable var shadowOpacity: Float { get { return layer.shadowOpacity } @@ -50,7 +50,7 @@ public extension UIView { layer.shadowOpacity = newValue } } - @IBInspectable public var shadowColor: UIColor? { + @IBInspectable var shadowColor: UIColor? { get { return layer.shadowColor != nil ? UIColor(cgColor: layer.shadowColor!) : nil } @@ -59,7 +59,7 @@ public extension UIView { layer.shadowColor = newValue?.cgColor } } - @IBInspectable public var shadowOffset: CGSize { + @IBInspectable var shadowOffset: CGSize { get { return layer.shadowOffset } @@ -68,7 +68,7 @@ public extension UIView { layer.shadowOffset = newValue } } - @IBInspectable public var zPosition: CGFloat { + @IBInspectable var zPosition: CGFloat { get { return layer.zPosition } diff --git a/Hero.xcodeproj/project.pbxproj b/Hero.xcodeproj/project.pbxproj index 7bf74bdb..1035d171 100644 --- a/Hero.xcodeproj/project.pbxproj +++ b/Hero.xcodeproj/project.pbxproj @@ -40,24 +40,15 @@ 5C5442AA2004092500E1E326 /* HeroCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */; }; 5C6972902002CDBD001A5051 /* HeroCompatible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */; }; 83043017B73BC66DBB920D5C /* Pods_HeroExamples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */; }; - A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; }; - A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; }; A306D3B61E1C7A2E00B6C23A /* Hero.h in Headers */ = {isa = PBXBuildFile; fileRef = A306D3B41E1C7A2E00B6C23A /* Hero.h */; settings = {ATTRIBUTES = (Public, ); }; }; A306D3B91E1C7A2E00B6C23A /* Hero.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; }; A306D3BB1E1C7A2E00B6C23A /* Hero.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A306D3B21E1C7A2E00B6C23A /* Hero.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; }; A3298CDA1E304851005B06BB /* BasePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3298CD91E304851005B06BB /* BasePreprocessor.swift */; }; A32D2CF21E4A7DC3008D35FF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; }; - A32D2CF81E4A80C3008D35FF /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; }; - A32D2CF91E4A80C5008D35FF /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; }; - A32D2CFA1E4A80C7008D35FF /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; }; - A32D2CFB1E4A80C9008D35FF /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; }; A32D2CFC1E4A80DC008D35FF /* UIKit+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */; }; A32D2D021E4A8153008D35FF /* Basic.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D001E4A8153008D35FF /* Basic.storyboard */; }; A32D2D031E4A8153008D35FF /* ImageGallery.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D011E4A8153008D35FF /* ImageGallery.storyboard */; }; A32D2D051E4A81D5008D35FF /* ImageViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D041E4A81D5008D35FF /* ImageViewer.storyboard */; }; - A32D2D0D1E4D545B008D35FF /* MenuViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D0C1E4D545B008D35FF /* MenuViewController.swift */; }; - A32D2D101E4E14DD008D35FF /* BuiltInTransitions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A32D2D0F1E4E14DD008D35FF /* BuiltInTransitions.storyboard */; }; A32D2D131E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; }; A32D2D141E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; }; A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60A41DE761C90065CBD8 /* AppDelegate.swift */; }; @@ -65,13 +56,7 @@ A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; }; A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AD1DE761C90065CBD8 /* LaunchScreen.storyboard */; }; A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */; }; - A33E60BE1DE7621C0065CBD8 /* City.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B91DE7621C0065CBD8 /* City.swift */; }; - A33E60BF1DE7621C0065CBD8 /* CityGuideCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BA1DE7621C0065CBD8 /* CityGuideCell.swift */; }; - A33E60C01DE7621C0065CBD8 /* CityGuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BB1DE7621C0065CBD8 /* CityGuideViewController.swift */; }; - A33E60C11DE7621C0065CBD8 /* CityViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60BC1DE7621C0065CBD8 /* CityViewController.swift */; }; - A3499D9F1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; }; A355CEC8D787CF71B0D7CBDA /* Pods_HeroTvOSExamples.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */; }; - A35949181E1A2BE60095F407 /* LegacyExampleViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A35949171E1A2BE60095F407 /* LegacyExampleViewController.swift */; }; A37D7B411E2C0C7E00AC1959 /* CascadePreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3D1E2C0C7E00AC1959 /* CascadePreprocessor.swift */; }; A37D7B421E2C0C7E00AC1959 /* IgnoreSubviewModifiersPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3E1E2C0C7E00AC1959 /* IgnoreSubviewModifiersPreprocessor.swift */; }; A37D7B431E2C0C7E00AC1959 /* MatchPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A37D7B3F1E2C0C7E00AC1959 /* MatchPreprocessor.swift */; }; @@ -113,17 +98,12 @@ B101B2CC1E56140B007E7112 /* UIView+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2C91E561408007E7112 /* UIView+Hero.swift */; }; B101B2CE1E561421007E7112 /* UIViewController+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; }; B101B2CF1E561421007E7112 /* UIViewController+Hero.swift in Sources */ = {isa = PBXBuildFile; fileRef = B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */; }; - B114B6901E412A0B0009CEDE /* AppleProductViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B114B68F1E412A0B0009CEDE /* AppleProductViewController.swift */; }; B1193AB61E525CD8005B1C87 /* HeroViewPropertyViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB51E525CD8005B1C87 /* HeroViewPropertyViewContext.swift */; }; B1193AB71E525CD8005B1C87 /* HeroViewPropertyViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB51E525CD8005B1C87 /* HeroViewPropertyViewContext.swift */; }; B1193AB91E525D12005B1C87 /* HeroAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB81E525D12005B1C87 /* HeroAnimatorViewContext.swift */; }; B1193ABA1E525D12005B1C87 /* HeroAnimatorViewContext.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1193AB81E525D12005B1C87 /* HeroAnimatorViewContext.swift */; }; - B1275D971E4C0D850099A0E9 /* PluginViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1275D961E4C0D850099A0E9 /* PluginViewController.swift */; }; - B147F2651FAEA8F0006475A3 /* FirstViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B147F2631FAEA8F0006475A3 /* FirstViewController.swift */; }; - B147F2661FAEA8F0006475A3 /* Navigation.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B147F2641FAEA8F0006475A3 /* Navigation.storyboard */; }; B16197E01EF451C500A540D2 /* HeroTransition+Interactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16197DF1EF451C400A540D2 /* HeroTransition+Interactive.swift */; }; B16197E11EF451C500A540D2 /* HeroTransition+Interactive.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16197DF1EF451C400A540D2 /* HeroTransition+Interactive.swift */; }; - B16A21A01E4E3907007B8B4C /* AnimationSelectTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16A219F1E4E3907007B8B4C /* AnimationSelectTableViewController.swift */; }; B16B75311EF45A110018DBEF /* HeroTransitionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75301EF45A110018DBEF /* HeroTransitionState.swift */; }; B16B75321EF45A110018DBEF /* HeroTransitionState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75301EF45A110018DBEF /* HeroTransitionState.swift */; }; B16B75341EF461090018DBEF /* HeroProgressRunner.swift in Sources */ = {isa = PBXBuildFile; fileRef = B16B75331EF461090018DBEF /* HeroProgressRunner.swift */; }; @@ -136,18 +116,6 @@ B17D888A1EF5A5330048D3E8 /* HeroTransition+UINavigationControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D88881EF5A5330048D3E8 /* HeroTransition+UINavigationControllerDelegate.swift */; }; B17D888C1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D888B1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift */; }; B17D888D1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B17D888B1EF5A5500048D3E8 /* HeroTransition+UIViewControllerTransitioningDelegate.swift */; }; - B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E51DFA6E0C00C3B85D /* ListTableViewController.swift */; }; - B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B185A4E71DFA6FE200C3B85D /* GridCollectionViewController.swift */; }; - B19F76991E46C38E002DBC58 /* AppleHomePage.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76981E46C38E002DBC58 /* AppleHomePage.storyboard */; }; - B19F769D1E46C3A2002DBC58 /* Basic.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769A1E46C3A2002DBC58 /* Basic.storyboard */; }; - B19F769E1E46C3A2002DBC58 /* Menu.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769B1E46C3A2002DBC58 /* Menu.storyboard */; }; - B19F769F1E46C3A2002DBC58 /* MusicPlayer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F769C1E46C3A2002DBC58 /* MusicPlayer.storyboard */; }; - B19F76A11E46C3C2002DBC58 /* CityGuide.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A01E46C3C2002DBC58 /* CityGuide.storyboard */; }; - B19F76A31E46C3CB002DBC58 /* ListToGrid.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A21E46C3CB002DBC58 /* ListToGrid.storyboard */; }; - B19F76A61E46C3D7002DBC58 /* ImageGallery.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A41E46C3D7002DBC58 /* ImageGallery.storyboard */; }; - B19F76A71E46C3D7002DBC58 /* ImageViewer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76A51E46C3D7002DBC58 /* ImageViewer.storyboard */; }; - B19F76B11E46C449002DBC58 /* VideoPlayer.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B19F76AF1E46C449002DBC58 /* VideoPlayer.storyboard */; }; - B19F76B21E46C449002DBC58 /* VideoPlayerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B19F76B01E46C449002DBC58 /* VideoPlayerViewController.swift */; }; B1D816DF1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816DE1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift */; }; B1D816E01EF5A5DF007B9776 /* HeroViewControllerDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816DE1EF5A5DF007B9776 /* HeroViewControllerDelegate.swift */; }; B1D816E21EF5A630007B9776 /* HeroTransition+CustomTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816E11EF5A630007B9776 /* HeroTransition+CustomTransition.swift */; }; @@ -160,6 +128,8 @@ B1D816EC1EF5A720007B9776 /* HeroTransition+Animate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816EA1EF5A720007B9776 /* HeroTransition+Animate.swift */; }; B1D834041F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; }; B1D834051F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; }; + F482F0BE235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; }; + F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -309,6 +279,7 @@ B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConditionalPreprocessor.swift; sourceTree = ""; }; C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.release.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig"; sourceTree = ""; }; EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F482F0BD235D7808002E97ED /* UIColor+HexString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+HexString.swift"; sourceTree = ""; }; FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroTvOSExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -375,6 +346,7 @@ A37D7B4A1E2C0C9300AC1959 /* UIKit+Hero.swift */, B101B2C91E561408007E7112 /* UIView+Hero.swift */, B101B2CD1E561421007E7112 /* UIViewController+Hero.swift */, + F482F0BD235D7808002E97ED /* UIColor+HexString.swift */, ); path = Extensions; sourceTree = ""; @@ -827,6 +799,7 @@ developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( + English, en, Base, ); @@ -875,18 +848,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - B19F76A11E46C3C2002DBC58 /* CityGuide.storyboard in Resources */, - B19F769D1E46C3A2002DBC58 /* Basic.storyboard in Resources */, - B19F769E1E46C3A2002DBC58 /* Menu.storyboard in Resources */, - B19F76B11E46C449002DBC58 /* VideoPlayer.storyboard in Resources */, - A32D2D101E4E14DD008D35FF /* BuiltInTransitions.storyboard in Resources */, - B19F76A61E46C3D7002DBC58 /* ImageGallery.storyboard in Resources */, - B147F2661FAEA8F0006475A3 /* Navigation.storyboard in Resources */, - B19F76A31E46C3CB002DBC58 /* ListToGrid.storyboard in Resources */, - B19F76991E46C38E002DBC58 /* AppleHomePage.storyboard in Resources */, - B19F769F1E46C3A2002DBC58 /* MusicPlayer.storyboard in Resources */, A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */, - B19F76A71E46C3D7002DBC58 /* ImageViewer.storyboard in Resources */, A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */, A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */, ); @@ -908,18 +870,16 @@ files = ( ); inputPaths = ( - "${SRCROOT}/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh", - "${BUILT_PRODUCTS_DIR}/ChameleonFramework/ChameleonFramework.framework", + "${PODS_ROOT}/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh", "${BUILT_PRODUCTS_DIR}/CollectionKit/CollectionKit.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( - "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ChameleonFramework.framework", "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/CollectionKit.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh\"\n"; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; 89DC76B30A0BF7FD724C24D3 /* [CP] Check Pods Manifest.lock */ = { @@ -1033,13 +993,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A32D2CFA1E4A80C7008D35FF /* ImageLibrary.swift in Sources */, - A32D2CF81E4A80C3008D35FF /* ImageGalleryCollectionViewController.swift in Sources */, A32D2CFC1E4A80DC008D35FF /* UIKit+HeroExamples.swift in Sources */, 2D1F7FE71E49DD90004D944B /* TVImageGalleryViewController.swift in Sources */, - A32D2CF91E4A80C5008D35FF /* ImageViewController.swift in Sources */, + F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */, 2D1F7FE51E49DD90004D944B /* AppDelegate.swift in Sources */, - A32D2CFB1E4A80C9008D35FF /* ImageCells.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1101,31 +1058,15 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A35949181E1A2BE60095F407 /* LegacyExampleViewController.swift in Sources */, - A33E60C01DE7621C0065CBD8 /* CityGuideViewController.swift in Sources */, - B114B6901E412A0B0009CEDE /* AppleProductViewController.swift in Sources */, + F482F0BE235D7808002E97ED /* UIColor+HexString.swift in Sources */, A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */, A3D060C820834FF100E48927 /* AppStoreCardExample.swift in Sources */, - A3499D9F1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift in Sources */, A3D060C420833D0400E48927 /* MatchExample.swift in Sources */, - B16A21A01E4E3907007B8B4C /* AnimationSelectTableViewController.swift in Sources */, - A33E60BF1DE7621C0065CBD8 /* CityGuideCell.swift in Sources */, A3D060C020833B0800E48927 /* BuiltInTransitionExample.swift in Sources */, A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */, - A33E60BE1DE7621C0065CBD8 /* City.swift in Sources */, - A304BF841DF2717900A03345 /* ImageViewController.swift in Sources */, - B185A4E61DFA6E0C00C3B85D /* ListTableViewController.swift in Sources */, A3D060C6208348CB00E48927 /* MatchInCollectionExample.swift in Sources */, - A33E60C11DE7621C0065CBD8 /* CityViewController.swift in Sources */, - B185A4E81DFA6FE200C3B85D /* GridCollectionViewController.swift in Sources */, - A32D2D0D1E4D545B008D35FF /* MenuViewController.swift in Sources */, - B147F2651FAEA8F0006475A3 /* FirstViewController.swift in Sources */, A3D060C220833B4E00E48927 /* ExampleBaseViewController.swift in Sources */, - A304BF8A1DF647FC00A03345 /* ImageCells.swift in Sources */, - B1275D971E4C0D850099A0E9 /* PluginViewController.swift in Sources */, A3B8C5672083376100E112F6 /* MainViewController.swift in Sources */, - B19F76B21E46C449002DBC58 /* VideoPlayerViewController.swift in Sources */, - A313499B1E1E2AED00EB5139 /* ImageLibrary.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1448,7 +1389,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = 5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = 683UGRW72Z; INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist"; @@ -1465,7 +1405,6 @@ isa = XCBuildConfiguration; baseConfigurationReference = C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */; buildSettings = { - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; DEVELOPMENT_TEAM = 683UGRW72Z; INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist"; diff --git a/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard b/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard index 9912ff20..0b9f95d4 100644 --- a/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard +++ b/LegacyExamples/Examples/AppleHomePage/AppleHomePage.storyboard @@ -1,11 +1,9 @@ - - - - + + - + @@ -56,7 +54,7 @@ - + @@ -66,7 +64,7 @@ SERIES 2 - + diff --git a/Podfile b/Podfile index 34934364..d3380640 100644 --- a/Podfile +++ b/Podfile @@ -3,8 +3,7 @@ target 'HeroExamples' do platform :ios, '9.0' use_frameworks! - pod "CollectionKit" - pod 'ChameleonFramework/Swift', :git => 'https://github.com/ViccAlexander/Chameleon.git' + pod 'CollectionKit' end target 'HeroTvOSExamples' do diff --git a/Podfile.lock b/Podfile.lock index 79235d32..b88eb6c6 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -1,32 +1,18 @@ PODS: - - ChameleonFramework/Default (2.1.0) - - ChameleonFramework/Swift (2.1.0): - - ChameleonFramework/Default - CollectionKit (2.2.0): - CollectionKit/Core (= 2.2.0) - CollectionKit/Core (2.2.0) DEPENDENCIES: - - ChameleonFramework/Swift (from `https://github.com/ViccAlexander/Chameleon.git`) - CollectionKit SPEC REPOS: - https://github.com/cocoapods/specs.git: + https://github.com/CocoaPods/Specs.git: - CollectionKit -EXTERNAL SOURCES: - ChameleonFramework: - :git: https://github.com/ViccAlexander/Chameleon.git - -CHECKOUT OPTIONS: - ChameleonFramework: - :commit: 6dd284bde21ea2e7f9fd89bc36f40df16e16369d - :git: https://github.com/ViccAlexander/Chameleon.git - SPEC CHECKSUMS: - ChameleonFramework: d21a3cc247abfe5e37609a283a8238b03575cf64 CollectionKit: 5caa5341860d4c9b748ebfeaab97530b2d02c7c0 -PODFILE CHECKSUM: 126cdb5cfac9a9e2d2e798696131fd8758b6c34d +PODFILE CHECKSUM: 293d0984c38aac42633afe89b7cc83f7d1b9b629 -COCOAPODS: 1.5.3 +COCOAPODS: 1.8.4 diff --git a/Sources/Extensions/UIColor+HexString.swift b/Sources/Extensions/UIColor+HexString.swift new file mode 100644 index 00000000..e3367536 --- /dev/null +++ b/Sources/Extensions/UIColor+HexString.swift @@ -0,0 +1,33 @@ +// +// UIColor+HexString.swift +// Hero +// +// Created by Joseph Mattiello on 10/21/19. +// Copyright © 2019 Luke Zhao. All rights reserved. +// + +import UIKit + +extension UIColor { + convenience init?(hexString hex: String) { + var cString: String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() + + if cString.hasPrefix("#") { + cString.remove(at: cString.startIndex) + } + + guard cString.count == 6 else { + return nil + } + + var rgbValue: UInt64 = 0 + Scanner(string: cString).scanHexInt64(&rgbValue) + + self.init( + red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, + green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, + blue: CGFloat(rgbValue & 0x0000FF) / 255.0, + alpha: CGFloat(1.0) + ) + } +} diff --git a/Sources/Extensions/UIViewController+Hero.swift b/Sources/Extensions/UIViewController+Hero.swift index dea60dab..4670d868 100644 --- a/Sources/Extensions/UIViewController+Hero.swift +++ b/Sources/Extensions/UIViewController+Hero.swift @@ -242,7 +242,7 @@ public extension HeroExtension where Base: UIViewController { Unwind to a view controller that the matchBlock returns true on. */ func unwindToViewController(withMatchBlock: (UIViewController) -> Bool) { - var target: UIViewController? = nil + var target: UIViewController? var current: UIViewController? = base while target == nil && current != nil { diff --git a/Sources/HeroCompatible.swift b/Sources/HeroCompatible.swift index a4c59cbe..c95e1afe 100644 --- a/Sources/HeroCompatible.swift +++ b/Sources/HeroCompatible.swift @@ -31,6 +31,7 @@ public protocol HeroCompatible { public extension HeroCompatible { var hero: HeroExtension { get { return HeroExtension(self) } + // swiftlint:disable unused_setter_value set { } } } diff --git a/Sources/Preprocessors/CascadePreprocessor.swift b/Sources/Preprocessors/CascadePreprocessor.swift index 17fefc19..d3d40a13 100644 --- a/Sources/Preprocessors/CascadePreprocessor.swift +++ b/Sources/Preprocessors/CascadePreprocessor.swift @@ -29,8 +29,8 @@ public enum CascadeDirection { case bottomToTop case leftToRight case rightToLeft - case radial(center:CGPoint) - case inverseRadial(center:CGPoint) + case radial(center: CGPoint) + case inverseRadial(center: CGPoint) var comparator: (UIView, UIView) -> Bool { switch self { case .topToBottom: @@ -70,11 +70,11 @@ public enum CascadeDirection { return nil } } - + public static var leadingToTrailing: CascadeDirection { return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .leftToRight : .rightToLeft } - + public static var trailingToLeading: CascadeDirection { return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .rightToLeft : .leftToRight } diff --git a/Sources/Preprocessors/DefaultAnimationPreprocessor.swift b/Sources/Preprocessors/DefaultAnimationPreprocessor.swift index 622e2bac..048af948 100644 --- a/Sources/Preprocessors/DefaultAnimationPreprocessor.swift +++ b/Sources/Preprocessors/DefaultAnimationPreprocessor.swift @@ -36,16 +36,16 @@ public enum HeroDefaultAnimationType { default: return nil } } - + public static var leading: Direction { return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .left : .right } - + public static var trailing: Direction { return UIApplication.shared.userInterfaceLayoutDirection == .leftToRight ? .right : .left } } - + public enum Strategy { case forceLeftToRight, forceRightToLeft, userInterface func defaultDirection(presenting: Bool) -> Direction { @@ -59,7 +59,7 @@ public enum HeroDefaultAnimationType { } } } - + case auto case push(direction: Direction) case pull(direction: Direction) diff --git a/Sources/SwiftSupport.swift b/Sources/SwiftSupport.swift index d2b4507f..b601818c 100644 --- a/Sources/SwiftSupport.swift +++ b/Sources/SwiftSupport.swift @@ -47,6 +47,3 @@ extension RunLoop { } } #endif - - - From 89cc4a2b7fcdc42b5df033976eb862c33323bb70 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Mon, 21 Oct 2019 02:10:23 -0400 Subject: [PATCH 15/16] Fix iOS demo app failing and style on iOS 13 Signed-off-by: Joe Mattiello --- Examples/AppStoreCardExample.swift | 7 ++- Examples/ExampleBaseViewController.swift | 6 ++- Examples/MainViewController.swift | 28 ++++++----- Examples/MatchExample.swift | 16 ++++--- .../AppIcon.appiconset/Contents.json | 3 +- .../AppIcon.appiconset/Icon-1024.png | Bin 0 -> 198288 bytes .../LaunchImage.launchimage/Contents.json | 22 --------- .../Base.lproj/LaunchScreen.storyboard | 16 +++---- Hero.xcodeproj/project.pbxproj | 45 +++++++++++++++++- LegacyExamples/Base.lproj/Main.storyboard | 11 ++--- LegacyExamples/en.lproj/Main.strings | 12 +++++ Podfile | 4 ++ Podfile.lock | 2 +- Sources/Extensions/UIColor+HexString.swift | 20 ++++---- 14 files changed, 120 insertions(+), 72 deletions(-) create mode 100644 Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png delete mode 100644 Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json create mode 100644 LegacyExamples/en.lproj/Main.strings diff --git a/Examples/AppStoreCardExample.swift b/Examples/AppStoreCardExample.swift index f472b7ac..ae67d213 100644 --- a/Examples/AppStoreCardExample.swift +++ b/Examples/AppStoreCardExample.swift @@ -219,7 +219,12 @@ class AppStoreViewController2: ExampleBaseViewController { Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent neque est, hendrerit vitae nibh ultrices, accumsan elementum ante. Phasellus fringilla sapien non lorem consectetur, in ullamcorper tortor condimentum. Nulla tincidunt iaculis maximus. Sed ut urna urna. Nulla at sem vel neque scelerisque imperdiet. Donec ornare luctus dapibus. Donec aliquet ante augue, at pellentesque ipsum mollis eget. Cras vulputate mauris ac eleifend sollicitudin. Vivamus ut posuere odio. Suspendisse vulputate sem vel felis vehicula iaculis. Fusce sagittis, eros quis consequat tincidunt, arcu nunc ornare nulla, non egestas dolor ex at ipsum. Cras et massa sit amet quam imperdiet viverra. Mauris vitae finibus nibh, ac vulputate sapien. """ - contentCard.backgroundColor = .white + if #available(iOS 13.0, *) { + contentCard.backgroundColor = .systemBackground + } else { + contentCard.backgroundColor = .white + } + contentCard.clipsToBounds = true contentCard.addSubview(contentView) diff --git a/Examples/ExampleBaseViewController.swift b/Examples/ExampleBaseViewController.swift index dbe48732..35d7999b 100644 --- a/Examples/ExampleBaseViewController.swift +++ b/Examples/ExampleBaseViewController.swift @@ -14,7 +14,11 @@ class ExampleBaseViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .white + if #available(iOS 13.0, *) { + view.backgroundColor = .systemBackground + } else { + view.backgroundColor = .white + } view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(onTap))) dismissButton.setTitle("Back", for: .normal) diff --git a/Examples/MainViewController.swift b/Examples/MainViewController.swift index 043c61cf..f29efab6 100644 --- a/Examples/MainViewController.swift +++ b/Examples/MainViewController.swift @@ -9,7 +9,11 @@ class MainViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - view.backgroundColor = .white + if #available(iOS 13.0, *) { + view.backgroundColor = UIColor.systemBackground + } else { + view.backgroundColor = .white + } view.addSubview(collectionView) @@ -27,6 +31,13 @@ class MainViewController: UIViewController { let viewSource = ClosureViewSource { (label: UILabel, data: SourceData, index) in label.text = "\(index + 1). \(data.1)" label.textAlignment = .center + if #available(iOS 13.0, *) { + label.textColor = .label + label.backgroundColor = .systemBackground + } else { + label.textColor = .darkText + label.backgroundColor = .white + } label.layer.borderColor = UIColor.gray.cgColor label.layer.borderWidth = 0.5 label.layer.cornerRadius = 8 @@ -51,22 +62,13 @@ class MainViewController: UIViewController { imageView.contentMode = .scaleAspectFit let imageProvider = SimpleViewProvider(views: [imageView], sizeStrategy: (.fill, .fit)) - - let legacyButton = UIButton(type: .system) - legacyButton.setTitle("Legacy Examples", for: .normal) - legacyButton.addTarget(self, action: #selector(showLegacy), for: .touchUpInside) - let legacyExamplesProvider = SimpleViewProvider(views: [legacyButton], sizeStrategy: (.fill, .fit)) - + collectionView.provider = ComposedProvider( layout: FlowLayout(lineSpacing: 10).inset(by: UIEdgeInsets(top: 20, left: 20, bottom: 20, right: 20)), - sections: [imageProvider, examplesProvider, legacyExamplesProvider] + sections: [imageProvider, examplesProvider] ) } - - @objc func showLegacy() { - hero.replaceViewController(with: viewController(forStoryboardName: "Main")) - } - + override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() collectionView.frame = view.bounds diff --git a/Examples/MatchExample.swift b/Examples/MatchExample.swift index 28aa0cb2..3c94b9c0 100644 --- a/Examples/MatchExample.swift +++ b/Examples/MatchExample.swift @@ -51,7 +51,7 @@ class MatchExampleViewController1: ExampleBaseViewController { class MatchExampleViewController2: ExampleBaseViewController { let redView = UIView() let blackView = UIView() - let whiteView = UIView() + let backgroundView = UIView() override func viewDidLoad() { super.viewDidLoad() @@ -65,12 +65,16 @@ class MatchExampleViewController2: ExampleBaseViewController { blackView.cornerRadius = 8 view.addSubview(blackView) - whiteView.backgroundColor = .white - whiteView.cornerRadius = 8 + if #available(iOS 13.0, *) { + backgroundView.backgroundColor = .systemBackground + } else { + backgroundView.backgroundColor = .white + } + backgroundView.cornerRadius = 8 // .useGlobalCoordinateSpace modifier is needed here otherwise it will be covered by redView during transition. // see http://lkzhao.com/2018/03/02/hero-useglobalcoordinatespace-explained.html for detail - whiteView.hero.modifiers = [.translate(y: 500), .useGlobalCoordinateSpace] - view.addSubview(whiteView) + backgroundView.hero.modifiers = [.translate(y: 500), .useGlobalCoordinateSpace] + view.addSubview(backgroundView) } override func viewDidLayoutSubviews() { @@ -78,6 +82,6 @@ class MatchExampleViewController2: ExampleBaseViewController { redView.frame = view.bounds blackView.frame.size = CGSize(width: 250, height: 60) blackView.center = CGPoint(x: view.bounds.midX, y: 130) - whiteView.frame = CGRect(x: (view.bounds.width - 250) / 2, y: 180, width: 250, height: view.bounds.height - 320) + backgroundView.frame = CGRect(x: (view.bounds.width - 250) / 2, y: 180, width: 250, height: view.bounds.height - 320) } } diff --git a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index fa3f1e5d..7021df30 100644 --- a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -103,8 +103,9 @@ "scale" : "2x" }, { - "idiom" : "ios-marketing", "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-1024.png", "scale" : "1x" } ], diff --git a/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png b/Examples/Resources/Assets.xcassets/AppIcon.appiconset/Icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..890732b5db70e91866f5ac1b3b4c8dd695b42e7d GIT binary patch literal 198288 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%0AJ1MxAvb7@L#hUsOgT^sM& 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 z z;_pw@e%&X(&qC(dOG%KCi4sl|pWV1sshRQ>&wEOGpU>iL;F`GrY(0xYbH9DJYg~jo zk$B9T={Gr=pQ{0rYQz+*AY6x`X~&M&7tw>wDn2)#r=1d`@!}VdW!=nhERl@mwJ?cK zs1kl=2?U%7N4*n1+#;Op^S(m=Zh50Y@~Rco1C+1qp7`{H0sib^57fEA7^<&>FKjpz zL-E$9u^t2kpWC)1>pgwkvktsLy706($otE!VY(Kxr6BACDl0$bJaCCAj7*g2?RzMD zNRjcoxml&Le5f@wWI7Ag{XrV}FxwRT+C87{Gk-hsyq%bWKwnBo$05c({)}w9UqBOz z3tADMPh`??&nNxoWI;l|U09mnE5?!HYV`g2EuH|0o9-QAusO@?ZG> zAI--g#jxm}sa5(rrS^zMa0Z8^)jt43Pk&+k{i6jx;92Rdhk?wy5C1%?(g47qcxX?- z|M{&_F(56MDmp*@^Uur;(tsDXm~bfn2U<)<*j)lNDVq-Xg8nxMiDX3pL)#VV->LN- zl(HCLDlWY;It5(Qzs|A%l_@)7Z2iBX1~ocRnyh@>>+bp&>Hos34ZtAhk2U{aT#o_* znXR0hi~C=|i2w%YV-tI-^w&7FN<@#g_C_=!GuC|d@`7d_2{}0jH BH|hWY literal 0 HcmV?d00001 diff --git a/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json b/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json deleted file mode 100644 index d746a609..00000000 --- a/Examples/Resources/Assets.xcassets/LaunchImage.launchimage/Contents.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "images" : [ - { - "orientation" : "landscape", - "idiom" : "tv", - "extent" : "full-screen", - "minimum-system-version" : "11.0", - "scale" : "2x" - }, - { - "orientation" : "landscape", - "idiom" : "tv", - "extent" : "full-screen", - "minimum-system-version" : "9.0", - "scale" : "1x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/Examples/Resources/Base.lproj/LaunchScreen.storyboard b/Examples/Resources/Base.lproj/LaunchScreen.storyboard index fdf3f97d..7fd29bfa 100644 --- a/Examples/Resources/Base.lproj/LaunchScreen.storyboard +++ b/Examples/Resources/Base.lproj/LaunchScreen.storyboard @@ -1,7 +1,10 @@ - - + + + - + + + @@ -9,14 +12,11 @@ - - - - - + + diff --git a/Hero.xcodeproj/project.pbxproj b/Hero.xcodeproj/project.pbxproj index 1035d171..fbf1f4da 100644 --- a/Hero.xcodeproj/project.pbxproj +++ b/Hero.xcodeproj/project.pbxproj @@ -52,7 +52,6 @@ A32D2D131E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; }; A32D2D141E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32D2D121E501C4F008D35FF /* HeroModifier+HeroStringConvertible.swift */; }; A33E60A51DE761C90065CBD8 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60A41DE761C90065CBD8 /* AppDelegate.swift */; }; - A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60A81DE761C90065CBD8 /* Main.storyboard */; }; A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AB1DE761C90065CBD8 /* Assets.xcassets */; }; A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A33E60AD1DE761C90065CBD8 /* LaunchScreen.storyboard */; }; A33E60BD1DE7621C0065CBD8 /* UIKit+HeroExamples.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33E60B61DE7621C0065CBD8 /* UIKit+HeroExamples.swift */; }; @@ -128,8 +127,13 @@ B1D816EC1EF5A720007B9776 /* HeroTransition+Animate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D816EA1EF5A720007B9776 /* HeroTransition+Animate.swift */; }; B1D834041F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; }; B1D834051F02E7C0009E1E36 /* ConditionalPreprocessor.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */; }; + DBA05BB41A704A4A17967918 /* Pods_HeroTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */; }; F482F0BE235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; }; F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */ = {isa = PBXBuildFile; fileRef = F482F0BD235D7808002E97ED /* UIColor+HexString.swift */; }; + F482F0C0235D7A3A002E97ED /* ImageGalleryCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3499D9E1DF2024E0049B541 /* ImageGalleryCollectionViewController.swift */; }; + F482F0C1235D7A51002E97ED /* ImageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF831DF2717900A03345 /* ImageViewController.swift */; }; + F482F0C2235D7A5B002E97ED /* ImageCells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A304BF891DF647FC00A03345 /* ImageCells.swift */; }; + F482F0C3235D7A65002E97ED /* ImageLibrary.swift in Sources */ = {isa = PBXBuildFile; fileRef = A313499A1E1E2AED00EB5139 /* ImageLibrary.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -181,6 +185,8 @@ 4D307DF320E3C6DC00DD9F65 /* HeroModifier+Advanced.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HeroModifier+Advanced.swift"; sourceTree = ""; }; 5C69728F2002CDBD001A5051 /* HeroCompatible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeroCompatible.swift; sourceTree = ""; }; 5CD4F09A588E81DA75C2BE38 /* Pods-HeroExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.debug.xcconfig"; sourceTree = ""; }; + 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTests/Pods-HeroTests.release.xcconfig"; sourceTree = ""; }; + 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 86C87C73D89E75C8443B5071 /* Pods-HeroTvOSExamples.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTvOSExamples.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTvOSExamples/Pods-HeroTvOSExamples.debug.xcconfig"; sourceTree = ""; }; A304BF831DF2717900A03345 /* ImageViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageViewController.swift; sourceTree = ""; }; A304BF891DF647FC00A03345 /* ImageCells.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ImageCells.swift; sourceTree = ""; }; @@ -278,8 +284,10 @@ B1D816EA1EF5A720007B9776 /* HeroTransition+Animate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HeroTransition+Animate.swift"; sourceTree = ""; }; B1D834031F02E7C0009E1E36 /* ConditionalPreprocessor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConditionalPreprocessor.swift; sourceTree = ""; }; C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroExamples.release.xcconfig"; path = "Pods/Target Support Files/Pods-HeroExamples/Pods-HeroExamples.release.xcconfig"; sourceTree = ""; }; + C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-HeroTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-HeroTests/Pods-HeroTests.debug.xcconfig"; sourceTree = ""; }; EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F482F0BD235D7808002E97ED /* UIColor+HexString.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+HexString.swift"; sourceTree = ""; }; + F482F0C5235D7C4C002E97ED /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Main.strings; sourceTree = ""; }; FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_HeroTvOSExamples.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -320,6 +328,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DBA05BB41A704A4A17967918 /* Pods_HeroTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -331,6 +340,7 @@ children = ( EEE340F89FF0A49DD23A5A6E /* Pods_HeroExamples.framework */, FD2306FDA4E15ADA91EFED44 /* Pods_HeroTvOSExamples.framework */, + 841FFA357ACB279D3F74CDEE /* Pods_HeroTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -406,6 +416,8 @@ C377744CBFF1E24426E80F55 /* Pods-HeroExamples.release.xcconfig */, 86C87C73D89E75C8443B5071 /* Pods-HeroTvOSExamples.debug.xcconfig */, A41D45F75C2C4244CC105281 /* Pods-HeroTvOSExamples.release.xcconfig */, + C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */, + 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */, ); name = Pods; sourceTree = ""; @@ -739,6 +751,7 @@ isa = PBXNativeTarget; buildConfigurationList = AF1E1B581E66822C00ECE039 /* Build configuration list for PBXNativeTarget "HeroTests" */; buildPhases = ( + 3673D17D1C42FCAD03311A99 /* [CP] Check Pods Manifest.lock */, AF1E1B4D1E66822C00ECE039 /* Sources */, AF1E1B4E1E66822C00ECE039 /* Frameworks */, AF1E1B4F1E66822C00ECE039 /* Resources */, @@ -850,7 +863,6 @@ files = ( A33E60AF1DE761C90065CBD8 /* LaunchScreen.storyboard in Resources */, A33E60AC1DE761C90065CBD8 /* Assets.xcassets in Resources */, - A33E60AA1DE761C90065CBD8 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -882,6 +894,28 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-HeroExamples/Pods-HeroExamples-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; + 3673D17D1C42FCAD03311A99 /* [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-HeroTests-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; + }; 89DC76B30A0BF7FD724C24D3 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -993,9 +1027,13 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F482F0C0235D7A3A002E97ED /* ImageGalleryCollectionViewController.swift in Sources */, A32D2CFC1E4A80DC008D35FF /* UIKit+HeroExamples.swift in Sources */, 2D1F7FE71E49DD90004D944B /* TVImageGalleryViewController.swift in Sources */, F482F0BF235D7808002E97ED /* UIColor+HexString.swift in Sources */, + F482F0C1235D7A51002E97ED /* ImageViewController.swift in Sources */, + F482F0C3235D7A65002E97ED /* ImageLibrary.swift in Sources */, + F482F0C2235D7A5B002E97ED /* ImageCells.swift in Sources */, 2D1F7FE51E49DD90004D944B /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1112,6 +1150,7 @@ isa = PBXVariantGroup; children = ( A33E60A91DE761C90065CBD8 /* Base */, + F482F0C5235D7C4C002E97ED /* en */, ); name = Main.storyboard; path = .; @@ -1419,6 +1458,7 @@ }; AF1E1B591E66822C00ECE039 /* Debug */ = { isa = XCBuildConfiguration; + baseConfigurationReference = C51A6465EC2CB38D82F28B93 /* Pods-HeroTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; DEVELOPMENT_TEAM = 4VSEW78TKT; @@ -1434,6 +1474,7 @@ }; AF1E1B5A1E66822C00ECE039 /* Release */ = { isa = XCBuildConfiguration; + baseConfigurationReference = 5CEC69C9A9A60129002FD931 /* Pods-HeroTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; DEVELOPMENT_TEAM = 4VSEW78TKT; diff --git a/LegacyExamples/Base.lproj/Main.storyboard b/LegacyExamples/Base.lproj/Main.storyboard index aa1e8f19..031561f4 100644 --- a/LegacyExamples/Base.lproj/Main.storyboard +++ b/LegacyExamples/Base.lproj/Main.storyboard @@ -1,12 +1,9 @@ - - - - + + - - + @@ -15,7 +12,7 @@ - + diff --git a/LegacyExamples/en.lproj/Main.strings b/LegacyExamples/en.lproj/Main.strings new file mode 100644 index 00000000..4e36dfd6 --- /dev/null +++ b/LegacyExamples/en.lproj/Main.strings @@ -0,0 +1,12 @@ + +/* Class = "UILabel"; text = "Built-in"; ObjectID = "IIL-pF-BfF"; */ +"IIL-pF-BfF.text" = "Built-in"; + +/* Class = "UITabBarItem"; title = "Plugins"; ObjectID = "bDK-79-b3B"; */ +"bDK-79-b3B.title" = "Plugins"; + +/* Class = "UILabel"; text = "HeroDebugPlugin"; ObjectID = "fUh-RG-Pga"; */ +"fUh-RG-Pga.text" = "HeroDebugPlugin"; + +/* Class = "UIViewController"; title = "Plugins"; ObjectID = "uv4-Wk-GeR"; */ +"uv4-Wk-GeR.title" = "Plugins"; diff --git a/Podfile b/Podfile index d3380640..8182c4de 100644 --- a/Podfile +++ b/Podfile @@ -4,6 +4,10 @@ target 'HeroExamples' do platform :ios, '9.0' use_frameworks! pod 'CollectionKit' + + target 'HeroTests' do + inherit! :search_paths + end end target 'HeroTvOSExamples' do diff --git a/Podfile.lock b/Podfile.lock index b88eb6c6..cff3af08 100644 --- a/Podfile.lock +++ b/Podfile.lock @@ -13,6 +13,6 @@ SPEC REPOS: SPEC CHECKSUMS: CollectionKit: 5caa5341860d4c9b748ebfeaab97530b2d02c7c0 -PODFILE CHECKSUM: 293d0984c38aac42633afe89b7cc83f7d1b9b629 +PODFILE CHECKSUM: efc6b025c2cee81dcc6fa480009618ed1af56837 COCOAPODS: 1.8.4 diff --git a/Sources/Extensions/UIColor+HexString.swift b/Sources/Extensions/UIColor+HexString.swift index e3367536..2a6092c5 100644 --- a/Sources/Extensions/UIColor+HexString.swift +++ b/Sources/Extensions/UIColor+HexString.swift @@ -12,22 +12,22 @@ extension UIColor { convenience init?(hexString hex: String) { var cString: String = hex.trimmingCharacters(in: .whitespacesAndNewlines).uppercased() - if cString.hasPrefix("#") { - cString.remove(at: cString.startIndex) - } + if cString.hasPrefix("#") { + cString.remove(at: cString.startIndex) + } guard cString.count == 6 else { return nil } - var rgbValue: UInt64 = 0 - Scanner(string: cString).scanHexInt64(&rgbValue) + var rgbValue: UInt64 = 0 + Scanner(string: cString).scanHexInt64(&rgbValue) self.init( - red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, - green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, - blue: CGFloat(rgbValue & 0x0000FF) / 255.0, - alpha: CGFloat(1.0) - ) + red: CGFloat((rgbValue & 0xFF0000) >> 16) / 255.0, + green: CGFloat((rgbValue & 0x00FF00) >> 8) / 255.0, + blue: CGFloat(rgbValue & 0x0000FF) / 255.0, + alpha: CGFloat(1.0) + ) } } From 991f33793f90279c1a82e90e8e8c75608db85f51 Mon Sep 17 00:00:00 2001 From: Joe Mattiello Date: Wed, 23 Oct 2019 20:03:06 -0400 Subject: [PATCH 16/16] Bump target versions to 1.5.0 Signed-off-by: Joe Mattiello --- Examples/Resources/Info.plist | 2 +- Hero.xcodeproj/project.pbxproj | 8 ++++++++ Sources/Info.plist | 2 +- TvOSExamples/Info.plist | 2 +- 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/Examples/Resources/Info.plist b/Examples/Resources/Info.plist index 2f336fb5..43500eb1 100644 --- a/Examples/Resources/Info.plist +++ b/Examples/Resources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion 1 LSRequiresIPhoneOS diff --git a/Hero.xcodeproj/project.pbxproj b/Hero.xcodeproj/project.pbxproj index fbf1f4da..b113df49 100644 --- a/Hero.xcodeproj/project.pbxproj +++ b/Hero.xcodeproj/project.pbxproj @@ -1182,6 +1182,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; PRODUCT_NAME = Hero; SDKROOT = appletvos; @@ -1208,6 +1209,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; PRODUCT_NAME = Hero; SDKROOT = appletvos; @@ -1230,6 +1232,7 @@ DEVELOPMENT_TEAM = 4VSEW78TKT; INFOPLIST_FILE = TvOSExamples/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroTvOSExamples; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; @@ -1249,6 +1252,7 @@ DEVELOPMENT_TEAM = 4VSEW78TKT; INFOPLIST_FILE = TvOSExamples/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroTvOSExamples; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = appletvos; @@ -1275,6 +1279,7 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; PRODUCT_NAME = Hero; SKIP_INSTALL = YES; @@ -1301,6 +1306,7 @@ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.Hero; PRODUCT_NAME = Hero; SKIP_INSTALL = YES; @@ -1433,6 +1439,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroExamples; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; @@ -1449,6 +1456,7 @@ INFOPLIST_FILE = "$(SRCROOT)/Examples/Resources/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + MARKETING_VERSION = 1.5.0; PRODUCT_BUNDLE_IDENTIFIER = com.lkzhao.HeroExamples; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; diff --git a/Sources/Info.plist b/Sources/Info.plist index 9f9016ae..ec0cc7b0 100644 --- a/Sources/Info.plist +++ b/Sources/Info.plist @@ -15,7 +15,7 @@ CFBundlePackageType FMWK CFBundleShortVersionString - 1.3.1 + $(MARKETING_VERSION) CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/TvOSExamples/Info.plist b/TvOSExamples/Info.plist index 4327cd91..125dcc5b 100644 --- a/TvOSExamples/Info.plist +++ b/TvOSExamples/Info.plist @@ -17,7 +17,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 1.0 + $(MARKETING_VERSION) CFBundleVersion 1 LSRequiresIPhoneOS