├── .github
├── FUNDING.yml
└── workflows
│ ├── create-release.yml
│ ├── docc-docs.yml
│ └── swift.yml
├── .gitignore
├── Benchmark
├── .swiftpm
│ └── xcode
│ │ ├── package.xcworkspace
│ │ └── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ └── xcschemes
│ │ ├── MotionBenchmark-Package.xcscheme
│ │ ├── MotionBenchmark.xcscheme
│ │ └── MotionBenchmarkRunner.xcscheme
├── Package.resolved
├── Package.swift
└── Sources
│ ├── MotionBenchmark
│ └── MotionBenchmark.swift
│ └── MotionBenchmarkRunner
│ └── main.swift
├── Example
└── MotionExample-iOS
│ ├── MotionExample-iOS.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm
│ │ │ └── Package.resolved
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── MotionExample-iOS.xcscheme
│ └── MotionExample-iOS
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AccentColor.colorset
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ └── Contents.json
│ └── Contents.json
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── BouncyViewController.swift
│ ├── CustomCustomScrollView.swift
│ ├── DraggableViewController.swift
│ ├── Info.plist
│ ├── SceneDelegate.swift
│ ├── ScrollViewContents.txt
│ ├── ScrollViewController.swift
│ ├── SwiftUIDemoView.swift
│ └── ViewController.swift
├── LICENSE
├── Package.resolved
├── Package.swift
├── README.md
├── Resources
├── MotionLogo-Dark-Cropped.gif
├── MotionLogo-Dark.gif
├── MotionLogo-Dark.mp4
├── MotionLogo-Light-Cropped.gif
├── MotionLogo-Light.gif
├── MotionLogo-Light.mp4
├── MotionMovieMaker
│ ├── MotionMovieMaker.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ │ └── swiftpm
│ │ │ │ └── Package.resolved
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── MotionMovieMaker.xcscheme
│ └── MotionMovieMaker
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ ├── AccentColor.colorset
│ │ │ └── Contents.json
│ │ ├── AppIcon.appiconset
│ │ │ └── Contents.json
│ │ └── Contents.json
│ │ ├── Base.lproj
│ │ ├── LaunchScreen.storyboard
│ │ └── Main.storyboard
│ │ ├── BouncyView.swift
│ │ ├── Info.plist
│ │ ├── MotionMovieMaker-Bridging-Header.h
│ │ ├── SceneDelegate.swift
│ │ └── ViewController.swift
├── deprecated
│ ├── Motion-Logo-Rendered-Optimized~olde.gif
│ ├── Motion-Logo-Rendered.gif
│ ├── Motion-Logo-Rendered.m4v
│ ├── Motion-Logo-Rendered~dark.gif
│ ├── Motion-Logo-Rendered~olde.gif
│ ├── MotionLogo-Dark-Cropped.gif
│ ├── MotionLogo-Dark.gif
│ ├── MotionLogo-Dark.motn
│ ├── MotionLogo-Light-Cropped.gif
│ ├── MotionLogo-Light.gif
│ ├── MotionLogo-Light.motn
│ ├── MotionLogo
│ │ └── MotionLogo.motn
│ └── render_files.sh
└── render_files.sh
├── Sources
├── Graphing
│ ├── CurveGrapher.swift
│ ├── EasingFunctionGraph.swift
│ └── ValueAnimationGraph.swift
└── Motion
│ ├── Animations
│ ├── AnimationGroup.swift
│ ├── BasicAnimation.swift
│ ├── DecayAnimation.swift
│ ├── Functions
│ │ ├── DecayFunction.swift
│ │ ├── EasingFunctions.swift
│ │ └── SpringFunction.swift
│ ├── SpringAnimation.swift
│ └── ValueAnimation.swift
│ ├── Documentation.docc
│ ├── Documentation.md
│ └── Resources
│ │ ├── Motion-Logo-Rendered.gif
│ │ └── Motion-Logo-Rendered~dark.gif
│ ├── Protocols
│ ├── AnimationEnvironment.swift
│ ├── EquatableEnough.swift
│ └── SIMDRepresentable.swift
│ └── Utilities
│ ├── AnimationDriver.swift
│ ├── AnimationEnvironmentProxy.swift
│ ├── Animator.swift
│ ├── CAKeyframeAnimationEmittable.swift
│ ├── CoreAnimationHelpers.swift
│ ├── NSScreen+AnimationEnvironment.swift
│ ├── RubberBanding.swift
│ └── Synchronized.swift
├── Tests
├── LinuxMain.swift
└── MotionTests
│ ├── BasicAnimationTests.swift
│ ├── DecayAnimationTests.swift
│ ├── MotionTests.swift
│ └── SpringAnimationTests.swift
├── build_docs.sh
├── build_xcframework.sh
└── docs
├── css
├── documentation-topic.a7be2880.css
├── documentation-topic~topic~tutorials-overview.5d19221e.css
├── index.dcc9e6fb.css
├── topic.fdc1ac71.css
└── tutorials-overview.36413021.css
├── data
└── documentation
│ ├── motion.json
│ └── motion
│ ├── animation.json
│ ├── animation
│ ├── completion.json
│ ├── enabled.json
│ ├── enableddidchange.json
│ ├── hasresolved().json
│ ├── init().json
│ ├── start().json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ └── tick(frame:).json
│ ├── animationframe.json
│ ├── animationframe
│ ├── !=(_:_:).json
│ ├── duration.json
│ ├── equatable-implementations.json
│ ├── init(_:).json
│ ├── init(timestamp:targettimestamp:).json
│ ├── targettimestamp.json
│ └── timestamp.json
│ ├── animationgroup.json
│ ├── animationgroup
│ ├── hasresolved().json
│ ├── start().json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ └── tick(frame:).json
│ ├── basicanimation.json
│ ├── basicanimation
│ ├── cakeyframeanimationemittable-implementations.json
│ ├── duration.json
│ ├── easingfunction.json
│ ├── fromvalue.json
│ ├── hasresolved().json
│ ├── init(easingfunction:).json
│ ├── keyframeanimation(forframerate:).json
│ ├── populatekeyframeanimationdata(dt:values:keytimes:).json
│ ├── reset(postvaluechanged:).json
│ ├── start().json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ └── tick(frame:).json
│ ├── bezier.json
│ ├── bezier
│ ├── !=(_:_:).json
│ ├── equatable-implementations.json
│ ├── evaluatecurvex(t:).json
│ ├── evaluatecurvey(t:).json
│ ├── init(x1:y1:x2:y2:).json
│ ├── solve(x:epsilon:).json
│ ├── solve(y:epsilon:).json
│ ├── solvefort(x:epsilon:).json
│ ├── solvefort(y:epsilon:).json
│ ├── x1.json
│ ├── x2.json
│ ├── y1.json
│ └── y2.json
│ ├── cadisableactions(_:).json
│ ├── cakeyframeanimationemittable.json
│ ├── cakeyframeanimationemittable
│ ├── keyframeanimation(forframerate:)-9i7fl.json
│ ├── keyframeanimation(forframerate:)-9l4to.json
│ └── populatekeyframeanimationdata(dt:values:keytimes:).json
│ ├── cakeyframeanimationvalueconvertible.json
│ ├── cakeyframeanimationvalueconvertible
│ └── tokeyframevalue().json
│ ├── decayanimation.json
│ ├── decayanimation
│ ├── cakeyframeanimationemittable-implementations.json
│ ├── decayconstant.json
│ ├── hasresolved().json
│ ├── init(initialvalue:decayconstant:).json
│ ├── keyframeanimation(forframerate:).json
│ ├── populatekeyframeanimationdata(dt:values:keytimes:).json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ └── tick(frame:).json
│ ├── decayfunction.json
│ ├── decayfunction
│ ├── decayconstant.json
│ ├── init(decayconstant:).json
│ ├── one_ln_decayconstant_1000.json
│ ├── solve(dt:x0:velocity:)-816gf.json
│ ├── solve(dt:x0:velocity:)-8qnqq.json
│ └── solvesimd(dt:x0:velocity:).json
│ ├── easingfunction.json
│ ├── easingfunction
│ ├── !=(_:_:).json
│ ├── bezier.json
│ ├── easein.json
│ ├── easeinout.json
│ ├── easeout.json
│ ├── equatable-implementations.json
│ ├── hash(into:).json
│ ├── init(bezier:).json
│ ├── linear.json
│ ├── solveinterpolatedvalue(_:fraction:)-2ielp.json
│ ├── solveinterpolatedvalue(_:fraction:)-5aer1.json
│ └── solveinterpolatedvaluesimd(_:fraction:).json
│ ├── equatableenough.json
│ ├── equatableenough
│ ├── approximatelyequal(to:epsilon:)-131ix.json
│ ├── approximatelyequal(to:epsilon:)-4feys.json
│ ├── epsilon-2wsxb.json
│ ├── epsilon-7tu03.json
│ ├── epsilon-8u628.json
│ └── epsilontype.json
│ ├── floatingpointinitializable.json
│ ├── floatingpointinitializable
│ ├── init(_:)-8h6ky.json
│ └── init(_:)-pp7q.json
│ ├── mabs(_:).json
│ ├── rubberband(_:coefficient:boundssize:contentsize:).json
│ ├── simdrepresentable.json
│ ├── simdrepresentable
│ ├── init(_:)-23al6.json
│ ├── init(_:)-570oy.json
│ ├── simdrepresentation()-47m9q.json
│ ├── simdrepresentation()-97uc3.json
│ ├── simdtype.json
│ └── zero.json
│ ├── springanimation.json
│ ├── springanimation
│ ├── cakeyframeanimationemittable-implementations.json
│ ├── clampingrange.json
│ ├── configure(response:dampingratio:).json
│ ├── configure(stiffness:damping:).json
│ ├── damping.json
│ ├── dampingratio.json
│ ├── hasresolved().json
│ ├── init(initialvalue:).json
│ ├── init(initialvalue:response:dampingratio:).json
│ ├── init(initialvalue:stiffness:damping:).json
│ ├── keyframeanimation(forframerate:).json
│ ├── populatekeyframeanimationdata(dt:values:keytimes:).json
│ ├── resolvesuponreachingtovalue.json
│ ├── response.json
│ ├── stiffness.json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ ├── tick(frame:).json
│ └── velocity.json
│ ├── springfunction.json
│ ├── springfunction
│ ├── configure(response:dampingratio:).json
│ ├── configure(stiffness:damping:).json
│ ├── damping.json
│ ├── dampingratio.json
│ ├── init(response:dampingratio:).json
│ ├── init(stiffness:damping:).json
│ ├── response.json
│ ├── solve(dt:x0:velocity:)-6ic5c.json
│ ├── solve(dt:x0:velocity:)-rt6m.json
│ ├── solvesimd(dt:x0:velocity:).json
│ ├── stiffness.json
│ ├── w0.json
│ └── wd.json
│ ├── supportedscalar.json
│ ├── supportedscalar
│ ├── cos(_:).json
│ ├── exp(_:).json
│ ├── pow(_:_:).json
│ └── sin(_:).json
│ ├── supportedsimd.json
│ ├── uiscrollviewdecayconstant.json
│ ├── uiscrollviewrubberbandingconstant.json
│ ├── valueanimation.json
│ └── valueanimation
│ ├── !=(_:_:).json
│ ├── ==(_:_:).json
│ ├── equatable-implementations.json
│ ├── hash(into:).json
│ ├── hashable-implementations.json
│ ├── onvaluechanged(disableactions:_:).json
│ ├── resolvingepsilon.json
│ ├── stop(resolveimmediately:postvaluechanged:).json
│ ├── supportsvelocity.json
│ ├── tovalue.json
│ ├── updatevalue(to:postvaluechanged:).json
│ ├── value.json
│ ├── valuechangedcallback.json
│ └── velocity.json
├── developer-og-twitter.jpg
├── developer-og.jpg
├── documentation
└── motion
│ ├── animation
│ ├── completion
│ │ └── index.html
│ ├── enabled
│ │ └── index.html
│ ├── enableddidchange
│ │ └── index.html
│ ├── hasresolved()
│ │ └── index.html
│ ├── index.html
│ ├── init()
│ │ └── index.html
│ ├── start()
│ │ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ │ └── index.html
│ └── tick(frame:)
│ │ └── index.html
│ ├── animationframe
│ ├── !=(_:_:)
│ │ └── index.html
│ ├── duration
│ │ └── index.html
│ ├── equatable-implementations
│ │ └── index.html
│ ├── index.html
│ ├── init(_:)
│ │ └── index.html
│ ├── init(timestamp:targettimestamp:)
│ │ └── index.html
│ ├── targettimestamp
│ │ └── index.html
│ └── timestamp
│ │ └── index.html
│ ├── animationgroup
│ ├── hasresolved()
│ │ └── index.html
│ ├── index.html
│ ├── start()
│ │ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ │ └── index.html
│ └── tick(frame:)
│ │ └── index.html
│ ├── basicanimation
│ ├── cakeyframeanimationemittable-implementations
│ │ └── index.html
│ ├── duration
│ │ └── index.html
│ ├── easingfunction
│ │ └── index.html
│ ├── fromvalue
│ │ └── index.html
│ ├── hasresolved()
│ │ └── index.html
│ ├── index.html
│ ├── init(easingfunction:)
│ │ └── index.html
│ ├── keyframeanimation(forframerate:)
│ │ └── index.html
│ ├── populatekeyframeanimationdata(dt:values:keytimes:)
│ │ └── index.html
│ ├── reset(postvaluechanged:)
│ │ └── index.html
│ ├── start()
│ │ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ │ └── index.html
│ └── tick(frame:)
│ │ └── index.html
│ ├── bezier
│ ├── !=(_:_:)
│ │ └── index.html
│ ├── equatable-implementations
│ │ └── index.html
│ ├── evaluatecurvex(t:)
│ │ └── index.html
│ ├── evaluatecurvey(t:)
│ │ └── index.html
│ ├── index.html
│ ├── init(x1:y1:x2:y2:)
│ │ └── index.html
│ ├── solve(x:epsilon:)
│ │ └── index.html
│ ├── solve(y:epsilon:)
│ │ └── index.html
│ ├── solvefort(x:epsilon:)
│ │ └── index.html
│ ├── solvefort(y:epsilon:)
│ │ └── index.html
│ ├── x1
│ │ └── index.html
│ ├── x2
│ │ └── index.html
│ ├── y1
│ │ └── index.html
│ └── y2
│ │ └── index.html
│ ├── cadisableactions(_:)
│ └── index.html
│ ├── cakeyframeanimationemittable
│ ├── index.html
│ ├── keyframeanimation(forframerate:)-9i7fl
│ │ └── index.html
│ ├── keyframeanimation(forframerate:)-9l4to
│ │ └── index.html
│ └── populatekeyframeanimationdata(dt:values:keytimes:)
│ │ └── index.html
│ ├── cakeyframeanimationvalueconvertible
│ ├── index.html
│ └── tokeyframevalue()
│ │ └── index.html
│ ├── decayanimation
│ ├── cakeyframeanimationemittable-implementations
│ │ └── index.html
│ ├── decayconstant
│ │ └── index.html
│ ├── hasresolved()
│ │ └── index.html
│ ├── index.html
│ ├── init(initialvalue:decayconstant:)
│ │ └── index.html
│ ├── keyframeanimation(forframerate:)
│ │ └── index.html
│ ├── populatekeyframeanimationdata(dt:values:keytimes:)
│ │ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ │ └── index.html
│ └── tick(frame:)
│ │ └── index.html
│ ├── decayfunction
│ ├── decayconstant
│ │ └── index.html
│ ├── index.html
│ ├── init(decayconstant:)
│ │ └── index.html
│ ├── one_ln_decayconstant_1000
│ │ └── index.html
│ ├── solve(dt:x0:velocity:)-816gf
│ │ └── index.html
│ ├── solve(dt:x0:velocity:)-8qnqq
│ │ └── index.html
│ └── solvesimd(dt:x0:velocity:)
│ │ └── index.html
│ ├── easingfunction
│ ├── !=(_:_:)
│ │ └── index.html
│ ├── bezier
│ │ └── index.html
│ ├── easein
│ │ └── index.html
│ ├── easeinout
│ │ └── index.html
│ ├── easeout
│ │ └── index.html
│ ├── equatable-implementations
│ │ └── index.html
│ ├── hash(into:)
│ │ └── index.html
│ ├── index.html
│ ├── init(bezier:)
│ │ └── index.html
│ ├── linear
│ │ └── index.html
│ ├── solveinterpolatedvalue(_:fraction:)-2ielp
│ │ └── index.html
│ ├── solveinterpolatedvalue(_:fraction:)-5aer1
│ │ └── index.html
│ └── solveinterpolatedvaluesimd(_:fraction:)
│ │ └── index.html
│ ├── equatableenough
│ ├── approximatelyequal(to:epsilon:)-131ix
│ │ └── index.html
│ ├── approximatelyequal(to:epsilon:)-4feys
│ │ └── index.html
│ ├── epsilon-2wsxb
│ │ └── index.html
│ ├── epsilon-7tu03
│ │ └── index.html
│ ├── epsilon-8u628
│ │ └── index.html
│ ├── epsilontype
│ │ └── index.html
│ └── index.html
│ ├── floatingpointinitializable
│ ├── index.html
│ ├── init(_:)-8h6ky
│ │ └── index.html
│ └── init(_:)-pp7q
│ │ └── index.html
│ ├── index.html
│ ├── mabs(_:)
│ └── index.html
│ ├── rubberband(_:coefficient:boundssize:contentsize:)
│ └── index.html
│ ├── simdrepresentable
│ ├── index.html
│ ├── init(_:)-23al6
│ │ └── index.html
│ ├── init(_:)-570oy
│ │ └── index.html
│ ├── simdrepresentation()-47m9q
│ │ └── index.html
│ ├── simdrepresentation()-97uc3
│ │ └── index.html
│ ├── simdtype
│ │ └── index.html
│ └── zero
│ │ └── index.html
│ ├── springanimation
│ ├── cakeyframeanimationemittable-implementations
│ │ └── index.html
│ ├── clampingrange
│ │ └── index.html
│ ├── configure(response:dampingratio:)
│ │ └── index.html
│ ├── configure(stiffness:damping:)
│ │ └── index.html
│ ├── damping
│ │ └── index.html
│ ├── dampingratio
│ │ └── index.html
│ ├── hasresolved()
│ │ └── index.html
│ ├── index.html
│ ├── init(initialvalue:)
│ │ └── index.html
│ ├── init(initialvalue:response:dampingratio:)
│ │ └── index.html
│ ├── init(initialvalue:stiffness:damping:)
│ │ └── index.html
│ ├── keyframeanimation(forframerate:)
│ │ └── index.html
│ ├── populatekeyframeanimationdata(dt:values:keytimes:)
│ │ └── index.html
│ ├── resolvesuponreachingtovalue
│ │ └── index.html
│ ├── response
│ │ └── index.html
│ ├── stiffness
│ │ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ │ └── index.html
│ ├── tick(frame:)
│ │ └── index.html
│ └── velocity
│ │ └── index.html
│ ├── springfunction
│ ├── configure(response:dampingratio:)
│ │ └── index.html
│ ├── configure(stiffness:damping:)
│ │ └── index.html
│ ├── damping
│ │ └── index.html
│ ├── dampingratio
│ │ └── index.html
│ ├── index.html
│ ├── init(response:dampingratio:)
│ │ └── index.html
│ ├── init(stiffness:damping:)
│ │ └── index.html
│ ├── response
│ │ └── index.html
│ ├── solve(dt:x0:velocity:)-6ic5c
│ │ └── index.html
│ ├── solve(dt:x0:velocity:)-rt6m
│ │ └── index.html
│ ├── solvesimd(dt:x0:velocity:)
│ │ └── index.html
│ ├── stiffness
│ │ └── index.html
│ ├── w0
│ │ └── index.html
│ └── wd
│ │ └── index.html
│ ├── supportedscalar
│ ├── cos(_:)
│ │ └── index.html
│ ├── exp(_:)
│ │ └── index.html
│ ├── index.html
│ ├── pow(_:_:)
│ │ └── index.html
│ └── sin(_:)
│ │ └── index.html
│ ├── supportedsimd
│ └── index.html
│ ├── uiscrollviewdecayconstant
│ └── index.html
│ ├── uiscrollviewrubberbandingconstant
│ └── index.html
│ └── valueanimation
│ ├── !=(_:_:)
│ └── index.html
│ ├── ==(_:_:)
│ └── index.html
│ ├── equatable-implementations
│ └── index.html
│ ├── hash(into:)
│ └── index.html
│ ├── hashable-implementations
│ └── index.html
│ ├── index.html
│ ├── onvaluechanged(disableactions:_:)
│ └── index.html
│ ├── resolvingepsilon
│ └── index.html
│ ├── stop(resolveimmediately:postvaluechanged:)
│ └── index.html
│ ├── supportsvelocity
│ └── index.html
│ ├── tovalue
│ └── index.html
│ ├── updatevalue(to:postvaluechanged:)
│ └── index.html
│ ├── value
│ └── index.html
│ ├── valuechangedcallback
│ └── index.html
│ └── velocity
│ └── index.html
├── favicon.ico
├── favicon.svg
├── img
├── added-icon.d6f7e47d.svg
├── deprecated-icon.015b4f17.svg
├── modified-icon.f496e73d.svg
└── no-image@2x.df2a0a50.png
├── index.html
├── index
└── index.json
├── js
├── chunk-2d0d3105.cd72cc8e.js
├── chunk-vendors.00bf82af.js
├── documentation-topic.3bc2eb6f.js
├── documentation-topic~topic~tutorials-overview.bd94ab17.js
├── highlight-js-bash.1b52852f.js
├── highlight-js-c.d1db3f17.js
├── highlight-js-cpp.eaddddbe.js
├── highlight-js-css.75eab1fe.js
├── highlight-js-custom-markdown.7cffc4b3.js
├── highlight-js-custom-swift.a62dfec9.js
├── highlight-js-diff.62d66733.js
├── highlight-js-http.163e45b6.js
├── highlight-js-java.8326d9d8.js
├── highlight-js-javascript.acb8a8eb.js
├── highlight-js-json.471128d2.js
├── highlight-js-llvm.6100b125.js
├── highlight-js-markdown.90077643.js
├── highlight-js-objectivec.bcdf5156.js
├── highlight-js-perl.757d7b6f.js
├── highlight-js-php.cc8d6c27.js
├── highlight-js-python.c214ed92.js
├── highlight-js-ruby.f889d392.js
├── highlight-js-scss.62ee18da.js
├── highlight-js-shell.dd7f411f.js
├── highlight-js-swift.84f3e88c.js
├── highlight-js-xml.9c3688c7.js
├── index.c37d1972.js
├── topic.897e6b8e.js
└── tutorials-overview.abddae14.js
├── metadata.json
└── theme-settings.json
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: b3ll
4 |
--------------------------------------------------------------------------------
/.github/workflows/create-release.yml:
--------------------------------------------------------------------------------
1 | name: Create Release
2 |
3 | # Create xcframework when a version is tagged
4 | on:
5 | create:
6 | tags:
7 |
8 | jobs:
9 | create_release:
10 | name: Create Release
11 | runs-on: macos-14
12 | steps:
13 | - uses: maxim-lobanov/setup-xcode@v1
14 | with:
15 | xcode-version: latest-stable
16 | - uses: actions/checkout@v2
17 |
18 | - run: ${GITHUB_WORKSPACE}/build_xcframework.sh
19 |
20 | - name: Create Release
21 | id: create_release
22 | uses: actions/create-release@v1
23 | env:
24 | GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
25 | with:
26 | tag_name: ${{ github.ref }}
27 | release_name: Release ${{ github.ref }}
28 | draft: false
29 | prerelease: false
30 |
31 | - name: Upload Release Asset
32 | id: upload-release-asset
33 | uses: actions/upload-release-asset@v1
34 | env:
35 | GITHUB_TOKEN: ${{ secrets.GH_ACCESS_TOKEN }}
36 | with:
37 | upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
38 | asset_path: ./Motion.zip
39 | asset_name: Motion.zip
40 | asset_content_type: application/zip
41 |
--------------------------------------------------------------------------------
/.github/workflows/docc-docs.yml:
--------------------------------------------------------------------------------
1 | name: Docs
2 |
3 | on: [push]
4 |
5 | jobs:
6 | deploy_docs:
7 | runs-on: macos-14
8 | steps:
9 | - uses: actions/checkout@v2
10 |
11 | - name: Setup Swift 5.9
12 | uses: swift-actions/setup-swift@v1
13 | with:
14 | swift-version: '5.9'
15 |
16 | - name: Build Docs
17 | uses: sersoft-gmbh/swifty-docs-action@v3.0.0
18 | with:
19 | output: docs
20 | targets: Motion
21 | enable-index-building: false
22 | transform-for-static-hosting: true
23 | hosting-base-path: Motion
24 |
25 | - name: Deploy to GitHub Pages
26 | uses: peaceiris/actions-gh-pages@v3
27 | with:
28 | github_token: ${{ secrets.GH_ACCESS_TOKEN }}
29 | publish_dir: ./docs
30 |
--------------------------------------------------------------------------------
/.github/workflows/swift.yml:
--------------------------------------------------------------------------------
1 | name: Tests
2 |
3 | on:
4 | push:
5 | branches: [main]
6 | pull_request:
7 | branches: [main]
8 |
9 | jobs:
10 | build:
11 | runs-on: macos-14
12 |
13 | steps:
14 | - uses: actions/checkout@v2
15 | - name: Build
16 | run: swift build -v
17 | - name: Run tests
18 | run: swift test -v
19 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | xcuserdata/
5 | /.swiftpm
6 | Pods
7 | Benchmark/Packages
8 | Benchmark/.build
9 | Benchmark/.swiftpm
10 | Resources/deprecated/MotionLogo-Dark.mov
11 | Resources/deprecated/MotionLogo-Light.mov
12 | build
13 | Motion.zip
14 |
--------------------------------------------------------------------------------
/Benchmark/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Benchmark/.swiftpm/xcode/xcshareddata/xcschemes/MotionBenchmark.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
44 |
50 |
51 |
57 |
58 |
59 |
60 |
62 |
63 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/Benchmark/.swiftpm/xcode/xcshareddata/xcschemes/MotionBenchmarkRunner.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
32 |
33 |
43 |
45 |
51 |
52 |
53 |
54 |
60 |
62 |
68 |
69 |
70 |
71 |
73 |
74 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/Benchmark/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "object": {
3 | "pins": [
4 | {
5 | "package": "swift-argument-parser",
6 | "repositoryURL": "https://github.com/apple/swift-argument-parser",
7 | "state": {
8 | "branch": null,
9 | "revision": "92646c0cdbaca076c8d3d0207891785b3379cbff",
10 | "version": "0.3.1"
11 | }
12 | },
13 | {
14 | "package": "Benchmark",
15 | "repositoryURL": "https://github.com/google/swift-benchmark",
16 | "state": {
17 | "branch": null,
18 | "revision": "8e0ef8bb7482ab97dcd2cd1d6855bd38921c345d",
19 | "version": "0.1.0"
20 | }
21 | },
22 | {
23 | "package": "swift-numerics",
24 | "repositoryURL": "https://github.com/apple/swift-numerics",
25 | "state": {
26 | "branch": null,
27 | "revision": "0a5bc04095a675662cf24757cc0640aa2204253b",
28 | "version": "1.0.2"
29 | }
30 | }
31 | ]
32 | },
33 | "version": 1
34 | }
35 |
--------------------------------------------------------------------------------
/Benchmark/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.3
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "MotionBenchmark",
8 | platforms: [
9 | .iOS(.v13),
10 | .tvOS(.v13),
11 | .macOS(.v10_15),
12 | ],
13 | products: [
14 | // Products define the executables and libraries a package produces, and make them visible to other packages.
15 | .library(
16 | name: "MotionBenchmark",
17 | targets: ["MotionBenchmark"]),
18 | ],
19 | dependencies: [
20 | // Dependencies declare other packages that this package depends on.
21 | .package(name: "Motion", path: "../"),
22 | .package(name: "Benchmark", url: "https://github.com/google/swift-benchmark", from: "0.1.0"),
23 | ],
24 | targets: [
25 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
26 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
27 | .target(
28 | name: "MotionBenchmark",
29 | dependencies: [
30 | "Motion",
31 | "Benchmark",
32 | ]),
33 | .target(
34 | name: "MotionBenchmarkRunner",
35 | dependencies: [
36 | "MotionBenchmark",
37 | ]),
38 | ],
39 | swiftLanguageVersions: [.v5]
40 | )
41 |
--------------------------------------------------------------------------------
/Benchmark/Sources/MotionBenchmarkRunner/main.swift:
--------------------------------------------------------------------------------
1 | //
2 | // main.swift
3 | //
4 | //
5 | // Created by Adam Bell on 11/24/20.
6 | //
7 |
8 | import Foundation
9 | import Benchmark
10 | import Motion
11 | import MotionBenchmark
12 |
13 | #if os(macOS)
14 | RunBenchmark()
15 | #endif
16 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "object": {
3 | "pins": [
4 | {
5 | "package": "swift-argument-parser",
6 | "repositoryURL": "https://github.com/apple/swift-argument-parser",
7 | "state": {
8 | "branch": null,
9 | "revision": "92646c0cdbaca076c8d3d0207891785b3379cbff",
10 | "version": "0.3.1"
11 | }
12 | },
13 | {
14 | "package": "Benchmark",
15 | "repositoryURL": "https://github.com/google/swift-benchmark",
16 | "state": {
17 | "branch": null,
18 | "revision": "8e0ef8bb7482ab97dcd2cd1d6855bd38921c345d",
19 | "version": "0.1.0"
20 | }
21 | },
22 | {
23 | "package": "SwiftDocCPlugin",
24 | "repositoryURL": "https://github.com/apple/swift-docc-plugin",
25 | "state": {
26 | "branch": null,
27 | "revision": "3303b164430d9a7055ba484c8ead67a52f7b74f6",
28 | "version": "1.0.0"
29 | }
30 | },
31 | {
32 | "package": "swift-numerics",
33 | "repositoryURL": "https://github.com/apple/swift-numerics",
34 | "state": {
35 | "branch": null,
36 | "revision": "0a5bc04095a675662cf24757cc0640aa2204253b",
37 | "version": "1.0.2"
38 | }
39 | }
40 | ]
41 | },
42 | "version": 1
43 | }
44 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 8/25/20.
6 | //
7 |
8 | // no u
9 |
10 | import Motion
11 | import MotionBenchmark
12 | import UIKit
13 |
14 | public let MotionBlue = UIColor(red: 0.47, green: 0.80, blue: 0.99, alpha: 1.00)
15 |
16 | @main
17 | class AppDelegate: UIResponder, UIApplicationDelegate {
18 |
19 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
20 | // Override point for customization after application launch.
21 | if CommandLine.arguments.contains("--benchmark") {
22 | DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
23 | RunBenchmark()
24 | }
25 | }
26 |
27 | return true
28 | }
29 |
30 | // MARK: UISceneSession Lifecycle
31 |
32 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
33 | // Called when a new scene session is being created.
34 | // Use this method to select a configuration to create the new scene with.
35 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
36 | }
37 |
38 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
39 | // Called when the user discards a scene session.
40 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
41 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
42 | }
43 |
44 |
45 | }
46 |
47 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "scale" : "2x",
6 | "size" : "20x20"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "scale" : "3x",
11 | "size" : "20x20"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "scale" : "2x",
16 | "size" : "29x29"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "scale" : "3x",
21 | "size" : "29x29"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "scale" : "2x",
26 | "size" : "40x40"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "scale" : "3x",
31 | "size" : "40x40"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "scale" : "2x",
36 | "size" : "60x60"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "scale" : "3x",
41 | "size" : "60x60"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "scale" : "1x",
46 | "size" : "20x20"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "scale" : "2x",
51 | "size" : "20x20"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "scale" : "1x",
56 | "size" : "29x29"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "scale" : "2x",
61 | "size" : "29x29"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "scale" : "1x",
66 | "size" : "40x40"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "scale" : "2x",
71 | "size" : "40x40"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "scale" : "1x",
76 | "size" : "76x76"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "scale" : "2x",
81 | "size" : "76x76"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "scale" : "2x",
86 | "size" : "83.5x83.5"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "scale" : "1x",
91 | "size" : "1024x1024"
92 | }
93 | ],
94 | "info" : {
95 | "author" : "xcode",
96 | "version" : 1
97 | }
98 | }
99 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/BouncyViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 8/25/20.
6 | //
7 |
8 | import Motion
9 | import UIKit
10 |
11 | internal class BouncyView: UIView {
12 |
13 | lazy var spring: SpringAnimation = {
14 | let animation = SpringAnimation(initialValue: 1.0)
15 | animation.configure(response: 0.4, dampingRatio: 0.4)
16 | animation.onValueChanged(disableActions: true) { [weak self] (newValue) in
17 | self?.layer.transform = CATransform3DMakeScale(newValue, newValue, 1.0)
18 | }
19 | return animation
20 | }()
21 |
22 | override var bounds: CGRect {
23 | didSet {
24 | self.layer.cornerRadius = bounds.size.width / 2.0
25 | }
26 | }
27 |
28 | override func touchesBegan(_ touches: Set, with event: UIEvent?) {
29 | super.touchesBegan(touches, with: event)
30 |
31 | spring.toValue = 0.5
32 | spring.start()
33 | }
34 |
35 | override func touchesEnded(_ touches: Set, with event: UIEvent?) {
36 | super.touchesEnded(touches, with: event)
37 |
38 | spring.toValue = 1.0
39 | spring.velocity = 50.0
40 | spring.start()
41 | }
42 |
43 | override func touchesCancelled(_ touches: Set, with event: UIEvent?) {
44 | super.touchesCancelled(touches, with: event)
45 |
46 | spring.toValue = 1.0
47 | spring.velocity = 0.0
48 | spring.start()
49 | }
50 |
51 | }
52 |
53 | class BouncyViewController: UIViewController {
54 |
55 | fileprivate var bouncyView: BouncyView!
56 |
57 | override func viewDidLoad() {
58 | super.viewDidLoad()
59 |
60 | self.bouncyView = BouncyView(frame: .zero)
61 | bouncyView.backgroundColor = MotionBlue
62 | view.addSubview(bouncyView)
63 | }
64 |
65 | override func viewDidLayoutSubviews() {
66 | super.viewDidLayoutSubviews()
67 |
68 | bouncyView.bounds = CGRect(x: 0.0, y: 0.0, width: 88.0, height: 88.0)
69 | bouncyView.layer.position = CGPoint(x: view.bounds.size.width / 2.0, y: view.bounds.size.height / 2.0)
70 | }
71 |
72 | }
73 |
74 | import SwiftUI
75 |
76 | public struct BouncyDemo: UIViewControllerRepresentable {
77 |
78 | public func makeUIViewController(context: Context) -> some UIViewController {
79 | return BouncyViewController(nibName: nil, bundle: nil)
80 | }
81 |
82 | public func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
83 |
84 | }
85 |
86 | }
87 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/DraggableViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DraggableViewViewController.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 12/11/20.
6 | //
7 |
8 | import Motion
9 | import UIKit
10 |
11 | class DraggableViewController: UIViewController {
12 |
13 | let draggableView = UIView(frame: .zero)
14 | let spring = SpringAnimation(response: 0.8, dampingRatio: 0.5)
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | draggableView.layer.masksToBounds = true
20 | draggableView.backgroundColor = MotionBlue
21 | view.addSubview(draggableView)
22 |
23 | let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(didPan(_:)))
24 | draggableView.addGestureRecognizer(panGestureRecognizer)
25 |
26 | draggableView.center = view.center
27 | }
28 |
29 | override func viewDidLayoutSubviews() {
30 | super.viewDidLayoutSubviews()
31 |
32 | draggableView.bounds.size = CGSize(width: 64.0, height: 64.0)
33 | draggableView.layer.cornerRadius = draggableView.bounds.size.height / 2.0
34 | }
35 |
36 | @objc private func didPan(_ gestureRecognizer: UIPanGestureRecognizer) {
37 | switch gestureRecognizer.state {
38 | case .began:
39 | spring.stop()
40 | case .changed:
41 | draggableView.center = gestureRecognizer.location(in: view)
42 | spring.updateValue(to: draggableView.center)
43 | case .ended, .cancelled:
44 | spring.onValueChanged { [weak self] newValue in
45 | self?.draggableView.center = newValue
46 | }
47 | spring.velocity = gestureRecognizer.velocity(in: view)
48 | spring.toValue = view.center
49 | spring.start()
50 | default:
51 | break
52 | }
53 | }
54 |
55 | }
56 |
57 | import SwiftUI
58 |
59 | struct DraggableDemo: UIViewControllerRepresentable {
60 |
61 | func makeUIViewController(context: Context) -> some UIViewController {
62 | return DraggableViewController(nibName: nil, bundle: nil)
63 | }
64 |
65 | func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
66 |
67 | }
68 |
69 | }
70 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UIApplicationSceneManifest
24 |
25 | UIApplicationSupportsMultipleScenes
26 |
27 | UISceneConfigurations
28 |
29 | UIWindowSceneSessionRoleApplication
30 |
31 |
32 | UISceneConfigurationName
33 | Default Configuration
34 | UISceneDelegateClassName
35 | $(PRODUCT_MODULE_NAME).SceneDelegate
36 | UISceneStoryboardFile
37 | Main
38 |
39 |
40 |
41 |
42 | UIApplicationSupportsIndirectInputEvents
43 |
44 | UILaunchStoryboardName
45 | LaunchScreen
46 | UIMainStoryboardFile
47 | Main
48 | UIRequiredDeviceCapabilities
49 |
50 | armv7
51 |
52 | UISupportedInterfaceOrientations
53 |
54 | UIInterfaceOrientationPortrait
55 | UIInterfaceOrientationLandscapeLeft
56 | UIInterfaceOrientationLandscapeRight
57 |
58 | UISupportedInterfaceOrientations~ipad
59 |
60 | UIInterfaceOrientationPortrait
61 | UIInterfaceOrientationPortraitUpsideDown
62 | UIInterfaceOrientationLandscapeLeft
63 | UIInterfaceOrientationLandscapeRight
64 |
65 | CADisableMinimumFrameDurationOnPhone
66 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 8/25/20.
6 | //
7 |
8 | import UIKit
9 |
10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
11 |
12 | var window: UIWindow?
13 |
14 |
15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
19 | guard let _ = (scene as? UIWindowScene) else { return }
20 | }
21 |
22 | func sceneDidDisconnect(_ scene: UIScene) {
23 | // Called as the scene is being released by the system.
24 | // This occurs shortly after the scene enters the background, or when its session is discarded.
25 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
27 | }
28 |
29 | func sceneDidBecomeActive(_ scene: UIScene) {
30 | // Called when the scene has moved from an inactive state to an active state.
31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
32 | }
33 |
34 | func sceneWillResignActive(_ scene: UIScene) {
35 | // Called when the scene will move from an active state to an inactive state.
36 | // This may occur due to temporary interruptions (ex. an incoming phone call).
37 | }
38 |
39 | func sceneWillEnterForeground(_ scene: UIScene) {
40 | // Called as the scene transitions from the background to the foreground.
41 | // Use this method to undo the changes made on entering the background.
42 | }
43 |
44 | func sceneDidEnterBackground(_ scene: UIScene) {
45 | // Called as the scene transitions from the foreground to the background.
46 | // Use this method to save data, release shared resources, and store enough scene-specific state information
47 | // to restore the scene back to its current state.
48 | }
49 |
50 |
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/ScrollViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DecayViewController.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 12/12/20.
6 | //
7 |
8 | import Motion
9 | import UIKit
10 |
11 | class ScrollViewController: UIViewController {
12 |
13 | let scrollView = CustomCustomScrollView(frame: .zero)
14 | let label = UILabel(frame: .zero)
15 |
16 | override func viewDidLoad() {
17 | super.viewDidLoad()
18 |
19 | label.font = UIFont.monospacedSystemFont(ofSize: 12.0, weight: .regular)
20 | label.text = try? String(contentsOfFile: Bundle.main.path(forResource: "ScrollViewContents", ofType: "txt")!)
21 | label.numberOfLines = 0
22 |
23 | scrollView.scrollsHorizontally = false
24 | scrollView.addSubview(label)
25 |
26 | view.addSubview(scrollView)
27 | }
28 |
29 | override func viewDidLayoutSubviews() {
30 | super.viewDidLayoutSubviews()
31 |
32 | label.frame.size = label.sizeThatFits(CGSize(width: view.bounds.size.width, height: .greatestFiniteMagnitude))
33 | scrollView.frame = view.bounds
34 | scrollView.contentSize = CGSize(width: view.bounds.size.width, height: label.bounds.size.height)
35 | }
36 |
37 | }
38 |
39 | import SwiftUI
40 |
41 | struct ScrollViewDemo: UIViewControllerRepresentable {
42 |
43 | func makeUIViewController(context: Context) -> some UIViewController {
44 | return ScrollViewController(nibName: nil, bundle: nil)
45 | }
46 |
47 | func updateUIViewController(_ uiViewController: UIViewControllerType, context: Context) {
48 |
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/Example/MotionExample-iOS/MotionExample-iOS/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // MotionExample-iOS
4 | //
5 | // Created by Adam Bell on 12/11/20.
6 | //
7 |
8 | import Foundation
9 | import UIKit
10 | import SwiftUI
11 |
12 | struct RootView: View {
13 |
14 | var body: some View {
15 | NavigationView {
16 | List {
17 | NavigationLink(destination: BouncyDemo().navigationTitle("Bouncy Demo")) {
18 | Text("Bouncy Demo")
19 | }
20 | NavigationLink(destination: DraggableDemo().navigationTitle("Dragging Demo")) {
21 | Text("Dragging Demo")
22 | }
23 | NavigationLink(destination: ScrollViewDemo().navigationTitle("ScrollView Demo")) {
24 | Text("ScrollView Demo")
25 | }
26 | NavigationLink(destination: SwiftUIDemoView().navigationTitle("SwiftUI Demo")) {
27 | Text("SwiftUI Demo")
28 | }
29 | }
30 | .navigationBarTitle("Motion Demos", displayMode: .large)
31 | }
32 | }
33 |
34 | }
35 |
36 | class ViewController: UIHostingController {
37 |
38 | @objc required dynamic init?(coder aDecoder: NSCoder) {
39 | super.init(rootView: RootView())
40 | }
41 |
42 | }
43 |
44 | struct RootView_Previews: PreviewProvider {
45 |
46 | static var previews: some View {
47 | RootView()
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 2-Clause License
2 |
3 | Copyright (c) 2020, Adam Bell
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |
--------------------------------------------------------------------------------
/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "pins" : [
3 | {
4 | "identity" : "swift-docc-plugin",
5 | "kind" : "remoteSourceControl",
6 | "location" : "https://github.com/apple/swift-docc-plugin",
7 | "state" : {
8 | "revision" : "26ac5758409154cc448d7ab82389c520fa8a8247",
9 | "version" : "1.3.0"
10 | }
11 | },
12 | {
13 | "identity" : "swift-docc-symbolkit",
14 | "kind" : "remoteSourceControl",
15 | "location" : "https://github.com/apple/swift-docc-symbolkit",
16 | "state" : {
17 | "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34",
18 | "version" : "1.0.0"
19 | }
20 | },
21 | {
22 | "identity" : "swift-numerics",
23 | "kind" : "remoteSourceControl",
24 | "location" : "https://github.com/apple/swift-numerics",
25 | "state" : {
26 | "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b",
27 | "version" : "1.0.2"
28 | }
29 | }
30 | ],
31 | "version" : 2
32 | }
33 |
--------------------------------------------------------------------------------
/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version:5.9
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "Motion",
8 | platforms: [
9 | .iOS(.v13),
10 | .tvOS(.v13),
11 | .macOS(.v10_14),
12 | .visionOS(.v1)
13 | ],
14 | products: [
15 | // Products define the executables and libraries a package produces, and make them visible to other packages.
16 | .library(
17 | name: "Motion",
18 | targets: ["Motion"]),
19 | .library(
20 | name: "Graphing",
21 | targets: ["Graphing"]),
22 | ],
23 | dependencies: [
24 | // Dependencies declare other packages that this package depends on.
25 | .package(url: "https://github.com/apple/swift-numerics", from: "1.0.0"),
26 | .package(url: "https://github.com/apple/swift-docc-plugin", from: "1.0.0"),
27 | ],
28 | targets: [
29 | // Targets are the basic building blocks of a package. A target can define a module or a test suite.
30 | // Targets can depend on other targets in this package, and on products in packages this package depends on.
31 | .target(
32 | name: "Motion",
33 | dependencies: [
34 | .product(name: "RealModule", package: "swift-numerics"),
35 | ]),
36 | .testTarget(
37 | name: "MotionTests",
38 | dependencies: ["Motion"]),
39 | .target(
40 | name: "Graphing",
41 | dependencies: [
42 | "Motion",
43 | ]),
44 | ],
45 | swiftLanguageVersions: [.v5]
46 | )
47 |
--------------------------------------------------------------------------------
/Resources/MotionLogo-Dark-Cropped.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark-Cropped.gif
--------------------------------------------------------------------------------
/Resources/MotionLogo-Dark.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark.gif
--------------------------------------------------------------------------------
/Resources/MotionLogo-Dark.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Dark.mp4
--------------------------------------------------------------------------------
/Resources/MotionLogo-Light-Cropped.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light-Cropped.gif
--------------------------------------------------------------------------------
/Resources/MotionLogo-Light.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light.gif
--------------------------------------------------------------------------------
/Resources/MotionLogo-Light.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/MotionLogo-Light.mp4
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved:
--------------------------------------------------------------------------------
1 | {
2 | "pins" : [
3 | {
4 | "identity" : "decomposed",
5 | "kind" : "remoteSourceControl",
6 | "location" : "https://github.com/b3ll/Decomposed",
7 | "state" : {
8 | "branch" : "main",
9 | "revision" : "225ec7726a70ae586a5e0d65b450551d4f15b298"
10 | }
11 | },
12 | {
13 | "identity" : "swift-docc-plugin",
14 | "kind" : "remoteSourceControl",
15 | "location" : "https://github.com/apple/swift-docc-plugin",
16 | "state" : {
17 | "revision" : "10bc670db657d11bdd561e07de30a9041311b2b1",
18 | "version" : "1.1.0"
19 | }
20 | },
21 | {
22 | "identity" : "swift-docc-symbolkit",
23 | "kind" : "remoteSourceControl",
24 | "location" : "https://github.com/apple/swift-docc-symbolkit",
25 | "state" : {
26 | "revision" : "b45d1f2ed151d057b54504d653e0da5552844e34",
27 | "version" : "1.0.0"
28 | }
29 | },
30 | {
31 | "identity" : "swift-numerics",
32 | "kind" : "remoteSourceControl",
33 | "location" : "https://github.com/apple/swift-numerics",
34 | "state" : {
35 | "revision" : "0a5bc04095a675662cf24757cc0640aa2204253b",
36 | "version" : "1.0.2"
37 | }
38 | }
39 | ],
40 | "version" : 2
41 | }
42 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // MotionMovieMaker
4 | //
5 | // Created by Adam Bell on 1/28/23.
6 | //
7 |
8 | import UIKit
9 |
10 | @main
11 | class AppDelegate: UIResponder, UIApplicationDelegate {
12 |
13 | // Run this with a iPad Pro Simulator for best results.
14 |
15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
16 | // Override point for customization after application launch.
17 | return true
18 | }
19 |
20 | // MARK: UISceneSession Lifecycle
21 |
22 | func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
23 | // Called when a new scene session is being created.
24 | // Use this method to select a configuration to create the new scene with.
25 | return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
26 | }
27 |
28 | func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) {
29 | // Called when the user discards a scene session.
30 | // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
31 | // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
32 | }
33 |
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "platform" : "ios",
6 | "size" : "1024x1024"
7 | }
8 | ],
9 | "info" : {
10 | "author" : "xcode",
11 | "version" : 1
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/BouncyView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BouncyView.swift
3 | // MotionMovieMaker
4 | //
5 | // Created by Adam Bell on 1/28/23.
6 | //
7 |
8 | import Motion
9 | import UIKit
10 |
11 | public let MotionBlue = UIColor(red: 0.0/255.0, green: 212.0/255.0, blue: 255.0/255.0, alpha: 1.0)
12 |
13 | public class BouncyView: UIView {
14 |
15 | lazy var spring: SpringAnimation = {
16 | let animation = SpringAnimation(initialValue: 1.0)
17 | animation.configure(response: 0.4, dampingRatio: 0.4)
18 | animation.onValueChanged(disableActions: true) { [weak self] (newValue) in
19 | self?.layer.transform = CATransform3DMakeScale(newValue, newValue, 1.0)
20 | }
21 | return animation
22 | }()
23 |
24 | public override init(frame: CGRect) {
25 | super.init(frame: frame)
26 |
27 | self.backgroundColor = MotionBlue
28 | }
29 |
30 | required init?(coder: NSCoder) {
31 | fatalError("init(coder:) has not been implemented")
32 | }
33 |
34 | public override var bounds: CGRect {
35 | didSet {
36 | self.layer.cornerRadius = bounds.size.width / 2.0
37 | }
38 | }
39 |
40 | public override func touchesBegan(_ touches: Set, with event: UIEvent?) {
41 | super.touchesBegan(touches, with: event)
42 |
43 | spring.toValue = 0.5
44 | spring.start()
45 | }
46 |
47 | public override func touchesEnded(_ touches: Set, with event: UIEvent?) {
48 | super.touchesEnded(touches, with: event)
49 |
50 | spring.toValue = 1.0
51 | spring.velocity = 50.0
52 | spring.start()
53 | }
54 |
55 | public override func touchesCancelled(_ touches: Set, with event: UIEvent?) {
56 | super.touchesCancelled(touches, with: event)
57 |
58 | spring.toValue = 1.0
59 | spring.velocity = 0.0
60 | spring.start()
61 | }
62 |
63 | }
64 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | UIApplicationSceneManifest
6 |
7 | UIApplicationSupportsMultipleScenes
8 |
9 | UISceneConfigurations
10 |
11 | UIWindowSceneSessionRoleApplication
12 |
13 |
14 | UISceneConfigurationName
15 | Default Configuration
16 | UISceneDelegateClassName
17 | $(PRODUCT_MODULE_NAME).SceneDelegate
18 | UISceneStoryboardFile
19 | Main
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/MotionMovieMaker-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | //
2 | // Use this file to import your target's public headers that you would like to expose to Swift.
3 | //
4 |
--------------------------------------------------------------------------------
/Resources/MotionMovieMaker/MotionMovieMaker/SceneDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SceneDelegate.swift
3 | // MotionMovieMaker
4 | //
5 | // Created by Adam Bell on 1/28/23.
6 | //
7 |
8 | import UIKit
9 |
10 | class SceneDelegate: UIResponder, UIWindowSceneDelegate {
11 |
12 | var window: UIWindow?
13 |
14 |
15 | func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
16 | // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
17 | // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
18 | // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
19 | guard let _ = (scene as? UIWindowScene) else { return }
20 | }
21 |
22 | func sceneDidDisconnect(_ scene: UIScene) {
23 | // Called as the scene is being released by the system.
24 | // This occurs shortly after the scene enters the background, or when its session is discarded.
25 | // Release any resources associated with this scene that can be re-created the next time the scene connects.
26 | // The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
27 | }
28 |
29 | func sceneDidBecomeActive(_ scene: UIScene) {
30 | // Called when the scene has moved from an inactive state to an active state.
31 | // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
32 | }
33 |
34 | func sceneWillResignActive(_ scene: UIScene) {
35 | // Called when the scene will move from an active state to an inactive state.
36 | // This may occur due to temporary interruptions (ex. an incoming phone call).
37 | }
38 |
39 | func sceneWillEnterForeground(_ scene: UIScene) {
40 | // Called as the scene transitions from the background to the foreground.
41 | // Use this method to undo the changes made on entering the background.
42 | }
43 |
44 | func sceneDidEnterBackground(_ scene: UIScene) {
45 | // Called as the scene transitions from the foreground to the background.
46 | // Use this method to save data, release shared resources, and store enough scene-specific state information
47 | // to restore the scene back to its current state.
48 | }
49 |
50 |
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/Resources/deprecated/Motion-Logo-Rendered-Optimized~olde.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered-Optimized~olde.gif
--------------------------------------------------------------------------------
/Resources/deprecated/Motion-Logo-Rendered.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered.gif
--------------------------------------------------------------------------------
/Resources/deprecated/Motion-Logo-Rendered.m4v:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered.m4v
--------------------------------------------------------------------------------
/Resources/deprecated/Motion-Logo-Rendered~dark.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered~dark.gif
--------------------------------------------------------------------------------
/Resources/deprecated/Motion-Logo-Rendered~olde.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/Motion-Logo-Rendered~olde.gif
--------------------------------------------------------------------------------
/Resources/deprecated/MotionLogo-Dark-Cropped.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Dark-Cropped.gif
--------------------------------------------------------------------------------
/Resources/deprecated/MotionLogo-Dark.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Dark.gif
--------------------------------------------------------------------------------
/Resources/deprecated/MotionLogo-Light-Cropped.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Light-Cropped.gif
--------------------------------------------------------------------------------
/Resources/deprecated/MotionLogo-Light.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Resources/deprecated/MotionLogo-Light.gif
--------------------------------------------------------------------------------
/Resources/deprecated/render_files.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rm MotionLogo-Light.gif
4 | rm MotionLogo-Light-Cropped.gif
5 | rm MotionLogo-Dark.gif
6 | rm MotionLogo-Dark-Cropped.gif
7 |
8 | gifski --fps 50 --extra --width 1920 --height 1080 -o MotionLogo-Light.gif MotionLogo-Light.mov
9 |
10 | gifsicle --crop 180,400+1560x280 --output MotionLogo-Light-Cropped.gif MotionLogo-Light.gif
11 |
12 | gifski --fps 50 --extra --width 1920 --height 1080 -o MotionLogo-Dark.gif MotionLogo-Dark.mov
13 |
14 | gifsicle --crop 180,400+1560x280 --output MotionLogo-Dark-Cropped.gif MotionLogo-Dark.gif
15 |
--------------------------------------------------------------------------------
/Resources/render_files.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | rm -f MotionLogo-Light.mp4 || true
4 | rm -f MotionLogo-Light.gif || true
5 | rm -f MotionLogo-Light-Cropped.gif || true
6 |
7 | rm -f MotionLogo-Dark.mp4 || true
8 | rm -f MotionLogo-Dark.gif || true
9 | rm -f MotionLogo-Dark-Cropped.gif || true
10 |
11 | # light
12 |
13 | ffmpeg -r 60 -pattern_type glob -i "light/*.png" -c:v libx265 -x265-params lossless=1 MotionLogo-Light.mp4
14 |
15 | gifski --fps 50 --width 2732 --height 2048 --extra --quality 100 --motion-quality 100 --lossy-quality 100 --repeat 0 -o MotionLogo-Light.gif MotionLogo-Light.mp4
16 |
17 | gifsicle --crop 000,640+2732x768 --output MotionLogo-Light-Cropped.gif MotionLogo-Light.gif
18 |
19 | # dark
20 |
21 | ffmpeg -r 60 -pattern_type glob -i "dark/*.png" -c:v libx265 -x265-params lossless=1 MotionLogo-Dark.mp4
22 |
23 | gifski --fps 50 --width 2732 --height 2048 --extra --quality 100 --motion-quality 100 --lossy-quality 100 --repeat 0 -o MotionLogo-Dark.gif MotionLogo-Dark.mp4
24 |
25 | gifsicle --crop 000,640+2732x768 --output MotionLogo-Dark-Cropped.gif MotionLogo-Dark.gif
26 |
--------------------------------------------------------------------------------
/Sources/Graphing/CurveGrapher.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EasingFunctionGraphView.swift
3 | //
4 | //
5 | // Created by Adam Bell on 8/28/20.
6 | //
7 |
8 | #if canImport(SwiftUI)
9 |
10 | import Motion
11 | import CoreGraphics
12 | import SwiftUI
13 |
14 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *)
15 | struct Graph_Previews: PreviewProvider {
16 |
17 | static var previews: some View {
18 | Group {
19 | ValueAnimationGraphView_Previews.previews
20 | EasingFunctionGraphView_Previews.previews
21 | }
22 | }
23 |
24 | }
25 |
26 | #endif
27 |
--------------------------------------------------------------------------------
/Sources/Graphing/EasingFunctionGraph.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SwiftUIView.swift
3 | //
4 | //
5 | // Created by Adam Bell on 12/6/20.
6 | //
7 |
8 | #if canImport(SwiftUI)
9 |
10 | import Motion
11 | import SwiftUI
12 |
13 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *)
14 | public struct EasingFunctionShape: Shape {
15 |
16 | public let easingFunction: EasingFunction
17 |
18 | public init(_ easingFunction: EasingFunction) {
19 | self.easingFunction = easingFunction
20 | }
21 |
22 | public func path(in rect: CGRect) -> Path {
23 | let pointCount = rect.size.width * 3.0
24 |
25 | let points: [CGPoint] = stride(from: 0.0, to: pointCount, by: 1.0).map { (i) -> CGPoint in
26 | let percent = CGFloat(i) / CGFloat(pointCount)
27 |
28 | let minY = rect.size.height * 0.15
29 | let maxY = rect.size.height * 0.85
30 |
31 | let value = easingFunction.solveInterpolatedValue(minY...maxY, fraction: Double(percent))
32 |
33 | return CGPoint(x: percent * rect.size.width, y: value)
34 | }
35 |
36 | var path = Path()
37 | path.addLines(points)
38 | return path
39 | }
40 |
41 | }
42 |
43 | public extension EasingFunction {
44 |
45 | static var allFunctions: [EasingFunction] {
46 | return [.linear, .easeIn, .easeOut, .easeInOut, Self(bezier: Bezier(x1: 0.42, y1: 0.0, x2: 0.58, y2: 1.0))]
47 | }
48 |
49 | }
50 |
51 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *)
52 | public struct EasingFunctionGraphView: View {
53 |
54 | public let easingFunction: EasingFunction
55 |
56 | public var body: some View {
57 | ZStack {
58 | Rectangle()
59 | .foregroundColor(.black)
60 |
61 | EasingFunctionShape(easingFunction)
62 | .stroke(lineWidth: 4.0)
63 | .foregroundColor(.blue)
64 | .padding(12.0)
65 |
66 | }
67 | .frame(width: 320.0, height: 320.0, alignment: /*@START_MENU_TOKEN@*/.center/*@END_MENU_TOKEN@*/)
68 | }
69 |
70 | }
71 |
72 | @available(iOS 14.0, macOS 11.0, tvOS 14.0, *)
73 | struct EasingFunctionGraphView_Previews: PreviewProvider {
74 |
75 | static var previews: some View {
76 | Group {
77 | ForEach(EasingFunction.allFunctions, id: \.self) { easingFunction in
78 | EasingFunctionGraphView(easingFunction: easingFunction)
79 | .previewLayout(.sizeThatFits)
80 | }
81 | }
82 | }
83 |
84 | }
85 |
86 | #endif
87 |
--------------------------------------------------------------------------------
/Sources/Motion/Animations/AnimationGroup.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AnimationGroup.swift
3 | //
4 | //
5 | // Created by Adam Bell on 9/1/20.
6 | //
7 |
8 | import Foundation
9 |
10 | /**
11 | This class allows for grouping and running animations in parallel.
12 |
13 | - Note: I'm still debating whether or not this is needed. All animations run in parallel by default anyways, so this is just a more explicit grouping.
14 | It is largely untested / unfinished, and will most likely undergo a lot of changes to be useable.
15 | This class works assuming that all animations added to it are not started / stopped outside of this animation group, doing so is unsupported.
16 | */
17 | public final class AnimationGroup: Animation {
18 |
19 | /// The animations that are to run as a group.
20 | let animations: [Animation]
21 |
22 | /**
23 | Initializes the animation group with an array of animations.
24 |
25 | - Parameters:
26 | - animations: The animations to run as a group.
27 | */
28 | init(environment: AnimationEnvironment = .default, _ animations: Animation...) {
29 | self.animations = animations
30 | super.init(environment: environment)
31 | }
32 |
33 | /// Returns whether or not all of the animations have resolved.
34 | public override func hasResolved() -> Bool {
35 | return animations.reduce(true) { (result, animation) -> Bool in
36 | return result && animation.hasResolved()
37 | }
38 | }
39 |
40 | /// Starts the animation group. Animating each animation in the group sequentially each frame.
41 | public override func start() {
42 | animations.forEach { $0.stop() }
43 |
44 | self.enabled = true
45 | }
46 |
47 | /**
48 | Stops the animation group.
49 |
50 | - Parameters:
51 | - resolveImmediately: Whether or not all the animations should jump to their end value without animation. Defaults to `false`.
52 | - postValueChanged: If `true` is supplied for `resolveImmediately`, this controls whether not `valueChanged` will be called for each animation upon changing its value.
53 | */
54 | public override func stop(resolveImmediately: Bool = false, postValueChanged: Bool = false) {
55 | if !resolveImmediately {
56 | super.stop()
57 | } else {
58 | self.enabled = false
59 |
60 | animations.forEach { $0.stop(resolveImmediately: resolveImmediately, postValueChanged: postValueChanged) }
61 | completion?()
62 | }
63 | }
64 |
65 | // MARK: - AnimationDriverObserver
66 |
67 | public override func tick(frame: AnimationFrame) {
68 | if frame.duration > 1.0 {
69 | return
70 | }
71 |
72 | animations.forEach { $0.tick(frame: frame) }
73 |
74 | if !hasResolved() {
75 | stop()
76 | completion?()
77 | }
78 | }
79 |
80 | }
81 |
82 |
--------------------------------------------------------------------------------
/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered.gif
--------------------------------------------------------------------------------
/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered~dark.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/Sources/Motion/Documentation.docc/Resources/Motion-Logo-Rendered~dark.gif
--------------------------------------------------------------------------------
/Sources/Motion/Protocols/AnimationEnvironment.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | #if os(macOS)
4 | import AppKit
5 | import CoreGraphics
6 | #else
7 | public typealias CGDirectDisplayID = UInt32
8 | #endif
9 |
10 | /**
11 | Adopted by types that can provide an ``Animator`` to drive Motion animations in a given environment.
12 |
13 | - Note: The animation environment is only relevant for native Mac apps.
14 | On iOS, you don't have to specify an animation environment and using ``AnimationEnvironment/default`` will always work.
15 | */
16 | public protocol AnimationEnvironment: AnyObject {
17 | /// The ``Animator`` type to be used for animations in this environment.
18 | var animator: Animator { get }
19 |
20 | #if os(macOS)
21 | /// Identifier for the CoreGraphics display represented by this environment.
22 | var displayID: CGDirectDisplayID? { get }
23 |
24 | /// The preferred FPS for animations running in this environment.
25 | var preferredFramesPerSecond: Int { get }
26 | #endif
27 | }
28 |
29 | public extension AnimationEnvironment where Self == DefaultAnimationEnvironment {
30 | /**
31 | The default animation environment for the current device.
32 |
33 | On iOS, this will be the shared animator.
34 |
35 | On macOS, this will be the environment representing the main screen (`NSScreen.main`).
36 |
37 | - Warning: On macOS, you should always provide the most specific animation environment available
38 | when initializing an animation, such as the `NSView` where the animation will be rendered.
39 | Failing to do so may result in animations that don't use the optimal frame rate for the Mac's screen,
40 | or assertion failures in debug builds when an environment can't be inferred automatically.
41 | - SeeAlso: To learn more about environment specificity on macOS, see the documentation for ``AnimationEnvironmentProxy``.
42 | */
43 | static var `default`: AnimationEnvironment { DefaultAnimationEnvironment.shared }
44 | }
45 |
46 | // MARK: - iOS Stubs
47 |
48 | #if canImport(UIKit)
49 | public extension AnimationEnvironment {
50 | var animator: Animator { Animator.shared }
51 | }
52 |
53 | public final class DefaultAnimationEnvironment: AnimationEnvironment {
54 | public static let shared = DefaultAnimationEnvironment()
55 | }
56 | #endif
57 |
--------------------------------------------------------------------------------
/Sources/Motion/Utilities/CoreAnimationHelpers.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CoreAnimationHelpers.swift
3 | //
4 | //
5 | // Created by Adam Bell on 12/8/20.
6 | //
7 |
8 | import Foundation
9 | import QuartzCore
10 |
11 | /**
12 | Helper method to disable all implicitly created animations inside the supplied block.
13 |
14 | - Parameters:
15 | - block: The block that, when run, will have a new `CATransaction` created for it and will disable actions, which will be committed after the block completes.
16 | */
17 | public func CADisableActions(_ block: () -> Void) {
18 | CATransaction.begin()
19 | CATransaction.setDisableActions(true)
20 |
21 | block()
22 |
23 | CATransaction.commit()
24 | }
25 |
26 | public extension CALayer {
27 |
28 | /**
29 | Adds a supported animation conforming to `CAKeyframeAnimationEmittable` to a given `CALayer`.
30 |
31 | This method generates a pre-configured `CAKeyframeAnimation` from the supplied animation and adds it to the supplied layer, animating the given key path.
32 |
33 | - Parameters:
34 | - animation: An animation that conforms to `CAKeyframeAnimationEmittable`.
35 | - key: The key to be associated with the generated `CAKeyframeAnimation` when added to the layer.
36 | - keyPath: The key path to animate. The key path is relative to the layer.
37 | */
38 | func add(_ animation: CAKeyframeAnimationEmittable, forKey key: String, keyPath: String) {
39 | if keyPath.isEmpty {
40 | assertionFailure("The keyPath must not be nil.")
41 | return
42 | }
43 |
44 | let keyframeAnimation = animation.keyframeAnimation(forFramerate: nil)
45 | keyframeAnimation.keyPath = keyPath
46 | add(keyframeAnimation, forKey: key)
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/Sources/Motion/Utilities/NSScreen+AnimationEnvironment.swift:
--------------------------------------------------------------------------------
1 | #if os(macOS)
2 | import AppKit
3 |
4 | public final class DefaultAnimationEnvironment: NSScreen {
5 | public static var shared: AnimationEnvironment {
6 | guard let screen = NSScreen.main ?? NSScreen.screens.first else {
7 | fatalError("Motion can't run because this Mac doesn't have a screen")
8 | }
9 | return screen
10 | }
11 | }
12 |
13 | extension NSScreen: AnimationEnvironment {
14 | private var environmentStorage: AnimationEnvironmentStorage { AnimationEnvironmentStorage.shared }
15 |
16 | public var animator: Animator { environmentStorage.animator(for: self) }
17 |
18 | public var displayID: CGDirectDisplayID? {
19 | guard let number = deviceDescription[.screenNumber] as? NSNumber else {
20 | assertionFailure("NSScreenNumber for \(self) is not an NSNumber")
21 | return nil
22 | }
23 | return number.uint32Value
24 | }
25 |
26 | public var preferredFramesPerSecond: Int {
27 | guard #available(macOS 12.0, *) else { return 60 }
28 | let fps = maximumFramesPerSecond
29 | guard fps > 0 else { return 60 }
30 | return fps
31 | }
32 | }
33 |
34 | private extension NSDeviceDescriptionKey {
35 | static let screenNumber = NSDeviceDescriptionKey("NSScreenNumber")
36 | }
37 |
38 | private final class AnimationEnvironmentStorage {
39 | static let shared = AnimationEnvironmentStorage()
40 |
41 | private var animatorsByDisplayID = [CGDirectDisplayID: Animator]()
42 |
43 | func animator(for screen: NSScreen) -> Animator {
44 | guard let displayID = screen.displayID else {
45 | fatalError("Motion failed to get the CGDirectDisplayID for screen \(screen)")
46 | }
47 |
48 | if let existingAnimator = animatorsByDisplayID[displayID] {
49 | return existingAnimator
50 | } else {
51 | let newAnimator = Animator(environment: screen)
52 | animatorsByDisplayID[displayID] = newAnimator
53 | return newAnimator
54 | }
55 | }
56 | }
57 | #endif
58 |
--------------------------------------------------------------------------------
/Sources/Motion/Utilities/RubberBanding.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RubberBanding.swift
3 | //
4 | //
5 | // Created by Adam Bell on 8/27/20.
6 | //
7 |
8 | import Foundation
9 | import QuartzCore
10 |
11 | /// The standard rubberbanding constant for `UIScrollView`.
12 | public let UIScrollViewRubberBandingConstant = 0.55
13 |
14 | /**
15 | Rubberbands a floating point value based on a given coefficient and range.
16 |
17 | - Parameters:
18 | - value: The floating point value to rubberband.
19 | - coefficient: A multiplier to decay the value when it's being rubberbanded. Defaults to `UIScrollViewRubberBandingConstant`.
20 | - boundsSize: The viewport dimension (i.e. the bounds along the axis of a scroll view)).
21 | - contentSize: The size of the content over which the value won't rubberband (i.e. the contentSize along the axis of a scroll view).
22 |
23 | ```
24 | bounds.origin.x = rubberband(bounds.origin.x - translation.x, boundsSize: bounds.size.width, contentSize: contentSize.width)
25 | ```
26 |
27 | - Note: See `CustomCustomScrollView` in the example project for more a more complete example on how to use this.
28 | */
29 | public func rubberband(_ value: Value, coefficient: Value = Value(UIScrollViewRubberBandingConstant), boundsSize: Value, contentSize: Value) -> Value {
30 | var exceededContentsPositively = false
31 | let x: Value
32 | if (value + boundsSize) > contentSize {
33 | x = abs(contentSize - boundsSize - value)
34 | exceededContentsPositively = true
35 | } else if value < 0.0 {
36 | x = -value
37 | } else {
38 | return value
39 | }
40 |
41 | // (1.0 - (1.0 / ((x * c / d) + 1.0))) * d
42 |
43 | // Without this, the swift type checker is super slow.
44 | let x1 = (x * coefficient / boundsSize) + 1.0
45 |
46 | let rubberBandedAmount = ((1.0 - (1.0 / x1)) * boundsSize)
47 |
48 | // We're beyond the range
49 | if exceededContentsPositively {
50 | return rubberBandedAmount + contentSize - boundsSize
51 | } else { // We're beyond the range in the opposite direction
52 | return -rubberBandedAmount
53 | }
54 | }
55 |
56 | // TODO: SIMD variants at some point. It's kinda tricky.
57 |
--------------------------------------------------------------------------------
/Sources/Motion/Utilities/Synchronized.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | final class Synchronized {
4 | private var data: Wrapped
5 | private var lock = NSLock()
6 |
7 | init(data: Wrapped) {
8 | self.data = data
9 | }
10 |
11 | var value: Wrapped {
12 | get {
13 | with { data in
14 | data
15 | }
16 | }
17 | set {
18 | with { data in
19 | data = newValue
20 | }
21 | }
22 | }
23 |
24 | func with(_ body: (inout Wrapped) throws -> T) rethrows -> T {
25 | lock.lock()
26 | defer { lock.unlock() }
27 | return try body(&self.data)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Tests/LinuxMain.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 |
3 | import MotionTests
4 |
5 | var tests = [XCTestCaseEntry]()
6 | tests += MotionTests.allTests()
7 | XCTMain(tests)
8 |
--------------------------------------------------------------------------------
/build_docs.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | swift package --allow-writing-to-directory docs generate-documentation --target Motion --disable-indexing --transform-for-static-hosting --hosting-base-path Motion --output-path docs
4 | swift package --disable-sandbox preview-documentation --target Motion
5 |
--------------------------------------------------------------------------------
/build_xcframework.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | pushd "$( dirname -- "$0"; )"
4 |
5 | rm -rf build/output
6 | rm -rf Motion.zip
7 |
8 | mkdir -p build
9 |
10 | git clone https://github.com/giginet/Scipio.git build/scipio
11 |
12 | pushd build/scipio
13 |
14 | swift run -c release scipio create ../../ --enable-library-evolution --support-simulators --only-use-versions-from-resolved-file --output ../output --verbose
15 |
16 | zip -r ../../Motion.zip ../output/Motion.xcframework
17 |
18 | popd
19 | popd
20 |
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animation/enableddidchange.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/enableddidchange"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/enabledDidChange","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"title":"enabledDidChange","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion9AnimationC16enabledDidChangeyySbcvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation/enabledDidChange":{"role":"symbol","title":"enabledDidChange","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"enabledDidChange"},{"kind":"text","text":": ("},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/enabledDidChange","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/enableddidchange"},"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animation/hasresolved().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Determines whether or not the animation should be considered resolved, or at rest."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion9AnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Determines whether or not the animation should be considered resolved, or at rest."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/hasresolved()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animation/init().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/init()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/init()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Default initializer. Animations must be strongly held to continue to animate."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"()"}],"title":"init()","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion9AnimationCACycfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Animation/init()":{"role":"symbol","title":"init()","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Default initializer. Animations must be strongly held to continue to animate."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/init()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/init()"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animation/start().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animation\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Animation\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Starts the animation if "},{"type":"codeVoice","code":"hasResolved"},{"type":"text","text":" is false."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion9AnimationC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Animation"]]},"references":{"doc://Motion/documentation/Motion/Animation":{"role":"symbol","title":"Animation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"Animation"}],"abstract":[{"type":"text","text":"This class acts as the base class for all animations within "},{"type":"codeVoice","code":"Motion"},{"type":"text","text":". It doesn’t do much, other than serve as a base class for all animations to inherit from and implement."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Animation"}],"url":"\/documentation\/motion\/animation"},"doc://Motion/documentation/Motion/Animation/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Starts the animation if "},{"type":"codeVoice","code":"hasResolved"},{"type":"text","text":" is false."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Animation\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animation\/start()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationframe/duration.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/duration"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/duration","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The current duration between last frame and target frame."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"duration","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV8durationSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/duration":{"role":"symbol","title":"duration","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The current duration between last frame and target frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/duration","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/duration"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationframe/equatable-implementations.json:
--------------------------------------------------------------------------------
1 | {"variants":[{"paths":["\/documentation\/motion\/animationframe\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/!=(_:_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationframe/init(_:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"dt"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/init(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/init(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"title":"init(_:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion14AnimationFrameVyACSdcfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/init(_:)":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/init(_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/init(_:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationframe/targettimestamp.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/targettimestamp"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/targetTimestamp","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The timestamp that represents when the next frame displays."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"targetTimestamp","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV15targetTimestampSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion/AnimationFrame/targetTimestamp":{"role":"symbol","title":"targetTimestamp","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"targetTimestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The timestamp that represents when the next frame displays."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/targetTimestamp","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/targettimestamp"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationframe/timestamp.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationframe\/timestamp"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/timestamp","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The timestamp that the frame started."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"timestamp","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14AnimationFrameV9timestampSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationFrame"]]},"references":{"doc://Motion/documentation/Motion/AnimationFrame":{"role":"symbol","title":"AnimationFrame","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationFrame"}],"abstract":[{"type":"text","text":"Timestamps for the current animation frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationFrame"}],"url":"\/documentation\/motion\/animationframe"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationFrame/timestamp":{"role":"symbol","title":"timestamp","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"timestamp"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"The timestamp that the frame started."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationFrame\/timestamp","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationframe\/timestamp"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationgroup/hasresolved().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationgroup\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not all of the animations have resolved."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14AnimationGroupC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationGroup"]]},"references":{"doc://Motion/documentation/Motion/AnimationGroup":{"role":"symbol","title":"AnimationGroup","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationGroup"}],"abstract":[{"type":"text","text":"This class allows for grouping and running animations in parallel."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationGroup"}],"url":"\/documentation\/motion\/animationgroup"},"doc://Motion/documentation/Motion/AnimationGroup/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not all of the animations have resolved."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationgroup\/hasresolved()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/animationgroup/start().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/animationgroup\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Starts the animation group. Animating each animation in the group sequentially each frame."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14AnimationGroupC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/AnimationGroup"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/AnimationGroup/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[{"type":"text","text":"Starts the animation group. Animating each animation in the group sequentially each frame."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/animationgroup\/start()"},"doc://Motion/documentation/Motion/AnimationGroup":{"role":"symbol","title":"AnimationGroup","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"AnimationGroup"}],"abstract":[{"type":"text","text":"This class allows for grouping and running animations in parallel."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/AnimationGroup","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"AnimationGroup"}],"url":"\/documentation\/motion\/animationgroup"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/basicanimation/duration.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Supplying negative values here"}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/duration"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/duration","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"How long, in seconds, the animation should take."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"title":"duration","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14BasicAnimationC8durationSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion/BasicAnimation/duration":{"role":"symbol","title":"duration","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"duration"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"CFTimeInterval","preciseIdentifier":"c:@T@CFTimeInterval"}],"abstract":[{"type":"text","text":"How long, in seconds, the animation should take."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/duration","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/duration"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/basicanimation/fromvalue.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/fromvalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/fromValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The starting point of the animation. Defaults to "},{"type":"codeVoice","code":".zero"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"fromValue","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14BasicAnimationC9fromValuexvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation/fromValue":{"role":"symbol","title":"fromValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"fromValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The starting point of the animation. Defaults to "},{"type":"codeVoice","code":".zero"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/fromValue","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/fromvalue"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/basicanimation/hasresolved().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not this animation has resolved."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14BasicAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not this animation has resolved."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/hasresolved()"},"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/basicanimation/start().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/basicanimation\/start()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/start()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Inherited from "},{"type":"codeVoice","code":"Animation.start()"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"title":"start()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14BasicAnimationC5startyyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/BasicAnimation"]]},"references":{"doc://Motion/documentation/Motion/BasicAnimation":{"role":"symbol","title":"BasicAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"BasicAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on basic curves (i.e. "},{"type":"codeVoice","code":"EasingFunction.easeIn"},{"type":"text","text":", "},{"type":"codeVoice","code":"EasingFunction.easeInOut"},{"type":"text","text":", etc.)."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"BasicAnimation"}],"url":"\/documentation\/motion\/basicanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/BasicAnimation/start()":{"role":"symbol","title":"start()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"start"},{"kind":"text","text":"()"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/BasicAnimation\/start()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/basicanimation\/start()"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/equatable-implementations.json:
--------------------------------------------------------------------------------
1 | {"variants":[{"paths":["\/documentation\/motion\/bezier\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/Bezier\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/!=(_:_:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/evaluatecurvex(t:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/evaluatecurvex(t:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveX(t:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"x(t)"},{"type":"text","text":" for the bezier curve function."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"evaluateCurveX(t:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion6BezierV14evaluateCurveX1txx_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/evaluateCurveX(t:)":{"role":"symbol","title":"evaluateCurveX(t:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveX"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"x(t)"},{"type":"text","text":" for the bezier curve function."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveX(t:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/evaluatecurvex(t:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/evaluatecurvey(t:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/evaluatecurvey(t:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveY(t:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"y(t)"},{"type":"text","text":" for the bezier curve function."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"evaluateCurveY(t:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion6BezierV14evaluateCurveY1txx_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/evaluateCurveY(t:)":{"role":"symbol","title":"evaluateCurveY(t:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"evaluateCurveY"},{"kind":"text","text":"("},{"kind":"externalParam","text":"t"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"Evaluates "},{"type":"codeVoice","code":"y(t)"},{"type":"text","text":" for the bezier curve function."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/evaluateCurveY(t:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/evaluatecurvey(t:)"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/x1.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/x1"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x1","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The x value of the first point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"x1","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2x1xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/x1":{"role":"symbol","title":"x1","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The x value of the first point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x1","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/x1"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/x2.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/x2"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x2","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The y value of the first point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"x2","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2x2xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier/x2":{"role":"symbol","title":"x2","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"x2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The y value of the first point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/x2","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/x2"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/y1.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/y1"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y1","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The x value of the second point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"y1","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2y1xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"},"doc://Motion/documentation/Motion/Bezier/y1":{"role":"symbol","title":"y1","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y1"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The x value of the second point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y1","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/y1"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/bezier/y2.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/bezier\/y2"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y2","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The y value of the second point."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"title":"y2","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion6BezierV2y2xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/Bezier"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/Bezier/y2":{"role":"symbol","title":"y2","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"y2"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The y value of the second point."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier\/y2","kind":"symbol","type":"topic","url":"\/documentation\/motion\/bezier\/y2"},"doc://Motion/documentation/Motion/Bezier":{"role":"symbol","title":"Bezier","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"Bezier"}],"abstract":[{"type":"text","text":"A Swift adaptation of UnitBezier from WebKit: https:\/\/opensource.apple.com\/source\/WebCore\/WebCore-955.66\/platform\/graphics\/UnitBezier.h"}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/Bezier","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"Bezier"}],"url":"\/documentation\/motion\/bezier"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/cadisableactions(_:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"block"},{"kind":"text","text":": () -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"parameters","parameters":[{"name":"block","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"The block that, when run, will have a new "},{"type":"codeVoice","code":"CATransaction"},{"type":"text","text":" created for it and will disable actions, which will be committed after the block completes."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/cadisableactions(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/CADisableActions(_:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Helper method to disable all implicitly created animations inside the supplied block."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"(() -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"title":"CADisableActions(_:)","roleHeading":"Function","role":"symbol","symbolKind":"func","externalID":"s:6Motion16CADisableActionsyyyyXEF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion/CADisableActions(_:)":{"role":"symbol","title":"CADisableActions(_:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"CADisableActions"},{"kind":"text","text":"(() -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Helper method to disable all implicitly created animations inside the supplied block."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CADisableActions(_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/cadisableactions(_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/cakeyframeanimationvalueconvertible/tokeyframevalue().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/cakeyframeanimationvalueconvertible\/tokeyframevalue()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible\/toKeyframeValue()","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"toKeyframeValue()","roleHeading":"Instance Method","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"symbolKind":"method","externalID":"s:6Motion35CAKeyframeAnimationValueConvertibleP010toKeyframeD0yXlyF","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible"]]},"references":{"doc://Motion/documentation/Motion/CAKeyframeAnimationValueConvertible/toKeyframeValue()":{"role":"symbol","title":"toKeyframeValue()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"toKeyframeValue"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"AnyObject","preciseIdentifier":"s:s9AnyObjecta"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible\/toKeyframeValue()","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/cakeyframeanimationvalueconvertible\/tokeyframevalue()"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/CAKeyframeAnimationValueConvertible":{"role":"symbol","title":"CAKeyframeAnimationValueConvertible","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"CAKeyframeAnimationValueConvertible"}],"abstract":[{"type":"text","text":"A protocol for types to supply the ability to convert themselves into "},{"type":"codeVoice","code":"NSValue"},{"type":"text","text":" or "},{"type":"codeVoice","code":"NSNumber"},{"type":"text","text":" for use with "},{"type":"codeVoice","code":"CAKeyframeAnimation"},{"type":"text","text":". This is required for "},{"type":"codeVoice","code":"CAKeyframeAnimationEmittable"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/CAKeyframeAnimationValueConvertible","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"CAKeyframeAnimationValueConvertible"}],"url":"\/documentation\/motion\/cakeyframeanimationvalueconvertible"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/decayanimation/hasresolved().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/decayanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not the animation has resolved. It is considered resolved when its velocity reaches zero."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14DecayAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/DecayAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/DecayAnimation":{"role":"symbol","title":"DecayAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"DecayAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate types that conform to "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" based on decay functions."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"DecayAnimation"}],"url":"\/documentation\/motion\/decayanimation"},"doc://Motion/documentation/Motion/DecayAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not the animation has resolved. It is considered resolved when its velocity reaches zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/DecayAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/decayanimation\/hasresolved()"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/easingfunction/equatable-implementations.json:
--------------------------------------------------------------------------------
1 | {"variants":[{"paths":["\/documentation\/motion\/easingfunction\/equatable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/Equatable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Operators","identifiers":["doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/!=(_:_:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Equatable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/EasingFunction"]]},"references":{"doc://Motion/documentation/Motion/EasingFunction":{"role":"symbol","title":"EasingFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"EasingFunction"}],"abstract":[{"type":"text","text":"An easing function powered by a "},{"type":"codeVoice","code":"Bezier"},{"type":"text","text":" that can be used with a "},{"type":"codeVoice","code":"BasicAnimation"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"EasingFunction"}],"url":"\/documentation\/motion\/easingfunction"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/EasingFunction/!=(_:_:)":{"role":"symbol","title":"!=(_:_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"!="},{"kind":"text","text":" "},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":", "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/!=(_:_:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/easingfunction\/!=(_:_:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/easingfunction/hash(into:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":" "},{"kind":"internalParam","text":"hasher"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/easingfunction\/hash(into:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/hash(into:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Hashes this easing curve into a hash."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"title":"hash(into:)","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion14EasingFunctionV4hash4intoys6HasherVz_tF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/EasingFunction"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/EasingFunction":{"role":"symbol","title":"EasingFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"EasingFunction"}],"abstract":[{"type":"text","text":"An easing function powered by a "},{"type":"codeVoice","code":"Bezier"},{"type":"text","text":" that can be used with a "},{"type":"codeVoice","code":"BasicAnimation"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"EasingFunction"}],"url":"\/documentation\/motion\/easingfunction"},"doc://Motion/documentation/Motion/EasingFunction/hash(into:)":{"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Hashes this easing curve into a hash."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/EasingFunction\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/easingfunction\/hash(into:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/floatingpointinitializable/init(_:)-8h6ky.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/floatingpointinitializable\/init(_:)-8h6ky"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-8h6ky","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"init(_:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"symbolKind":"init","externalID":"s:6Motion26FloatingPointInitializablePyxSfcfc","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable"]]},"references":{"doc://Motion/documentation/Motion/FloatingPointInitializable/init(_:)-8h6ky":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Float","preciseIdentifier":"s:Sf"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-8h6ky","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/floatingpointinitializable\/init(_:)-8h6ky"},"doc://Motion/documentation/Motion/FloatingPointInitializable":{"role":"symbol","title":"FloatingPointInitializable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"FloatingPointInitializable"}],"abstract":[{"type":"text","text":"A protocol that describes something that can be initialized by a floating point value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"FloatingPointInitializable"}],"url":"\/documentation\/motion\/floatingpointinitializable"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/floatingpointinitializable/init(_:)-pp7q.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/floatingpointinitializable\/init(_:)-pp7q"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-pp7q","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"init(_:)","roleHeading":"Initializer","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"symbolKind":"init","externalID":"s:6Motion26FloatingPointInitializablePyxSdcfc","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/FloatingPointInitializable/init(_:)-pp7q":{"role":"symbol","title":"init(_:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable\/init(_:)-pp7q","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/floatingpointinitializable\/init(_:)-pp7q"},"doc://Motion/documentation/Motion/FloatingPointInitializable":{"role":"symbol","title":"FloatingPointInitializable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"FloatingPointInitializable"}],"abstract":[{"type":"text","text":"A protocol that describes something that can be initialized by a floating point value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/FloatingPointInitializable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"FloatingPointInitializable"}],"url":"\/documentation\/motion\/floatingpointinitializable"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/simdrepresentable/zero.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/simdrepresentable\/zero"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable\/zero","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A version of "},{"type":"codeVoice","code":"self"},{"type":"text","text":" that represents zero."}],"kind":"symbol","metadata":{"role":"symbol","title":"zero","roleHeading":"Type Property","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"property","externalID":"s:6Motion17SIMDRepresentableP4zeroxvpZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable"]]},"references":{"doc://Motion/documentation/Motion/SIMDRepresentable":{"role":"symbol","title":"SIMDRepresentable","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SIMDRepresentable"}],"abstract":[{"type":"text","text":"A protocol that defines how something that can be represented \/ stored in a "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" type as well as instantiated from said "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" type."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SIMDRepresentable"}],"url":"\/documentation\/motion\/simdrepresentable"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SIMDRepresentable/zero":{"role":"symbol","title":"zero","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"zero"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[{"type":"text","text":"A version of "},{"type":"codeVoice","code":"self"},{"type":"text","text":" that represents zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SIMDRepresentable\/zero","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/simdrepresentable\/zero"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/springanimation/hasresolved().json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/hasresolved()"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/hasResolved()","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not the spring animation has resolved. It is considered resolved when the "},{"type":"codeVoice","code":"toValue"},{"type":"text","text":" is reached, and "},{"type":"codeVoice","code":"velocity"},{"type":"text","text":" is zero."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"hasResolved()","roleHeading":"Instance Method","role":"symbol","symbolKind":"method","externalID":"s:6Motion15SpringAnimationC11hasResolvedSbyF","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringAnimation/hasResolved()":{"role":"symbol","title":"hasResolved()","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hasResolved"},{"kind":"text","text":"() -> "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not the spring animation has resolved. It is considered resolved when the "},{"type":"codeVoice","code":"toValue"},{"type":"text","text":" is reached, and "},{"type":"codeVoice","code":"velocity"},{"type":"text","text":" is zero."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/hasResolved()","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/hasresolved()"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/springanimation/init(initialvalue:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" = .zero)"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"parameters","parameters":[{"name":"initialValue","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"The value to start animating from."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/init(initialvalue:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/init(initialValue:)","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Initializes a "},{"type":"codeVoice","code":"SpringAnimation"},{"type":"text","text":" with an optional initial value."}],"kind":"symbol","metadata":{"fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":")"}],"title":"init(initialValue:)","roleHeading":"Initializer","role":"symbol","symbolKind":"init","externalID":"s:6Motion15SpringAnimationC12initialValueACyxGx_tcfc","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringAnimation/init(initialValue:)":{"role":"symbol","title":"init(initialValue:)","fragments":[{"kind":"identifier","text":"init"},{"kind":"text","text":"("},{"kind":"externalParam","text":"initialValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":")"}],"abstract":[{"type":"text","text":"Initializes a "},{"type":"codeVoice","code":"SpringAnimation"},{"type":"text","text":" with an optional initial value."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/init(initialValue:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/init(initialvalue:)"},"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/springanimation/velocity.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springanimation\/velocity"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/velocity","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The velocity of the animation. Setting this before calling "},{"type":"codeVoice","code":"start"},{"type":"text","text":" will cause the spring animation to be seeded with that velocity, and then the velocity will decay over time."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"velocity","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion15SpringAnimationC8velocityxvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringAnimation"]]},"references":{"doc://Motion/documentation/Motion/SpringAnimation":{"role":"symbol","title":"SpringAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" using a physically-modeled spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringAnimation"}],"url":"\/documentation\/motion\/springanimation"},"doc://Motion/documentation/Motion/SpringAnimation/velocity":{"role":"symbol","title":"velocity","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"velocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The velocity of the animation. Setting this before calling "},{"type":"codeVoice","code":"start"},{"type":"text","text":" will cause the spring animation to be seeded with that velocity, and then the velocity will decay over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringAnimation\/velocity","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springanimation\/velocity"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/springfunction/w0.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"},{"kind":"text","text":" { get }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/springfunction\/w0"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction\/w0","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The undamped angular frequency of the spring."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"}],"title":"w0","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14SpringFunctionV2w08SIMDType_6ScalarQZvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SpringFunction"]]},"references":{"doc://Motion/documentation/Motion/SpringFunction":{"role":"symbol","title":"SpringFunction","fragments":[{"kind":"keyword","text":"struct"},{"kind":"text","text":" "},{"kind":"identifier","text":"SpringFunction"}],"abstract":[{"type":"text","text":"This class provides an interface to use various optimized implementations of the analytic versions of spring functions with "},{"type":"codeVoice","code":"SupportedSIMD"},{"type":"text","text":" and "},{"type":"codeVoice","code":"Value"},{"type":"text","text":" types."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SpringFunction"}],"url":"\/documentation\/motion\/springfunction"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SpringFunction/w0":{"role":"symbol","title":"w0","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"w0"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"Scalar"}],"abstract":[{"type":"text","text":"The undamped angular frequency of the spring."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SpringFunction\/w0","kind":"symbol","type":"topic","url":"\/documentation\/motion\/springfunction\/w0"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/supportedscalar/cos(_:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/cos(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/cos(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"cos(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3cosyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"},"doc://Motion/documentation/Motion/SupportedScalar/cos(_:)":{"role":"symbol","title":"cos(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"cos"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/cos(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/cos(_:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/supportedscalar/exp(_:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/exp(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/exp(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"exp(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3expyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"},"doc://Motion/documentation/Motion/SupportedScalar/exp(_:)":{"role":"symbol","title":"exp(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"exp"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/exp(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/exp(_:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/supportedscalar/sin(_:).json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"override"},{"kind":"text","text":" "},{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"externalParam","text":"_"},{"kind":"text","text":" "},{"kind":"internalParam","text":"x"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/supportedscalar\/sin(_:)"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/sin(_:)","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"role":"symbol","title":"sin(_:)","roleHeading":"Type Method","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"symbolKind":"method","externalID":"s:6Motion15SupportedScalarP3sinyxxFZ","required":true,"modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/SupportedScalar"]]},"references":{"doc://Motion/documentation/Motion/SupportedScalar/sin(_:)":{"role":"symbol","title":"sin(_:)","fragments":[{"kind":"keyword","text":"static"},{"kind":"text","text":" "},{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"sin"},{"kind":"text","text":"("},{"kind":"typeIdentifier","text":"Self"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Self"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar\/sin(_:)","kind":"symbol","required":true,"type":"topic","url":"\/documentation\/motion\/supportedscalar\/sin(_:)"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/SupportedScalar":{"role":"symbol","title":"SupportedScalar","fragments":[{"kind":"keyword","text":"protocol"},{"kind":"text","text":" "},{"kind":"identifier","text":"SupportedScalar"}],"abstract":[{"type":"text","text":"A protocol that defines supported "},{"type":"codeVoice","code":"SIMD"},{"type":"text","text":" Scalar types that conform to "},{"type":"codeVoice","code":"FloatingPointInitializable"},{"type":"text","text":", "},{"type":"codeVoice","code":"EquatableEnough"},{"type":"text","text":", and are "},{"type":"codeVoice","code":"RealModule.Real"},{"type":"text","text":" numbers."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/SupportedScalar","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"SupportedScalar"}],"url":"\/documentation\/motion\/supportedscalar"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/uiscrollviewdecayconstant.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/uiscrollviewdecayconstant"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewDecayConstant","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The standard decay constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"title":"UIScrollViewDecayConstant","roleHeading":"Global Variable","role":"symbol","symbolKind":"var","externalID":"s:6Motion25UIScrollViewDecayConstantSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/UIScrollViewDecayConstant":{"role":"symbol","title":"UIScrollViewDecayConstant","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewDecayConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"abstract":[{"type":"text","text":"The standard decay constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewDecayConstant","kind":"symbol","type":"topic","url":"\/documentation\/motion\/uiscrollviewdecayconstant"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/uiscrollviewrubberbandingconstant.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/uiscrollviewrubberbandingconstant"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewRubberBandingConstant","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The standard rubberbanding constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"title":"UIScrollViewRubberBandingConstant","roleHeading":"Global Variable","role":"symbol","symbolKind":"var","externalID":"s:6Motion33UIScrollViewRubberBandingConstantSdvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion"]]},"references":{"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/UIScrollViewRubberBandingConstant":{"role":"symbol","title":"UIScrollViewRubberBandingConstant","fragments":[{"kind":"keyword","text":"let"},{"kind":"text","text":" "},{"kind":"identifier","text":"UIScrollViewRubberBandingConstant"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Double","preciseIdentifier":"s:Sd"}],"abstract":[{"type":"text","text":"The standard rubberbanding constant for "},{"type":"codeVoice","code":"UIScrollView"},{"type":"text","text":"."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/UIScrollViewRubberBandingConstant","kind":"symbol","type":"topic","url":"\/documentation\/motion\/uiscrollviewrubberbandingconstant"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/hashable-implementations.json:
--------------------------------------------------------------------------------
1 | {"variants":[{"paths":["\/documentation\/motion\/valueanimation\/hashable-implementations"],"traits":[{"interfaceLanguage":"swift"}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/Hashable-Implementations","interfaceLanguage":"swift"},"topicSections":[{"title":"Instance Methods","identifiers":["doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/hash(into:)"],"generated":true}],"kind":"article","metadata":{"modules":[{"name":"Motion"}],"role":"collectionGroup","title":"Hashable Implementations"},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/ValueAnimation/hash(into:)":{"conformance":{"constraints":[{"type":"codeVoice","code":"Value"},{"type":"text","text":" conforms to "},{"type":"codeVoice","code":"SIMDRepresentable"},{"type":"text","text":"."}],"availabilityPrefix":[{"type":"text","text":"Available when"}],"conformancePrefix":[{"type":"text","text":"Conforms when"}]},"role":"symbol","title":"hash(into:)","fragments":[{"kind":"keyword","text":"func"},{"kind":"text","text":" "},{"kind":"identifier","text":"hash"},{"kind":"text","text":"("},{"kind":"externalParam","text":"into"},{"kind":"text","text":": "},{"kind":"keyword","text":"inout"},{"kind":"text","text":" "},{"kind":"typeIdentifier","text":"Hasher","preciseIdentifier":"s:s6HasherV"},{"kind":"text","text":")"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/hash(into:)","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/hash(into:)"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/resolvingepsilon.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/resolvingepsilon"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/resolvingEpsilon","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The default tolerance level for an animation to be considered finished."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"title":"resolvingEpsilon","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC16resolvingEpsilon8SIMDType_0E4TypeQZvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/resolvingEpsilon":{"role":"symbol","title":"resolvingEpsilon","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"resolvingEpsilon"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"SIMDType"},{"kind":"text","text":"."},{"kind":"typeIdentifier","text":"EpsilonType"}],"abstract":[{"type":"text","text":"The default tolerance level for an animation to be considered finished."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/resolvingEpsilon","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/resolvingepsilon"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/supportsvelocity.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/supportsvelocity"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/supportsVelocity","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"Returns whether or not this class supports velocity."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"title":"supportsVelocity","roleHeading":"Type Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC16supportsVelocitySbvpZ","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/supportsVelocity":{"role":"symbol","title":"supportsVelocity","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"supportsVelocity"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Bool","preciseIdentifier":"s:Sb"}],"abstract":[{"type":"text","text":"Returns whether or not this class supports velocity."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/supportsVelocity","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/supportsvelocity"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/tovalue.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]},{"kind":"content","content":[{"anchor":"discussion","level":2,"type":"heading","text":"Discussion"},{"type":"aside","style":"note","content":[{"type":"paragraph","inlineContent":[{"type":"text","text":"Not all animations use this as it doesn’t always make sense. They will have this explicitly disabled."}]}]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/tovalue"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/toValue","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"The target value to animate towards."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"toValue","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC02toB0xvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation/toValue":{"role":"symbol","title":"toValue","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"toValue"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[{"type":"text","text":"The target value to animate towards."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/toValue","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/tovalue"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"},"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/value.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":" { "},{"kind":"keyword","text":"get"},{"kind":"text","text":" "},{"kind":"keyword","text":"set"},{"kind":"text","text":" }"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/value"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/value","interfaceLanguage":"swift"},"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"title":"value","roleHeading":"Instance Property","role":"symbol","symbolKind":"property","externalID":"s:6Motion14ValueAnimationC5valuexvp","modules":[{"name":"Motion"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation/value":{"role":"symbol","title":"value","fragments":[{"kind":"keyword","text":"var"},{"kind":"text","text":" "},{"kind":"identifier","text":"value"},{"kind":"text","text":": "},{"kind":"typeIdentifier","text":"Value"}],"abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/value","kind":"symbol","type":"topic","url":"\/documentation\/motion\/valueanimation\/value"},"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/data/documentation/motion/valueanimation/valuechangedcallback.json:
--------------------------------------------------------------------------------
1 | {"primaryContentSections":[{"kind":"declarations","declarations":[{"tokens":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"},{"kind":"text","text":" = (("},{"kind":"typeIdentifier","text":"Value"},{"kind":"text","text":") -> "},{"kind":"typeIdentifier","text":"Void","preciseIdentifier":"s:s4Voida"},{"kind":"text","text":")"}],"languages":["swift"],"platforms":["macOS"]}]}],"schemaVersion":{"major":0,"minor":3,"patch":0},"sections":[],"variants":[{"paths":["\/documentation\/motion\/valueanimation\/valuechangedcallback"],"traits":[{"interfaceLanguage":"swift"}]}],"identifier":{"url":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/ValueChangedCallback","interfaceLanguage":"swift"},"abstract":[{"type":"text","text":"A block to be called when "},{"type":"codeVoice","code":"value"},{"type":"text","text":" changes."}],"kind":"symbol","metadata":{"fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"}],"title":"ValueAnimation.ValueChangedCallback","roleHeading":"Type Alias","role":"symbol","symbolKind":"typealias","externalID":"s:6Motion14ValueAnimationC0B15ChangedCallbacka","modules":[{"name":"Motion"}],"navigatorTitle":[{"kind":"identifier","text":"ValueChangedCallback"}]},"hierarchy":{"paths":[["doc:\/\/Motion\/documentation\/Motion","doc:\/\/Motion\/documentation\/Motion\/ValueAnimation"]]},"references":{"doc://Motion/documentation/Motion/ValueAnimation":{"role":"symbol","title":"ValueAnimation","fragments":[{"kind":"keyword","text":"class"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueAnimation"}],"abstract":[{"type":"text","text":"This class provides the ability to animate changes to values ("},{"type":"codeVoice","code":"Value"},{"type":"text","text":") over time."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueAnimation"}],"url":"\/documentation\/motion\/valueanimation"},"doc://Motion/documentation/Motion/ValueAnimation/ValueChangedCallback":{"role":"symbol","title":"ValueAnimation.ValueChangedCallback","fragments":[{"kind":"keyword","text":"typealias"},{"kind":"text","text":" "},{"kind":"identifier","text":"ValueChangedCallback"}],"abstract":[{"type":"text","text":"A block to be called when "},{"type":"codeVoice","code":"value"},{"type":"text","text":" changes."}],"identifier":"doc:\/\/Motion\/documentation\/Motion\/ValueAnimation\/ValueChangedCallback","kind":"symbol","type":"topic","navigatorTitle":[{"kind":"identifier","text":"ValueChangedCallback"}],"url":"\/documentation\/motion\/valueanimation\/valuechangedcallback"},"doc://Motion/documentation/Motion":{"role":"collection","title":"Motion","abstract":[],"identifier":"doc:\/\/Motion\/documentation\/Motion","kind":"symbol","type":"topic","url":"\/documentation\/motion"}}}
--------------------------------------------------------------------------------
/docs/developer-og-twitter.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/developer-og-twitter.jpg
--------------------------------------------------------------------------------
/docs/developer-og.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/developer-og.jpg
--------------------------------------------------------------------------------
/docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/favicon.ico
--------------------------------------------------------------------------------
/docs/favicon.svg:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/docs/img/added-icon.d6f7e47d.svg:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/docs/img/deprecated-icon.015b4f17.svg:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/docs/img/modified-icon.f496e73d.svg:
--------------------------------------------------------------------------------
1 |
10 |
11 |
--------------------------------------------------------------------------------
/docs/img/no-image@2x.df2a0a50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/b3ll/Motion/c9a57f9d2b9d0a1e1b905753175e75a422d381d5/docs/img/no-image@2x.df2a0a50.png
--------------------------------------------------------------------------------
/docs/js/highlight-js-diff.62d66733.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-diff"],{"48b8":function(e,n){function a(e){const n=e.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:n.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}e.exports=a}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-http.163e45b6.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-http"],{c01d:function(e,n){function a(e){const n=e.regex,a="HTTP/(2|1\\.[01])",s=/[A-Za-z][A-Za-z0-9-]*/,t={className:"attribute",begin:n.concat("^",s,"(?=\\:\\s)"),starts:{contains:[{className:"punctuation",begin:/: /,relevance:0,starts:{end:"$",relevance:0}}]}},i=[t,{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}];return{name:"HTTP",aliases:["https"],illegal:/\S/,contains:[{begin:"^(?="+a+" \\d{3})",end:/$/,contains:[{className:"meta",begin:a},{className:"number",begin:"\\b\\d{3}\\b"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},{begin:"(?=^[A-Z]+ (.*?) "+a+"$)",end:/$/,contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{className:"meta",begin:a},{className:"keyword",begin:"[A-Z]+"}],starts:{end:/\b\B/,illegal:/\S/,contains:i}},e.inherit(t,{relevance:0})]}}e.exports=a}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-java.8326d9d8.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-java"],{"332f":function(e,a){var n="[0-9](_*[0-9])*",s=`\\.(${n})`,i="[0-9a-fA-F](_*[0-9a-fA-F])*",t={className:"number",variants:[{begin:`(\\b(${n})((${s})|\\.)?|(${s}))[eE][+-]?(${n})[fFdD]?\\b`},{begin:`\\b(${n})((${s})[fFdD]?\\b|\\.([fFdD]\\b)?)`},{begin:`(${s})[fFdD]?\\b`},{begin:`\\b(${n})[fFdD]\\b`},{begin:`\\b0[xX]((${i})\\.?|(${i})?\\.(${i}))[pP][+-]?(${n})[fFdD]?\\b`},{begin:"\\b(0|[1-9](_*[0-9])*)[lL]?\\b"},{begin:`\\b0[xX](${i})[lL]?\\b`},{begin:"\\b0(_*[0-7])*[lL]?\\b"},{begin:"\\b0[bB][01](_*[01])*[lL]?\\b"}],relevance:0};function r(e,a,n){return-1===n?"":e.replace(a,s=>r(e,a,n-1))}function c(e){e.regex;const a="[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*",n=a+r("(?:<"+a+"~~~(?:\\s*,\\s*"+a+"~~~)*>)?",/~~~/g,2),s=["synchronized","abstract","private","var","static","if","const ","for","while","strictfp","finally","protected","import","native","final","void","enum","else","break","transient","catch","instanceof","volatile","case","assert","package","default","public","try","switch","continue","throws","protected","public","private","module","requires","exports","do"],i=["super","this"],c=["false","true","null"],l=["char","boolean","long","float","int","byte","short","double"],o={keyword:s,literal:c,type:l,built_in:i},b={className:"meta",begin:"@"+a,contains:[{begin:/\(/,end:/\)/,contains:["self"]}]},_={className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[e.C_BLOCK_COMMENT_MODE],endsParent:!0};return{name:"Java",aliases:["jsp"],keywords:o,illegal:/<\/|#/,contains:[e.COMMENT("/\\*\\*","\\*/",{relevance:0,contains:[{begin:/\w+@/,relevance:0},{className:"doctag",begin:"@[A-Za-z]+"}]}),{begin:/import java\.[a-z]+\./,keywords:"import",relevance:2},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,{begin:/"""/,end:/"""/,className:"string",contains:[e.BACKSLASH_ESCAPE]},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{match:[/\b(?:class|interface|enum|extends|implements|new)/,/\s+/,a],className:{1:"keyword",3:"title.class"}},{begin:[a,/\s+/,a,/\s+/,/=/],className:{1:"type",3:"variable",5:"operator"}},{begin:[/record/,/\s+/,a],className:{1:"keyword",3:"title.class"},contains:[_,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},{beginKeywords:"new throw return else",relevance:0},{begin:["(?:"+n+"\\s+)",e.UNDERSCORE_IDENT_RE,/\s*(?=\()/],className:{2:"title.function"},keywords:o,contains:[{className:"params",begin:/\(/,end:/\)/,keywords:o,relevance:0,contains:[b,e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,t,e.C_BLOCK_COMMENT_MODE]},e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE]},t,b]}}e.exports=c}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-json.471128d2.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-json"],{"5ad2":function(n,e){function a(n){const e={className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},a={match:/[{}[\],:]/,className:"punctuation",relevance:0},s={beginKeywords:["true","false","null"].join(" ")};return{name:"JSON",contains:[e,a,n.QUOTE_STRING_MODE,s,n.C_NUMBER_MODE,n.C_LINE_COMMENT_MODE,n.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}n.exports=a}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-llvm.6100b125.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-llvm"],{"7c30":function(e,n){function a(e){const n=e.regex,a=/([-a-zA-Z$._][\w$.-]*)/,t={className:"type",begin:/\bi\d+(?=\s|\b)/},i={className:"operator",relevance:0,begin:/=/},c={className:"punctuation",relevance:0,begin:/,/},l={className:"number",variants:[{begin:/0[xX][a-fA-F0-9]+/},{begin:/-?\d+(?:[.]\d+)?(?:[eE][-+]?\d+(?:[.]\d+)?)?/}],relevance:0},r={className:"symbol",variants:[{begin:/^\s*[a-z]+:/}],relevance:0},s={className:"variable",variants:[{begin:n.concat(/%/,a)},{begin:/%\d+/},{begin:/#\d+/}]},o={className:"title",variants:[{begin:n.concat(/@/,a)},{begin:/@\d+/},{begin:n.concat(/!/,a)},{begin:n.concat(/!\d+/,a)},{begin:/!\d+/}]};return{name:"LLVM IR",keywords:"begin end true false declare define global constant private linker_private internal available_externally linkonce linkonce_odr weak weak_odr appending dllimport dllexport common default hidden protected extern_weak external thread_local zeroinitializer undef null to tail target triple datalayout volatile nuw nsw nnan ninf nsz arcp fast exact inbounds align addrspace section alias module asm sideeffect gc dbg linker_private_weak attributes blockaddress initialexec localdynamic localexec prefix unnamed_addr ccc fastcc coldcc x86_stdcallcc x86_fastcallcc arm_apcscc arm_aapcscc arm_aapcs_vfpcc ptx_device ptx_kernel intel_ocl_bicc msp430_intrcc spir_func spir_kernel x86_64_sysvcc x86_64_win64cc x86_thiscallcc cc c signext zeroext inreg sret nounwind noreturn noalias nocapture byval nest readnone readonly inlinehint noinline alwaysinline optsize ssp sspreq noredzone noimplicitfloat naked builtin cold nobuiltin noduplicate nonlazybind optnone returns_twice sanitize_address sanitize_memory sanitize_thread sspstrong uwtable returned type opaque eq ne slt sgt sle sge ult ugt ule uge oeq one olt ogt ole oge ord uno ueq une x acq_rel acquire alignstack atomic catch cleanup filter inteldialect max min monotonic nand personality release seq_cst singlethread umax umin unordered xchg add fadd sub fsub mul fmul udiv sdiv fdiv urem srem frem shl lshr ashr and or xor icmp fcmp phi call trunc zext sext fptrunc fpext uitofp sitofp fptoui fptosi inttoptr ptrtoint bitcast addrspacecast select va_arg ret br switch invoke unwind unreachable indirectbr landingpad resume malloc alloca free load store getelementptr extractelement insertelement shufflevector getresult extractvalue insertvalue atomicrmw cmpxchg fence argmemonly double",contains:[t,e.COMMENT(/;\s*$/,null,{relevance:0}),e.COMMENT(/;/,/$/),e.QUOTE_STRING_MODE,{className:"string",variants:[{begin:/"/,end:/[^\\]"/}]},o,c,i,s,r,l]}}e.exports=a}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-markdown.90077643.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-markdown"],{"04b0":function(n,e){function a(n){const e=n.regex,a={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={begin:"^[-\\*]{3,}",end:"$"},s={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},c={className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},t={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},g=/[A-Za-z][A-Za-z0-9+.-]*/,d={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,g,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}/,end:/_{2}/},{begin:/\*{2}/,end:/\*{2}/}]},o={className:"emphasis",contains:[],variants:[{begin:/\*(?!\*)/,end:/\*/},{begin:/_(?!_)/,end:/_/,relevance:0}]};l.contains.push(o),o.contains.push(l);let b=[a,d];l.contains=l.contains.concat(b),o.contains=o.contains.concat(b),b=b.concat(l,o);const r={className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:b},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:b}]}]},m={className:"quote",begin:"^>\\s+",contains:b,end:"$"};return{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[r,a,c,l,o,m,s,i,d,t]}}n.exports=a}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-shell.dd7f411f.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-shell"],{b65b:function(s,n){function e(s){return{name:"Shell Session",aliases:["console","shellsession"],contains:[{className:"meta",begin:/^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/,starts:{end:/[^\\](?=\s*$)/,subLanguage:"bash"}}]}}s.exports=e}}]);
--------------------------------------------------------------------------------
/docs/js/highlight-js-xml.9c3688c7.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * This source file is part of the Swift.org open source project
3 | *
4 | * Copyright (c) 2021 Apple Inc. and the Swift project authors
5 | * Licensed under Apache License v2.0 with Runtime Library Exception
6 | *
7 | * See https://swift.org/LICENSE.txt for license information
8 | * See https://swift.org/CONTRIBUTORS.txt for Swift project authors
9 | */
10 | (window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["highlight-js-xml"],{"8dcb":function(e,n){function a(e){const n=e.regex,a=n.concat(/[A-Z_]/,n.optional(/[A-Z0-9_.-]*:/),/[A-Z0-9_.-]*/),s=/[A-Za-z0-9._:-]+/,t={className:"symbol",begin:/&[a-z]+;|[0-9]+;|[a-f0-9]+;/},i={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},c=e.inherit(i,{begin:/\(/,end:/\)/}),l=e.inherit(e.APOS_STRING_MODE,{className:"string"}),r=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),g={endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",begin:s,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[t]},{begin:/'/,end:/'/,contains:[t]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,contains:[{className:"meta",begin://,relevance:10,contains:[i,r,l,c,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin://,contains:[i,c,r,l]}]}]},e.COMMENT(//,{relevance:10}),{begin://,relevance:10},t,{className:"meta",begin:/<\?xml/,end:/\?>/,relevance:10},{className:"tag",begin:/