lottie-ios 3.2.3 → 3.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (434) hide show
  1. package/.github/actions/setup/action.yml +32 -0
  2. package/.github/issue_template.md +6 -23
  3. package/.github/workflows/main.yml +98 -0
  4. package/.github/workflows/stale_issues.yml +17 -0
  5. package/.spi.yml +6 -0
  6. package/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +7 -0
  7. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  8. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  9. package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
  10. package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  11. package/Gemfile +4 -0
  12. package/Gemfile.lock +102 -0
  13. package/Lottie.xcodeproj/project.pbxproj +2011 -1972
  14. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  15. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
  17. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (macOS).xcscheme } +5 -18
  18. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
  19. package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  20. package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
  21. package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
  22. package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  23. package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +34 -0
  24. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  25. package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
  26. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
  27. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  28. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +22 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +138 -0
  30. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
  31. package/Package.swift +5 -15
  32. package/README.md +40 -60
  33. package/Rakefile +160 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +447 -0
  36. package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +81 -0
  37. package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
  38. package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +55 -0
  39. package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +210 -0
  40. package/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +229 -0
  41. package/Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift +52 -0
  42. package/Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift +58 -0
  43. package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +257 -0
  44. package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +124 -0
  45. package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +73 -0
  46. package/Sources/Private/CoreAnimation/Animations/TransformAnimations.swift +205 -0
  47. package/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift +37 -0
  48. package/Sources/Private/CoreAnimation/CompatibilityTracker.swift +130 -0
  49. package/Sources/Private/CoreAnimation/CoreAnimationLayer.swift +497 -0
  50. package/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
  51. package/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +37 -0
  52. package/Sources/Private/CoreAnimation/Extensions/Keyframes+combinedIfPossible.swift +154 -0
  53. package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +83 -0
  54. package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
  55. package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +88 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +167 -0
  57. package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +94 -0
  58. package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
  59. package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +64 -0
  60. package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
  61. package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
  62. package/Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift +85 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +315 -0
  64. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +390 -0
  65. package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
  66. package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
  67. package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
  68. package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
  69. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +94 -86
  70. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
  71. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
  72. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
  73. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +59 -43
  74. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
  75. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
  76. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
  77. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
  78. package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
  79. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
  80. package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +149 -106
  81. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +26 -24
  82. package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
  83. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
  84. package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
  86. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +9 -4
  87. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
  88. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
  89. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
  90. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
  91. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
  92. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
  93. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
  94. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +22 -17
  95. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +110 -79
  96. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +22 -16
  97. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +19 -15
  98. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +22 -20
  99. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +22 -23
  100. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +247 -0
  101. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +30 -24
  102. package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +93 -66
  103. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +23 -19
  104. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +139 -0
  105. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +170 -0
  106. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +95 -58
  107. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +42 -29
  108. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +108 -69
  109. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +155 -0
  110. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +51 -37
  111. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +57 -42
  112. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +66 -58
  113. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +169 -0
  114. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +138 -119
  115. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/AnimatorNode.swift +80 -79
  116. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/PathNode.swift +5 -3
  117. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/RenderNode.swift +22 -17
  118. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +27 -24
  119. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +34 -25
  120. package/Sources/Private/Model/Animation.swift +160 -0
  121. package/Sources/Private/Model/Assets/Asset.swift +43 -0
  122. package/{lottie-swift/src → Sources}/Private/Model/Assets/AssetLibrary.swift +40 -13
  123. package/Sources/Private/Model/Assets/ImageAsset.swift +112 -0
  124. package/{lottie-swift/src → Sources}/Private/Model/Assets/PrecompAsset.swift +20 -10
  125. package/Sources/Private/Model/DictionaryInitializable.swift +67 -0
  126. package/Sources/Private/Model/Extensions/Bundle.swift +34 -0
  127. package/{lottie-swift/src → Sources}/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +8 -4
  128. package/Sources/Private/Model/Keyframes/KeyframeData.swift +113 -0
  129. package/Sources/Private/Model/Keyframes/KeyframeGroup.swift +222 -0
  130. package/{lottie-swift/src → Sources}/Private/Model/Layers/ImageLayerModel.swift +21 -11
  131. package/Sources/Private/Model/Layers/LayerModel.swift +228 -0
  132. package/{lottie-swift/src → Sources}/Private/Model/Layers/PreCompLayerModel.swift +39 -22
  133. package/{lottie-swift/src → Sources}/Private/Model/Layers/ShapeLayerModel.swift +23 -12
  134. package/{lottie-swift/src → Sources}/Private/Model/Layers/SolidLayerModel.swift +31 -19
  135. package/{lottie-swift/src → Sources}/Private/Model/Layers/TextLayerModel.swift +33 -19
  136. package/Sources/Private/Model/Objects/DashPattern.swift +44 -0
  137. package/Sources/Private/Model/Objects/Marker.swift +33 -0
  138. package/Sources/Private/Model/Objects/Mask.swift +80 -0
  139. package/Sources/Private/Model/Objects/Transform.swift +179 -0
  140. package/Sources/Private/Model/ShapeItems/Ellipse.swift +74 -0
  141. package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
  142. package/Sources/Private/Model/ShapeItems/GradientFill.swift +137 -0
  143. package/Sources/Private/Model/ShapeItems/GradientStroke.swift +185 -0
  144. package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
  145. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -12
  146. package/Sources/Private/Model/ShapeItems/Rectangle.swift +72 -0
  147. package/Sources/Private/Model/ShapeItems/Repeater.swift +135 -0
  148. package/Sources/Private/Model/ShapeItems/Shape.swift +56 -0
  149. package/Sources/Private/Model/ShapeItems/ShapeItem.swift +163 -0
  150. package/Sources/Private/Model/ShapeItems/ShapeTransform.swift +135 -0
  151. package/Sources/Private/Model/ShapeItems/Star.swift +131 -0
  152. package/Sources/Private/Model/ShapeItems/Stroke.swift +101 -0
  153. package/Sources/Private/Model/ShapeItems/Trim.swift +77 -0
  154. package/Sources/Private/Model/Text/Font.swift +61 -0
  155. package/{lottie-swift/src → Sources}/Private/Model/Text/Glyph.swift +63 -39
  156. package/Sources/Private/Model/Text/TextAnimator.swift +164 -0
  157. package/Sources/Private/Model/Text/TextDocument.swift +123 -0
  158. package/Sources/Private/RootAnimationLayer.swift +51 -0
  159. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/AnimatorNodeDebugging.swift +7 -7
  160. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/LayerDebugging.swift +72 -48
  161. package/Sources/Private/Utility/Debugging/TestHelpers.swift +10 -0
  162. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/AnimationKeypathExtension.swift +69 -59
  163. package/Sources/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
  164. package/Sources/Private/Utility/Extensions/CGColor+RGB.swift +22 -0
  165. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/CGFloatExtensions.swift +70 -67
  166. package/Sources/Private/Utility/Extensions/DataExtension.swift +27 -0
  167. package/Sources/Private/Utility/Extensions/MathKit.swift +450 -0
  168. package/Sources/Private/Utility/Extensions/StringExtensions.swift +38 -0
  169. package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
  170. package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +134 -0
  171. package/{lottie-swift/src → Sources}/Private/Utility/Interpolatable/KeyframeExtensions.swift +13 -10
  172. package/Sources/Private/Utility/Interpolatable/KeyframeGroup+Extensions.swift +59 -0
  173. package/{lottie-swift/src/Private/NodeRenderSystem/NodeProperties/ValueProviders → Sources/Private/Utility/Interpolatable}/KeyframeInterpolator.swift +125 -108
  174. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
  175. package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  176. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
  177. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
  178. package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
  179. package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
  180. package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
  181. package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
  182. package/Sources/Public/Animation/AnimationPublic.swift +266 -0
  183. package/Sources/Public/Animation/AnimationView.swift +1335 -0
  184. package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
  185. package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
  186. package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
  187. package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
  188. package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  189. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
  190. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
  191. package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
  192. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
  193. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
  194. package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
  195. package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
  196. package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
  197. package/Sources/Public/Keyframes/Keyframe.swift +92 -0
  198. package/Sources/Public/Logging/LottieLogger.swift +137 -0
  199. package/Sources/Public/LottieConfiguration.swift +143 -0
  200. package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
  201. package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
  202. package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
  203. package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
  207. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
  208. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  209. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
  211. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
  212. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
  213. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
  214. package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
  215. package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
  216. package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
  217. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
  218. package/Tests/AnimationKeypathTests.swift +103 -0
  219. package/Tests/AutomaticEngineTests.swift +57 -0
  220. package/Tests/BundleTests.swift +25 -0
  221. package/Tests/DataURLTests.swift +64 -0
  222. package/Tests/ParsingTests.swift +43 -0
  223. package/Tests/PerformanceTests.swift +214 -0
  224. package/Tests/Samples/9squares_AlBoardman.json +1 -0
  225. package/Tests/Samples/Boat_Loader.json +1 -0
  226. package/Tests/Samples/HamburgerArrow.json +1 -0
  227. package/Tests/Samples/IconTransitions.json +1 -0
  228. package/Tests/Samples/Images/dog.png +0 -0
  229. package/Tests/Samples/Issues/issue_1125.json +1 -0
  230. package/Tests/Samples/Issues/issue_1260.json +1 -0
  231. package/Tests/Samples/Issues/issue_1403.json +1 -0
  232. package/Tests/Samples/Issues/issue_1407.json +1 -0
  233. package/Tests/Samples/Issues/issue_1460.json +1 -0
  234. package/Tests/Samples/Issues/issue_1488.json +1 -0
  235. package/Tests/Samples/Issues/issue_1505.json +1 -0
  236. package/Tests/Samples/Issues/issue_1541.json +1 -0
  237. package/Tests/Samples/Issues/issue_1557.json +1 -0
  238. package/Tests/Samples/Issues/issue_1603.json +1 -0
  239. package/Tests/Samples/Issues/issue_1628.json +1 -0
  240. package/Tests/Samples/Issues/issue_1636.json +1 -0
  241. package/Tests/Samples/Issues/issue_1643.json +1 -0
  242. package/Tests/Samples/Issues/issue_1655.json +1 -0
  243. package/Tests/Samples/Issues/issue_1664.json +1 -0
  244. package/Tests/Samples/Issues/issue_1683.json +1 -0
  245. package/Tests/Samples/Issues/issue_1687.json +1 -0
  246. package/Tests/Samples/Issues/issue_1711.json +1 -0
  247. package/Tests/Samples/Issues/issue_1717.json +1 -0
  248. package/Tests/Samples/Issues/issue_769.json +1 -0
  249. package/Tests/Samples/Issues/issue_885.json +1 -0
  250. package/Tests/Samples/Issues/issue_965.json +1 -0
  251. package/Tests/Samples/Issues/pr_1536.json +1 -0
  252. package/Tests/Samples/Issues/pr_1563.json +8439 -0
  253. package/Tests/Samples/Issues/pr_1592.json +5527 -0
  254. package/Tests/Samples/Issues/pr_1599.json +738 -0
  255. package/Tests/Samples/Issues/pr_1604_1.json +1 -0
  256. package/Tests/Samples/Issues/pr_1604_2.json +1 -0
  257. package/Tests/Samples/Issues/pr_1632_1.json +1 -0
  258. package/Tests/Samples/Issues/pr_1632_2.json +1 -0
  259. package/Tests/Samples/Issues/pr_1686.json +513 -0
  260. package/Tests/Samples/Issues/pr_1698.json +1 -0
  261. package/Tests/Samples/Issues/pr_1699.json +1 -0
  262. package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
  263. package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
  264. package/Tests/Samples/LottieFiles/cactus.json +1 -0
  265. package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
  266. package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
  267. package/Tests/Samples/LottieFiles/fireworks.json +1 -0
  268. package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
  269. package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
  270. package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
  271. package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
  272. package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
  273. package/Tests/Samples/LottieFiles/growth.json +1 -0
  274. package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
  275. package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
  276. package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
  277. package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
  278. package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
  279. package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
  280. package/Tests/Samples/LottieFiles/shop.json +1 -0
  281. package/Tests/Samples/LottieFiles/step_loader.json +1 -0
  282. package/Tests/Samples/LottieLogo1.json +1 -0
  283. package/Tests/Samples/LottieLogo1_masked.json +1 -0
  284. package/Tests/Samples/LottieLogo2.json +1 -0
  285. package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
  286. package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
  287. package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
  288. package/Tests/Samples/Nonanimating/FirstText.json +1 -0
  289. package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
  290. package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
  291. package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
  292. package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
  293. package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
  294. package/Tests/Samples/Nonanimating/Zoom.json +1 -0
  295. package/Tests/Samples/Nonanimating/_dog.json +1 -0
  296. package/Tests/Samples/Nonanimating/base64Test.json +1 -0
  297. package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
  298. package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
  299. package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
  300. package/Tests/Samples/PinJump.json +1 -0
  301. package/Tests/Samples/Switch.json +1 -0
  302. package/Tests/Samples/Switch_States.json +1 -0
  303. package/Tests/Samples/TwitterHeart.json +1 -0
  304. package/Tests/Samples/TwitterHeartButton.json +1 -0
  305. package/Tests/Samples/TypeFace/A.json +1 -0
  306. package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
  307. package/Tests/Samples/TypeFace/B.json +1 -0
  308. package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
  309. package/Tests/Samples/TypeFace/C.json +1 -0
  310. package/Tests/Samples/TypeFace/Colon.json +1 -0
  311. package/Tests/Samples/TypeFace/Comma.json +1 -0
  312. package/Tests/Samples/TypeFace/D.json +1 -0
  313. package/Tests/Samples/TypeFace/E.json +1 -0
  314. package/Tests/Samples/TypeFace/F.json +1 -0
  315. package/Tests/Samples/TypeFace/G.json +1 -0
  316. package/Tests/Samples/TypeFace/H.json +1 -0
  317. package/Tests/Samples/TypeFace/I.json +1 -0
  318. package/Tests/Samples/TypeFace/J.json +1 -0
  319. package/Tests/Samples/TypeFace/K.json +1 -0
  320. package/Tests/Samples/TypeFace/L.json +1 -0
  321. package/Tests/Samples/TypeFace/M.json +1 -0
  322. package/Tests/Samples/TypeFace/N.json +1 -0
  323. package/Tests/Samples/TypeFace/O.json +1 -0
  324. package/Tests/Samples/TypeFace/P.json +1 -0
  325. package/Tests/Samples/TypeFace/Q.json +1 -0
  326. package/Tests/Samples/TypeFace/R.json +1 -0
  327. package/Tests/Samples/TypeFace/S.json +1 -0
  328. package/Tests/Samples/TypeFace/T.json +1 -0
  329. package/Tests/Samples/TypeFace/U.json +1 -0
  330. package/Tests/Samples/TypeFace/V.json +1 -0
  331. package/Tests/Samples/TypeFace/W.json +1 -0
  332. package/Tests/Samples/TypeFace/X.json +1 -0
  333. package/Tests/Samples/TypeFace/Y.json +1 -0
  334. package/Tests/Samples/TypeFace/Z.json +1 -0
  335. package/Tests/Samples/Watermelon.json +1 -0
  336. package/Tests/Samples/setValueTest.json +1 -0
  337. package/Tests/Samples/timeremap.json +1 -0
  338. package/Tests/Samples/vcTransition1.json +1 -0
  339. package/Tests/Samples/vcTransition2.json +1 -0
  340. package/Tests/SnapshotConfiguration.swift +158 -0
  341. package/Tests/SnapshotTests.swift +265 -0
  342. package/Tests/Utils/Bundle+Module.swift +30 -0
  343. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  344. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  345. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  346. package/Tests/ValueProvidersTests.swift +27 -0
  347. package/lottie-ios.podspec +12 -12
  348. package/package.json +1 -1
  349. package/script/test-carthage/Cartfile +1 -0
  350. package/script/test-carthage/Cartfile.resolved +1 -0
  351. package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
  352. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  353. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  354. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  355. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  356. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  357. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  358. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  359. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  360. package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
  361. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  362. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  363. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
  364. package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
  365. package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
  366. package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
  367. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
  368. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  369. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  370. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  371. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  372. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  373. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  374. package/script/test-carthage/Mintfile +1 -0
  375. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  376. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  377. package/script/test-spm/Mintfile +1 -0
  378. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  379. package/Lottie/Info.plist +0 -22
  380. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  381. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  382. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  383. package/lottie-swift/Assets/.gitkeep +0 -0
  384. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  385. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  386. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  387. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  388. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  389. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  390. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  391. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  392. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  393. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  394. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  395. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  396. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  397. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  398. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  399. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  400. package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
  401. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  402. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  403. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  404. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  405. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  406. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  407. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  408. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  409. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  410. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  411. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  412. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  413. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  414. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  415. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +0 -127
  416. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  417. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  418. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  419. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  420. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  421. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  422. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  423. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  424. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
  425. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  426. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  427. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  428. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  429. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  430. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  431. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  432. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  433. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  434. package/lottie-swift-testing.podspec +0 -32
@@ -0,0 +1,717 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <document type="com.apple.InterfaceBuilder3.Cocoa.Storyboard.XIB" version="3.0" toolsVersion="11134" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" initialViewController="B8D-0N-5wS">
3
+ <dependencies>
4
+ <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="11134"/>
5
+ </dependencies>
6
+ <scenes>
7
+ <!--Application-->
8
+ <scene sceneID="JPo-4y-FX3">
9
+ <objects>
10
+ <application id="hnw-xV-0zn" sceneMemberID="viewController">
11
+ <menu key="mainMenu" title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
12
+ <items>
13
+ <menuItem title="CarthageTest-macOS" id="1Xt-HY-uBw">
14
+ <modifierMask key="keyEquivalentModifierMask"/>
15
+ <menu key="submenu" title="CarthageTest-macOS" systemMenu="apple" id="uQy-DD-JDr">
16
+ <items>
17
+ <menuItem title="About CarthageTest-macOS" id="5kV-Vb-QxS">
18
+ <modifierMask key="keyEquivalentModifierMask"/>
19
+ <connections>
20
+ <action selector="orderFrontStandardAboutPanel:" target="Ady-hI-5gd" id="Exp-CZ-Vem"/>
21
+ </connections>
22
+ </menuItem>
23
+ <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
24
+ <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
25
+ <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
26
+ <menuItem title="Services" id="NMo-om-nkz">
27
+ <modifierMask key="keyEquivalentModifierMask"/>
28
+ <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
29
+ </menuItem>
30
+ <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
31
+ <menuItem title="Hide CarthageTest-macOS" keyEquivalent="h" id="Olw-nP-bQN">
32
+ <connections>
33
+ <action selector="hide:" target="Ady-hI-5gd" id="PnN-Uc-m68"/>
34
+ </connections>
35
+ </menuItem>
36
+ <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
37
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
38
+ <connections>
39
+ <action selector="hideOtherApplications:" target="Ady-hI-5gd" id="VT4-aY-XCT"/>
40
+ </connections>
41
+ </menuItem>
42
+ <menuItem title="Show All" id="Kd2-mp-pUS">
43
+ <modifierMask key="keyEquivalentModifierMask"/>
44
+ <connections>
45
+ <action selector="unhideAllApplications:" target="Ady-hI-5gd" id="Dhg-Le-xox"/>
46
+ </connections>
47
+ </menuItem>
48
+ <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
49
+ <menuItem title="Quit CarthageTest-macOS" keyEquivalent="q" id="4sb-4s-VLi">
50
+ <connections>
51
+ <action selector="terminate:" target="Ady-hI-5gd" id="Te7-pn-YzF"/>
52
+ </connections>
53
+ </menuItem>
54
+ </items>
55
+ </menu>
56
+ </menuItem>
57
+ <menuItem title="File" id="dMs-cI-mzQ">
58
+ <modifierMask key="keyEquivalentModifierMask"/>
59
+ <menu key="submenu" title="File" id="bib-Uj-vzu">
60
+ <items>
61
+ <menuItem title="New" keyEquivalent="n" id="Was-JA-tGl">
62
+ <connections>
63
+ <action selector="newDocument:" target="Ady-hI-5gd" id="4Si-XN-c54"/>
64
+ </connections>
65
+ </menuItem>
66
+ <menuItem title="Open…" keyEquivalent="o" id="IAo-SY-fd9">
67
+ <connections>
68
+ <action selector="openDocument:" target="Ady-hI-5gd" id="bVn-NM-KNZ"/>
69
+ </connections>
70
+ </menuItem>
71
+ <menuItem title="Open Recent" id="tXI-mr-wws">
72
+ <modifierMask key="keyEquivalentModifierMask"/>
73
+ <menu key="submenu" title="Open Recent" systemMenu="recentDocuments" id="oas-Oc-fiZ">
74
+ <items>
75
+ <menuItem title="Clear Menu" id="vNY-rz-j42">
76
+ <modifierMask key="keyEquivalentModifierMask"/>
77
+ <connections>
78
+ <action selector="clearRecentDocuments:" target="Ady-hI-5gd" id="Daa-9d-B3U"/>
79
+ </connections>
80
+ </menuItem>
81
+ </items>
82
+ </menu>
83
+ </menuItem>
84
+ <menuItem isSeparatorItem="YES" id="m54-Is-iLE"/>
85
+ <menuItem title="Close" keyEquivalent="w" id="DVo-aG-piG">
86
+ <connections>
87
+ <action selector="performClose:" target="Ady-hI-5gd" id="HmO-Ls-i7Q"/>
88
+ </connections>
89
+ </menuItem>
90
+ <menuItem title="Save…" keyEquivalent="s" id="pxx-59-PXV">
91
+ <connections>
92
+ <action selector="saveDocument:" target="Ady-hI-5gd" id="teZ-XB-qJY"/>
93
+ </connections>
94
+ </menuItem>
95
+ <menuItem title="Save As…" keyEquivalent="S" id="Bw7-FT-i3A">
96
+ <connections>
97
+ <action selector="saveDocumentAs:" target="Ady-hI-5gd" id="mDf-zr-I0C"/>
98
+ </connections>
99
+ </menuItem>
100
+ <menuItem title="Revert to Saved" keyEquivalent="r" id="KaW-ft-85H">
101
+ <connections>
102
+ <action selector="revertDocumentToSaved:" target="Ady-hI-5gd" id="iJ3-Pv-kwq"/>
103
+ </connections>
104
+ </menuItem>
105
+ <menuItem isSeparatorItem="YES" id="aJh-i4-bef"/>
106
+ <menuItem title="Page Setup…" keyEquivalent="P" id="qIS-W8-SiK">
107
+ <modifierMask key="keyEquivalentModifierMask" shift="YES" command="YES"/>
108
+ <connections>
109
+ <action selector="runPageLayout:" target="Ady-hI-5gd" id="Din-rz-gC5"/>
110
+ </connections>
111
+ </menuItem>
112
+ <menuItem title="Print…" keyEquivalent="p" id="aTl-1u-JFS">
113
+ <connections>
114
+ <action selector="print:" target="Ady-hI-5gd" id="qaZ-4w-aoO"/>
115
+ </connections>
116
+ </menuItem>
117
+ </items>
118
+ </menu>
119
+ </menuItem>
120
+ <menuItem title="Edit" id="5QF-Oa-p0T">
121
+ <modifierMask key="keyEquivalentModifierMask"/>
122
+ <menu key="submenu" title="Edit" id="W48-6f-4Dl">
123
+ <items>
124
+ <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
125
+ <connections>
126
+ <action selector="undo:" target="Ady-hI-5gd" id="M6e-cu-g7V"/>
127
+ </connections>
128
+ </menuItem>
129
+ <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
130
+ <connections>
131
+ <action selector="redo:" target="Ady-hI-5gd" id="oIA-Rs-6OD"/>
132
+ </connections>
133
+ </menuItem>
134
+ <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
135
+ <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
136
+ <connections>
137
+ <action selector="cut:" target="Ady-hI-5gd" id="YJe-68-I9s"/>
138
+ </connections>
139
+ </menuItem>
140
+ <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
141
+ <connections>
142
+ <action selector="copy:" target="Ady-hI-5gd" id="G1f-GL-Joy"/>
143
+ </connections>
144
+ </menuItem>
145
+ <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
146
+ <connections>
147
+ <action selector="paste:" target="Ady-hI-5gd" id="UvS-8e-Qdg"/>
148
+ </connections>
149
+ </menuItem>
150
+ <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
151
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
152
+ <connections>
153
+ <action selector="pasteAsPlainText:" target="Ady-hI-5gd" id="cEh-KX-wJQ"/>
154
+ </connections>
155
+ </menuItem>
156
+ <menuItem title="Delete" id="pa3-QI-u2k">
157
+ <modifierMask key="keyEquivalentModifierMask"/>
158
+ <connections>
159
+ <action selector="delete:" target="Ady-hI-5gd" id="0Mk-Ml-PaM"/>
160
+ </connections>
161
+ </menuItem>
162
+ <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
163
+ <connections>
164
+ <action selector="selectAll:" target="Ady-hI-5gd" id="VNm-Mi-diN"/>
165
+ </connections>
166
+ </menuItem>
167
+ <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
168
+ <menuItem title="Find" id="4EN-yA-p0u">
169
+ <modifierMask key="keyEquivalentModifierMask"/>
170
+ <menu key="submenu" title="Find" id="1b7-l0-nxx">
171
+ <items>
172
+ <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
173
+ <connections>
174
+ <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="cD7-Qs-BN4"/>
175
+ </connections>
176
+ </menuItem>
177
+ <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
178
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
179
+ <connections>
180
+ <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="WD3-Gg-5AJ"/>
181
+ </connections>
182
+ </menuItem>
183
+ <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
184
+ <connections>
185
+ <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="NDo-RZ-v9R"/>
186
+ </connections>
187
+ </menuItem>
188
+ <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
189
+ <connections>
190
+ <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="HOh-sY-3ay"/>
191
+ </connections>
192
+ </menuItem>
193
+ <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
194
+ <connections>
195
+ <action selector="performFindPanelAction:" target="Ady-hI-5gd" id="U76-nv-p5D"/>
196
+ </connections>
197
+ </menuItem>
198
+ <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
199
+ <connections>
200
+ <action selector="centerSelectionInVisibleArea:" target="Ady-hI-5gd" id="IOG-6D-g5B"/>
201
+ </connections>
202
+ </menuItem>
203
+ </items>
204
+ </menu>
205
+ </menuItem>
206
+ <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
207
+ <modifierMask key="keyEquivalentModifierMask"/>
208
+ <menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
209
+ <items>
210
+ <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
211
+ <connections>
212
+ <action selector="showGuessPanel:" target="Ady-hI-5gd" id="vFj-Ks-hy3"/>
213
+ </connections>
214
+ </menuItem>
215
+ <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
216
+ <connections>
217
+ <action selector="checkSpelling:" target="Ady-hI-5gd" id="fz7-VC-reM"/>
218
+ </connections>
219
+ </menuItem>
220
+ <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
221
+ <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
222
+ <modifierMask key="keyEquivalentModifierMask"/>
223
+ <connections>
224
+ <action selector="toggleContinuousSpellChecking:" target="Ady-hI-5gd" id="7w6-Qz-0kB"/>
225
+ </connections>
226
+ </menuItem>
227
+ <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
228
+ <modifierMask key="keyEquivalentModifierMask"/>
229
+ <connections>
230
+ <action selector="toggleGrammarChecking:" target="Ady-hI-5gd" id="muD-Qn-j4w"/>
231
+ </connections>
232
+ </menuItem>
233
+ <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
234
+ <modifierMask key="keyEquivalentModifierMask"/>
235
+ <connections>
236
+ <action selector="toggleAutomaticSpellingCorrection:" target="Ady-hI-5gd" id="2lM-Qi-WAP"/>
237
+ </connections>
238
+ </menuItem>
239
+ </items>
240
+ </menu>
241
+ </menuItem>
242
+ <menuItem title="Substitutions" id="9ic-FL-obx">
243
+ <modifierMask key="keyEquivalentModifierMask"/>
244
+ <menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
245
+ <items>
246
+ <menuItem title="Show Substitutions" id="z6F-FW-3nz">
247
+ <modifierMask key="keyEquivalentModifierMask"/>
248
+ <connections>
249
+ <action selector="orderFrontSubstitutionsPanel:" target="Ady-hI-5gd" id="oku-mr-iSq"/>
250
+ </connections>
251
+ </menuItem>
252
+ <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
253
+ <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
254
+ <modifierMask key="keyEquivalentModifierMask"/>
255
+ <connections>
256
+ <action selector="toggleSmartInsertDelete:" target="Ady-hI-5gd" id="3IJ-Se-DZD"/>
257
+ </connections>
258
+ </menuItem>
259
+ <menuItem title="Smart Quotes" id="hQb-2v-fYv">
260
+ <modifierMask key="keyEquivalentModifierMask"/>
261
+ <connections>
262
+ <action selector="toggleAutomaticQuoteSubstitution:" target="Ady-hI-5gd" id="ptq-xd-QOA"/>
263
+ </connections>
264
+ </menuItem>
265
+ <menuItem title="Smart Dashes" id="rgM-f4-ycn">
266
+ <modifierMask key="keyEquivalentModifierMask"/>
267
+ <connections>
268
+ <action selector="toggleAutomaticDashSubstitution:" target="Ady-hI-5gd" id="oCt-pO-9gS"/>
269
+ </connections>
270
+ </menuItem>
271
+ <menuItem title="Smart Links" id="cwL-P1-jid">
272
+ <modifierMask key="keyEquivalentModifierMask"/>
273
+ <connections>
274
+ <action selector="toggleAutomaticLinkDetection:" target="Ady-hI-5gd" id="Gip-E3-Fov"/>
275
+ </connections>
276
+ </menuItem>
277
+ <menuItem title="Data Detectors" id="tRr-pd-1PS">
278
+ <modifierMask key="keyEquivalentModifierMask"/>
279
+ <connections>
280
+ <action selector="toggleAutomaticDataDetection:" target="Ady-hI-5gd" id="R1I-Nq-Kbl"/>
281
+ </connections>
282
+ </menuItem>
283
+ <menuItem title="Text Replacement" id="HFQ-gK-NFA">
284
+ <modifierMask key="keyEquivalentModifierMask"/>
285
+ <connections>
286
+ <action selector="toggleAutomaticTextReplacement:" target="Ady-hI-5gd" id="DvP-Fe-Py6"/>
287
+ </connections>
288
+ </menuItem>
289
+ </items>
290
+ </menu>
291
+ </menuItem>
292
+ <menuItem title="Transformations" id="2oI-Rn-ZJC">
293
+ <modifierMask key="keyEquivalentModifierMask"/>
294
+ <menu key="submenu" title="Transformations" id="c8a-y6-VQd">
295
+ <items>
296
+ <menuItem title="Make Upper Case" id="vmV-6d-7jI">
297
+ <modifierMask key="keyEquivalentModifierMask"/>
298
+ <connections>
299
+ <action selector="uppercaseWord:" target="Ady-hI-5gd" id="sPh-Tk-edu"/>
300
+ </connections>
301
+ </menuItem>
302
+ <menuItem title="Make Lower Case" id="d9M-CD-aMd">
303
+ <modifierMask key="keyEquivalentModifierMask"/>
304
+ <connections>
305
+ <action selector="lowercaseWord:" target="Ady-hI-5gd" id="iUZ-b5-hil"/>
306
+ </connections>
307
+ </menuItem>
308
+ <menuItem title="Capitalize" id="UEZ-Bs-lqG">
309
+ <modifierMask key="keyEquivalentModifierMask"/>
310
+ <connections>
311
+ <action selector="capitalizeWord:" target="Ady-hI-5gd" id="26H-TL-nsh"/>
312
+ </connections>
313
+ </menuItem>
314
+ </items>
315
+ </menu>
316
+ </menuItem>
317
+ <menuItem title="Speech" id="xrE-MZ-jX0">
318
+ <modifierMask key="keyEquivalentModifierMask"/>
319
+ <menu key="submenu" title="Speech" id="3rS-ZA-NoH">
320
+ <items>
321
+ <menuItem title="Start Speaking" id="Ynk-f8-cLZ">
322
+ <modifierMask key="keyEquivalentModifierMask"/>
323
+ <connections>
324
+ <action selector="startSpeaking:" target="Ady-hI-5gd" id="654-Ng-kyl"/>
325
+ </connections>
326
+ </menuItem>
327
+ <menuItem title="Stop Speaking" id="Oyz-dy-DGm">
328
+ <modifierMask key="keyEquivalentModifierMask"/>
329
+ <connections>
330
+ <action selector="stopSpeaking:" target="Ady-hI-5gd" id="dX8-6p-jy9"/>
331
+ </connections>
332
+ </menuItem>
333
+ </items>
334
+ </menu>
335
+ </menuItem>
336
+ </items>
337
+ </menu>
338
+ </menuItem>
339
+ <menuItem title="Format" id="jxT-CU-nIS">
340
+ <modifierMask key="keyEquivalentModifierMask"/>
341
+ <menu key="submenu" title="Format" id="GEO-Iw-cKr">
342
+ <items>
343
+ <menuItem title="Font" id="Gi5-1S-RQB">
344
+ <modifierMask key="keyEquivalentModifierMask"/>
345
+ <menu key="submenu" title="Font" systemMenu="font" id="aXa-aM-Jaq">
346
+ <items>
347
+ <menuItem title="Show Fonts" keyEquivalent="t" id="Q5e-8K-NDq">
348
+ <connections>
349
+ <action selector="orderFrontFontPanel:" target="YLy-65-1bz" id="WHr-nq-2xA"/>
350
+ </connections>
351
+ </menuItem>
352
+ <menuItem title="Bold" tag="2" keyEquivalent="b" id="GB9-OM-e27">
353
+ <connections>
354
+ <action selector="addFontTrait:" target="YLy-65-1bz" id="hqk-hr-sYV"/>
355
+ </connections>
356
+ </menuItem>
357
+ <menuItem title="Italic" tag="1" keyEquivalent="i" id="Vjx-xi-njq">
358
+ <connections>
359
+ <action selector="addFontTrait:" target="YLy-65-1bz" id="IHV-OB-c03"/>
360
+ </connections>
361
+ </menuItem>
362
+ <menuItem title="Underline" keyEquivalent="u" id="WRG-CD-K1S">
363
+ <connections>
364
+ <action selector="underline:" target="Ady-hI-5gd" id="FYS-2b-JAY"/>
365
+ </connections>
366
+ </menuItem>
367
+ <menuItem isSeparatorItem="YES" id="5gT-KC-WSO"/>
368
+ <menuItem title="Bigger" tag="3" keyEquivalent="+" id="Ptp-SP-VEL">
369
+ <connections>
370
+ <action selector="modifyFont:" target="YLy-65-1bz" id="Uc7-di-UnL"/>
371
+ </connections>
372
+ </menuItem>
373
+ <menuItem title="Smaller" tag="4" keyEquivalent="-" id="i1d-Er-qST">
374
+ <connections>
375
+ <action selector="modifyFont:" target="YLy-65-1bz" id="HcX-Lf-eNd"/>
376
+ </connections>
377
+ </menuItem>
378
+ <menuItem isSeparatorItem="YES" id="kx3-Dk-x3B"/>
379
+ <menuItem title="Kern" id="jBQ-r6-VK2">
380
+ <modifierMask key="keyEquivalentModifierMask"/>
381
+ <menu key="submenu" title="Kern" id="tlD-Oa-oAM">
382
+ <items>
383
+ <menuItem title="Use Default" id="GUa-eO-cwY">
384
+ <modifierMask key="keyEquivalentModifierMask"/>
385
+ <connections>
386
+ <action selector="useStandardKerning:" target="Ady-hI-5gd" id="6dk-9l-Ckg"/>
387
+ </connections>
388
+ </menuItem>
389
+ <menuItem title="Use None" id="cDB-IK-hbR">
390
+ <modifierMask key="keyEquivalentModifierMask"/>
391
+ <connections>
392
+ <action selector="turnOffKerning:" target="Ady-hI-5gd" id="U8a-gz-Maa"/>
393
+ </connections>
394
+ </menuItem>
395
+ <menuItem title="Tighten" id="46P-cB-AYj">
396
+ <modifierMask key="keyEquivalentModifierMask"/>
397
+ <connections>
398
+ <action selector="tightenKerning:" target="Ady-hI-5gd" id="hr7-Nz-8ro"/>
399
+ </connections>
400
+ </menuItem>
401
+ <menuItem title="Loosen" id="ogc-rX-tC1">
402
+ <modifierMask key="keyEquivalentModifierMask"/>
403
+ <connections>
404
+ <action selector="loosenKerning:" target="Ady-hI-5gd" id="8i4-f9-FKE"/>
405
+ </connections>
406
+ </menuItem>
407
+ </items>
408
+ </menu>
409
+ </menuItem>
410
+ <menuItem title="Ligatures" id="o6e-r0-MWq">
411
+ <modifierMask key="keyEquivalentModifierMask"/>
412
+ <menu key="submenu" title="Ligatures" id="w0m-vy-SC9">
413
+ <items>
414
+ <menuItem title="Use Default" id="agt-UL-0e3">
415
+ <modifierMask key="keyEquivalentModifierMask"/>
416
+ <connections>
417
+ <action selector="useStandardLigatures:" target="Ady-hI-5gd" id="7uR-wd-Dx6"/>
418
+ </connections>
419
+ </menuItem>
420
+ <menuItem title="Use None" id="J7y-lM-qPV">
421
+ <modifierMask key="keyEquivalentModifierMask"/>
422
+ <connections>
423
+ <action selector="turnOffLigatures:" target="Ady-hI-5gd" id="iX2-gA-Ilz"/>
424
+ </connections>
425
+ </menuItem>
426
+ <menuItem title="Use All" id="xQD-1f-W4t">
427
+ <modifierMask key="keyEquivalentModifierMask"/>
428
+ <connections>
429
+ <action selector="useAllLigatures:" target="Ady-hI-5gd" id="KcB-kA-TuK"/>
430
+ </connections>
431
+ </menuItem>
432
+ </items>
433
+ </menu>
434
+ </menuItem>
435
+ <menuItem title="Baseline" id="OaQ-X3-Vso">
436
+ <modifierMask key="keyEquivalentModifierMask"/>
437
+ <menu key="submenu" title="Baseline" id="ijk-EB-dga">
438
+ <items>
439
+ <menuItem title="Use Default" id="3Om-Ey-2VK">
440
+ <modifierMask key="keyEquivalentModifierMask"/>
441
+ <connections>
442
+ <action selector="unscript:" target="Ady-hI-5gd" id="0vZ-95-Ywn"/>
443
+ </connections>
444
+ </menuItem>
445
+ <menuItem title="Superscript" id="Rqc-34-cIF">
446
+ <modifierMask key="keyEquivalentModifierMask"/>
447
+ <connections>
448
+ <action selector="superscript:" target="Ady-hI-5gd" id="3qV-fo-wpU"/>
449
+ </connections>
450
+ </menuItem>
451
+ <menuItem title="Subscript" id="I0S-gh-46l">
452
+ <modifierMask key="keyEquivalentModifierMask"/>
453
+ <connections>
454
+ <action selector="subscript:" target="Ady-hI-5gd" id="Q6W-4W-IGz"/>
455
+ </connections>
456
+ </menuItem>
457
+ <menuItem title="Raise" id="2h7-ER-AoG">
458
+ <modifierMask key="keyEquivalentModifierMask"/>
459
+ <connections>
460
+ <action selector="raiseBaseline:" target="Ady-hI-5gd" id="4sk-31-7Q9"/>
461
+ </connections>
462
+ </menuItem>
463
+ <menuItem title="Lower" id="1tx-W0-xDw">
464
+ <modifierMask key="keyEquivalentModifierMask"/>
465
+ <connections>
466
+ <action selector="lowerBaseline:" target="Ady-hI-5gd" id="OF1-bc-KW4"/>
467
+ </connections>
468
+ </menuItem>
469
+ </items>
470
+ </menu>
471
+ </menuItem>
472
+ <menuItem isSeparatorItem="YES" id="Ndw-q3-faq"/>
473
+ <menuItem title="Show Colors" keyEquivalent="C" id="bgn-CT-cEk">
474
+ <connections>
475
+ <action selector="orderFrontColorPanel:" target="Ady-hI-5gd" id="mSX-Xz-DV3"/>
476
+ </connections>
477
+ </menuItem>
478
+ <menuItem isSeparatorItem="YES" id="iMs-zA-UFJ"/>
479
+ <menuItem title="Copy Style" keyEquivalent="c" id="5Vv-lz-BsD">
480
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
481
+ <connections>
482
+ <action selector="copyFont:" target="Ady-hI-5gd" id="GJO-xA-L4q"/>
483
+ </connections>
484
+ </menuItem>
485
+ <menuItem title="Paste Style" keyEquivalent="v" id="vKC-jM-MkH">
486
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
487
+ <connections>
488
+ <action selector="pasteFont:" target="Ady-hI-5gd" id="JfD-CL-leO"/>
489
+ </connections>
490
+ </menuItem>
491
+ </items>
492
+ </menu>
493
+ </menuItem>
494
+ <menuItem title="Text" id="Fal-I4-PZk">
495
+ <modifierMask key="keyEquivalentModifierMask"/>
496
+ <menu key="submenu" title="Text" id="d9c-me-L2H">
497
+ <items>
498
+ <menuItem title="Align Left" keyEquivalent="{" id="ZM1-6Q-yy1">
499
+ <connections>
500
+ <action selector="alignLeft:" target="Ady-hI-5gd" id="zUv-R1-uAa"/>
501
+ </connections>
502
+ </menuItem>
503
+ <menuItem title="Center" keyEquivalent="|" id="VIY-Ag-zcb">
504
+ <connections>
505
+ <action selector="alignCenter:" target="Ady-hI-5gd" id="spX-mk-kcS"/>
506
+ </connections>
507
+ </menuItem>
508
+ <menuItem title="Justify" id="J5U-5w-g23">
509
+ <modifierMask key="keyEquivalentModifierMask"/>
510
+ <connections>
511
+ <action selector="alignJustified:" target="Ady-hI-5gd" id="ljL-7U-jND"/>
512
+ </connections>
513
+ </menuItem>
514
+ <menuItem title="Align Right" keyEquivalent="}" id="wb2-vD-lq4">
515
+ <connections>
516
+ <action selector="alignRight:" target="Ady-hI-5gd" id="r48-bG-YeY"/>
517
+ </connections>
518
+ </menuItem>
519
+ <menuItem isSeparatorItem="YES" id="4s2-GY-VfK"/>
520
+ <menuItem title="Writing Direction" id="H1b-Si-o9J">
521
+ <modifierMask key="keyEquivalentModifierMask"/>
522
+ <menu key="submenu" title="Writing Direction" id="8mr-sm-Yjd">
523
+ <items>
524
+ <menuItem title="Paragraph" enabled="NO" id="ZvO-Gk-QUH">
525
+ <modifierMask key="keyEquivalentModifierMask"/>
526
+ </menuItem>
527
+ <menuItem id="YGs-j5-SAR">
528
+ <string key="title"> Default</string>
529
+ <modifierMask key="keyEquivalentModifierMask"/>
530
+ <connections>
531
+ <action selector="makeBaseWritingDirectionNatural:" target="Ady-hI-5gd" id="qtV-5e-UBP"/>
532
+ </connections>
533
+ </menuItem>
534
+ <menuItem id="Lbh-J2-qVU">
535
+ <string key="title"> Left to Right</string>
536
+ <modifierMask key="keyEquivalentModifierMask"/>
537
+ <connections>
538
+ <action selector="makeBaseWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="S0X-9S-QSf"/>
539
+ </connections>
540
+ </menuItem>
541
+ <menuItem id="jFq-tB-4Kx">
542
+ <string key="title"> Right to Left</string>
543
+ <modifierMask key="keyEquivalentModifierMask"/>
544
+ <connections>
545
+ <action selector="makeBaseWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="5fk-qB-AqJ"/>
546
+ </connections>
547
+ </menuItem>
548
+ <menuItem isSeparatorItem="YES" id="swp-gr-a21"/>
549
+ <menuItem title="Selection" enabled="NO" id="cqv-fj-IhA">
550
+ <modifierMask key="keyEquivalentModifierMask"/>
551
+ </menuItem>
552
+ <menuItem id="Nop-cj-93Q">
553
+ <string key="title"> Default</string>
554
+ <modifierMask key="keyEquivalentModifierMask"/>
555
+ <connections>
556
+ <action selector="makeTextWritingDirectionNatural:" target="Ady-hI-5gd" id="lPI-Se-ZHp"/>
557
+ </connections>
558
+ </menuItem>
559
+ <menuItem id="BgM-ve-c93">
560
+ <string key="title"> Left to Right</string>
561
+ <modifierMask key="keyEquivalentModifierMask"/>
562
+ <connections>
563
+ <action selector="makeTextWritingDirectionLeftToRight:" target="Ady-hI-5gd" id="caW-Bv-w94"/>
564
+ </connections>
565
+ </menuItem>
566
+ <menuItem id="RB4-Sm-HuC">
567
+ <string key="title"> Right to Left</string>
568
+ <modifierMask key="keyEquivalentModifierMask"/>
569
+ <connections>
570
+ <action selector="makeTextWritingDirectionRightToLeft:" target="Ady-hI-5gd" id="EXD-6r-ZUu"/>
571
+ </connections>
572
+ </menuItem>
573
+ </items>
574
+ </menu>
575
+ </menuItem>
576
+ <menuItem isSeparatorItem="YES" id="fKy-g9-1gm"/>
577
+ <menuItem title="Show Ruler" id="vLm-3I-IUL">
578
+ <modifierMask key="keyEquivalentModifierMask"/>
579
+ <connections>
580
+ <action selector="toggleRuler:" target="Ady-hI-5gd" id="FOx-HJ-KwY"/>
581
+ </connections>
582
+ </menuItem>
583
+ <menuItem title="Copy Ruler" keyEquivalent="c" id="MkV-Pr-PK5">
584
+ <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
585
+ <connections>
586
+ <action selector="copyRuler:" target="Ady-hI-5gd" id="71i-fW-3W2"/>
587
+ </connections>
588
+ </menuItem>
589
+ <menuItem title="Paste Ruler" keyEquivalent="v" id="LVM-kO-fVI">
590
+ <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
591
+ <connections>
592
+ <action selector="pasteRuler:" target="Ady-hI-5gd" id="cSh-wd-qM2"/>
593
+ </connections>
594
+ </menuItem>
595
+ </items>
596
+ </menu>
597
+ </menuItem>
598
+ </items>
599
+ </menu>
600
+ </menuItem>
601
+ <menuItem title="View" id="H8h-7b-M4v">
602
+ <modifierMask key="keyEquivalentModifierMask"/>
603
+ <menu key="submenu" title="View" id="HyV-fh-RgO">
604
+ <items>
605
+ <menuItem title="Show Toolbar" keyEquivalent="t" id="snW-S8-Cw5">
606
+ <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
607
+ <connections>
608
+ <action selector="toggleToolbarShown:" target="Ady-hI-5gd" id="BXY-wc-z0C"/>
609
+ </connections>
610
+ </menuItem>
611
+ <menuItem title="Customize Toolbar…" id="1UK-8n-QPP">
612
+ <modifierMask key="keyEquivalentModifierMask"/>
613
+ <connections>
614
+ <action selector="runToolbarCustomizationPalette:" target="Ady-hI-5gd" id="pQI-g3-MTW"/>
615
+ </connections>
616
+ </menuItem>
617
+ <menuItem isSeparatorItem="YES" id="hB3-LF-h0Y"/>
618
+ <menuItem title="Show Sidebar" keyEquivalent="s" id="kIP-vf-haE">
619
+ <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
620
+ <connections>
621
+ <action selector="toggleSidebar:" target="Ady-hI-5gd" id="iwa-gc-5KM"/>
622
+ </connections>
623
+ </menuItem>
624
+ <menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
625
+ <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
626
+ <connections>
627
+ <action selector="toggleFullScreen:" target="Ady-hI-5gd" id="dU3-MA-1Rq"/>
628
+ </connections>
629
+ </menuItem>
630
+ </items>
631
+ </menu>
632
+ </menuItem>
633
+ <menuItem title="Window" id="aUF-d1-5bR">
634
+ <modifierMask key="keyEquivalentModifierMask"/>
635
+ <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
636
+ <items>
637
+ <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
638
+ <connections>
639
+ <action selector="performMiniaturize:" target="Ady-hI-5gd" id="VwT-WD-YPe"/>
640
+ </connections>
641
+ </menuItem>
642
+ <menuItem title="Zoom" id="R4o-n2-Eq4">
643
+ <modifierMask key="keyEquivalentModifierMask"/>
644
+ <connections>
645
+ <action selector="performZoom:" target="Ady-hI-5gd" id="DIl-cC-cCs"/>
646
+ </connections>
647
+ </menuItem>
648
+ <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
649
+ <menuItem title="Bring All to Front" id="LE2-aR-0XJ">
650
+ <modifierMask key="keyEquivalentModifierMask"/>
651
+ <connections>
652
+ <action selector="arrangeInFront:" target="Ady-hI-5gd" id="DRN-fu-gQh"/>
653
+ </connections>
654
+ </menuItem>
655
+ </items>
656
+ </menu>
657
+ </menuItem>
658
+ <menuItem title="Help" id="wpr-3q-Mcd">
659
+ <modifierMask key="keyEquivalentModifierMask"/>
660
+ <menu key="submenu" title="Help" systemMenu="help" id="F2S-fz-NVQ">
661
+ <items>
662
+ <menuItem title="CarthageTest-macOS Help" keyEquivalent="?" id="FKE-Sm-Kum">
663
+ <connections>
664
+ <action selector="showHelp:" target="Ady-hI-5gd" id="y7X-2Q-9no"/>
665
+ </connections>
666
+ </menuItem>
667
+ </items>
668
+ </menu>
669
+ </menuItem>
670
+ </items>
671
+ </menu>
672
+ <connections>
673
+ <outlet property="delegate" destination="Voe-Tx-rLC" id="PrD-fu-P6m"/>
674
+ </connections>
675
+ </application>
676
+ <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModuleProvider="target"/>
677
+ <customObject id="YLy-65-1bz" customClass="NSFontManager"/>
678
+ <customObject id="Ady-hI-5gd" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
679
+ </objects>
680
+ <point key="canvasLocation" x="75" y="0.0"/>
681
+ </scene>
682
+ <!--Window Controller-->
683
+ <scene sceneID="R2V-B0-nI4">
684
+ <objects>
685
+ <windowController id="B8D-0N-5wS" sceneMemberID="viewController">
686
+ <window key="window" title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="default" id="IQv-IB-iLA">
687
+ <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
688
+ <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
689
+ <rect key="contentRect" x="196" y="240" width="480" height="270"/>
690
+ <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1027"/>
691
+ <connections>
692
+ <outlet property="delegate" destination="B8D-0N-5wS" id="98r-iN-zZc"/>
693
+ </connections>
694
+ </window>
695
+ <connections>
696
+ <segue destination="XfG-lQ-9wD" kind="relationship" relationship="window.shadowedContentViewController" id="cq2-FE-JQM"/>
697
+ </connections>
698
+ </windowController>
699
+ <customObject id="Oky-zY-oP4" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
700
+ </objects>
701
+ <point key="canvasLocation" x="75" y="250"/>
702
+ </scene>
703
+ <!--View Controller-->
704
+ <scene sceneID="hIz-AP-VOD">
705
+ <objects>
706
+ <viewController id="XfG-lQ-9wD" customClass="ViewController" customModuleProvider="target" sceneMemberID="viewController">
707
+ <view key="view" id="m2S-Jp-Qdl">
708
+ <rect key="frame" x="0.0" y="0.0" width="480" height="270"/>
709
+ <autoresizingMask key="autoresizingMask"/>
710
+ </view>
711
+ </viewController>
712
+ <customObject id="rPt-NT-nkU" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
713
+ </objects>
714
+ <point key="canvasLocation" x="75" y="655"/>
715
+ </scene>
716
+ </scenes>
717
+ </document>