From 1cdd6953e1bdd3b457884891eb6e0d273e77b834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 20 May 2021 13:12:42 +0300 Subject: [PATCH 01/11] generamba configured for pod project, created module for chapter screen --- Makefile | 8 +-- Rambafile | 6 +- SurfPlaybook.xcodeproj/project.pbxproj | 64 +++++++++++++++++++ .../ChapterModuleConfigurator.swift | 23 +++++++ .../Presenter/ChapterModuleInput.swift | 10 +++ .../Presenter/ChapterModuleOutput.swift | 10 +++ .../Chapter/Presenter/ChapterPresenter.swift | 32 ++++++++++ .../Chapter/View/ChapterViewController.swift | 33 ++++++++++ .../Chapter/View/ChapterViewController.xib | 23 +++++++ .../Main/Chapter/View/ChapterViewInput.swift | 12 ++++ .../Main/Chapter/View/ChapterViewOutput.swift | 12 ++++ 11 files changed, 226 insertions(+), 7 deletions(-) create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift diff --git a/Makefile b/Makefile index 73ea84e..62ac7d2 100644 --- a/Makefile +++ b/Makefile @@ -27,12 +27,12 @@ coordinator: bundle exec generamba gen $(modName) surf_mvp_coordinator screen: - bundle exec generamba gen $(modName) surf_mvp_coordinatable_module --module_path 'Example/SurfPlaybookExample/Flows/$(flowName)' - # bundle exec generamba gen $(modName) surf_mvp_coordinatable_module --module_path 'SurfPlaybook/Playbook/Flows/$(flowName)' + # bundle exec generamba gen $(modName) surf_mvp_coordinatable_module --module_path 'Example/SurfPlaybookExample/Flows/$(flowName)' + bundle exec generamba gen $(modName) surf_mvp_coordinatable_module --module_path 'SurfPlaybook/Playbook/Flows/$(flowName)' alert: - bundle exec generamba gen $(modName) surf_mvp_coordinatable_alert --module_path 'Example/SurfPlaybookExample/Flows/$(flowName)' - # bundle exec generamba gen $(modName) surf_mvp_coordinatable_alert --module_path 'SurfPlaybook/Playbook/Flows/$(flowName)' + # bundle exec generamba gen $(modName) surf_mvp_coordinatable_alert --module_path 'Example/SurfPlaybookExample/Flows/$(flowName)' + bundle exec generamba gen $(modName) surf_mvp_coordinatable_alert --module_path 'SurfPlaybook/Playbook/Flows/$(flowName)' doc: bundle exec jazzy --clean --build-tool-arguments -scheme,SurfPlaybook,-workspace,SurfPlaybook.xcworkspace,-sdk,iphonesimulator --output "docs" diff --git a/Rambafile b/Rambafile index 987cfde..6890dd2 100644 --- a/Rambafile +++ b/Rambafile @@ -7,13 +7,13 @@ xcodeproj_path: SurfPlaybook.xcodeproj ### Code generation settings section # The main project target name -project_targets: [SurfPlaybookExample] +project_targets: [SurfPlaybook] # The file path for new modules -project_file_path: Example/SurfPlaybookExample/Flows +project_file_path: SurfPlaybook/Playbook/Flows # The Xcode group path to new modules -project_group_path: Example/SurfPlaybookExample/Flows +project_group_path: SurfPlaybook/Playbook/Flows ### Tests generation settings section # The tests target name diff --git a/SurfPlaybook.xcodeproj/project.pbxproj b/SurfPlaybook.xcodeproj/project.pbxproj index f084de1..d33757b 100644 --- a/SurfPlaybook.xcodeproj/project.pbxproj +++ b/SurfPlaybook.xcodeproj/project.pbxproj @@ -11,6 +11,8 @@ 00C42B09001B2A7B716D5FE8 /* FlowsViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EB0B9FA579566A13722D4B8 /* FlowsViewOutput.swift */; }; 0A36BCE076D7062E2C9BDE77 /* MainViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0C60C70A0AF89D83BB71E9A7 /* MainViewController.xib */; }; 0D0CA1EFCBDB154204797243 /* UIKitViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33BD57C277A6FC9653035D8A /* UIKitViewController.swift */; }; + 0FDA2497E1C600B725C77BAF /* ChapterModuleOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2E11EF2B937F45DBD891A583 /* ChapterModuleOutput.swift */; }; + 0FEC1D830B5643F959247DA7 /* ChapterViewInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C5846B78A1DB27924801209 /* ChapterViewInput.swift */; }; 186091743F39D8D035CDD1FC /* UIKitPagePresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D044ED4A9E7C83BD88A268 /* UIKitPagePresenter.swift */; }; 1D39B94CBE656846D1B569B5 /* FlowsPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68AD20CC27AC821D2831076B /* FlowsPresenter.swift */; }; 1E391AF5442B1D4230C81E39 /* UIKitPageModuleInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA16E9822FC7674D8245AAE7 /* UIKitPageModuleInput.swift */; }; @@ -25,6 +27,8 @@ 34A950A08DBA87764925E08D /* AuthViewInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCA22B3A94A8E58687D080E7 /* AuthViewInput.swift */; }; 401408F72C380D923BBA48E7 /* SettingsViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0E5B1DAA5702C6729CD8B2EB /* SettingsViewOutput.swift */; }; 411726BF8647871F2C8A181B /* PageViewInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2748A19BB0865493E50BA3AB /* PageViewInput.swift */; }; + 465CEE9A396C2B2EA8104243 /* ChapterModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD01A9D285AED508B893E26E /* ChapterModuleConfigurator.swift */; }; + 4A3B165DC2DBD46C5F0ADFE2 /* ChapterViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36E90A4883C676E1BB348F22 /* ChapterViewOutput.swift */; }; 4C36D27B1CD073BD1E444334 /* PageViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0E6453EA00F00222B7424E /* PageViewOutput.swift */; }; 5024C2ABC870FDD1AE3D5537 /* SettingsCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B8606933B01B477E7FB8100 /* SettingsCoordinator.swift */; }; 51F198AA23895CAE2D39D241 /* SettingsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 66EA5A8FEE95BA6078FCC2CA /* SettingsViewController.xib */; }; @@ -183,11 +187,14 @@ 90F3DCD3262DF31500220B28 /* UICollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F3DCD2262DF31500220B28 /* UICollectionView.swift */; }; 90F3DCDB262DF54C00220B28 /* MainAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90F3DCDA262DF54C00220B28 /* MainAdapter.swift */; }; 93578423C0F9E6B45DF34472 /* Pods_SurfPlaybookTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17A9FF310115EC4E63B82CA2 /* Pods_SurfPlaybookTests.framework */; }; + 9412B99DC369767C29EF570A /* ChapterPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9DCF6A6B16BA9514DC5938C1 /* ChapterPresenter.swift */; }; + 955FF9D933DC02A8408F3A67 /* ChapterViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60E63A61082240A7D13F3DAA /* ChapterViewController.swift */; }; 959D6F1F6AC03D990EF54A89 /* Pods_SurfPlaybookExampleTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E1C3827D8C9AB6DF9042487 /* Pods_SurfPlaybookExampleTests.framework */; }; 997063C6027BA770196E29BF /* TabBarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B4C45498CCE35BA3E4CE456 /* TabBarViewController.swift */; }; 999117355B83ADA07531CF5D /* UIKitPageViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 22888AD081D0FAC6B6E8137E /* UIKitPageViewOutput.swift */; }; 9B8ED3E24BE12A6AF338B201 /* MainViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52AC98D605FB125DAEC92F9A /* MainViewController.swift */; }; 9E6264B7E566023973766BC6 /* FlowsModuleConfigurator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70C1D6A32605CA48D732C2B8 /* FlowsModuleConfigurator.swift */; }; + 9F1F700192769D6FAAF25AC2 /* ChapterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DE94EDF8CF57F23748B03FCB /* ChapterViewController.xib */; }; A0342EA67275D6E42DAF0D48 /* Pods_SurfPlaybook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1E49CE830032A6C005B119B /* Pods_SurfPlaybook.framework */; }; A265E2CBCB5810207133A038 /* AuthViewOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C95E2589FB8A3B840E0BF97 /* AuthViewOutput.swift */; }; A3124A87EB5C51F89FF10B22 /* MainCoordinatorOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48EA7D2C848914D73AA5C01A /* MainCoordinatorOutput.swift */; }; @@ -207,6 +214,7 @@ D2B24A3381EC318C03185783 /* ListPresenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = A7B3539D957EBC54828EC2A9 /* ListPresenter.swift */; }; D51F39CE6ACE4D756CC4B84B /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B15E03553E65B4C229FA27E6 /* SettingsViewController.swift */; }; D5B0EE92AC454A1A4290228C /* UIKitPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E8F309FD675598D53DA2CFEB /* UIKitPageViewController.swift */; }; + D8F6973FB9C2308ADD06644C /* ChapterModuleInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10F0A8DFA3DF445FB39782E /* ChapterModuleInput.swift */; }; DA39EF818C6B184A8DF79C22 /* FlowsModuleOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = B962A68A169668586197369F /* FlowsModuleOutput.swift */; }; DAF58B7F70E96B7465147E05 /* UIKitPageViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 0855D5D8296A0888A1488D64 /* UIKitPageViewController.xib */; }; DB25481993B20257C020DD9B /* SettingsViewInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AAD3FBB9E65DEFEFCED9A88 /* SettingsViewInput.swift */; }; @@ -271,6 +279,7 @@ /* Begin PBXFileReference section */ 0855D5D8296A0888A1488D64 /* UIKitPageViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = UIKitPageViewController.xib; sourceTree = ""; }; + 0C5846B78A1DB27924801209 /* ChapterViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterViewInput.swift; sourceTree = ""; }; 0C60C70A0AF89D83BB71E9A7 /* MainViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = MainViewController.xib; sourceTree = ""; }; 0E5B1DAA5702C6729CD8B2EB /* SettingsViewOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsViewOutput.swift; sourceTree = ""; }; 10AD570C280E9A19977DEE2C /* AuthViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = AuthViewController.xib; sourceTree = ""; }; @@ -290,10 +299,12 @@ 294EF8E657216DA4EE28E1B4 /* SettingsModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsModuleOutput.swift; sourceTree = ""; }; 2AAD3FBB9E65DEFEFCED9A88 /* SettingsViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsViewInput.swift; sourceTree = ""; }; 2C8179F5709D1A022B385B1C /* UIKitPageModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIKitPageModuleOutput.swift; sourceTree = ""; }; + 2E11EF2B937F45DBD891A583 /* ChapterModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterModuleOutput.swift; sourceTree = ""; }; 2EB7110238C2000942BD3D05 /* SettingsModuleConfigurator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsModuleConfigurator.swift; sourceTree = ""; }; 3264128DC28DFCC023F3350B /* AuthModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthModuleInput.swift; sourceTree = ""; }; 33BD57C277A6FC9653035D8A /* UIKitViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIKitViewController.swift; sourceTree = ""; }; 35A6D02EDA848F65C849A1A8 /* TabBarModuleConfigurator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarModuleConfigurator.swift; sourceTree = ""; }; + 36E90A4883C676E1BB348F22 /* ChapterViewOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterViewOutput.swift; sourceTree = ""; }; 39D69A2918862769602DC2EB /* PageModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PageModuleOutput.swift; sourceTree = ""; }; 3C4E9B0F83D1D0AC66496851 /* UIKitModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIKitModuleInput.swift; sourceTree = ""; }; 3D7511F78DF69182DA212D85 /* AuthViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthViewController.swift; sourceTree = ""; }; @@ -314,6 +325,7 @@ 58F0F35A2DF42AA653381DF2 /* FlowsViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FlowsViewInput.swift; sourceTree = ""; }; 5CABA18E205ED54F931E9E66 /* PageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PageViewController.swift; sourceTree = ""; }; 5D02728BEF3D5590BA37F167 /* AuthModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthModuleOutput.swift; sourceTree = ""; }; + 60E63A61082240A7D13F3DAA /* ChapterViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterViewController.swift; sourceTree = ""; }; 65EC341F0E6DCB99D511CD9D /* TabBarPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarPresenter.swift; sourceTree = ""; }; 66504BE2B7675AC648B3F3DE /* TabBarViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarViewInput.swift; sourceTree = ""; }; 66EA5A8FEE95BA6078FCC2CA /* SettingsViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = SettingsViewController.xib; sourceTree = ""; }; @@ -478,6 +490,7 @@ 96C8E302CF69F22A10D4823A /* MainViewOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainViewOutput.swift; sourceTree = ""; }; 9752C78AA1B2DBB903255B28 /* PageModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = PageModuleInput.swift; sourceTree = ""; }; 9B4C45498CCE35BA3E4CE456 /* TabBarViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarViewController.swift; sourceTree = ""; }; + 9DCF6A6B16BA9514DC5938C1 /* ChapterPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterPresenter.swift; sourceTree = ""; }; A09E0626D80EDF223D85CDF9 /* TabBarModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarModuleOutput.swift; sourceTree = ""; }; A298E82A12DE72AFF1934264 /* MainPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainPresenter.swift; sourceTree = ""; }; A37C6B203F9BC12C97A4DA4C /* SettingsPresenter.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsPresenter.swift; sourceTree = ""; }; @@ -489,6 +502,8 @@ B962A68A169668586197369F /* FlowsModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = FlowsModuleOutput.swift; sourceTree = ""; }; BA400EF9624EB1AF748BF6FF /* Pods_SurfPlaybookExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SurfPlaybookExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BB57B4CC77551B75B0726C80 /* AuthModuleConfigurator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthModuleConfigurator.swift; sourceTree = ""; }; + BD01A9D285AED508B893E26E /* ChapterModuleConfigurator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterModuleConfigurator.swift; sourceTree = ""; }; + C10F0A8DFA3DF445FB39782E /* ChapterModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ChapterModuleInput.swift; sourceTree = ""; }; C83341D881ED3F494E99C18D /* TabBarModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = TabBarModuleInput.swift; sourceTree = ""; }; CC59CF316071B9FA15D726A5 /* MainModuleOutput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainModuleOutput.swift; sourceTree = ""; }; D179BBB1B51D8593020ACD64 /* SettingsModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = SettingsModuleInput.swift; sourceTree = ""; }; @@ -498,6 +513,7 @@ D9F55F8F65B17F435DA0FED8 /* Pods-SurfPlaybookExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SurfPlaybookExample.debug.xcconfig"; path = "Target Support Files/Pods-SurfPlaybookExample/Pods-SurfPlaybookExample.debug.xcconfig"; sourceTree = ""; }; DA16E9822FC7674D8245AAE7 /* UIKitPageModuleInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIKitPageModuleInput.swift; sourceTree = ""; }; DCA22B3A94A8E58687D080E7 /* AuthViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = AuthViewInput.swift; sourceTree = ""; }; + DE94EDF8CF57F23748B03FCB /* ChapterViewController.xib */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = file.xib; path = ChapterViewController.xib; sourceTree = ""; }; E0DA3F23E11D24E744AE3D8B /* ListViewInput.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ListViewInput.swift; sourceTree = ""; }; E78A812F1F935ED653461167 /* ListViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = ListViewController.swift; sourceTree = ""; }; E8F309FD675598D53DA2CFEB /* UIKitPageViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = UIKitPageViewController.swift; sourceTree = ""; }; @@ -574,6 +590,16 @@ path = Page; sourceTree = ""; }; + 107D1DE737B7781A6F3F6DE7 /* Chapter */ = { + isa = PBXGroup; + children = ( + 782C105B3CE3E2F6DAB54B67 /* Configurator */, + FAA358808778C5AB974AF9ED /* Presenter */, + 697EF5DD532C1B93B3411C6B /* View */, + ); + path = Chapter; + sourceTree = ""; + }; 1B0C64E4663BF341F1A7ED98 /* Presenter */ = { isa = PBXGroup; children = ( @@ -637,6 +663,7 @@ children = ( 8E21E94407AB048F4588B3FD /* MainCoordinator.swift */, 48EA7D2C848914D73AA5C01A /* MainCoordinatorOutput.swift */, + 107D1DE737B7781A6F3F6DE7 /* Chapter */, A2BB8665E3B354B654F52E0F /* Main */, 0BC08F4E61DA424922411EF8 /* Page */, ); @@ -726,6 +753,17 @@ path = Flows; sourceTree = ""; }; + 697EF5DD532C1B93B3411C6B /* View */ = { + isa = PBXGroup; + children = ( + 60E63A61082240A7D13F3DAA /* ChapterViewController.swift */, + DE94EDF8CF57F23748B03FCB /* ChapterViewController.xib */, + 0C5846B78A1DB27924801209 /* ChapterViewInput.swift */, + 36E90A4883C676E1BB348F22 /* ChapterViewOutput.swift */, + ); + path = View; + sourceTree = ""; + }; 6D5771E0184A406E4616FA45 /* Flows */ = { isa = PBXGroup; children = ( @@ -747,6 +785,14 @@ path = View; sourceTree = ""; }; + 782C105B3CE3E2F6DAB54B67 /* Configurator */ = { + isa = PBXGroup; + children = ( + BD01A9D285AED508B893E26E /* ChapterModuleConfigurator.swift */, + ); + path = Configurator; + sourceTree = ""; + }; 7C620489E8E81E02CB9467D4 /* Settings */ = { isa = PBXGroup; children = ( @@ -1841,6 +1887,16 @@ path = Presenter; sourceTree = ""; }; + FAA358808778C5AB974AF9ED /* Presenter */ = { + isa = PBXGroup; + children = ( + 9DCF6A6B16BA9514DC5938C1 /* ChapterPresenter.swift */, + C10F0A8DFA3DF445FB39782E /* ChapterModuleInput.swift */, + 2E11EF2B937F45DBD891A583 /* ChapterModuleOutput.swift */, + ); + path = Presenter; + sourceTree = ""; + }; FB53192A00D67CF5104D7879 /* View */ = { isa = PBXGroup; children = ( @@ -2017,6 +2073,7 @@ 8CB5F55CA26F7051233EE675 /* UIKitViewController.xib in Resources */, DAF58B7F70E96B7465147E05 /* UIKitPageViewController.xib in Resources */, 71C9AB03605848DD54C689B5 /* PageViewController.xib in Resources */, + 9F1F700192769D6FAAF25AC2 /* ChapterViewController.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2356,6 +2413,13 @@ 411726BF8647871F2C8A181B /* PageViewInput.swift in Sources */, 4C36D27B1CD073BD1E444334 /* PageViewOutput.swift in Sources */, 9022F4CE2638C279008839A0 /* ColorsConfig.swift in Sources */, + 465CEE9A396C2B2EA8104243 /* ChapterModuleConfigurator.swift in Sources */, + 9412B99DC369767C29EF570A /* ChapterPresenter.swift in Sources */, + D8F6973FB9C2308ADD06644C /* ChapterModuleInput.swift in Sources */, + 0FDA2497E1C600B725C77BAF /* ChapterModuleOutput.swift in Sources */, + 955FF9D933DC02A8408F3A67 /* ChapterViewController.swift in Sources */, + 0FEC1D830B5643F959247DA7 /* ChapterViewInput.swift in Sources */, + 4A3B165DC2DBD46C5F0ADFE2 /* ChapterViewOutput.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift new file mode 100644 index 0000000..8a12a5a --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift @@ -0,0 +1,23 @@ +// +// ChapterModuleConfigurator.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +import UIKit + +final class ChapterModuleConfigurator { + + func configure() -> (UIViewController, ChapterModuleOutput) { + let view = ChapterViewController() + let presenter = ChapterPresenter() + + presenter.view = view + view.output = presenter + + return (view, presenter) + } + +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift new file mode 100644 index 0000000..dd09451 --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift @@ -0,0 +1,10 @@ +// +// ChapterModuleInput.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +protocol ChapterModuleInput: class { +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift new file mode 100644 index 0000000..d30b81a --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift @@ -0,0 +1,10 @@ +// +// ChapterModuleOutput.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +protocol ChapterModuleOutput: class { +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift new file mode 100644 index 0000000..d7ced67 --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift @@ -0,0 +1,32 @@ +// +// ChapterPresenter.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +final class ChapterPresenter: ChapterModuleOutput { + + // MARK: - ChapterModuleOutput + + // MARK: - Properties + + weak var view: ChapterViewInput? + +} + +// MARK: - ChapterModuleInput + +extension ChapterPresenter: ChapterModuleInput { +} + +// MARK: - ChapterViewOutput + +extension ChapterPresenter: ChapterViewOutput { + + func viewLoaded() { + view?.setupInitialState() + } + +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift new file mode 100644 index 0000000..7c99f5d --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift @@ -0,0 +1,33 @@ +// +// ChapterViewController.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +import UIKit + +final class ChapterViewController: UIViewController { + + // MARK: - Properties + + var output: ChapterViewOutput? + + // MARK: - UIViewController + + override func viewDidLoad() { + super.viewDidLoad() + output?.viewLoaded() + } + +} + +// MARK: - ChapterViewInput + +extension ChapterViewController: ChapterViewInput { + + func setupInitialState() { + } + +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib new file mode 100644 index 0000000..fce23d4 --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift new file mode 100644 index 0000000..f4cc582 --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift @@ -0,0 +1,12 @@ +// +// ChapterViewInput.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +protocol ChapterViewInput: class { + /// Method for setup initial state of view + func setupInitialState() +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift new file mode 100644 index 0000000..d0163db --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift @@ -0,0 +1,12 @@ +// +// ChapterViewOutput.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 20/05/2021. +// Copyright © 2021 Surf. All rights reserved. +// + +protocol ChapterViewOutput { + /// Notify presenter that view is ready + func viewLoaded() +} From 56150f52544dbe24d9da9c8ddee4a257972dcc19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 20 May 2021 13:59:13 +0300 Subject: [PATCH 02/11] created button to transition on new screen, refactoring in localized strings --- .../Reusable/SearchBar/SearchBar.swift | 2 +- .../Core/Customization/StringsConfig.swift | 2 ++ .../Flows/View/FlowsViewController.swift | 2 +- .../Main/Presenter/MainModuleOutput.swift | 1 + .../Main/Main/Presenter/MainPresenter.swift | 8 +++++++ .../ChapterCell/ChapterTableViewCell.swift | 23 +++++++++++++++++++ .../ChapterCell/ChapterTableViewCell.xib | 22 ++++++++++++++++-- .../Main/Main/View/Adapter/MainAdapter.swift | 4 ++++ .../Main/Main/View/MainViewController.swift | 5 +++- .../Flows/Main/Main/View/MainViewOutput.swift | 1 + .../Playbook/Flows/Main/MainCoordinator.swift | 8 +++++++ .../UIKit/View/UIKitViewController.swift | 2 +- SurfPlaybook/Resources/Strings/Strings.swift | 4 ++++ .../Strings/en.lproj/Localizable.strings | 1 + .../Strings/ru.lproj/Localizable.strings | 1 + 15 files changed, 80 insertions(+), 6 deletions(-) diff --git a/SurfPlaybook/Library/Reusable/SearchBar/SearchBar.swift b/SurfPlaybook/Library/Reusable/SearchBar/SearchBar.swift index aaebe65..65dce4c 100644 --- a/SurfPlaybook/Library/Reusable/SearchBar/SearchBar.swift +++ b/SurfPlaybook/Library/Reusable/SearchBar/SearchBar.swift @@ -167,7 +167,7 @@ private extension SearchBar { clearButton.alpha = 0 cancelButton.apply(style: .textActive) - cancelButton.setTitle(L10n.Common.Titles.cancel, for: .normal) + cancelButton.setTitle(StringsConfig.cancel, for: .normal) cancelButton.contentEdgeInsets = .zero cancelButton.alpha = 0 } diff --git a/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift b/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift index b309d2c..b2739d2 100644 --- a/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift +++ b/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift @@ -23,6 +23,8 @@ public enum StringsConfig { public static var searchBarPlaceholder = L10n.Main.SearchBar.placeholder public static var emptySearchMessage = L10n.Main.EmptySearch.message + public static var emptyStateMessage = L10n.Main.EmptyState.message + public static var showAllTitle = L10n.Main.ShowAll.title public static var coloredBackgroundName = L10n.Settings.ColoredBackground.name diff --git a/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewController.swift b/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewController.swift index ba3acd0..1ee7bce 100644 --- a/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewController.swift +++ b/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewController.swift @@ -39,7 +39,7 @@ extension FlowsViewController: FlowsViewInput { func setupInitialState(title: String?, flowCoordinators: [PlaybookFlowCoordinator]) { configureAppearance(title: title) if flowCoordinators.isEmpty { - setup(state: .empty(text: L10n.Main.EmptyState.message)) + setup(state: .empty(text: StringsConfig.emptyStateMessage)) } else { setup(state: .normal) adapter?.fill(with: flowCoordinators) diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift index 6e1fb1d..a7f2ff8 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift @@ -8,4 +8,5 @@ protocol MainModuleOutput: class { var onPageShow: Closure? { get set } + var onChapterShow: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainPresenter.swift b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainPresenter.swift index a8d3b62..141a372 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainPresenter.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainPresenter.swift @@ -11,6 +11,7 @@ final class MainPresenter: MainModuleOutput { // MARK: - MainModuleOutput var onPageShow: Closure? + var onChapterShow: Closure? // MARK: - Properties @@ -46,6 +47,13 @@ extension MainPresenter: MainViewOutput { onPageShow?(model.playbookPage) } + func showChapter(_ model: ChapterModel) { + guard let chapter = chaptersModels.first(where: { $0.name == model.name }) else { + return + } + onChapterShow?(chapter) + } + func filter(by text: String) { searchString = text guard !text.isEmpty else { diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.swift b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.swift index 315d623..812fe47 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.swift @@ -21,11 +21,13 @@ final class ChapterTableViewCell: UITableViewCell { // MARK: - IBOutlets @IBOutlet private weak var titleLabel: UILabel! + @IBOutlet private weak var showChapterButton: CommonButton! @IBOutlet private weak var collectionView: UICollectionView! // MARK: - Properties var onPageSelect: Closure? + var onChapterSelect: EmptyClosure? // MARK: - Private Properties @@ -56,10 +58,21 @@ private extension ChapterTableViewCell { func configureAppearance() { selectionStyle = .none contentView.backgroundColor = Colors.Main.background + ocnfigureButton() configureCollectionView() configureCollectionViewLayout() } + func ocnfigureButton() { + let arrowImage = Resources.Assets.Icons.rightArrow.image.mask(with: Colors.Text.active) + showChapterButton.semanticContentAttribute = .forceRightToLeft + showChapterButton.setTitle(StringsConfig.showAllTitle, for: .normal) + showChapterButton.setImage(arrowImage, for: .normal) + showChapterButton.setImage(arrowImage.mask(with: 0.5), for: .highlighted) + showChapterButton.apply(style: .textActive) + showChapterButton.imageEdgeInsets = .init(top: 2, left: 0, bottom: 0, right: 0) + } + func configureCollectionView() { collectionView.backgroundColor = Colors.Main.background collectionView.decelerationRate = .fast @@ -114,3 +127,13 @@ extension ChapterTableViewCell: UICollectionViewDelegate { } } + +// MARK: - Actions + +private extension ChapterTableViewCell { + + @IBAction func openChapter(_ sender: Any) { + onChapterSelect?() + } + +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.xib b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.xib index f3d2757..c80e84f 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.xib +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/ChapterCell/ChapterTableViewCell.xib @@ -19,7 +19,7 @@ + + + - + + + + diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/MainAdapter.swift b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/MainAdapter.swift index 47b992e..c40ec8f 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/MainAdapter.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/Adapter/MainAdapter.swift @@ -18,6 +18,7 @@ final class MainAdapter: NSObject { // MARK: - Properties var onPageSelect: Closure? + var onChapterSelect: Closure? // MARK: - Initialization @@ -57,6 +58,9 @@ extension MainAdapter: UITableViewDataSource { cell.onPageSelect = { [weak self] page in self?.onPageSelect?(page) } + cell.onChapterSelect = { [weak self] in + self?.onChapterSelect?(model) + } return cell } diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewController.swift b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewController.swift index ba305b8..9ba4501 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewController.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewController.swift @@ -60,7 +60,7 @@ extension MainViewController: MainViewInput { func fill(with models: [ChapterModel]) { if models.isEmpty { - setup(state: .empty(text: L10n.Main.EmptyState.message)) + setup(state: .empty(text: StringsConfig.emptyStateMessage)) } else { adapter?.fill(with: models) } @@ -113,6 +113,9 @@ private extension MainViewController { self?.closeKeyboard() self?.output?.showPage(page) } + adapter?.onChapterSelect = { [weak self] chapter in + self?.output?.showChapter(chapter) + } } func configureSearchBar() { diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewOutput.swift index 127b619..8f690f6 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewOutput.swift @@ -9,6 +9,7 @@ protocol MainViewOutput { func viewLoaded() func showPage(_ model: PageModel) + func showChapter(_ model: ChapterModel) func filter(by text: String) /// Метод вызывается после смены пользователем системной темы (light/dark) func refresh() diff --git a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift index bc14490..c7be871 100644 --- a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift +++ b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift @@ -37,6 +37,9 @@ private extension MainCoordinator { output.onPageShow = { [weak self] page in self?.showPlaybookPage(page) } + output.onChapterShow = { [weak self] chapter in + self?.showPlaybookChapter(chapter) + } router.setNavigationControllerRootModule(view, animated: false, hideBar: false) } @@ -56,4 +59,9 @@ private extension MainCoordinator { router.present(view) } + func showPlaybookChapter(_ model: ChapterModel) { + let (view, _) = ChapterModuleConfigurator().configure() + router.push(view) + } + } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewController.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewController.swift index 47e31f8..03c4421 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewController.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewController.swift @@ -39,7 +39,7 @@ extension UIKitViewController: UIKitViewInput { func setupInitialState(pages: [PlaybookUIKitPage]) { configureAppearance() if pages.isEmpty { - setup(state: .empty(text: L10n.Main.EmptyState.message)) + setup(state: .empty(text: StringsConfig.emptyStateMessage)) } else { setup(state: .normal) adapter?.update(with: pages) diff --git a/SurfPlaybook/Resources/Strings/Strings.swift b/SurfPlaybook/Resources/Strings/Strings.swift index b8711b2..7157894 100644 --- a/SurfPlaybook/Resources/Strings/Strings.swift +++ b/SurfPlaybook/Resources/Strings/Strings.swift @@ -33,6 +33,10 @@ internal enum L10n { /// Поиск internal static let placeholder = L10n.tr("Localizable", "Main.SearchBar.placeholder") } + internal enum ShowAll { + /// Все + internal static let title = L10n.tr("Localizable", "Main.ShowAll.title") + } } internal enum Settings { diff --git a/SurfPlaybook/Resources/Strings/en.lproj/Localizable.strings b/SurfPlaybook/Resources/Strings/en.lproj/Localizable.strings index 10cd5ba..e692bc3 100644 --- a/SurfPlaybook/Resources/Strings/en.lproj/Localizable.strings +++ b/SurfPlaybook/Resources/Strings/en.lproj/Localizable.strings @@ -16,6 +16,7 @@ "Main.SearchBar.placeholder" = "Search"; "Main.EmptySearch.message" = "Nothing found :("; "Main.EmptyState.message" = "There is nothing here yet :("; +"Main.ShowAll.title" = "All"; "Settings.ColoredBackground.name" = "Colored background"; diff --git a/SurfPlaybook/Resources/Strings/ru.lproj/Localizable.strings b/SurfPlaybook/Resources/Strings/ru.lproj/Localizable.strings index 6d279ee..5a6b28f 100644 --- a/SurfPlaybook/Resources/Strings/ru.lproj/Localizable.strings +++ b/SurfPlaybook/Resources/Strings/ru.lproj/Localizable.strings @@ -16,6 +16,7 @@ "Main.SearchBar.placeholder" = "Поиск"; "Main.EmptySearch.message" = "Ничего не найдено :("; "Main.EmptyState.message" = "Здесь еще ничего нет :("; +"Main.ShowAll.title" = "Все"; "Settings.ColoredBackground.name" = "Цветной бэкграунд"; From 7e597aa5ba6a3c0351e069d1cbd13c2de5226702 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 20 May 2021 14:02:40 +0300 Subject: [PATCH 03/11] fixed controller creating --- .../Configurator/ChapterModuleConfigurator.swift | 2 +- .../Main/Chapter/View/ChapterViewController.xib | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift index 8a12a5a..9d82df9 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift @@ -11,7 +11,7 @@ import UIKit final class ChapterModuleConfigurator { func configure() -> (UIViewController, ChapterModuleOutput) { - let view = ChapterViewController() + let view = UIViewController.instantiate(ofType: ChapterViewController.self) let presenter = ChapterPresenter() presenter.view = view diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib index fce23d4..0f0164b 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib @@ -1,14 +1,13 @@ - - - - + + - + + - + @@ -18,6 +17,7 @@ + - \ No newline at end of file + From 2fbc207808cd318c8ad8b1551f71f39c4ee41c83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 27 May 2021 19:27:55 +0300 Subject: [PATCH 04/11] layout for collection view --- SurfPlaybook.xcodeproj/project.pbxproj | 12 ++ .../ChapterModuleConfigurator.swift | 4 +- .../Chapter/Presenter/ChapterPresenter.swift | 12 +- .../Chapter/View/Adapter/ChapterAdapter.swift | 123 ++++++++++++++++++ .../Chapter/View/ChapterViewController.swift | 34 ++++- .../Chapter/View/ChapterViewController.xib | 31 ++++- .../Main/Chapter/View/ChapterViewInput.swift | 2 +- .../Playbook/Flows/Main/MainCoordinator.swift | 4 +- 8 files changed, 213 insertions(+), 9 deletions(-) create mode 100644 SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift diff --git a/SurfPlaybook.xcodeproj/project.pbxproj b/SurfPlaybook.xcodeproj/project.pbxproj index d33757b..413fcd6 100644 --- a/SurfPlaybook.xcodeproj/project.pbxproj +++ b/SurfPlaybook.xcodeproj/project.pbxproj @@ -48,6 +48,7 @@ 87A98871C1AED1D915A4903C /* TabBarCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDD850BE3FCC7764BD1A2FB5 /* TabBarCoordinator.swift */; }; 89B7B9813706DC401591A44B /* FlowsCoordinatorOutput.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B09A4FCC75EDE050789E467 /* FlowsCoordinatorOutput.swift */; }; 8CB5F55CA26F7051233EE675 /* UIKitViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 72118F3CFDAB7E3B36E0C746 /* UIKitViewController.xib */; }; + 90036EA1265FEF5900B315BA /* ChapterAdapter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90036EA0265FEF5900B315BA /* ChapterAdapter.swift */; }; 9009083C262EF8F30075559A /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9009083B262EF8F30075559A /* SearchBar.swift */; }; 90090844262EF8FB0075559A /* SearchBar.xib in Resources */ = {isa = PBXBuildFile; fileRef = 90090843262EF8FB0075559A /* SearchBar.xib */; }; 9009084A262EF9AC0075559A /* SearchTextField.swift in Sources */ = {isa = PBXBuildFile; fileRef = 90090849262EF9AC0075559A /* SearchTextField.swift */; }; @@ -340,6 +341,7 @@ 7E1C3827D8C9AB6DF9042487 /* Pods_SurfPlaybookExampleTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_SurfPlaybookExampleTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8A83D42FB73C46FF751152BF /* Pods-SurfPlaybookTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SurfPlaybookTests.release.xcconfig"; path = "Target Support Files/Pods-SurfPlaybookTests/Pods-SurfPlaybookTests.release.xcconfig"; sourceTree = ""; }; 8E21E94407AB048F4588B3FD /* MainCoordinator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = MainCoordinator.swift; sourceTree = ""; }; + 90036EA0265FEF5900B315BA /* ChapterAdapter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChapterAdapter.swift; sourceTree = ""; }; 9009083B262EF8F30075559A /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; }; 90090843262EF8FB0075559A /* SearchBar.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchBar.xib; sourceTree = ""; }; 90090849262EF9AC0075559A /* SearchTextField.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchTextField.swift; sourceTree = ""; }; @@ -756,6 +758,7 @@ 697EF5DD532C1B93B3411C6B /* View */ = { isa = PBXGroup; children = ( + 90BF077226568338004FC080 /* Adapter */, 60E63A61082240A7D13F3DAA /* ChapterViewController.swift */, DE94EDF8CF57F23748B03FCB /* ChapterViewController.xib */, 0C5846B78A1DB27924801209 /* ChapterViewInput.swift */, @@ -1095,6 +1098,14 @@ path = View; sourceTree = ""; }; + 90BF077226568338004FC080 /* Adapter */ = { + isa = PBXGroup; + children = ( + 90036EA0265FEF5900B315BA /* ChapterAdapter.swift */, + ); + path = Adapter; + sourceTree = ""; + }; 90C8B38B2625C55500851B00 = { isa = PBXGroup; children = ( @@ -2407,6 +2418,7 @@ 999117355B83ADA07531CF5D /* UIKitPageViewOutput.swift in Sources */, 2401B856420F980A03BF37EB /* PageModuleConfigurator.swift in Sources */, C60FBA26574297963262D110 /* PagePresenter.swift in Sources */, + 90036EA1265FEF5900B315BA /* ChapterAdapter.swift in Sources */, 28744AF4964D6A3923892642 /* PageModuleInput.swift in Sources */, ED5F6AC4E8551B1A5FA2711C /* PageModuleOutput.swift in Sources */, F4578E9572F2E39E7DDA930A /* PageViewController.swift in Sources */, diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift index 9d82df9..cf5c6b6 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Configurator/ChapterModuleConfigurator.swift @@ -10,9 +10,9 @@ import UIKit final class ChapterModuleConfigurator { - func configure() -> (UIViewController, ChapterModuleOutput) { + func configure(chapter: ChapterModel) -> (UIViewController, ChapterModuleOutput) { let view = UIViewController.instantiate(ofType: ChapterViewController.self) - let presenter = ChapterPresenter() + let presenter = ChapterPresenter(chapter: chapter) presenter.view = view view.output = presenter diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift index d7ced67..22306f2 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift @@ -14,6 +14,16 @@ final class ChapterPresenter: ChapterModuleOutput { weak var view: ChapterViewInput? + // MARK: - Private Properties + + private let chapter: ChapterModel + + // MARK: - Initialization + + init(chapter: ChapterModel) { + self.chapter = chapter + } + } // MARK: - ChapterModuleInput @@ -26,7 +36,7 @@ extension ChapterPresenter: ChapterModuleInput { extension ChapterPresenter: ChapterViewOutput { func viewLoaded() { - view?.setupInitialState() + view?.setupInitialState(with: chapter) } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift new file mode 100644 index 0000000..d4d7e12 --- /dev/null +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift @@ -0,0 +1,123 @@ +// +// ChapterAdapter.swift +// SurfPlaybook +// +// Created by Александр Чаусов on 27.05.2021. +// Copyright © 2021 Surf. All rights reserved. +// + +import UIKit + +final class ChapterAdapter: NSObject { + + // MARK: - Constants + + private enum Constants { + static let cellHeight: CGFloat = 209 + static let sectionInset: UIEdgeInsets = .init(top: 20, left: 8, bottom: 20, right: 8) + static let lineSpacing: CGFloat = 8 + } + + // MARK: - Properties + + var onPageSelect: Closure? + + // MARK: - Private Properties + + private weak var collectionView: UICollectionView? + private var pages: [PageModel] = [] + + // MARK: - Initialization + + init(collectionView: UICollectionView) { + super.init() + + self.collectionView = collectionView + configureCollectionView() + configureCollectionViewLayout() + } + + // MARK: - Methods + + func update(with pages: [PageModel]) { + self.pages = pages + collectionView?.reloadData() + } + +} + +// MARK: - Configuration + +private extension ChapterAdapter { + + func configureCollectionView() { + collectionView?.delegate = self + collectionView?.dataSource = self + collectionView?.registerNib(PageCollectionViewCell.self) + collectionView?.clipsToBounds = false + collectionView?.alwaysBounceVertical = true + } + + func configureCollectionViewLayout() { + let layout = UICollectionViewFlowLayout() + layout.scrollDirection = .vertical + layout.itemSize = .init(width: appropriateCellWidth(), height: Constants.cellHeight) + layout.sectionInset = Constants.sectionInset + layout.minimumLineSpacing = Constants.lineSpacing + layout.minimumInteritemSpacing = appropriateInterItemSpace() + collectionView?.setCollectionViewLayout(layout, animated: false) + } + +} + +// MARK: - UICollectionViewDataSource + +extension ChapterAdapter: UICollectionViewDataSource { + + func collectionView(_ collectionView: UICollectionView, + numberOfItemsInSection section: Int) -> Int { + return pages.count * 5 + } + + func collectionView(_ collectionView: UICollectionView, + cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { + guard let cell = collectionView.dequeueReusableCell(PageCollectionViewCell.self, indexPath: indexPath) else { + return UICollectionViewCell() + } + let page = pages[indexPath.row % pages.count] + cell.configure(with: page) + return cell + } + +} + +// MARK: - UICollectionViewDelegate + +extension ChapterAdapter: UICollectionViewDelegate { + + func collectionView(_ collectionView: UICollectionView, + didSelectItemAt indexPath: IndexPath) { + onPageSelect?(pages[indexPath.row]) + } + +} + +// MARK: - Private Methods + +private extension ChapterAdapter { + + func appropriateCellWidth() -> CGFloat { + let fixedSpaces = [ + appropriateInterItemSpace(), + Constants.sectionInset.left, + Constants.sectionInset.right + ].reduce(0, +) + let availableWidth = UIScreen.main.bounds.width - fixedSpaces + return availableWidth / 2 + } + + func appropriateInterItemSpace() -> CGFloat { + return UIScreen.main.bounds.width.truncatingRemainder(dividingBy: 2) + } + +} diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift index 7c99f5d..a56cf76 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift @@ -10,10 +10,18 @@ import UIKit final class ChapterViewController: UIViewController { + // MARK: - IBOutlets + + @IBOutlet private weak var collectionView: UICollectionView! + // MARK: - Properties var output: ChapterViewOutput? + // MARK: - Private Properties + + private var adapter: ChapterAdapter? + // MARK: - UIViewController override func viewDidLoad() { @@ -27,7 +35,31 @@ final class ChapterViewController: UIViewController { extension ChapterViewController: ChapterViewInput { - func setupInitialState() { + func setupInitialState(with chapter: ChapterModel) { + configureAppearance(chapter: chapter) + adapter?.update(with: chapter.pages) + } + +} + +// MARK: - Appearance + +private extension ChapterViewController { + + func configureAppearance(chapter: ChapterModel) { + configureNavigationBar(title: chapter.name) + configureAdapter() + + view.backgroundColor = Colors.Main.background + collectionView.backgroundColor = Colors.Main.background + } + + func configureNavigationBar(title: String) { + navigationItem.title = title + } + + func configureAdapter() { + adapter = ChapterAdapter(collectionView: collectionView) } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib index 0f0164b..729cbc3 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.xib @@ -1,14 +1,17 @@ - + - + + + + @@ -16,8 +19,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift index f4cc582..80e9ca8 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift @@ -8,5 +8,5 @@ protocol ChapterViewInput: class { /// Method for setup initial state of view - func setupInitialState() + func setupInitialState(with chapter: ChapterModel) } diff --git a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift index c7be871..3a5884d 100644 --- a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift +++ b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift @@ -59,8 +59,8 @@ private extension MainCoordinator { router.present(view) } - func showPlaybookChapter(_ model: ChapterModel) { - let (view, _) = ChapterModuleConfigurator().configure() + func showPlaybookChapter(_ chapter: ChapterModel) { + let (view, _) = ChapterModuleConfigurator().configure(chapter: chapter) router.push(view) } From 7603b0b8a7c642dd89929a8b1e346d515567e906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 27 May 2021 19:32:59 +0300 Subject: [PATCH 05/11] logic for opening page module --- .../Chapter/Presenter/ChapterModuleOutput.swift | 1 + .../Main/Chapter/Presenter/ChapterPresenter.swift | 6 ++++++ .../Main/Chapter/View/ChapterViewController.swift | 3 +++ .../Flows/Main/Chapter/View/ChapterViewInput.swift | 1 - .../Flows/Main/Chapter/View/ChapterViewOutput.swift | 2 +- .../Playbook/Flows/Main/MainCoordinator.swift | 13 ++++++++----- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift index d30b81a..85b786f 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift @@ -7,4 +7,5 @@ // protocol ChapterModuleOutput: class { + var onPageShow: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift index 22306f2..98ccb0d 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterPresenter.swift @@ -10,6 +10,8 @@ final class ChapterPresenter: ChapterModuleOutput { // MARK: - ChapterModuleOutput + var onPageShow: Closure? + // MARK: - Properties weak var view: ChapterViewInput? @@ -39,4 +41,8 @@ extension ChapterPresenter: ChapterViewOutput { view?.setupInitialState(with: chapter) } + func showPage(_ model: PageModel) { + onPageShow?(model.playbookPage) + } + } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift index a56cf76..b28fae1 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewController.swift @@ -60,6 +60,9 @@ private extension ChapterViewController { func configureAdapter() { adapter = ChapterAdapter(collectionView: collectionView) + adapter?.onPageSelect = { [weak self] page in + self?.output?.showPage(page) + } } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift index 80e9ca8..1b25975 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift @@ -7,6 +7,5 @@ // protocol ChapterViewInput: class { - /// Method for setup initial state of view func setupInitialState(with chapter: ChapterModel) } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift index d0163db..240700f 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewOutput.swift @@ -7,6 +7,6 @@ // protocol ChapterViewOutput { - /// Notify presenter that view is ready func viewLoaded() + func showPage(_ model: PageModel) } diff --git a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift index 3a5884d..ad633e5 100644 --- a/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift +++ b/SurfPlaybook/Playbook/Flows/Main/MainCoordinator.swift @@ -43,6 +43,14 @@ private extension MainCoordinator { router.setNavigationControllerRootModule(view, animated: false, hideBar: false) } + func showPlaybookChapter(_ chapter: ChapterModel) { + let (view, output) = ChapterModuleConfigurator().configure(chapter: chapter) + output.onPageShow = { [weak self] page in + self?.showPlaybookPage(page) + } + router.push(view) + } + func showPlaybookPage(_ page: PlaybookPage) { let (view, output, input) = PageModuleConfigurator().configure(with: page) output.onPresetsOpen = { [weak self, weak input] config in @@ -59,9 +67,4 @@ private extension MainCoordinator { router.present(view) } - func showPlaybookChapter(_ chapter: ChapterModel) { - let (view, _) = ChapterModuleConfigurator().configure(chapter: chapter) - router.push(view) - } - } From ee103d54a05c3d42f2d80938b31e7fcfb61f6d64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 27 May 2021 19:35:51 +0300 Subject: [PATCH 06/11] removed test code --- .../Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift index d4d7e12..4c5676a 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/Adapter/ChapterAdapter.swift @@ -76,7 +76,7 @@ extension ChapterAdapter: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { - return pages.count * 5 + return pages.count } func collectionView(_ collectionView: UICollectionView, @@ -84,7 +84,7 @@ extension ChapterAdapter: UICollectionViewDataSource { guard let cell = collectionView.dequeueReusableCell(PageCollectionViewCell.self, indexPath: indexPath) else { return UICollectionViewCell() } - let page = pages[indexPath.row % pages.count] + let page = pages[indexPath.row] cell.configure(with: page) return cell } From 86cef4c66fe5e69f380c78705f415cfba355fc4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 27 May 2021 19:40:31 +0300 Subject: [PATCH 07/11] fixes for deprecated class notation warning --- .../Flows/Common/Auth/Presenter/AuthModuleInput.swift | 2 +- .../Flows/Common/Auth/Presenter/AuthModuleOutput.swift | 2 +- .../Flows/Common/Auth/View/AuthViewInput.swift | 2 +- .../Flows/Common/List/Presenter/ListModuleInput.swift | 2 +- .../Flows/Common/List/Presenter/ListModuleOutput.swift | 2 +- .../Flows/Common/List/View/ListViewInput.swift | 2 +- SurfPlaybook/Library/Protocols/Coordinator.swift | 2 +- .../Configurator/Support/OptionSelectorHandler.swift | 2 +- .../OptionSelector/Presenter/OptionSelectorModuleInput.swift | 2 +- .../OptionSelector/Presenter/OptionSelectorModuleOutput.swift | 2 +- .../Common/OptionSelector/View/OptionSelectorViewInput.swift | 2 +- .../Playbook/Flows/Flows/Flows/Presenter/FlowsModuleInput.swift | 2 +- .../Flows/Flows/Flows/Presenter/FlowsModuleOutput.swift | 2 +- .../Playbook/Flows/Flows/Flows/View/FlowsViewInput.swift | 2 +- SurfPlaybook/Playbook/Flows/Flows/FlowsCoordinatorOutput.swift | 2 +- .../Flows/Main/Chapter/Presenter/ChapterModuleInput.swift | 2 +- .../Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift | 2 +- .../Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift | 2 +- .../Playbook/Flows/Main/Main/Presenter/MainModuleInput.swift | 2 +- .../Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift | 2 +- SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewInput.swift | 2 +- SurfPlaybook/Playbook/Flows/Main/MainCoordinatorOutput.swift | 2 +- .../Playbook/Flows/Main/Page/Presenter/PageModuleInput.swift | 2 +- .../Playbook/Flows/Main/Page/Presenter/PageModuleOutput.swift | 2 +- SurfPlaybook/Playbook/Flows/Main/Page/View/PageViewInput.swift | 2 +- .../Flows/Settings/Settings/Presenter/SettingsModuleInput.swift | 2 +- .../Settings/Settings/Presenter/SettingsModuleOutput.swift | 2 +- .../Flows/Settings/Settings/View/SettingsViewInput.swift | 2 +- .../Playbook/Flows/Settings/SettingsCoordinatorOutput.swift | 2 +- .../Flows/TabBar/TabBar/Presenter/TabBarModuleInput.swift | 2 +- .../Flows/TabBar/TabBar/Presenter/TabBarModuleOutput.swift | 2 +- .../Playbook/Flows/TabBar/TabBar/View/TabBarViewInput.swift | 2 +- .../Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleInput.swift | 2 +- .../Flows/UIKit/UIKit/Presenter/UIKitModuleOutput.swift | 2 +- .../Playbook/Flows/UIKit/UIKit/View/UIKitViewInput.swift | 2 +- SurfPlaybook/Playbook/Flows/UIKit/UIKitCoordinatorOutput.swift | 2 +- .../Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleInput.swift | 2 +- .../Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleOutput.swift | 2 +- .../Flows/UIKit/UIKitPage/View/UIKitPageViewInput.swift | 2 +- .../PlaybookUserDefaultsService/PlaybookStorageInterface.swift | 2 +- 40 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleInput.swift b/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleInput.swift index 1ee9a3c..da64545 100644 --- a/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleInput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol AuthModuleInput: class { +protocol AuthModuleInput: AnyObject { } diff --git a/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleOutput.swift b/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleOutput.swift index 2353e4c..553e720 100644 --- a/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleOutput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/Auth/Presenter/AuthModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol AuthModuleOutput: class { +protocol AuthModuleOutput: AnyObject { var onClose: EmptyClosure? { get set } } diff --git a/Example/SurfPlaybookExample/Flows/Common/Auth/View/AuthViewInput.swift b/Example/SurfPlaybookExample/Flows/Common/Auth/View/AuthViewInput.swift index 54a52de..4746fb2 100644 --- a/Example/SurfPlaybookExample/Flows/Common/Auth/View/AuthViewInput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/Auth/View/AuthViewInput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol AuthViewInput: class { +protocol AuthViewInput: AnyObject { /// Method for setup initial state of view func setupInitialState() } diff --git a/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleInput.swift b/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleInput.swift index cc4e4ed..934963b 100644 --- a/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleInput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ListModuleInput: class { +protocol ListModuleInput: AnyObject { } diff --git a/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleOutput.swift b/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleOutput.swift index 06e8f46..b60a6c4 100644 --- a/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleOutput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/List/Presenter/ListModuleOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ListModuleOutput: class { +protocol ListModuleOutput: AnyObject { } diff --git a/Example/SurfPlaybookExample/Flows/Common/List/View/ListViewInput.swift b/Example/SurfPlaybookExample/Flows/Common/List/View/ListViewInput.swift index 452f87f..828f8db 100644 --- a/Example/SurfPlaybookExample/Flows/Common/List/View/ListViewInput.swift +++ b/Example/SurfPlaybookExample/Flows/Common/List/View/ListViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ListViewInput: class { +protocol ListViewInput: AnyObject { func setupInitialState(with data: [ListAdapter.ListData]) } diff --git a/SurfPlaybook/Library/Protocols/Coordinator.swift b/SurfPlaybook/Library/Protocols/Coordinator.swift index 9fec714..37649ae 100644 --- a/SurfPlaybook/Library/Protocols/Coordinator.swift +++ b/SurfPlaybook/Library/Protocols/Coordinator.swift @@ -9,7 +9,7 @@ import Foundation /// Базовый протокол для всех координаторов приложения -protocol Coordinator: class { +protocol Coordinator: AnyObject { /// Уведомляет координатора, что он должен начать свою работу func start() /// Уведомляет координатора, что он может начать свою работу, diff --git a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Configurator/Support/OptionSelectorHandler.swift b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Configurator/Support/OptionSelectorHandler.swift index b4d80d1..2aa48a2 100644 --- a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Configurator/Support/OptionSelectorHandler.swift +++ b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Configurator/Support/OptionSelectorHandler.swift @@ -8,7 +8,7 @@ /// Протокл для модулей, которые будут связаны с модулем OptionSelector /// и которым придется обрабатывать ответы от него -protocol OptionSelectorHandler: class { +protocol OptionSelectorHandler: AnyObject { /// Пользователь выбрал какой-то вариант из предложенных, необходимо обработать это событие. /// Ошибку в случае неудачного запроса рекомендуется показывать с помощью методов input объекта func selectOption(_ option: StringRepresentable, input: OptionSelectorModuleInput) diff --git a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleInput.swift b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleInput.swift index e563d7b..bc164ad 100644 --- a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol OptionSelectorModuleInput: class { +protocol OptionSelectorModuleInput: AnyObject { func closeSelector() } diff --git a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleOutput.swift index d2da210..b4ec87f 100644 --- a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/Presenter/OptionSelectorModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol OptionSelectorModuleOutput: class { +protocol OptionSelectorModuleOutput: AnyObject { var onClose: EmptyClosure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/View/OptionSelectorViewInput.swift b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/View/OptionSelectorViewInput.swift index 0099dc9..504ee31 100644 --- a/SurfPlaybook/Playbook/Flows/Common/OptionSelector/View/OptionSelectorViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Common/OptionSelector/View/OptionSelectorViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol OptionSelectorViewInput: class { +protocol OptionSelectorViewInput: AnyObject { func setupInitialState(with config: OptionSelectorConfig) } diff --git a/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleInput.swift b/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleInput.swift index fe18a73..fe72e2f 100644 --- a/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol FlowsModuleInput: class { +protocol FlowsModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleOutput.swift index 4c0791c..a10251d 100644 --- a/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Flows/Flows/Presenter/FlowsModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol FlowsModuleOutput: class { +protocol FlowsModuleOutput: AnyObject { var onFlowsShow: Closure<(title: String, coordinators: [PlaybookFlowCoordinator])>? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewInput.swift b/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewInput.swift index 63aca1b..c07ead6 100644 --- a/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Flows/Flows/View/FlowsViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol FlowsViewInput: class, ViewStateConfigurable { +protocol FlowsViewInput: AnyObject, ViewStateConfigurable { func setupInitialState(title: String?, flowCoordinators: [PlaybookFlowCoordinator]) } diff --git a/SurfPlaybook/Playbook/Flows/Flows/FlowsCoordinatorOutput.swift b/SurfPlaybook/Playbook/Flows/Flows/FlowsCoordinatorOutput.swift index 7799c5c..61b2165 100644 --- a/SurfPlaybook/Playbook/Flows/Flows/FlowsCoordinatorOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Flows/FlowsCoordinatorOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol FlowsCoordinatorOutput: class { +protocol FlowsCoordinatorOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift index dd09451..a88ac15 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ChapterModuleInput: class { +protocol ChapterModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift index 85b786f..ced198e 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/Presenter/ChapterModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ChapterModuleOutput: class { +protocol ChapterModuleOutput: AnyObject { var onPageShow: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift index 1b25975..58b91de 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Chapter/View/ChapterViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol ChapterViewInput: class { +protocol ChapterViewInput: AnyObject { func setupInitialState(with chapter: ChapterModel) } diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleInput.swift b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleInput.swift index 73e42fb..433814f 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol MainModuleInput: class { +protocol MainModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift index a7f2ff8..94cafad 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/Presenter/MainModuleOutput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol MainModuleOutput: class { +protocol MainModuleOutput: AnyObject { var onPageShow: Closure? { get set } var onChapterShow: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewInput.swift index f0908dd..218a293 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Main/View/MainViewInput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol MainViewInput: class, ViewStateConfigurable { +protocol MainViewInput: AnyObject, ViewStateConfigurable { func setupInitialState(with models: [ChapterModel]) func fill(with models: [ChapterModel]) } diff --git a/SurfPlaybook/Playbook/Flows/Main/MainCoordinatorOutput.swift b/SurfPlaybook/Playbook/Flows/Main/MainCoordinatorOutput.swift index e86fb07..d934c57 100644 --- a/SurfPlaybook/Playbook/Flows/Main/MainCoordinatorOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/MainCoordinatorOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol MainCoordinatorOutput: class { +protocol MainCoordinatorOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleInput.swift b/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleInput.swift index 08332ab..149cd57 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol PageModuleInput: class { +protocol PageModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleOutput.swift index a168aa8..210b172 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Page/Presenter/PageModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol PageModuleOutput: class { +protocol PageModuleOutput: AnyObject { var onPresetsOpen: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/Main/Page/View/PageViewInput.swift b/SurfPlaybook/Playbook/Flows/Main/Page/View/PageViewInput.swift index 5dbb3ed..6f37401 100644 --- a/SurfPlaybook/Playbook/Flows/Main/Page/View/PageViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Main/Page/View/PageViewInput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol PageViewInput: class { +protocol PageViewInput: AnyObject { func setupInitialState(with page: PlaybookPage) func showPreset(_ preset: StringRepresentable, for page: PlaybookPage) func updateBackgroundAppearance(isColored: Bool) diff --git a/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleInput.swift b/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleInput.swift index 8703ca5..d1b4430 100644 --- a/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol SettingsModuleInput: class { +protocol SettingsModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleOutput.swift b/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleOutput.swift index 19c2ff4..7c5a5e4 100644 --- a/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Settings/Settings/Presenter/SettingsModuleOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol SettingsModuleOutput: class { +protocol SettingsModuleOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/Settings/Settings/View/SettingsViewInput.swift b/SurfPlaybook/Playbook/Flows/Settings/Settings/View/SettingsViewInput.swift index 55989c5..c0d20fe 100644 --- a/SurfPlaybook/Playbook/Flows/Settings/Settings/View/SettingsViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/Settings/Settings/View/SettingsViewInput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol SettingsViewInput: class { +protocol SettingsViewInput: AnyObject { func setupInitialState(blocks: [SettingsBlock]) func updateSetting(for block: SettingsBlock) } diff --git a/SurfPlaybook/Playbook/Flows/Settings/SettingsCoordinatorOutput.swift b/SurfPlaybook/Playbook/Flows/Settings/SettingsCoordinatorOutput.swift index f619b9c..4623942 100644 --- a/SurfPlaybook/Playbook/Flows/Settings/SettingsCoordinatorOutput.swift +++ b/SurfPlaybook/Playbook/Flows/Settings/SettingsCoordinatorOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol SettingsCoordinatorOutput: class { +protocol SettingsCoordinatorOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleInput.swift b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleInput.swift index a15e44f..db7f3fb 100644 --- a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol TabBarModuleInput: class { +protocol TabBarModuleInput: AnyObject { func selectTab(_ tab: PlaybookTab) } diff --git a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleOutput.swift b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleOutput.swift index f5efcac..887ea8c 100644 --- a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/Presenter/TabBarModuleOutput.swift @@ -6,7 +6,7 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol TabBarModuleOutput: class { +protocol TabBarModuleOutput: AnyObject { var onMainFlowSelect: TabSelectClosure? { get set } var onUIKitFlowSelect: TabSelectClosure? { get set } var onFlowsFlowSelect: TabSelectClosure? { get set } diff --git a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/View/TabBarViewInput.swift b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/View/TabBarViewInput.swift index f5d549a..d31a242 100644 --- a/SurfPlaybook/Playbook/Flows/TabBar/TabBar/View/TabBarViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/TabBar/TabBar/View/TabBarViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol TabBarViewInput: class { +protocol TabBarViewInput: AnyObject { func selectTab(_ tab: PlaybookTab) } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleInput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleInput.swift index 836701c..f8c7b75 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitModuleInput: class { +protocol UIKitModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleOutput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleOutput.swift index 29ebb3e..2c32fb4 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/Presenter/UIKitModuleOutput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitModuleOutput: class { +protocol UIKitModuleOutput: AnyObject { var onPageOpen: Closure? { get set } } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewInput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewInput.swift index 34ac554..5ea30b4 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKit/View/UIKitViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitViewInput: class, ViewStateConfigurable { +protocol UIKitViewInput: AnyObject, ViewStateConfigurable { func setupInitialState(pages: [PlaybookUIKitPage]) } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKitCoordinatorOutput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKitCoordinatorOutput.swift index e79348e..ed5fdfb 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKitCoordinatorOutput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKitCoordinatorOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitCoordinatorOutput: class { +protocol UIKitCoordinatorOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleInput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleInput.swift index c3f5830..7c1ba7c 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleInput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleInput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitPageModuleInput: class { +protocol UIKitPageModuleInput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleOutput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleOutput.swift index 187576b..eb88939 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleOutput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/Presenter/UIKitPageModuleOutput.swift @@ -6,5 +6,5 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitPageModuleOutput: class { +protocol UIKitPageModuleOutput: AnyObject { } diff --git a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/View/UIKitPageViewInput.swift b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/View/UIKitPageViewInput.swift index 1f155bc..6f1551c 100644 --- a/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/View/UIKitPageViewInput.swift +++ b/SurfPlaybook/Playbook/Flows/UIKit/UIKitPage/View/UIKitPageViewInput.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol UIKitPageViewInput: class { +protocol UIKitPageViewInput: AnyObject { func setupInitialState(page: PlaybookUIKitPage) } diff --git a/SurfPlaybook/Services/PlaybookUserDefaultsService/PlaybookStorageInterface.swift b/SurfPlaybook/Services/PlaybookUserDefaultsService/PlaybookStorageInterface.swift index 4a178ac..83e761b 100644 --- a/SurfPlaybook/Services/PlaybookUserDefaultsService/PlaybookStorageInterface.swift +++ b/SurfPlaybook/Services/PlaybookUserDefaultsService/PlaybookStorageInterface.swift @@ -6,6 +6,6 @@ // Copyright © 2021 Surf. All rights reserved. // -protocol PlaybookStorageInterface: class { +protocol PlaybookStorageInterface: AnyObject { var isColoredBackground: Bool { get set } } From 791b8e9b4f42a3c407bab4ffeb2e0fdb293c3909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Thu, 27 May 2021 19:55:22 +0300 Subject: [PATCH 08/11] version bump to 1.2.1 --- SurfPlaybook.podspec | 2 +- SurfPlaybook.xcodeproj/project.pbxproj | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SurfPlaybook.podspec b/SurfPlaybook.podspec index 49a5e7a..70604a6 100644 --- a/SurfPlaybook.podspec +++ b/SurfPlaybook.podspec @@ -1,6 +1,6 @@ Pod::Spec.new do |spec| spec.name = "SurfPlaybook" - spec.version = "1.2.0" + spec.version = "1.2.1" spec.summary = "iOS framework for Playbook" spec.homepage = "https://github.com/chausovSurfStudio/SurfPlaybook" spec.license = { :type => "MIT", :file => "LICENSE" } diff --git a/SurfPlaybook.xcodeproj/project.pbxproj b/SurfPlaybook.xcodeproj/project.pbxproj index 413fcd6..125d3c1 100644 --- a/SurfPlaybook.xcodeproj/project.pbxproj +++ b/SurfPlaybook.xcodeproj/project.pbxproj @@ -2706,7 +2706,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.2.1; PRODUCT_BUNDLE_IDENTIFIER = ru.surfstudio.playbook.SurfPlaybook; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2737,7 +2737,7 @@ "@executable_path/Frameworks", "@loader_path/Frameworks", ); - MARKETING_VERSION = 1.2.0; + MARKETING_VERSION = 1.2.1; PRODUCT_BUNDLE_IDENTIFIER = ru.surfstudio.playbook.SurfPlaybook; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; PROVISIONING_PROFILE_SPECIFIER = ""; From 7a59253798d989e6635e3f23845ced79ebb31fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Fri, 28 May 2021 09:44:27 +0300 Subject: [PATCH 09/11] generated documentation --- docs/Classes.html | 4 +- docs/Classes/Playbook.html | 4 +- docs/Classes/PlaybookChapter.html | 4 +- docs/Classes/TableViewCellContainer.html | 4 +- docs/Classes/ViewContainer.html | 4 +- docs/Enums.html | 4 +- docs/Enums/ColorsConfig.html | 4 +- docs/Enums/ColorsConfig/Main.html | 4 +- docs/Enums/ColorsConfig/NavigationBar.html | 4 +- docs/Enums/ColorsConfig/SearchBar.html | 4 +- docs/Enums/ColorsConfig/TabBar.html | 4 +- docs/Enums/ColorsConfig/Text.html | 4 +- docs/Enums/FlowCoordinatorType.html | 4 +- docs/Enums/StringsConfig.html | 58 +++++++++++++++++- docs/Protocols.html | 4 +- docs/Protocols/PlaybookFlowCoordinator.html | 4 +- docs/Protocols/PlaybookUIKitPage.html | 4 +- docs/Protocols/StringRepresentable.html | 4 +- docs/Protocols/UIKitPageViewModel.html | 4 +- docs/Structs.html | 4 +- docs/Structs/PlaybookPage.html | 4 +- docs/badge.svg | 4 +- .../Contents/Resources/Documents/Classes.html | 4 +- .../Resources/Documents/Classes/Playbook.html | 4 +- .../Documents/Classes/PlaybookChapter.html | 4 +- .../Classes/TableViewCellContainer.html | 4 +- .../Documents/Classes/ViewContainer.html | 4 +- .../Contents/Resources/Documents/Enums.html | 4 +- .../Documents/Enums/ColorsConfig.html | 4 +- .../Documents/Enums/ColorsConfig/Main.html | 4 +- .../Enums/ColorsConfig/NavigationBar.html | 4 +- .../Enums/ColorsConfig/SearchBar.html | 4 +- .../Documents/Enums/ColorsConfig/TabBar.html | 4 +- .../Documents/Enums/ColorsConfig/Text.html | 4 +- .../Documents/Enums/FlowCoordinatorType.html | 4 +- .../Documents/Enums/StringsConfig.html | 58 +++++++++++++++++- .../Resources/Documents/Protocols.html | 4 +- .../Protocols/PlaybookFlowCoordinator.html | 4 +- .../Protocols/PlaybookUIKitPage.html | 4 +- .../Protocols/StringRepresentable.html | 4 +- .../Protocols/UIKitPageViewModel.html | 4 +- .../Contents/Resources/Documents/Structs.html | 4 +- .../Documents/Structs/PlaybookPage.html | 4 +- .../Contents/Resources/Documents/index.html | 4 +- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 28672 -> 32768 bytes docs/docsets/SurfPlaybook.tgz | Bin 65375 -> 65685 bytes docs/index.html | 4 +- docs/search.json | 2 +- docs/undocumented.json | 18 +++++- 50 files changed, 216 insertions(+), 94 deletions(-) diff --git a/docs/Classes.html b/docs/Classes.html index c4717be..fd39ab3 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -260,7 +260,7 @@

Declaration

diff --git a/docs/Classes/Playbook.html b/docs/Classes/Playbook.html index c90edf7..2a749e6 100644 --- a/docs/Classes/Playbook.html +++ b/docs/Classes/Playbook.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -311,7 +311,7 @@

Declaration

diff --git a/docs/Classes/PlaybookChapter.html b/docs/Classes/PlaybookChapter.html index 6d55695..e296786 100644 --- a/docs/Classes/PlaybookChapter.html +++ b/docs/Classes/PlaybookChapter.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -234,7 +234,7 @@

Declaration

diff --git a/docs/Classes/TableViewCellContainer.html b/docs/Classes/TableViewCellContainer.html index 2f6e057..e2afb62 100644 --- a/docs/Classes/TableViewCellContainer.html +++ b/docs/Classes/TableViewCellContainer.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -387,7 +387,7 @@

Declaration

diff --git a/docs/Classes/ViewContainer.html b/docs/Classes/ViewContainer.html index ae960c9..aabf403 100644 --- a/docs/Classes/ViewContainer.html +++ b/docs/Classes/ViewContainer.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -209,7 +209,7 @@

Parameters

diff --git a/docs/Enums.html b/docs/Enums.html index a3c59b6..337e404 100644 --- a/docs/Enums.html +++ b/docs/Enums.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -227,7 +227,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig.html b/docs/Enums/ColorsConfig.html index 82a95b1..e124093 100644 --- a/docs/Enums/ColorsConfig.html +++ b/docs/Enums/ColorsConfig.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -271,7 +271,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig/Main.html b/docs/Enums/ColorsConfig/Main.html index 6c98a87..bdda267 100644 --- a/docs/Enums/ColorsConfig/Main.html +++ b/docs/Enums/ColorsConfig/Main.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -310,7 +310,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig/NavigationBar.html b/docs/Enums/ColorsConfig/NavigationBar.html index 5849d7a..48d0720 100644 --- a/docs/Enums/ColorsConfig/NavigationBar.html +++ b/docs/Enums/ColorsConfig/NavigationBar.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -202,7 +202,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig/SearchBar.html b/docs/Enums/ColorsConfig/SearchBar.html index 57b5908..8981f4c 100644 --- a/docs/Enums/ColorsConfig/SearchBar.html +++ b/docs/Enums/ColorsConfig/SearchBar.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -229,7 +229,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig/TabBar.html b/docs/Enums/ColorsConfig/TabBar.html index 2b2fad5..4e44590 100644 --- a/docs/Enums/ColorsConfig/TabBar.html +++ b/docs/Enums/ColorsConfig/TabBar.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -229,7 +229,7 @@

Declaration

diff --git a/docs/Enums/ColorsConfig/Text.html b/docs/Enums/ColorsConfig/Text.html index 20c11a7..6d3755c 100644 --- a/docs/Enums/ColorsConfig/Text.html +++ b/docs/Enums/ColorsConfig/Text.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -203,7 +203,7 @@

Declaration

diff --git a/docs/Enums/FlowCoordinatorType.html b/docs/Enums/FlowCoordinatorType.html index 59029a8..329751c 100644 --- a/docs/Enums/FlowCoordinatorType.html +++ b/docs/Enums/FlowCoordinatorType.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -184,7 +184,7 @@

Declaration

diff --git a/docs/Enums/StringsConfig.html b/docs/Enums/StringsConfig.html index 2869c60..1843006 100644 --- a/docs/Enums/StringsConfig.html +++ b/docs/Enums/StringsConfig.html @@ -14,7 +14,7 @@
-

SurfPlaybook 1.2.0 Docs (59% documented)

+

SurfPlaybook 1.2.1 Docs (57% documented)

@@ -288,6 +288,60 @@

Declaration

+
  • +
    + + + + emptyStateMessage + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var emptyStateMessage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showAllTitle + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var showAllTitle: String
    + +
    +
    +
    +
    +
  • @@ -374,7 +428,7 @@

    Declaration

    diff --git a/docs/Protocols.html b/docs/Protocols.html index fff47e0..944c51a 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/Protocols/PlaybookFlowCoordinator.html b/docs/Protocols/PlaybookFlowCoordinator.html index 327be4c..6b052e3 100644 --- a/docs/Protocols/PlaybookFlowCoordinator.html +++ b/docs/Protocols/PlaybookFlowCoordinator.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -215,7 +215,7 @@

    Declaration

    diff --git a/docs/Protocols/PlaybookUIKitPage.html b/docs/Protocols/PlaybookUIKitPage.html index f23ec02..a43307e 100644 --- a/docs/Protocols/PlaybookUIKitPage.html +++ b/docs/Protocols/PlaybookUIKitPage.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -219,7 +219,7 @@

    Declaration

    diff --git a/docs/Protocols/StringRepresentable.html b/docs/Protocols/StringRepresentable.html index 2750798..e6059e2 100644 --- a/docs/Protocols/StringRepresentable.html +++ b/docs/Protocols/StringRepresentable.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -149,7 +149,7 @@

    Declaration

    diff --git a/docs/Protocols/UIKitPageViewModel.html b/docs/Protocols/UIKitPageViewModel.html index b6618c0..2a92aaa 100644 --- a/docs/Protocols/UIKitPageViewModel.html +++ b/docs/Protocols/UIKitPageViewModel.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -150,7 +150,7 @@

    Declaration

    diff --git a/docs/Structs.html b/docs/Structs.html index defd04d..0815977 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -163,7 +163,7 @@

    Declaration

    diff --git a/docs/Structs/PlaybookPage.html b/docs/Structs/PlaybookPage.html index 266f038..d172ce8 100644 --- a/docs/Structs/PlaybookPage.html +++ b/docs/Structs/PlaybookPage.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -274,7 +274,7 @@

    Parameters

    diff --git a/docs/badge.svg b/docs/badge.svg index 04c210b..dc4e7af 100644 --- a/docs/badge.svg +++ b/docs/badge.svg @@ -19,10 +19,10 @@ documentation - 59% + 57% - 59% + 57% diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes.html index c4717be..fd39ab3 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -260,7 +260,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/Playbook.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/Playbook.html index c90edf7..2a749e6 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/Playbook.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/Playbook.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -311,7 +311,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/PlaybookChapter.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/PlaybookChapter.html index 6d55695..e296786 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/PlaybookChapter.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/PlaybookChapter.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -234,7 +234,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/TableViewCellContainer.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/TableViewCellContainer.html index 2f6e057..e2afb62 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/TableViewCellContainer.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/TableViewCellContainer.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -387,7 +387,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/ViewContainer.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/ViewContainer.html index ae960c9..aabf403 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/ViewContainer.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Classes/ViewContainer.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -209,7 +209,7 @@

    Parameters

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums.html index a3c59b6..337e404 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -227,7 +227,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig.html index 82a95b1..e124093 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -271,7 +271,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Main.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Main.html index 6c98a87..bdda267 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Main.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Main.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -310,7 +310,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/NavigationBar.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/NavigationBar.html index 5849d7a..48d0720 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/NavigationBar.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/NavigationBar.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -202,7 +202,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/SearchBar.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/SearchBar.html index 57b5908..8981f4c 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/SearchBar.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/SearchBar.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -229,7 +229,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/TabBar.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/TabBar.html index 2b2fad5..4e44590 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/TabBar.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/TabBar.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -229,7 +229,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Text.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Text.html index 20c11a7..6d3755c 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Text.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/ColorsConfig/Text.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -203,7 +203,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/FlowCoordinatorType.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/FlowCoordinatorType.html index 59029a8..329751c 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/FlowCoordinatorType.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/FlowCoordinatorType.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -184,7 +184,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/StringsConfig.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/StringsConfig.html index 2869c60..1843006 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/StringsConfig.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Enums/StringsConfig.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -288,6 +288,60 @@

    Declaration

  • +
  • +
    + + + + emptyStateMessage + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var emptyStateMessage: String
    + +
    +
    +
    +
    +
  • +
  • +
    + + + + showAllTitle + +
    +
    +
    +
    +
    +
    +

    Undocumented

    + +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public static var showAllTitle: String
    + +
    +
    +
    +
    +
  • @@ -374,7 +428,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols.html index fff47e0..944c51a 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -257,7 +257,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookFlowCoordinator.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookFlowCoordinator.html index 327be4c..6b052e3 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookFlowCoordinator.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookFlowCoordinator.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -215,7 +215,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookUIKitPage.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookUIKitPage.html index f23ec02..a43307e 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookUIKitPage.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/PlaybookUIKitPage.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -219,7 +219,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/StringRepresentable.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/StringRepresentable.html index 2750798..e6059e2 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/StringRepresentable.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/StringRepresentable.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -149,7 +149,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/UIKitPageViewModel.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/UIKitPageViewModel.html index b6618c0..2a92aaa 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/UIKitPageViewModel.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Protocols/UIKitPageViewModel.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -150,7 +150,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs.html index defd04d..0815977 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -163,7 +163,7 @@

    Declaration

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs/PlaybookPage.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs/PlaybookPage.html index 266f038..d172ce8 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs/PlaybookPage.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/Structs/PlaybookPage.html @@ -14,7 +14,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -274,7 +274,7 @@

    Parameters

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/index.html b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/index.html index 69b8da3..d6bf3de 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/index.html @@ -13,7 +13,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -201,7 +201,7 @@

    License

    diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/search.json b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/search.json index 0f13948..9294b92 100644 --- a/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/SurfPlaybook.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV7presetsSayAA19StringRepresentable_p6preset_So6UIViewCyc6configtGvp":{"name":"presets","abstract":"

    Массив, содержащий различные варианты конфигурации UI-компонента.

    ","parent_name":"PlaybookPage"},"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV4name11description6configACSS_SSSgSo6UIViewCyctcfc":{"name":"init(name:description:config:)","abstract":"

    Конструктор для создание страницы плейбука

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

    Отдельная страница playbook-а.

    "},"Protocols/StringRepresentable.html#/s:12SurfPlaybook19StringRepresentableP5titleSSvp":{"name":"title","abstract":"

    Undocumented

    ","parent_name":"StringRepresentable"},"Protocols/UIKitPageViewModel.html#/s:12SurfPlaybook18UIKitPageViewModelP5setup4withySo07UITableE0C_tF":{"name":"setup(with:)","abstract":"

    При вызове данного метода необходимо заполнить экран переданной таблицы","parent_name":"UIKitPageViewModel"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP2idSSvp":{"name":"id","abstract":"

    Идентификатор страницы UIKit-а,","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP4nameSSvp":{"name":"name","abstract":"

    Название страницы, будет отображено в UI

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP9viewModelAA0cd4ViewF0_pvp":{"name":"viewModel","abstract":"

    ViewModel, отвечающая за заполнение контентом табличного экрана

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP2idSSvp":{"name":"id","abstract":"

    Идентификатор абстрактного координатора,","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4nameSSvp":{"name":"name","abstract":"

    Название координатора, будет отображено на UI

    ","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4typeAA0cD4TypeOvp":{"name":"type","abstract":"

    Тип координатора, подробнее объяснение смотреть в FlowCoordinatorType

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

    В плейбуке присутствует возможность показа какого либо экрана приложения,"},"Protocols/PlaybookUIKitPage.html":{"name":"PlaybookUIKitPage","abstract":"

    Протокол, который должна реализовывать каждая страница UIKIt-а в рамках playbook-а.

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

    Протокол для объекта, способного построить табличный экран"},"Protocols/StringRepresentable.html":{"name":"StringRepresentable","abstract":"

    Абстрактный протокол для всех возможных вариантов выбора внутри модуля OptionSelector."},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO11coordinatoryACyyc_tcACmF":{"name":"coordinator(startBlock:)","abstract":"

    Тип конечного координатора, startBlock - замыкание,","parent_name":"FlowCoordinatorType"},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO4nodeyACSayAA0bcD0_pG_tcACmF":{"name":"node(coordinators:)","abstract":"

    Тип узла для координаторов, обязательный параметр - вложенные в него координаторы

    ","parent_name":"FlowCoordinatorType"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12mainTabTitleSSvpZ":{"name":"mainTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13uiKitTabTitleSSvpZ":{"name":"uiKitTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13flowsTabTitleSSvpZ":{"name":"flowsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO16settingsTabTitleSSvpZ":{"name":"settingsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO20searchBarPlaceholderSSvpZ":{"name":"searchBarPlaceholder","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO18emptySearchMessageSSvpZ":{"name":"emptySearchMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO21coloredBackgroundNameSSvpZ":{"name":"coloredBackgroundName","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO6cancelSSvpZ":{"name":"cancel","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO4doneSSvpZ":{"name":"done","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO9containerSo7UIColorCvpZ":{"name":"container","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO11placeholderSo7UIColorCvpZ":{"name":"placeholder","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO8itemTintSo7UIColorCvpZ":{"name":"itemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO16selectedItemTintSo7UIColorCvpZ":{"name":"selectedItemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    цвет текста в done-кнопке на экране выбора preset-а","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO4mainSo7UIColorCvpZ":{"name":"main","abstract":"

    основной цвет текста

    ","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6secondSo7UIColorCvpZ":{"name":"second","abstract":"

    вспомогательный цвет текста (cancel-кнопка экрана выбора preset-а, empty-лейблы)

    ","parent_name":"Text"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    иконка лупы в search-bar + radio-button на экране настроек

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    основной цвет фона

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO5pressSo7UIColorCvpZ":{"name":"press","abstract":"

    цвет фона при нажатии на элемент (например, ячейку)

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO17coloredBackgroundSo7UIColorCvpZ":{"name":"coloredBackground","abstract":"

    цвет фона на экране страницы UI-компонента, когда включена опция coloredBackground

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO11translucentSo7UIColorCvpZ":{"name":"translucent","abstract":"

    цвет полупрохрачного фона на экране выбора preset-а

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    цвет сепараторов в ячейке

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6shadowSo7UIColorCvpZ":{"name":"shadow","abstract":"

    цвет тени для ячеек в карусели на главном экране

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html":{"name":"Main","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/Text.html":{"name":"Text","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/NavigationBar.html":{"name":"NavigationBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/TabBar.html":{"name":"TabBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/SearchBar.html":{"name":"SearchBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig.html":{"name":"ColorsConfig","abstract":"

    Конфиг со всеми цветами приложения.

    "},"Enums/StringsConfig.html":{"name":"StringsConfig","abstract":"

    Используемые тексты внутри playbook-а

    "},"Enums/FlowCoordinatorType.html":{"name":"FlowCoordinatorType","abstract":"

    Тип flow-координатора

    "},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC4name5pagesACSS_SayAA0B4PageVGtcfc":{"name":"init(name:pages:)","abstract":"

    Конструктор главы плейбука

    ","parent_name":"PlaybookChapter"},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC3add4pageAcA0B4PageV_tF":{"name":"add(page:)","abstract":"

    Undocumented

    ","parent_name":"PlaybookChapter"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C6sharedACvpZ":{"name":"shared","abstract":"

    Вся работа с плейбуком должна вестись через данный singltone

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C5start4fromySo8UIWindowCSg_tF":{"name":"start(from:)","abstract":"

    Метод для показа плейбука

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add7chapterAcA0B7ChapterC_tF":{"name":"add(chapter:)","abstract":"

    Метод для добавления соответствующих глав с reuse-компонентами в playbook

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add9uiKitPageAcA0b5UIKitF0_p_tF":{"name":"add(uiKitPage:)","abstract":"

    Метод для добавления страницы для UIKIt-а

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add15flowCoordinatorAcA0b4FlowE0_p_tF":{"name":"add(flowCoordinator:)","abstract":"

    Метод для добавления абстрактного координатора,","parent_name":"Playbook"},"Classes/ViewContainer.html#/s:12SurfPlaybook13ViewContainerC_5width6heightACyxGx_12CoreGraphics7CGFloatVSgAJtcfc":{"name":"init(_:width:height:)","abstract":"

    Создание контейнера для обычных UIView внутри плейбука.

    ","parent_name":"ViewContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC0E12Configuratora":{"name":"CellConfigurator","abstract":"

    Typealias на замыкание, при определении которого","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC14HeightResolvera":{"name":"HeightResolver","abstract":"

    Typealias на замыкание, в рамках которого вы должны посчитать и вернуть необходимую высоту ячейку,","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC5width09configureE014heightResolverACyxG12CoreGraphics7CGFloatV_yx_So07UITableD0CtcA2JcSgtcfc":{"name":"init(width:configureCell:heightResolver:)","abstract":"

    Создание контейнера для ячеек внутри плейбука.

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_21numberOfRowsInSectionSiSo07UITableD0C_SitF":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_12cellForRowAtSo07UITabledE0CSo0lD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_14heightForRowAt12CoreGraphics7CGFloatVSo07UITableD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Undocumented

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

    Вспомогательный контейнер-таблица, позвооляет обернуть UI-компонент типа UITableViewCell"},"Classes/ViewContainer.html":{"name":"ViewContainer","abstract":"

    Вспомогательный контейнер-view, позвооляет обернуть UI-компонент типа UIView"},"Classes/Playbook.html":{"name":"Playbook","abstract":"

    Основной класс для всей механики playbook-а.

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

    Отдельная глава Playbook-а.

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

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

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

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV7presetsSayAA19StringRepresentable_p6preset_So6UIViewCyc6configtGvp":{"name":"presets","abstract":"

    Массив, содержащий различные варианты конфигурации UI-компонента.

    ","parent_name":"PlaybookPage"},"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV4name11description6configACSS_SSSgSo6UIViewCyctcfc":{"name":"init(name:description:config:)","abstract":"

    Конструктор для создание страницы плейбука

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

    Отдельная страница playbook-а.

    "},"Protocols/StringRepresentable.html#/s:12SurfPlaybook19StringRepresentableP5titleSSvp":{"name":"title","abstract":"

    Undocumented

    ","parent_name":"StringRepresentable"},"Protocols/UIKitPageViewModel.html#/s:12SurfPlaybook18UIKitPageViewModelP5setup4withySo07UITableE0C_tF":{"name":"setup(with:)","abstract":"

    При вызове данного метода необходимо заполнить экран переданной таблицы","parent_name":"UIKitPageViewModel"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP2idSSvp":{"name":"id","abstract":"

    Идентификатор страницы UIKit-а,","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP4nameSSvp":{"name":"name","abstract":"

    Название страницы, будет отображено в UI

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP9viewModelAA0cd4ViewF0_pvp":{"name":"viewModel","abstract":"

    ViewModel, отвечающая за заполнение контентом табличного экрана

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP2idSSvp":{"name":"id","abstract":"

    Идентификатор абстрактного координатора,","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4nameSSvp":{"name":"name","abstract":"

    Название координатора, будет отображено на UI

    ","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4typeAA0cD4TypeOvp":{"name":"type","abstract":"

    Тип координатора, подробнее объяснение смотреть в FlowCoordinatorType

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

    В плейбуке присутствует возможность показа какого либо экрана приложения,"},"Protocols/PlaybookUIKitPage.html":{"name":"PlaybookUIKitPage","abstract":"

    Протокол, который должна реализовывать каждая страница UIKIt-а в рамках playbook-а.

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

    Протокол для объекта, способного построить табличный экран"},"Protocols/StringRepresentable.html":{"name":"StringRepresentable","abstract":"

    Абстрактный протокол для всех возможных вариантов выбора внутри модуля OptionSelector."},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO11coordinatoryACyyc_tcACmF":{"name":"coordinator(startBlock:)","abstract":"

    Тип конечного координатора, startBlock - замыкание,","parent_name":"FlowCoordinatorType"},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO4nodeyACSayAA0bcD0_pG_tcACmF":{"name":"node(coordinators:)","abstract":"

    Тип узла для координаторов, обязательный параметр - вложенные в него координаторы

    ","parent_name":"FlowCoordinatorType"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12mainTabTitleSSvpZ":{"name":"mainTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13uiKitTabTitleSSvpZ":{"name":"uiKitTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13flowsTabTitleSSvpZ":{"name":"flowsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO16settingsTabTitleSSvpZ":{"name":"settingsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO20searchBarPlaceholderSSvpZ":{"name":"searchBarPlaceholder","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO18emptySearchMessageSSvpZ":{"name":"emptySearchMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO17emptyStateMessageSSvpZ":{"name":"emptyStateMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12showAllTitleSSvpZ":{"name":"showAllTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO21coloredBackgroundNameSSvpZ":{"name":"coloredBackgroundName","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO6cancelSSvpZ":{"name":"cancel","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO4doneSSvpZ":{"name":"done","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO9containerSo7UIColorCvpZ":{"name":"container","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO11placeholderSo7UIColorCvpZ":{"name":"placeholder","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO8itemTintSo7UIColorCvpZ":{"name":"itemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO16selectedItemTintSo7UIColorCvpZ":{"name":"selectedItemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    цвет текста в done-кнопке на экране выбора preset-а","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO4mainSo7UIColorCvpZ":{"name":"main","abstract":"

    основной цвет текста

    ","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6secondSo7UIColorCvpZ":{"name":"second","abstract":"

    вспомогательный цвет текста (cancel-кнопка экрана выбора preset-а, empty-лейблы)

    ","parent_name":"Text"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    иконка лупы в search-bar + radio-button на экране настроек

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    основной цвет фона

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO5pressSo7UIColorCvpZ":{"name":"press","abstract":"

    цвет фона при нажатии на элемент (например, ячейку)

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO17coloredBackgroundSo7UIColorCvpZ":{"name":"coloredBackground","abstract":"

    цвет фона на экране страницы UI-компонента, когда включена опция coloredBackground

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO11translucentSo7UIColorCvpZ":{"name":"translucent","abstract":"

    цвет полупрохрачного фона на экране выбора preset-а

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    цвет сепараторов в ячейке

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6shadowSo7UIColorCvpZ":{"name":"shadow","abstract":"

    цвет тени для ячеек в карусели на главном экране

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html":{"name":"Main","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/Text.html":{"name":"Text","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/NavigationBar.html":{"name":"NavigationBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/TabBar.html":{"name":"TabBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/SearchBar.html":{"name":"SearchBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig.html":{"name":"ColorsConfig","abstract":"

    Конфиг со всеми цветами приложения.

    "},"Enums/StringsConfig.html":{"name":"StringsConfig","abstract":"

    Используемые тексты внутри playbook-а

    "},"Enums/FlowCoordinatorType.html":{"name":"FlowCoordinatorType","abstract":"

    Тип flow-координатора

    "},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC4name5pagesACSS_SayAA0B4PageVGtcfc":{"name":"init(name:pages:)","abstract":"

    Конструктор главы плейбука

    ","parent_name":"PlaybookChapter"},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC3add4pageAcA0B4PageV_tF":{"name":"add(page:)","abstract":"

    Undocumented

    ","parent_name":"PlaybookChapter"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C6sharedACvpZ":{"name":"shared","abstract":"

    Вся работа с плейбуком должна вестись через данный singltone

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C5start4fromySo8UIWindowCSg_tF":{"name":"start(from:)","abstract":"

    Метод для показа плейбука

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add7chapterAcA0B7ChapterC_tF":{"name":"add(chapter:)","abstract":"

    Метод для добавления соответствующих глав с reuse-компонентами в playbook

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add9uiKitPageAcA0b5UIKitF0_p_tF":{"name":"add(uiKitPage:)","abstract":"

    Метод для добавления страницы для UIKIt-а

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add15flowCoordinatorAcA0b4FlowE0_p_tF":{"name":"add(flowCoordinator:)","abstract":"

    Метод для добавления абстрактного координатора,","parent_name":"Playbook"},"Classes/ViewContainer.html#/s:12SurfPlaybook13ViewContainerC_5width6heightACyxGx_12CoreGraphics7CGFloatVSgAJtcfc":{"name":"init(_:width:height:)","abstract":"

    Создание контейнера для обычных UIView внутри плейбука.

    ","parent_name":"ViewContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC0E12Configuratora":{"name":"CellConfigurator","abstract":"

    Typealias на замыкание, при определении которого","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC14HeightResolvera":{"name":"HeightResolver","abstract":"

    Typealias на замыкание, в рамках которого вы должны посчитать и вернуть необходимую высоту ячейку,","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC5width09configureE014heightResolverACyxG12CoreGraphics7CGFloatV_yx_So07UITableD0CtcA2JcSgtcfc":{"name":"init(width:configureCell:heightResolver:)","abstract":"

    Создание контейнера для ячеек внутри плейбука.

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_21numberOfRowsInSectionSiSo07UITableD0C_SitF":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_12cellForRowAtSo07UITabledE0CSo0lD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_14heightForRowAt12CoreGraphics7CGFloatVSo07UITableD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Undocumented

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

    Вспомогательный контейнер-таблица, позвооляет обернуть UI-компонент типа UITableViewCell"},"Classes/ViewContainer.html":{"name":"ViewContainer","abstract":"

    Вспомогательный контейнер-view, позвооляет обернуть UI-компонент типа UIView"},"Classes/Playbook.html":{"name":"Playbook","abstract":"

    Основной класс для всей механики playbook-а.

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

    Отдельная глава Playbook-а.

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

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

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

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/SurfPlaybook.docset/Contents/Resources/docSet.dsidx b/docs/docsets/SurfPlaybook.docset/Contents/Resources/docSet.dsidx index 29540415aac4b136b7935bc3fed40bb0b132187b..3163840bde0f09b2f8cf09dab411dd151db635ca 100644 GIT binary patch delta 1908 zcmd^=TTGK@7{}k|YrpU7>FdX-V5#NQmLkZZMOvUhIiIl_j8jP#ieM?U<pjc!gCK|)BjED*iIEs;%kvFU{qv+c?qNEUT2nR`JKFU*$R@8(IK_r3Z* z@9+1#V%L$o#~BpBXaZ`_aR^fg`ES&Mn1kJY!xcUso++p|T3O#TR7;S&qw{!)AZqMxL_?_}yG(6ux3uk0#1yM^YVMVRNr9iMr zSJ)P*PQEC8kGsHGWD-@0(5GHziez_`-w3htN{K-X@>-Z73;Zczk-Z_g$V{tim2O!; zb#7uHfGf?zV8pDVePF=jX>UOqs%zeWR7`FRLJB@J9HeuJY6?OUZn2Mn9{X*t!Fv3v zunlk8!(w7Lw;C7zJ+F3d*ylF9j3s)>g*o^U3 z1GM1hRx30hYY9UoIyWIy;4ju{sK;V!3N&Mz)y6kvu=)f$pv#>mYaHQnwUH{or`7N?zQd{H)Q(l`LW_nI5*3MP}JkU1j#Q0kD}mUtzC7*;=4_wYtxg+D2HIlF2_ zHLe2o3wBI7$?C`)3wz&JUS*Hf0pj@!ZD2**o>00j2yo z-}=;1(ex_Mv9J28orPu(P;J(PnO$jl8>l5=*HPI#5eL=x)l;aB+VHyilN8RBciIpnP5NqhdfIk$)$@BJY=1$W^j?vMJdh|AaruS91@z{agZj zo)x7i)kd2WrLEg!cEN#Sq)5YzKy9~pg4ocBI zj~hy`yt|3&bgbJ0#rS*o2ozz!>!6}s_U3{e?|QR28%vTkF03faVX_Obv?qsZx$tnifo{7??MAxomf8(mGfQ+j6P8;O`GO{vWF^#~+nUFi8?n)C{u}hU BI0*m% delta 1647 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 Yr@hOZfAUZMc^*Ii9|7KAQ2+!701SxRUjP6A delta 64247 zcmZU)bxdAC*Y1tG7I&w(yB3Gy?k?rVT?-p`_u}sEQrz9$iWaA6@%!|7&YSbS$@j-z zxw0~uHJN0tWcF`OY9P$+2Q)wyjR27&m2Cn6ebJ5VWuWcO%CeqF%-BFePMcxEmy4kv z{JVx=Jc)+Cky`NU#ahD!^)Gx&E>~(rp-j#n{7KbAh-o=($$Y5IFdttKE}2t|d~im; z9;QPvV_SP$pB#ug_R41(S^I7p4cK4zZl$Glt!}(#^Ur#Ntf)6%52FE^oF+2cy6(Rl zw%70awh!?oVUHt&$-zl(Ygnn2Al1i}l;@l0@5}`W0is!1H)X6C#iHv}Pr*GV(X9B^ z4oHY10Nv7p8db=IV#G3MTG}AJ_*V;Rp|rFS`^7{H2?_oQ(@Pb=h*G&%3hXJ5sH-q` z>Vg`w|JqwpK{NK+O9&{>eC&QMEosn@H25V;*9nIHC^g}{2HObnzxJ}SQ+p@f=;#@# zkc5y;_vhP#U*D%GT)|k+*No~!t|HoA;5J7=4nn+2+<-$2%1L z;Q3|uAO)Ya1^@c-gOY-R*FeGqR-!b8=|&eX4b5d< zn{uP+&Xr}}G;p+yNs7ZPzo3K_{U)qdY@8woWIs9W=&*n)?Fz9>#>a{9 z>~6AxeZESLfadh&lj_Y_oQ}a3QJM@>RkRq=Y=jVDTlGcjAFp=Nq$rxB9Z4@X7HQYj zace5(>3MN-g*3{ImyPb`*NyJA?i|!;;gjbg5!hO=DsbVU%taDSO5Yi`b=x~^_U>qd z_SErKH?j!)uFYUVB5xgNoYQbMRJ6CBW)Auya!CQMo1-?A{^nCu^1AOuA zJVLi_y13yz<+wx?$9Y$q3=~mV5zc)Zli+Qb7^cFh%ho8U`@W@Wd>8nj-c~kj!H1Jp zqJf6=7!HqI+xdfbXR#8uy3W%@!f!h4LERT_FmZ5@9>j#n>^kgk+-mK&tnM!E7wh}J z)ZdJcN7aabnLIrI-r?IrjRa)I;+&i&h^iPj`M+xzS92^oM(VC)`iRE0ZhMFMh$_7V zG1_Y`>c{@6*m!v0=B>#SNQnuj+K<4FkLnoFJ#~M5&m=^-^e40RywYt=@W`TFohNd3 z*(OQ+prxR!MCLi0R2VQl8#3Z4jiAlQE@7AGzJR70<7W6*fQ9s!PTz=8OFEqVZ2Z4knaC!JU$_ z!^~CZV{W^y`SEV2Mj40f&StzIpDlwBe$=$Nj>_7RF8{U#1n$%h2=z}>z-Eg(xBe=i z^K5Mr=tmzG0_bSn5~e)(<$q_)4o6%sV=6>$&K;5d>zh^k|bZ2f^# z!QKz!YGLU&Ef`@CC&j3$NRAu&HA(y6Yqz}tCz9RSf@h&7bIp3eTqQ2TR5Y9^%q2Nz z)YJ*iSnor}v$lpM!{k-vKPQ+RZY=z2W#H2uC)?$&4tQcgil*6RM~qY1&ukY8QA*t@ z;YQ2-bE2!z`V(?&;dR#M2!SRtsfs$^FFWktHT|Yh&&$L)WTjjuFRVIKe>Qv~X*RGf zbMz(w{pO+JPmtw^k+OJkOp9aym##2X)typRN79&aICO3nnh~|w3_dY=^CsApg5a7hR6dPAc76m;I)Qu99yi==SGX@gPfv}WD}HS|-pjq!Z&uqn z?~aDuZyS%A3unE0J&$K(hIgNIA87A>;mkVSss1~*th%z$HAYQz8ZHSyn<2HA0F!8 z>kJRyd)c(mH^CccS76bEu=!TOT@}{z5AeJCLm>Md z9P23&y}FX-3kL55|7Vt(p$}mDzsfM=9qfDPv-Yv7$-4ZZ+o0a@M=?KWjz>Jl@+!F+cNfmf!|BF{~6A5`~fDhI10H0E-A0Ub?3EI|5gWk z30`$uPW+bxpdP_hZU2$>Liep}VWC-~A5ercyDNw;%osMxFm} zeK&CLEu>CG+p?A;7$`SG@q?l}k;Bi9 zv^X;km4$bUWO-?RqLmEWzwqZGPDM>xH9<70;1S6#hsv(!5!9A^W{k%^PZ|;ijErNC zf-7k?0(11&sgJ_4lWF%X#}m!pHh*RL=&{hgAcdBNIcC(gPQsX*t5~HN5w$8~3q1j&VCX?7G*6yvsG1baIq-3nSx>%RG#xJB4g; zc##-sQnP5Pv*w@u1Wg+q=rz+cFPL1{mjuuCR}^E_qTn{lV~PjH$1q$ybxt>5u88vo z>VBj}m|cwp#O9v^WLKT2)*D(C+^q~}N;tgc(Tz2=OY@^@>k!OW{R@<&3krss*M_3* zeFmOrXcx5hbk#RvvYn&5W(q-)WYF^>nr^+vDp$A00dATYNK3!QSp| zUG}$b_rL3`$g&xnx27U}46ta`cd;L?t?P=!{^yc&IH$J&YM9Ex;7MWz`Z?deWU+q#wE$HBh@L+D1ucgU zm|u+|-COD})@WNQilZJ?GXRnn(?Zm^=#JxXFG&_Bi!Tep)6J6a`D;4X_QP=!lN;H{ zqUkRx+Z!!Fcgq|(IR~EpTW+Vj?W;|NMZJ7>D!bxNr=qQ(jr#y&)+Ez&=A^R{UiE9= zhH%SSrG-R^e=0J|y>;yqbbt%#aSImDu3=SjD$g_z@*c#cAHE5X_mb(^rrxTg&#w5x z*m3issos`5Z{4;B!^%=k&siH#yV3auKRLQ8)cj(swcESDt|@AK z185JQi2|3ib;2I@_I~+SW$y7TRW%PRuV>uxNq*o_B9Z#r7M#_(i;fo=ZS?fl6<}OM z-S^ygl|)pBk?~cc@w6Z-nMBPdk89p?<1yuQi=29KF$?nOLZ)KYfwx%jmf+8;M_*wS zbR&SnEZz5Q%J4RBry}m9)_qjpotctB`KQe#qP6W}0?Flrd$Q;O|M>L}q?NyQf<0O? zA_Ql_W;U}J^z7T|CNfy54l;d?y7s`-9M-$!>PhV(rt5MXxXNP?HyF3YOv+M&K1e0k zKXSL3uP>gBc&Dyz_|oP;H*neuW(9PC;NP)(PVZHvi`h4HzdTXl zL`gyx9l;MTKJQE1TWa7pd^PA4+t`B3RpUlbg<=}`(#gZPO($KvCAek`pDY^yS@Sr;Mq%X$Gd17`1d3D|DWug zx&Ysh!vK%qnM^Eh+mV%Oo%i+S9Zh3>_stgY`-X4r^9^@6(MR_lJgTu>d#|aj#QOwU z?c2h{(=zz=tgPIhb)ifRmf9)Nr%68j)ZAw zeYpZUYv{o5sh-*P@WGh1wZkpqej>Mj>*pOF_h=kyM z6Rff$!17#RHz1*k@S@6M*9?q}wHqkPSec*_Js?6pG}A@VF0Jh$7@Yu4_BUNY$m5vc z2AQas*fc_{pHEM-ii#qn;BE%x`S&{ERQme3ts7Bj5g?lV!?m1$=m5|<8i(^3$x06M zc%m2@#CX?LnEN$JWyUu#0C6B^_wBJ<3F9$R!tASp_RM<6=uX|LmKQ;_> zKZ?;$6wpOe(7ufb+$wLy#hiv0UMpBcg+y=Tnk4X#BmlA&^Ok!Ar zi*Y@fZ3OSTswKnyXRm*^Ov58kgW$HCo8I>dA^u}?b(ylO?fo&{!5WXU7tdu_1Ji)q zizLvK-Z&{R1)n|ssidb4jo-r>&(iv|Mq@y*m(`sbrcf5EzumS5jykW=Ge z#jnJaEcuPPOC#}u7a2a9QA%f33Q{!2ZM*CIZM@=BB~@)`-?A&(lRW9#_$PNJTHvhr zv*6$Oh=By`&rLs2bSQGR??coJF-Xxz_u0Hc_u9Dt{J7E2!tD?9+$~OLFeg|m!aOjx zJgVzM$7rifS>01{P;6cGC%$?;%f7cX;>RJ=pWV?N!)F#Qx-U7i&><4mJ0UY(VfqT~ zLbVr6*$c80){4e%(d@NqSK|mW-)ny~AhF-??AByT>O6*s$g4#qs^%>mH`G+l_2)H} zW*?mct|9Q_)d(^coBPhB(*TR>_m8Q!ski4T&O5x{Wt?RpQyRx!$7^p~&#pXoPjAf$ z7E_+H%1z!d1je~}!7*d$8|R5CB4_8} zpxt-;o=u#>JKiM+8&SI(Q*$YF!Q5`@stI}n{4z$_w3cM>ddJG&lq_;5g``A!1w?<_ zknipW?6co-QGHj+&x3vXTA6EhpGP^YgsdV`ao6%p5SYLr3{bcxy~!bFQqb>^OU@z{ z7bYLx5o<6*L{bxReM3WXAitkU{8Z0C{w7p#hG^}5Oc1z_Ynb8{O1~I#sJlRU3uV&@ z$Rdd{X6P&FR-W_onPdJj_O#=oFFCAd(AiAx)Nl~eb9H;9A8(WqDvq|2Q{;?^Et9>I zEvfsK75M&!Vu?VJ_#qZS8Os-b=?mvC-U>27=YqoL0QB;+e*myD`dHKe3H*T?xu4%kx}S(G_yU7X(J~OA?V=8|X@*n~ z$DB$PU{unQJkPeYl#F0gOf3lK-A*lZa^k{^;${xlOoVVLqM^Na=}$xj1x8Kb&2H$~ zuf{$F?7HWTi_cm8i2u&FW}Ql+0m=Xny&{PHU@cc;^2aK46YkpiL`o4EeZh9E;Au^FszpbEc!sf&U)O61(dQ9si4tF!kU(mk(dMXwa{_5tUV)Y`Wil3_X z$Y6-JJY9Y*DRql1{B64AHU>t}w~>B)hcbhzq13D0i5OaQRivY4=p>w5#&z5xr{!lA z&a;B2RI8bGox1v76<&I4GjM#7OpH{&T*{~{GC2rW=S*ceVW*n9%qT?_{@OwzmxQV( zig`gqrRL&Nh4BaWEi)E*>y6ve^gD`E_nn>;PF?8#Lw#@V?G3^o?%ZZgjI<$X$AS>V)#`Cnu(amvLNVi~30>RNxa#PO*LuBMbruW|oYf<*=)P%1wK|GIR*l z-O1aBS|3w)dc$^>nF$Lg`>ucz zIc=4a6IoD$n#I)aTtMaXsap7K1?ZaLz#w|BFHWV@UuSy ztZ75`5TxIznVbTO1>&P|LfdmcVFOMF>@aj{7u4d!;{yn=y-}yLHa!+fd!0^kJ4f2z zwij+JPpb`Ze-nN`)eDkO7fZQmiS} zkb4V**de2jA$98chW{s}(4U)eb+W!XG4z`F*&E7#@&~5aD;z#U{&krXx+kEw?$W>S zp=1Jw!b$#Nh-xt`0F8W(*jShyJ{&wCpGS30MXA1Pf(7#(%t*IAGKD?Nn>XOD7LC*c zfjrG+R>1me0%^$b3pNu4bk#!P>+dq6G12uL8d!OWv*@VqaQoRXNat^DUiP;?PDPX6!k??jBTgkQM)ClJaVC2TW@dpt`qGwi15M>LpvHFu-y!XkPfN%3KWg^JY)tc@EugKq%oMUYtElQ&1%E|SM zTlk<^zB`=&A2u3Fqm^6J)_}*DjeKV!7y3bAq9wBVlZgT0y|`ev)7Uq&4ws(MTJ?)| z;=}n%-E{+#?7c=7*|Ed7h0Mw2fbR5S z+^bLOr^F$kwSd*vdz;-H6dAN+0_9F#G5=zueDwAG%iS&_X~iVA;4$yNCf^k%8E!RC zw0hN&ma-1ka{W!|q=slvoJ?iEBCdC&8=NdP*#&&&LGbPtCVRa6x!5~+{ueg$^c22C zE6=!~#g96mkxGazcHF999=0yB89=Ci{bQV!mjl2iYPn*cOC}lyObsCK(0k-mk~hs9 zJTyct`vgNKR)DF_sO5t3vD|7C`!oxV1qd8ej0>EaTm$r^>)e0uZQw#K)HL)O>3o6=LE$Qr6D^BqZ_VhoT16=LdjkJ$J z3EpYVxi6tG=o+0yUuDz^Gi2jsT{gt~zKL4-GOd0g@NuH7w_NJN(q2}PcO4Tl7|H*} z1uJ-8M4Ki%x#vY38u}w&WLo>H>Z>fqUB%*Vwp`A+{e2W}`1a?yRXo%0#{~Eu)r-mp zEdp|a*i`b&TLzrQ;j@;x3&2)}dYv(g7%Y^*+}3IlD?44%GjB>El&yw8S$IW5zuY9F z9%Y`aSQ>9VsJF;9*@MNQ@v)%HX+kYP_gv6$iz#&t?l$?%UGWjeU5Nn5Dp|s4* zDVe#T69sX4KzyE8{a@>|7;t#rSSkYmTh!Ag`%byA777Cxy}1nA%TdJLhUB7#q(b9#g;Xz(4F9L(*h05*P3Q2LgCR23K zu^m1|e^S1o9K`SIlESZzzu9G#en0+#Hb+8@10ga4nGjr{A1`skM;m`CJU*=kUsp$| zcZh<7LMzPFOUT3G=-HA73iB!p@7YS7kcQ5 zdpJa0*~(|QX+3xhVIWZsDUmUSwVo&$+LTY&8_*tF5lu<(ewtfSYui8`@RnVWZ_3fi z+L_3I;)aK?7&FU%p-TzOADFa4mf<+Xg;APZoIhPNo25pz=kJV+RmCKb36)QLZz%G zoBl6VC7;cf0SrWb_oU0OO$1Z6{*3=z=fo0#ODxk582 z)tqrU9m&FOBd(Pr(v)Z;DZus-pR=|Xzva+n? z8LGSt=xf)t67x#zsDV>!Tp^*3+>hFj8Vw%NubgxkR%8A+&d`Im;rIlfF`Aq<63>!D zX6#OVq>I@S)y~0$spuoZ*m0bo{d;N~Exah`*iB>i8CC&<_)U3^JCB)nY0O#gTU3RI zBn2vOr(9bewMrI;)RHROAhCa*bU{MR2C5(@K*-QaQRkmz$Zl_`<>ks2)**M_eRe{_!Ap+`d|^^tgadXnza4LHBDYxm_b) zN8DjiGgIl7fLS3sMlwuLO902iz~GH1!M^ zfOp}Ws%D$oVqoADs8>3GZS_5$hFtmvX7Na7FkGrJSna{Jra!sy*(_=>CeWZ0XHuwW z_cpF1GKRb9;|n1-Ug}NW*o@7Z0i$r#rmfnOy4_Z;*4&D<4IDD;!eeIwZOMof0Z(Pg zQ*(MtK73QK`}q86gWH$ulj1ZZkGQ1(X5%WE%R|zmQlV(WH}Q7@IFT$+iDN6%ofDYk z;WFj^pOO;q`>U9sWd?RND`(~(8lVPmb&VeBB zQ57<4k#(snmq+ZlfCfNapgN`K>-$hX&N%FjhyCc82iQH9M*rZxkT04O>*ZcMu^?T530OTCDq~rC*q1H+v zqT0`9^ok)P^$Ss#Lg`&AwK_P`l$`}tf6Im;k4t|gT^B|e#i*E6*;3F-nxAr6W{6XU zN}#6xLL3+7=*DAr!+msS$I#cqM|!+8_Tpnt?NA7%-l;6tp)nEzzyd`pKC--sxn^ZE z`)eC}UX#3c$IWc}y~1)A1O?1dmbTN=@(v%CX2`$OZ+vjZCb-VNgXmSQNxUya^}qY~ z&VO*?-@3le+6bYqA6Q*d!L|Ln;lA&U*RlXruzWt`>k5k~_wv(ryrKl4(nQRooC7(T zO$oFRoHl+PQ#5U0B~?BPT5Dp~LO68|2H-a0X_RlY`=U7~eG%7he?_DkfN7RwA(4;( zkDu7-HHF^wbx#i?>h`sWk{g3YJn^Qes;d{s@9hP2CK>rTu;C2(7hyT>x5Qhe(%wPeEf^Oal8tE7;1Pn9rzuH`e zED}8&5o%msU)`Zod>+_7`I0Acr?yzcOFjFT+1J10HaoC?-X@|(b=smPG zg;ezQ+lIbHLw(4o#!S+UO-^Sr<7~1|D~vHVAqwGaby z>wIc@*>wika2T>VYpIlbgfml>7#%6J3i}xW{fF|3nyjSl+3q%jHqyoTx-o~q=E#zq zY&g6C@@a4>WY&g)0=H?iBp4%ub%x#UG_WVzwI`d|mPFg9qiPZ_60Ts;^IwxkXK5u! z;Zk!HL4qKABx@BUDHVtixK}||#PBPO1$A_J@(dY(^Mc8O(zCk~Z#T0Hv>YY^#u8lm z&G86J(4eQj*I{NcgLV#t~j z5qA+RE6CWk<;oOh%Y}ZrkQN;ai~Z<_*}VF?*-#A(J>B~d35D5U^`>^QSRRYZRpMuZj>VWRSETw2YHoeEGu zs(`gk|D7~@jg(y`Q7I|enKb3ye)%>$J2@`>B@P2AO2GxDwqh7}%GW)}cQb>SK82vL z>CZ`@OI=$E9y0f8p zth?xr5XyJ+`~%_zu6R`CYPYNrzfbV<3xa zPf{`_3t_k|`l~J*1C0Voh^J){LwHlx&w@(5<$GT}O|ql^X)v?D@EiuBy>FTsA5wCz z$oaUMX$VAEXl&j;ilsx=RdWmy5UR+l%p-}bX~`y)YevE~jMTC~`@;I5kjA&k5R*_qnWEBP~C4GivyeTeK{7{Z*L=oivas>|-IM1gUy{t=C5w571--ni| z;?_$R$2n19WYz@?Ww_rC_HLR z<{H=8&jiqN@+56jvwc!F!=9u}n{zUOUwFf=`klV6F%=K|8nSUxNGl0hezGimjv^_r z)DN8CXmKwHq8U~3$Npg|95cBVgn^RQ+)ayY>^g=oT{4o2A?`ol=cRR-e|KUW7}jgc zwJG~esQ~d+mkkSOCCxp$XvAH7WLT2bL%z)^ zs8Kq1hCiFx1i$FzT&x7s$E@ATJbjwzq>)+gh~Pg{WMlvgC1_#mOM&uCMbv)XBAaWg zrGG&os%sZ3i2K|utmop&O?}748*E^(;n$HN>9SQQ)j!n&>>dWarB(h+V~pyb8774dU;PWT06 zP&XUrkh7(hl2G3#Eps$a%;<}LBNe_!^Ka@}KudT5Vx%z0!{h#-XfyiVZBe_v6f0sx&YN0qGBe>(hN*Z>UTCTy$nN+I5KygAK@7CS~}1(Q=G~vQ(2SML4`ctY(+C` z5CH{zs#JctpGFr7OByFHh%`?%92}Y}OUL@+`!NQrAq+rP5t%L&Ozit(ATwATjjNSs z3AjbT!p;I?$i2>z2z6ZE5kvr)y5W&E*s5bVeX8b;9ztuT>RtR}z8vIIgwzrifnt(!iXl0xE-H zFi{JLjXVxTt#9K@d{u=x&qZ>Zos$WpUTFuoJcs283}O%SO|93$ETms{q>T&sgb_D7 z04iO~nwLBS^<|sQMP)%mb!BrCpy-nf=&Km|^E?H&nY9IXXn!|YY7hgLP}3f^B#S7* z!sQ#e8A2VmfO&XD+7JJc=Cw(r~0$oXNF@$9p;aP=TqC*`aNpk z@#U=_lf>M4Wn*eRaGVO75IUaJxQ+M}X$$w1tTl7ojkHP=lE(g}6IY5N(YJkVq1lVhH(x`P;y&?v{! zr=Tu8pREOLq@!UcU{_c-tv4J&ha%@(Se2~E;;v3!3d^A!^2du0H@tunWwfN24B?y>T@C#v5+d&LK~@g*!gPbf^Xp1Vq!BcWhr@m&{ROMIff;ROG2K(#)fiiMubf3&SOJyWgJrI5k7em_% znqXCUWrw^|zf|1+l6Q=hDpzH?AC8G~(IGd?qCDs{U(66X+-a0^_K7iCvQAJaT-pKm zWdQ#We$2?H+*dhBRcqaEUFoHb<3SdiCDLVSNaq_Bp7KmIOnnqe;e+zQ%V-Haa{(smPh2Xg2cyHbF|Q(5S*jH)7Ewd4`qtKJA5gn5azv& zmS4Wd_BXWcV`@_|!}Nasb%Q9$VN&f_zz!_=G$jacuLuZfc7JDJQazy$$$X^t2`5oV z{GPb9c9PFy*SNw9R@ zU8wNY#=zuCO7n{<9IZQc>s9wHH-4Zns2{!g>aL-L;q_a8RD|VXWQ|?3gghEW2I^_rq+cV#17v_5GE4z|UPHYz*P@5ajzu6XzixGx&9Jt{Q8x3NyU!35-3 zH1Ur4k(#JR4oIEWXQ-gbM}3*aX+SmA^tt3KUnkA-l_*Fq{Jo|7SAnO+x{1BtUVZ{@iG7J{#n-9IU8v(Y54 z3UaDGu1I@lRp-JSWn(H})|E*JD>}?ypi7Ca!MWItDN%&@PIB1UQSGaQLW(5c57I=7 zHm1`4-F%{fmX5^+_&ra9J51dZxHY?t^ApKM7DCKypw%VpMSNx?zm<%An3$^kfLK}j zAo=Rv8h-$kbfkqHs!DI!QeMH0BQR4$`5fvn>Wcc1X!1>&hekIvi2svqRCv<~`yV>% zJYsajR9*N{kON_3K@*upCB56TW-tn z9ao%VHC0olTH^NOMr>}p;Gax-rVWcM6GipdKn3mEF_XB|{zhPp2L$a4@;rh@Rrv%R zbjnX+yjdi{=MCfg4P&JyZbHsyS1uFvV|v9C78?kE3Rm%S5vd2+p`WAEGkN_c>x8Tf zl?T{7wW(v*PvK>O9Yfy4-;-58TmIIiJNs=tH_n5*DAQNshuci#=QN?K)2xXu5XL8n z4>*A0YI4fRkC+PNu6YNSzuM3r$AL2x2E)O0k_E|O*?+FcEr#$| z_&nS^O^R|M2C{1HhBMQDE~N;DZJ?n7A7GhTdvYxhSgSfAJ4MxC)s-zkuE+w)S~!>{KP$pg`dcWB9k}B?rmW=_wSKd_tYW0R`vfN z_~A(kj97P_6hUI>V2icH-g#mvA@R!3!e;>{Iln8Kbg@al^*Nv6jRQ-v$<43i3H_A^XE&(Ot2wzQZqOZJU0jV?cmw%&0Ner~a);4q9y&Tu&!pRU)U zni-$SS5%GLR%mrZN58Ylf1hWlbKdCgAtKZb3q^LBc=a$=@~u__`lrHFSq_?QWuL_& z+wzK8IW?q+Le?c`VDYNNgX;n|k;uBac}-d){f~O{dmd@Ip31);OyDu|X0Y93@H=Z8 zxav(k={-*Xt{v7SlnJ8g9~x_hY(D$s0IOrf_=SO>d%=zzR7s=dqO?(A=O5-n^iV2qGAdM?)*L9CmvqFNQG+8KvIC!EMGlI8&BW_ z1pL$z`;#J{9|m&~l>vu6A%sk}ha6iToIo|b{3!o~xyB=UzJPNoUjGxSYa;07zF|2= zqYGxlcH}#59_o$GZ_e4hVi1z1O7OF_UWyb&?g|Wg?-*?kt!z#p*LP)e)-LCn zM$&n5ihTaChDAs<<@wFyqtcXY91bxo%g1X_GYRt(lEA8_nVL)Gx7c z?;#tL_$dQCnsO7BMV#x3Q|r|gq5LCEabeZc;+WZPyKK=}c!ls>CryZa!Oj@?gnnqt zsRtWY!u{Aab|fq#=u5Ir3V_j)4lTifzKvH!zU(CwyaaDKiG@R@cuOV9Oi*XKR8mq{ zCbWZIrI!tjgZpT{O>9c=(gnVG_aMucx>y3HDkAJGd~r0>-&N%q#u|ltYQoVBCU`Kz zUwjA^(qOlYjK28&$q-9ruN8F z0Rw1oZlFm0TF{IY{9KWBo`3d3zpKYh>+1sa0FN@73wuSfbv&YfG`91Vh*%Sn?A7HgV(%WzA=E3b7 z%A)ICk?UqXAieSzN0tUP5%cOu){`rRQ}`ZCofGN4TPLp#FRp5qc|scZmGbHgcYgPW zmE7D-8zZS`udY{ZmV@;2n6}JKgRw>BNAaFzs9*Ie^p2_)K*`Wg)aTFwo|K+nK|R)D zU?I$tsB+i>2T$8_ccLJf`wc^quH1kwMz@N-xEEAj{f!#j@4~=$LP=S6u2vL)E_H(Uu(!eu!8#k; z-_n?=D(L;>iiv6pVG1*Bkh+Yv(yK18jMT-mrPD8j8wnYpF*mQCYs|13N#oMkTv*GD zU?3vW$7(ov9O3y{(KFt_O%ZM7UY*orffBD7l~#VqUf_6|L1r7N>w`O%w!~bC*%((y zV;)`&6xobtQDWJo$8fu(rA_XTuUEdtri~A8k>Gqsb))Y`W^&YJGBVQp^Mi52VC$0s z?$_vB9S%OsWEt958e`;W`PK7t(ge>GxbijT2`aUvXjoqHe)}1lfuq}ISqZJzA(P6* zaZKE!u!U)cc>*?!A2!03Q(oK}!HW6lR){n8z@h@Jg}vQ)I)N2>5w`D&3C==2h9E>% zt8;eXB_TIgTD?)hCkeZrb;;j$%|6O&a7~MyeaYFX=aM zFJCBq^G8|T(9=O2f@V*+_at~x1~w?b2nHqVO8y%pU{ zO!Ih7VB7AamU61U?~eKWb4zy3VAL@2w~sbLWzY=}D?IB6RC)g&s=hL)jxN|136=!c zpuyeU-Gc{*pdq-s4Z+>rC3tYxg9Ue&z`-H7JLf#U`(E9u_or)5@0$5Bd%CNq_gZT| z>;JlTQHtM$dx`7qE51;)#$(RE$R7m7E{|3*?+qw8jJn~k}DOkQ}i71UtXgc-?cNv%LBa( zJVNjYlk7qyiXUn=dbr>F4Nb#<1+W0V`O;t|8T&Hyahllcx~UfPLh^sXCKy;L;;uVe z(zwAbq2C^2K3q7zznCKA`6W|#Itr_hTi}fili23S+~HVkmJ_A@?5n8J*&NIGd{NC} zL`4{E_lO1-bMC!z?_>i%;Yp``c6Dho6&mVoo#iyZ!DozY2=ja@64?6~L8<~+k>pv$ zm42k8ENgL8Yd;#IINovcA zyntA7I5weKz9O;En$d>OFQ9^hHryUl9asW^0v-K;7r$XjQ@B<`n3fNl?y&sBz?M7gUzU70!;$~zH69r?#W&6brFFRll>gal#`J{E*LUpk z!>dC)z$vwA$e@>+<>2BD`MeweH1&3W4d>tH*Nku5zZ*llsr*&EWb4`OA6w}7gN+%7 zPiomD13dRufe|_m57y+Enu^81&><3%JL1hu(`{(uqsN#6tGUt`>|S9d?{T~;x$W{D zpRfalUH(P7eySa-hzY`?8A-HGL#z4dk%)|kIFFQ0@fph_bQS)K+Gs^&%N_DHtEJ&< zP6>etw%jLs85O+(6mAjtQqCccI9Sv4s}C4g0y|+ZJ#OzyhQ4J;{0NXq3NO4kVMCm% z#mmNuXHB`NF-(7TF=+l!G{X zA^bZfqKxQ(=@=8$H7ClO0igfdo?e6g19H3{x)T* z>gr4^FKczkSjFJ0IIP$j<8I9o{a;cU{z;7Dt%k+|{;-MYKlydYQSKo@yRYQ^iETG^ zSNwAO@sHNx`zE9RNOl<#pNRF+Nctbb@KbL7Nc@YjcZ+fKDuS3ej1KflQd{m4E9AYp z%9{yK)B{(EV)F-7S@6ec@MrpRKCIV&Fhr}HN^`J^G7MOT5$d8vZlUnO zJNuWDtgiHEBM!3l>ngfI#2=9Uu+56$^(@138RgA()?(Cqdi8NGn6oszBwKpLCWo-r zg@`A4%rPr1=gD9&ZG}YG*%LP4CDG?5((p4MaURfr$xoaoN-ZqC1GQt#KRq6ffjYc@ z)Qi3Z`~9RL8-i-@=wd*~y3#8>kz=1~h>!9(bb0?pB0R0R;f3966KpsPc{Vi>&rgZJ z63^#_p`jfeD`~COQZ@^&N=i zta+T;?8*$m_O+pXVWoVr4gKYdDz=1^@fbO$KaG|)IVF6%;BfZ|9FO41 z82hRMgO=XLfb_UiIKcQNqj}&UOAmNs9&`|dthb1fQ>^^4mxjhX@OZDfOeH)xA0OZ6Llj=)wKiA`qBYZw{C#fVrQe6vUa?g=CcI)0x zXoB;`M0%fV-1U$xR>jXI+BXPWAd1jEwnD;Et>CQZgRXy;k@=jfPMsfKsQ_GU85e2B z+Ww^O)BiZu`27>hTC-F-gRX%FAyH0h9+hmV&rWUULaModk8OpE0QySGs>#?_YQ-RN zRrOCg32k>+xa2kJj0ntZVDI|P$|SCMghI$qq>3RR{wvaxYbjIv@@Ix*0IlkG8UF|q z_vK9b9DzAWd1|cBYOfvKKMnx)IdtLNl_Rvxbz2$VQw-Y)u5LK8Yq-)n06S8rgzaOa zGhgf=mPM_!8j?UX2l)?qYEr$rdSO&!;5%Fr-J-1u+u?{=Bwg|6(_~n&#J{3+S0*Kc>v+#Xrj@4REdIIQE;J$=Wn!Ha3pn+-k?zL^CLMl;Y#mbu0P_>Iv3Gb9% zbpB*l08Ep`gq+P5;Bu ztg+z0*IXAsj9^M6nzUeM$Aiv$tY3SNV)RN*DtOF(g;}Od0;gcn9^w zR!K|Km9m&KX0VFry7D&))S`Zi#|G^K-_z)kLNxr~s;h9MZ-BoqR*)h6Oe@_CXEeuG zc3eBDe2WH&eH6Mm=^f4-$=hv|W~D4QZnh|AEq?Cpl8}tTh3`HguAE0O75*Q82=urM z?EO5YK1)JafVgV`D;`)O$rYdQsPc1d_!Wq1Y33W0chdbM2d(=#Qc!uizJsLC(gNa~B3qy8+nci`wJL4wgo(Uv2>Uh6 ziHv8GeE4paT11EG65|G<1RtX6t3wc{ONa}OI?0Xz9>JUlMB2(O76?o+BwlJpe(gU? zb7u)+C{A_UA7eSbue1*!>6FX}wwdaiLP(p;rvkgw6i~r3jVV5hg%Sn1 zm^oI891L!1Z@%@9S|&H@Y6W`E1aaycpm&dfutBdLpXdJ)@7{qIJabolh9)&p&qG!^ zE6x{zT)*7|w_WJHp`i+d1^|4O*tV{MREp#`+QQ`N$NQI!nX;(q(M9WPXRXw~aE&GW0_)O@whYxfE-*!TMMxZCZNnM`G!_u=u_*8_5DwgxTS zn8|9pojf(NbiD(%HDZ99uHz-1Zy=t#hy)UlM}Ld|#kj>m3I3hk>nhaOc4A}dFW?Q$ zTQKr4npjjJTe*q?ARZ^T-5Y}5{tnN6L-;kUcsuk~kp6PFtvONf3;Mel2pL>~YQQs4 zHfqKWMR*`P0G@i0plv0!kDwPvTd44raEC_|rqVEWC|53Jk^Ju>zqJH&K4+ce5OF8I z)I-NNN(&L%JmWdq>D{TadlV&5r%(1J;uU?PPV{PXOU`D#u1dpFbXMlQ*bh`$nVksN zwFESz)HNCZu%&Nd0rIoW+`{ZlDJJ+$X z-YN4|UU_`Uf^LLgJ}r1DB!YjHGk9pp$(32HNpkHGys@EjRd-*xuvP($^yS{zV9Uzq(tAl~KGzdOh4 zvkU7Dem)LMcch@i7FO{REeZ+-FSC_SCI0JXH*8IU-~80{)zJZ6l!;8mvcG;!uQPL< zp~;$}JglL-_RHaFu-B6Pve7Y>mYuB=)G0_Ib-3 zI0QJ-MlP1ay;rhT1WQdtrKRN~WH(5e1+e-Og1%kdxr<^NWsK8ZMGITh@4QecWxS+A z$zLjBfvYfqpn-Q8JoFr*_OD6hKWwb6rJGM6SK6S}JERt-wFghTE{8wWdk(MGP;F87 z6MV?AfAdMz{d)jlc{#1`T3UL@s!sB6JJ@Pj5_v7kR%&N-kg-8Qb<^_%Xa2vEU1?*DV_;hNB`T|QyHjt-BB5NdGzulxbh^O_~ z(Hg~=HsGf?v95CJN>cv#L?(JswVd}-eUPiMelPMov!I`Q*nR&eu3E&o{+Y8s54t`a zi=^++b`)Xs_rmyCyN2Xp?oqVtboI)O{u-$%54g|K*UDS>wRq8)$T&s>)osNPP2LIn zPZ+WK05^F#WBwv5kQz})ZyNmb(FP%z*K?P{#!CJENE`{2c4(fm>8x3k?BRuX1M*ys zF8m1U2i5J*?Ad9^Zd|TXHi53^ub;u)mm_O=k*|Y!FaD>GM0UJ@^QCK8NVXE-e0~1l0pi<@$M|sIwhHLe859Ro>A=hujO>;8a#ZSe$ndE>L~ru z0d&;34W;g%eXIB7c5_SE>u!l)dJ=}5uJ`U6*zk_6WpO&>Hg$l!$fG=1G0F7X0XV~| zDnk(o@%*MSvek{#dxWfx=EkQ$;Wj+`RF4k34FuM|QyX`EKvlW!-LdPI$o0rMng3GG zlAp`=ZMh$13*<^xmgC$WIvbe=sxLhA2vi~Ef2}mD0d`OGx?kFmKsRl`%V00}8gN$t zez?MpJ$C4LOgaZH)>uVf4>bX@4#;uM>x>|D4*l%;I?wO6V#*Jy0Va7W?OD^9$@9M# zWZuYo-H`-9*OO4E>kLqLjmgqw(!HUZ-4Pj&pB01S)cf-#k*5$=;NrT{|61ulZmI=z z)wBqH8G=4ewBKYg%DTU-Yj=|<_%(|^jO6(pHy~N~-@KGM9C}Z!084qIFB75nFDH|( z(4`-|-Cnn8BAr*Dt`(oP93lvf(}n29Gb^*^gqU-!m)kXTh+M#@SkFQ34M^hU2sGScU*u8r|?dyHsb5NfD z9?^lr(;sX{=aE)FFaM}ng&u=$ zp;gsH8IM;;=N*1~_pzcb+oi|;=lf(`K6}EiLwk87U*6v zpD(XLkA?^Lkdq9gFtps(t(BUMWCJ&H*P965rLG6JI27Tjzdszt=$O7PxDMu7RG51WQ3LW2JE- zU1zy@zTU5YRDM9VSZx5`v-W?YA`eFQFB;onK~o?|67F38eYgKLNcr3I$)EE)zdh*7 z^HH2Xw4gU`p{sO1>Hc-{91KN2UJ6?7?!+O1=!i%k1MabQ&hrUt&>yuUKZKxm0ENTj zql0E{;tO!(Z8Ytvyu%{KcmRj9{5#Jh#2bb=zoQj<`aM4^bHKfIP#f8Fp)f6d?7LR7 zX@vH#WpLmBqSM{OkG=+IMf3jeu$HlnO!W+@v3>`ta0zdX;g?oHshTi+CuHGjO*D3j zbR%8Vg+u}Q!S+iyzX&KV{gf3xs~g6Vmy^fC*V!3>;s5UZgG^lVLHQm^t28Vnyepx% z0{2(pP!_UsUIi}NblloaZT45)iL`NgiEH_nYuE38ttLU?)to=3yFLycE?y%1#_oX& z<=+mH3Ho&U(XFO`oN5?q+~QcUl^{!MrOKQBhCoz^_THRVwI>D?Q|#YEXx62cchCc*$lL$<9}0wrz9h_^oSeTeHLXqeYTDBruI|p4u{3gee&ARg zB9k*$L2k42k=Ej%nAn}|MEWQD8u(>`6*Z1mQ8JPz=1(}Hp)z{~W38U^eEp|(4}(N! zdGGIX>ix9`g}kPA!&O2V(m~m?vFk!3MpK;c*PS| zYN=b&{Ke&Uu zuuq|~os`k_+fGbXTxFD=)r;|Gv3q;oqS^li^#-Q815y9DKDqD3H|?ue7LTp+4!`_V z)Mfcz^O4?$`>riobM~uF(XA{D7lTYo7-bl2Uwrt6xO1xHxE`JXa}Ljs1}2b`*Vx`^ z3b}(_s3?A$Lgr}X-+g30h43`#0aJO+#B%TUe`E%h&IMi}$VxmLZOLC}ziKHU7O599 zS<@wJPy;CC#h?85W)l>L7$pT}XZ#U{WzLrJo^KEQUmrEjN~NGG0#WC_ZoAh|bV%Y2 zL^Ml3Q<7VvjPPS?->YcKGSr>sF4b-K4vLG+h46|9HG+uMMm$3+1~n3)tWg^W-+F$# zXbyZxM}U5~MbL6wa*8v?y+YPBQ#KlJtOS+ z_cBbU{ADG$|Dd&U2^2pdG~o276??FarKYaQF2C`y55O2b1gSFnp>p8O(<2J0%|Q@X zZqGMFUXu*$>x1Db>Z&VJjtljAG`j)p(&uxRur2{Q`?u`t8Z>2rdIE4ZN_oAoDf zd}o=1I(PWf8lNy^zvUvH|7hSkdPPWt5lWg!)Sg4#&AXO+{CMk~>h)2>$XtB*RR1I} z|8QB^(XK>BrIZ?m^Bcks8#waoU)z97G#43zgpuWscu!If~!1qx7tK3;>wAz9Kxu2Tst z0ruWOp&7LQQIn^#F9>RGYHS_ss_+7>;=nbZ+>;E~ladl(`DYh|+l#o~nxY25bHX(x z^D;N3Ey66)Xf6DVA(`~;PCW0LRX&yoavvcV$13)!XXQ!w6hWIAS%#Lf)OEvZYDJtCpJ}-w{AP(Tp@Sv zkKqC%Fq4UJjMn*#g*pkEG;CnLTef7kIA7)bNejOR4uDLI}NYh5`~#ZeEK<@ z_zeBO7Rwu)zx(IzWIYqFs$-EwKyhW~?5=%Ah5*n#{?$68V3pU+?_+h8OZf{=#jS3V zHELA6$q(2kw~ZX>eJUflQBeH!x|tJWxceP$M<{XQC`^=8#uU5Vp@3@yGavEf=+DSoCh7j!*@1^6m@7v%m+mGzDRv^ zV@oqOmxJeAp+n4QlR}nuve@;YlZuKeTc1fvLIT1dFDFwmAs^NEgM}PlNx}k%8)ywS z2*gTMCT1c3S1LjM3ncH6-j1PL&R8ZOG55uSAp zIb|O7e80pZ2Yjss|=npasaPNq2o{p{ z+XyO>MV3MRHqz^MNd)X3e7x3!Fv+`qbf~Z>yIf(M52*`?syac;yJ?W1$_@{A@`G?y z48PGIMynoWT;ME@8 z56g&(G(HDwododH#GAp5DWDC#bN=#q=$%#yS}Y1vFkUQ5BW0u+96wF1wUpBrW0pdG zn(0)ts3?^A-#BU1Y_)Pr@Wdo#Q1x%vh=qNHFu38lK2o#ITBQD(TXMg{9yu%#r9VPzl+ZK@WsBu?H{NR8KdDFkLfAP?0m^y)SQu7w)-j^qz4I0eyn?fRP?^N=?yhRAr`2J!Jk-A2l>K|WO`uX7$^LRWmFtMvu=Aan-t+1;2 zY%f{6u9Ak&jz+DeF{sx9YvkOkmr#rJCHB44xiF7tRK>}Q%^`w&>MKe+z>;6j5)Wlf zWQs{gOzQ6#XHSdgPw|2yY0n+Y-aIo1p{7Y(x!Ic4QPM!&YoUf?{d0IXde~DkTUqh` zz#*F+HVvGT0xr=&ai@R<#w|#vvT@$jt}bhL;M$+N<^J$L><+fnOy-HVtnbEMXB?>J znzgw|&5J54@cp3)lOAFK3V%ku7E|3Z3q-QQT4!1_!TNI~VgGy3kz#5oR%`xS5&3F> zI_tY#*o{?4TFfI{Ai^V>=JnBB5OWS+&3$T559PNRyW`KUfp^XJh)!x%CFOx-_DWIm z1lj6d%x4SgmGs4@YlZ%saP1WB4>&U!;Lj3|1i5+RTW*_HtzX7-fw=K0$GVPzfocma z$AY(y3sH+w7%Nr*doQI`$6T|HaIq@ip)J2k=l4dGqmW-H-9RbMr2r>@7R)Th&oMM@ z;b{TsbPiW?-My9~DZ!7xcYR_{8&*`JXlQex4mY!(ol<&glNSX>FO&NrMrM}gy0RM& z4&+6zAn?JPE~F;lrBDwoC7Be4VM;`T8HGsr!R#I}ogw7UeuHs-gQBqB!y9KLKf`YN z!`RAi`NOo5!JHxGe@1f>h53sv#=_A?7Epgre-GdD3S%ttHWTd+lN@qffAcP%EA|;q zC;55LViYQ@pAUK6ySuK&(aX`_@3d3fxbCnxyLcUKB?Bg79~ienJ?T-t0xo*dNm>yz z-3oGAW?Ks>wU0zUUM8hk@Y}RQhq>c?S-cmx7BIWgqIgpz2nSxv9Wi~1BXrLAzh4F) z@0mc8K-_=f!lM=#zx@7YvM)@m@+Oc;tm6M&WUmLvDqwwjOHCm7-u$TmDB3$e|5#}C z;9Fgw4=imFBX-NNIU2I!L?W{0AM??5&gNgh35eVA427~{*pJt35fe?;ZT%O9s0YiA zv8Xj~VfdftzcB3oFATT-3q#vh6Xq@^^6gL_=U)$n1~AWAuCKMU$Ve)Cw+o8ze^1^z zh}$Jp-CAgIf?oF0K#hiJLwl?wr+{`}*ZC|?$sS_(m?nG({ybiWSx*~Vmvb=vkl*p# zSIzWqJP+rlgo93-2IJqXOz#x>f4U4%$TB$(nDXZqUIH@2Ut!&L2cQTN6BFI}q)=Ii z-4?{C^2$@RQM?tZe5hj5If8xl5K<&zHbDP(k@Y0tHn=abFQV-82&Jh441hp`OGKO$ z;VhF_U+}p&G$J`RJfe}#cX+MV#FFV}Qni}v$YdC?*)I1CyQ$RB@=-jZNveQ=08A4t zDoT;MD-(X_Rdj2jY=#Q{NwVMPxj&h5jsg=~Kg-2D}GABu%2n|wsd29)Z zYz%J=disS!V>{&t^yoj~HvrX@C4~%EHp-PGDLFvTPcm6WuSTj!{Z2jVdW+|!Wk#Hj z5)D(Bc*b>d zpV=ObCALR9I?~h@tF=;$5F?=kN1@nVT^e#fJn{&!tUOyP&BWkpc0k?InMrs%GQkMr zTIT4BtI$oY;*p%EdBnzT+u#Tp<{(xttdM6t){6dPO$h-AK=Re5UgxDkzMY29Q zxyZVa=5@R*5;HMqk$l*oMP~^A%9o3-$PkP!!Qi&`5+M{Z^^x9wq1& zq3h|+0=)LgLRRa7+T(30wFVz$3qS)>jXqR(aXbpjDjeAq?|{GJtvm7&MYFACzFs%dz!I@CMtkJo8I~ z|CDNAbY*(95!Y{JxER+Phh-Sb&nz^ddzeTjB(4=<5cyCFuF#1t)S}({7$RQcUb2{2 zM+V$nDsxHn$6)|HBYqSyaTU*NN5)9-QP%yrKz}$LDN*1_SpIvWn~+qo_F8<@cs$oe zl0td2KR$KA#6e;)OBuajo=bT{o3^g~a=MHDlkwRCZzhccy#_(f zqgt`#4@Fz%Jh~K&Quz`o^)eE&d@E&XPVJaIh?p5)f2q>a<4b2CP@*D~W+e9&Mr_Nb zpwSuAr7DcMBZQ-KJ;@OkD(@?7-z9Nvx26xP$bx?GQSV!t6m_ngck%})B^Azu;L{EN z=DLK9@?Qd?aX2`6qOypb2$~-2bE<15mo^fXTiIt=90bGR8J!MQ*Lo#Yefx5C+~zT6 zz7ra|8aKzZ&6+>jQQBZXZYj{#>5mvajPrVM z$B+50p9nsG&_lu$F}b2dn78|jEczr|$EDV6hB9hV4~KzeN({4R zI1gY_I;-S;-uml)p{jp!sAlH0D_I!BB_N}-7kEOV;K4PBQX}7Mx1-L)@IauM9^9!p zsLHnn#GqpeM_Kx*6U`+PXAy<*oTH6V=Hhgc+PMmhaQt^bhH26L2I+b2*p_3vsZ~8m zlyaX0V_zO^$4(_iR51it!(H-n-a@$YGUE}CqPKjGze(Arb7VOrbwHd9|%EHkhqfcTp{Dik$ zvyv)zT3&@!9y!8OSf98}P2ng<&bL}8Qy5(lBvBYd;eaRuX2YxvMmMXo%mM=`q>6pj zRd$KU`X9O)0B2X#$f5vZ1>#?TmuY=C&vK8&4r6K5Kjzp|S9Xjuv0Ih=H7t{`Lc8q? z4DWC_))VY7pE# z<|eM&7Rn9d)X8ovM}$-_5p95sfn>GGQn1Z9uE(i|TSs5@x20Cb)5unu2((kVAyQv9 z76G1T(RY2A;cnC;-HPjz#58^=@J@|p(etv+(ho&Zkk%l`VV%|=lO(F0D>9-5)aZ}Is2ySLe+AKmcRjd8PnJ7<8qC(z zUT$V=Q;Vq9gR@>94!cBn>Fd59#=A81yLp5K{puGYvv##TTRU+~bY1}?iQdehldfM3 z7ub;~-&yFdmB?t-96&GcSWfJS@VVy7R1XO?*m#HC@l$U}f(0$k40T~(;N%B`% zkJf87cjtQ8*M}he2l;%+f_>cLxp2k3)y>6`^s?tYepma=-N|*_j=L%$XXjC6E-od)iDsCW%T^txNA1g7+ZQ2Y=bEaKda1Kf4pLZC99 z$TAQt(?G*+QrH#i@aal~ZyN!4MD?xPLoi_VL zEV;$vy)iU3bxYWgS}{>`q<*hO)5qRY`HtncY|2Y>$1nbo=pz)K12J^hL#^KEu(OZj zdD7Q;mcYsRKk~DMxS7izHK2!=uAQ%b*d%5FR_+Z|Tz4xb2JBl=>sfZ1d%6MM(0p%g ze8!g-+ShF8O)bGUA%kQU)_q-r;+B!5s1CDR2dh(72yu9T)-b5G2tdJbg>5QMq!P%T zdxM~-a2cPHlnr_~y}`a^Q>FY|Q$4O0iD&|=fLD38r!^!pA!ycj%!rlYaJytd=T4TZ zv?Q z2K_qnWH?vRpRRLdBAzA=O`lO-(HSL9Bvx~Oe%c%F;QMJyTR^sU>)mxF!C8bY&GZtF z2YgI2INI`)3J&k~I;_G~dP)MREzo|WTZm9nF_5|8=3C{9*r4*)X5ip6St)EYkB#kg z%e2+{u7260BlY;*H>VL9_O@0b>TQ|aNKdhQ+gs#WB1*5q)ypEE!=|F6DW4R=XS3Mz z)O^(tD;~d2tpA{7t_b-x)=I$FY_W-71VFMdG<{uMZ#*73w}vu%V3y#{?zpQW6(~%xrsl^20B$(! z*J4l%L@C<7et;t2i+s_kZ~dkK5I0SDjQ*0oxXn@Ccyhn8$!9o&U(Spp zz=!D5_lt8ux53h6eQtgRlZVRU>G9H?E&udorLU7$OzL<1oc-hF>+u6tenbX6DY?qo zW8jkxw@v*N^O33c6S%X1S0B3pC@4?|DlZ+VFPVZ^4{#^Ja9@31Z@JF=Tl83^tKnm>1T~>n;dn1ik03WCr>Kz>2IInc znmqGoVVk5&M{fFPv(?zCZQCaD69HDd;BUu^_JmcKNNM@F67F{p*!JXuQLhqzT{GzW zBo!xI=Ifh@&kim3eGi+i^fm$B%;a^IwxUbkb?j1xXAP0~Ln zKEQ$4yRg%n>-3eEbixJwrxYCj0t3T8y6|~=(*)0mz2~i{siJS5h38{L5&+omS>byE zxKQ2ELB}cjY#G@Fm|vQ(M+%7w`2r_&L1--a?OG>sv~iIHR+V{9{PbHt5#t$=)DNkv zX+*q9C)U*>Q-yxfsK`mrg)z(cryo*A&VZt8-_&4Z{iVA`uN_a%W@Yv_xQT}qzHe3E zuqd_sa#L|n1}xSo(#7Ajq*!`|)Pm$OEPAYhkK6DFT}k~|r;d(X9sV)$>D{Sqs%(co zWu=1sPK=*5y%n{akC0ODs^kxv^$(AI9wXZLavie>)9(rFZL6oQdeS3k*>_c?h=EeV zMwAcFnLTjKcRw$Co1gJEnLw!sJts&=bmGHef4y$79cM%l;-}CO0j~ zidTyB6Z;iIynNCRZTCT+YUWVk4m!POd^}P2)GT~ty*iR?Ny zm$e=b`*`G*6-@KPgn3U!+0x%y6_a&S!Y5N^~=PR5#jqgRa`B`wDbpN2&Q|ZjQuIK zxqV~El+@2P=^vlgy;|of&$&W-AB?)T9;crfJ36u>G3r=I#VziaXqTwj@gCPXy2UZV z4{N>(f@b=#X1p9%>ToDHJ_Go`VR^Tp^@i;k?UTDn!t=~b)kz%EX&*%e?gxw;qgtW% z7B$Yq_VV>fF3n0d3-Y}99Ar22rj%+3ZQ|p7lgv5X-hHi&L>>11U-Mf2RYZL}u5-|l z*!fB8ZngZBRI3u?HcXpt-n$~#;#j-OXb{-?Lm+bc==zd&i2=6-59EC_F!=p1WnDv7 z7U8G>p+WwG&`Ktx2Jkbbhk`PVlsr%USbIEA#CC3Ava0Uw^qP3k4$^s)8(oCgmOxXi zXyUl%#}(-F$Lqf}t>;HMQ|WF`%o8uEeDvyTlJPT}@>2yYd#aZ=cO7}%;DN@xZj0QC ziz;|H>ldzp4Wu4xU8Wc z<8qC5H--jMc3-U?XQJw( z6_k1!F-MNk-zOL@5fdwLuHF8I{KJpuAtiX4nb~!aMFQ8u>SmGV`!vta<}x@Vp^TO} zm*w_GnAp<#+)`9nq)^$2t7#veC8YVt7pg^|Z!k&dQYX|~+& znn1-zlrIIn*}>;z-yhs(Tey+Z=2yuUhz1+8uL)$Y&0zyeP4)A{6&fak2yZ6G!>zv3 z`ycrAXVqg-MV_ST!SGXSnd>Q{khDe&t$o>T`DCs6O5LQ;k~$xLfbc~^Aw2=p&R%|G zC8ks3g(lgWm%ynUQ0~K)!2FRU?4bf=jA!=rUCpI;i!*mAE_xj5C=b{;v&y_!B1pt* zeTeg~RFjlkUFXQx3%7j6*JWrav0nISVS2#hY4tz~FWh8!{2SR&4b^UZOgHM1HsFUw zD;no;hi>#(mU%|?oH;jRFylwv#kha8)Cn8%aYm8oqEY$9Y>6tyR*MgXJJGIyzl#3# z9m>*Im1f-prt2}LS7BXY`3;KIZ}LW=DxC%P&RNA$OxcpnE0l^jH58kuB8$N)$oq+r zo2P&9ELNpJDb_?*e?2FiUUXbO3%JKqcy57^=Lc(pHK}OgV8OW8I0rD+sCGB_e33Cy zL_yE0)@2bPlgu_>jEOTOKPyB5ah|`surGw79zNc124YdO%>U|G2k%Vn;c`&T$YUBAXJM`5y|i`D-=!nu^58Rk8HmGg2FY*b$PGr!1UUE zZKAWRdEuqN$79lvL61#kdfAjhDSma!u+{dG`|)!|{h_=f4#~Ew*JZ~6NU&WdrS`oL zx#_DW4{TNGxgp@e%(?$6)c8l*IctAST?KS`3MH;+1T!)`1xxE~!LM=O%5UythriNB zrFtq-UmtvEfBa|EM|yq#2u9!hxtmRIi2H>Kev5O4b~Z(IO78HPYRVmHT8tPdsHTwqNmfIThN!fH5 zJF~!I-ry>}_7YuPxc^p5T07~&i~55Lg+A;woJ4K5PfOBgZ&KK$BvEey+PSL5 z>7b?5>VKhr`CUGxY^}`5iwY>Ln+?sS@N+^POkI9bN&en^K$kXXZg3Pr$30DF_!?I& z0q&di(a93>{g^#`M<8A_ljGYfHbnrcueDw!Rc^g4;JqU7)?eON_-WAgwWZ$R9+MJ3 z^Ed_m_K0vsVRV$4tP5SxK}Fw=gD-30PlyNovCG;HmJmVf-#$ofP(a;y!2eAb;lzU@ju4k zj9a^5YXZgaG=5zPHI%3+12Ypx<@`H2y$r+E1)VHi*8Jl4|*&_X^`><#%96_xJi(h8*Qs&7J@~JZo>VcUVN4ZWrCXSb6f!KY} zTW-YDa5||={_v%AI$N+|7qGI3tRmOyCCmGh_t!yKDK|J;1cELTTdX@{`MrtI{|m$# zXT6Z}SkZJ2a?BB_yeUas70Y`6oU5q4x4#+_0ctamKxOIdSSL!-^5vt5BXFjQ%XIKn zIydRV)Y(DxUq$k}rzh;+Q+6<$4yotZl1!@g{R(T5gy6?O&8h@p*K|ZSee?-jVp7F; z7Lv&*N84jF++#|K?#XpgwCmeFy-oV+#|O)u6yx^^cq^m=mn!Z25q}(BVY_FnE`a`n$~fpqmxZ`@KnnsNQ1ub&75R=o_l*sZeS!P#iuK|v0Ym@3`kU#CnxN3oNA#kA zKi!@_m{~4GBrp?(g6|Zp0pUF$8a~83UJUmx5?B2J! zYvp@3s8f)N@|<=Hx<01`{$~a&5@#B}6_+*NIgx!Drh%%UfpH2UaphyO)ak0iaBfsp{;jmz^Wtz+5Uy<%YYgLi z1>SYI%p&lO9dMDfJuv+C`$DiQmX)7MWfMz%CKB~)wAz7Wo1aUL1V%B&dG*mEDDi0! zNWCGXIc~E0w>FUN!;eo}v30!drJ>hi#Z8R(Cw_-N{Gz4Vt&X`%{zYB)$!d(I2f;}_ zP$*n;6(dKH2@5Tm(wq|J8C#Xb%`faRAPQ(PLbON55Dab@Fe+z6W}WY zckvA!l5;~QV@qL%tVr=}^kG5t!klJN!WbKR3DnUBdsan)O&z6GeV~zNF{SY;dR4-| zSvmJVF3toDV+7~5XEICbolq|W-$}_yrpH!<#oU|U|04!FH{!Nm!|uZC)8mIzA4BhRcV)a$RBVM_nD3 zv~&?!v8MPL^iR>DmE8Ll%?kBs^@bggb@EAF} zo3*Em;f5&b`HO>fhi-@F_5ADD^FIsMZ?p^D9x{0_8o)FW_f00GV#k8=GH|Z>?LMxB58p zbF-b-tdf!w3uOgAwhHd6lE=!_b_QY4#V!9A4V>deM^Hvm^V*+9|MzlmQ9-RL^L^*d z2zS@D{_YBt@4FN;fbGu_f6E#eRhHj6i}MU_1Mdif(Ag$cP*nIN5lE9zHu0n5H|-(S zlP<+SxtP#gM`f5ZVpYwxmy!GXJhdu^0xy{DG(Rmj(cXP#_#+pN*Wn@R)Mi-OvaH?P z=wh56m+eO~O&TG9#DlN1R}rDa*<13i5?7E*{7VYq{W=>j2q^h_KzWo|t(58J>a5`L z-I_}Dh#B|q;(+Dz_B-5sdYAxG!{Dr8L6h>A8BA2K7$>llhjqw@o6{LJyDGF}`{By! zLZh&R3q7`CtAVT4(?M*vPgUasFiG^VQ-;6na@;$((y?M-CxT*Ol4TjgPfLmVsKgZJ zt)(2Z4yBx&H$@K*Yc8@ZLT(>^7(! z1I&7E>W-*YwcM*~$T;cRgc+YT4~UYzrO;@jtl>ZhP&$tHQGejogg^&w@&wb-#&!eK z9oGXNbp6sCMXb`ZQ(FBc$n2$~+6`(eSMSve;C_Pj9GYg$?->|~2VdSXlTO>CKNw_;RxqTXaI(8$JXbDR| z$UN`L#4%1xF@*r$PNXFK<=&vUs<)9$MbqPi9v_{NabM33!6R<$Rnv{V(r)p&A;D5L z3Dki0vamZrw`5)iE2!Pb3&aJ`dLa!|KGC^!4%9LT2$*4iUqzsVNDF2(hem-IY_1tm zbZ-2fy}%d|X|r5*wK`W_Q>17x*r?ZjpqjRt2b|0%j~Ko_;soAfF>hJ$KEwIHh?Tsj zyuXO7sumNrgjA@H8!7mWR)Z#ySsE%U3scaN6Mwv@0V67&nSIc@-9N#&w`dO zV#gM{cU~-im^)^#5@#k&BYZv&;%(u*W71O9&RT!jJ4r$b@01GG3t>D`*^cVamg%^< ztufWM^m#jLf||B;0t5oF2UKMSVkeB`4Q$J4wiqE&6@rHkf7 z4@-Q`o5GT$=dNX+d7zK$QmVosr&q>)PMwQeGaUwhD&(J3WNkfH_9yyf<3(%#y3z$~ zqInhdvpTGrv(}Z_wAP-`q6HF!#nGB{WI+rCbj6*s2UQ6oUUL^ZrlGwD3wTN&l8nw5 zJ<|DhFoZ;cu4blX$Jp*yv($`v8;HJ^7k<V>Z(>KMibab9&e;iNZ~ z@L%ooGg0#tLF>}!p0biI|E4@CWwPrsrbZBuVCkK;&WB&Gk z>a-sHkYkOdeHzihK-cV=$sHa2YN)RRm{i1%82yPeUQ~z{+ad+|kV)$V& z|LMcU)7@X3AZ}CN#jevh9KnjeuCSqB-JfQso@nh-hkmrvWE7 z#ms(?G(V8z7b0K5tiCnJh(dZl(|;Kf{d3?(8#URNb^@r=tkepyrhbXe{g(o!p9_!* z4PNeGqDPP4WmUS_u`Bbj`Yd{2n=-1wdN-ZPhcjP5a|^v2eb&r=@s(U2?W=t<=rf3T zlI$Be5C$(@o%6YwkSi{64|+d;ZsV}Igq4!hY?^fNo8&TpUyFm^_G-Dw%ft=*-wcec z(QhqQW(iLh6AO*P$Je3_20p83s1YgRKEvVz1jn@H@`Te~+YC%5kl?}SG!{b?Akem7 z{egRn!(0asxm5)>gtuyV>wGjGufNBB&)T^C192n)av@@;jeaWDT3E(`^=E2w>L78d@EK=VYEh=@b4^Te zKo{E7q+s!aYN3%VFqGfd(J^soE-yAbzN~M?Z(T%LYc9X2z4)BcS1lPV2Odn|-N7Eb zMSh)@L>8nbJ;iu`m1hYPU2%%U5}~bIT_ssvQB;X0f0s}d@a{B9p}>h~n00E=RL{p} z)DUunI?kVk2~wX;i>R{)#SF4UNeHI#opzx0zh;?hCr*Ba@Qj2VGtf1LIM~x-OpSK8 zt@IyF)G}%j0C5!WcEuPeFQ7%ICZ}6NKHv*l_GoJ)xLO#0F&u7A4P*ptgkH`!MjHxR zm1qXBydRfUe)CoKNxUf&4vKH7f+`xoQ<09rbza=Fwg7Q;k;8u@hwC8Yr~`?2ad?0W5CJAkvQ6LHXCW$kTHS|?Bl zrnA!sW<8_P-t^t38Z9wG4c4tenHQee&Fz?RHdY>>Wt!Krz@D0Mv=tMY3f@SK+C5u3 zptqacr6Sr5K{H0+BJG*(@kwuUgP1KAlkd~2oyf(1G|R9zPY@-Cv!-Zm=FHd-)7CF) zfKt@Cv!!UeXRPb7>9n0#%lWQ%y!n1_Lyx)HfnFdBL(yXuOyu?4BMv`Z-+Q=N^Gmod zd&IQt>Fcr>>;2SAglEn?85VPY;QFBlF!vVHS;mQj>Mjv$REZ6aaN5$_ zUSaL()pBm}Epek3XK#G1SnWD>*zkYowy4)xHKNYz^k>Xu`swLbw0OuY=BVc&RnF_d zIk`*0Ht3K6udl>xA7RASBVLm&D|v%y#krOKXv#;4iA$|1zIDo($@Zi+{+4F@EzMSc z|NMe}2BE(l4%Oq8Y-z4H4|@{eTO>sLmgzf9p%e&T5-7if&4Auot}RPJ^k)^7vj!wH zS>-!KPYuI_pOy*x7JQcHzk;#ue*mptf9lAY@(jl|zG{7%<2AFF&VSC((gwz}{znP{qAYuakVsGA|pMyYG0?jG-N#KVL8tyYWv{ zLYr3*$q;_4lE#uN=+@gcX`8F?TYmYh^OBRueGvrB^Pzt}!k*0R<-k^iaQrHXdYm?C zihhJr!6g#H{|^?^SP)6X;bv9A*kiSF@k$yMdm8%lQL>=#Ogt`A^4u*s;TpJqj+I$5 zJP<{~jaDeY-502mvBx6n!OdN~0uob;_rm@QwfPZE#$3R#afzz#HZIlH(}(y0$%kS871)o4rRF1M)=*+a$hk7JSz%gg3Gp<6Le%!wOWR zQSeIiAn3-nZiSZ)UNtP>_mHY06W{JtCQ0RY-^STxvilY*m(b0>llUwTu5r<-=4XRFFUuzl*s1TpkE!ZQ9Sy$~4f@4bUub{B&+~YN z2zMU?we{AOK+qotW~{#C=aq-Pyw9J=PA9=!6G4jxMr=BtaRlhz#%gH>&wWEI-OF|)I(j}|7Wrl~YizXck#4J(J#oAb>|D2^ z*)};k@AcRzfYZ_%MXi3ajunWXQo_hTrn|N< zX)&p!ROXfAOpy}Zva$435N>A@e+4pN{R-51zlbo(Drm5nd1RQ$`#}uPo_e z#moY~hM$hN>1sIK^WSKqK6Nv1bF8C2(fQnMtrbq?VXywhrf7~+=B)KaRE1h-FM&{M zUwGx#Q`!uG1Q63@VY#82*sFoSgd16@FL^G};u zRpm_)G?Ry>?HuCHz6-Ro$3>&#ur+f8{b>})2#D)kF6oXqBml3Q-|Y@aV{MgeW_2wX zVJNDXQXZ*IRjWLSh^&IHjH#iTYj1YrXftPIA0c9di)b?wG6-3gIsbsMM3`@oB9tHz z0AbaTSGMwh^1x; z>$ww}Z;uBK{EUKsWY>jH)i?U@KeQpkgIF;@r{RdK;*4xIwLoZ&Oenmdhf_bh?!R%s zRXmyur&n8xox95I&Zb!xZ2i)QDeRBV(_XEb-!#tKH)A=EW(@j>yl8(CJba@mCmnq8 z=f_(8vEAy=2b=w|(JT`qjyk{D2{h2!s7VL$7ws;bu#S#$#|*UzF=98;P}ro=H;g!P zvEj-c_4nX^M|q<>y@-H}(qo{A;^x5xg FfQ|?Z@gSsg9hOWWQ_QUi*=ot@2ZY)G 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�Y8`@y`kFm4oV}7gW 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 Jj`;xU1_1v196JC2 diff --git a/docs/index.html b/docs/index.html index 69b8da3..d6bf3de 100644 --- a/docs/index.html +++ b/docs/index.html @@ -13,7 +13,7 @@
    -

    SurfPlaybook 1.2.0 Docs (59% documented)

    +

    SurfPlaybook 1.2.1 Docs (57% documented)

    @@ -201,7 +201,7 @@

    License

    diff --git a/docs/search.json b/docs/search.json index 0f13948..9294b92 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV7presetsSayAA19StringRepresentable_p6preset_So6UIViewCyc6configtGvp":{"name":"presets","abstract":"

    Массив, содержащий различные варианты конфигурации UI-компонента.

    ","parent_name":"PlaybookPage"},"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV4name11description6configACSS_SSSgSo6UIViewCyctcfc":{"name":"init(name:description:config:)","abstract":"

    Конструктор для создание страницы плейбука

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

    Отдельная страница playbook-а.

    "},"Protocols/StringRepresentable.html#/s:12SurfPlaybook19StringRepresentableP5titleSSvp":{"name":"title","abstract":"

    Undocumented

    ","parent_name":"StringRepresentable"},"Protocols/UIKitPageViewModel.html#/s:12SurfPlaybook18UIKitPageViewModelP5setup4withySo07UITableE0C_tF":{"name":"setup(with:)","abstract":"

    При вызове данного метода необходимо заполнить экран переданной таблицы","parent_name":"UIKitPageViewModel"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP2idSSvp":{"name":"id","abstract":"

    Идентификатор страницы UIKit-а,","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP4nameSSvp":{"name":"name","abstract":"

    Название страницы, будет отображено в UI

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP9viewModelAA0cd4ViewF0_pvp":{"name":"viewModel","abstract":"

    ViewModel, отвечающая за заполнение контентом табличного экрана

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP2idSSvp":{"name":"id","abstract":"

    Идентификатор абстрактного координатора,","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4nameSSvp":{"name":"name","abstract":"

    Название координатора, будет отображено на UI

    ","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4typeAA0cD4TypeOvp":{"name":"type","abstract":"

    Тип координатора, подробнее объяснение смотреть в FlowCoordinatorType

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

    В плейбуке присутствует возможность показа какого либо экрана приложения,"},"Protocols/PlaybookUIKitPage.html":{"name":"PlaybookUIKitPage","abstract":"

    Протокол, который должна реализовывать каждая страница UIKIt-а в рамках playbook-а.

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

    Протокол для объекта, способного построить табличный экран"},"Protocols/StringRepresentable.html":{"name":"StringRepresentable","abstract":"

    Абстрактный протокол для всех возможных вариантов выбора внутри модуля OptionSelector."},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO11coordinatoryACyyc_tcACmF":{"name":"coordinator(startBlock:)","abstract":"

    Тип конечного координатора, startBlock - замыкание,","parent_name":"FlowCoordinatorType"},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO4nodeyACSayAA0bcD0_pG_tcACmF":{"name":"node(coordinators:)","abstract":"

    Тип узла для координаторов, обязательный параметр - вложенные в него координаторы

    ","parent_name":"FlowCoordinatorType"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12mainTabTitleSSvpZ":{"name":"mainTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13uiKitTabTitleSSvpZ":{"name":"uiKitTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13flowsTabTitleSSvpZ":{"name":"flowsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO16settingsTabTitleSSvpZ":{"name":"settingsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO20searchBarPlaceholderSSvpZ":{"name":"searchBarPlaceholder","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO18emptySearchMessageSSvpZ":{"name":"emptySearchMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO21coloredBackgroundNameSSvpZ":{"name":"coloredBackgroundName","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO6cancelSSvpZ":{"name":"cancel","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO4doneSSvpZ":{"name":"done","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO9containerSo7UIColorCvpZ":{"name":"container","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO11placeholderSo7UIColorCvpZ":{"name":"placeholder","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO8itemTintSo7UIColorCvpZ":{"name":"itemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO16selectedItemTintSo7UIColorCvpZ":{"name":"selectedItemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    цвет текста в done-кнопке на экране выбора preset-а","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO4mainSo7UIColorCvpZ":{"name":"main","abstract":"

    основной цвет текста

    ","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6secondSo7UIColorCvpZ":{"name":"second","abstract":"

    вспомогательный цвет текста (cancel-кнопка экрана выбора preset-а, empty-лейблы)

    ","parent_name":"Text"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    иконка лупы в search-bar + radio-button на экране настроек

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    основной цвет фона

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO5pressSo7UIColorCvpZ":{"name":"press","abstract":"

    цвет фона при нажатии на элемент (например, ячейку)

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO17coloredBackgroundSo7UIColorCvpZ":{"name":"coloredBackground","abstract":"

    цвет фона на экране страницы UI-компонента, когда включена опция coloredBackground

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO11translucentSo7UIColorCvpZ":{"name":"translucent","abstract":"

    цвет полупрохрачного фона на экране выбора preset-а

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    цвет сепараторов в ячейке

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6shadowSo7UIColorCvpZ":{"name":"shadow","abstract":"

    цвет тени для ячеек в карусели на главном экране

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html":{"name":"Main","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/Text.html":{"name":"Text","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/NavigationBar.html":{"name":"NavigationBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/TabBar.html":{"name":"TabBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/SearchBar.html":{"name":"SearchBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig.html":{"name":"ColorsConfig","abstract":"

    Конфиг со всеми цветами приложения.

    "},"Enums/StringsConfig.html":{"name":"StringsConfig","abstract":"

    Используемые тексты внутри playbook-а

    "},"Enums/FlowCoordinatorType.html":{"name":"FlowCoordinatorType","abstract":"

    Тип flow-координатора

    "},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC4name5pagesACSS_SayAA0B4PageVGtcfc":{"name":"init(name:pages:)","abstract":"

    Конструктор главы плейбука

    ","parent_name":"PlaybookChapter"},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC3add4pageAcA0B4PageV_tF":{"name":"add(page:)","abstract":"

    Undocumented

    ","parent_name":"PlaybookChapter"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C6sharedACvpZ":{"name":"shared","abstract":"

    Вся работа с плейбуком должна вестись через данный singltone

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C5start4fromySo8UIWindowCSg_tF":{"name":"start(from:)","abstract":"

    Метод для показа плейбука

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add7chapterAcA0B7ChapterC_tF":{"name":"add(chapter:)","abstract":"

    Метод для добавления соответствующих глав с reuse-компонентами в playbook

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add9uiKitPageAcA0b5UIKitF0_p_tF":{"name":"add(uiKitPage:)","abstract":"

    Метод для добавления страницы для UIKIt-а

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add15flowCoordinatorAcA0b4FlowE0_p_tF":{"name":"add(flowCoordinator:)","abstract":"

    Метод для добавления абстрактного координатора,","parent_name":"Playbook"},"Classes/ViewContainer.html#/s:12SurfPlaybook13ViewContainerC_5width6heightACyxGx_12CoreGraphics7CGFloatVSgAJtcfc":{"name":"init(_:width:height:)","abstract":"

    Создание контейнера для обычных UIView внутри плейбука.

    ","parent_name":"ViewContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC0E12Configuratora":{"name":"CellConfigurator","abstract":"

    Typealias на замыкание, при определении которого","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC14HeightResolvera":{"name":"HeightResolver","abstract":"

    Typealias на замыкание, в рамках которого вы должны посчитать и вернуть необходимую высоту ячейку,","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC5width09configureE014heightResolverACyxG12CoreGraphics7CGFloatV_yx_So07UITableD0CtcA2JcSgtcfc":{"name":"init(width:configureCell:heightResolver:)","abstract":"

    Создание контейнера для ячеек внутри плейбука.

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_21numberOfRowsInSectionSiSo07UITableD0C_SitF":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_12cellForRowAtSo07UITabledE0CSo0lD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_14heightForRowAt12CoreGraphics7CGFloatVSo07UITableD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Undocumented

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

    Вспомогательный контейнер-таблица, позвооляет обернуть UI-компонент типа UITableViewCell"},"Classes/ViewContainer.html":{"name":"ViewContainer","abstract":"

    Вспомогательный контейнер-view, позвооляет обернуть UI-компонент типа UIView"},"Classes/Playbook.html":{"name":"Playbook","abstract":"

    Основной класс для всей механики playbook-а.

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

    Отдельная глава Playbook-а.

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

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

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

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV7presetsSayAA19StringRepresentable_p6preset_So6UIViewCyc6configtGvp":{"name":"presets","abstract":"

    Массив, содержащий различные варианты конфигурации UI-компонента.

    ","parent_name":"PlaybookPage"},"Structs/PlaybookPage.html#/s:12SurfPlaybook0B4PageV4name11description6configACSS_SSSgSo6UIViewCyctcfc":{"name":"init(name:description:config:)","abstract":"

    Конструктор для создание страницы плейбука

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

    Отдельная страница playbook-а.

    "},"Protocols/StringRepresentable.html#/s:12SurfPlaybook19StringRepresentableP5titleSSvp":{"name":"title","abstract":"

    Undocumented

    ","parent_name":"StringRepresentable"},"Protocols/UIKitPageViewModel.html#/s:12SurfPlaybook18UIKitPageViewModelP5setup4withySo07UITableE0C_tF":{"name":"setup(with:)","abstract":"

    При вызове данного метода необходимо заполнить экран переданной таблицы","parent_name":"UIKitPageViewModel"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP2idSSvp":{"name":"id","abstract":"

    Идентификатор страницы UIKit-а,","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP4nameSSvp":{"name":"name","abstract":"

    Название страницы, будет отображено в UI

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookUIKitPage.html#/s:12SurfPlaybook0B9UIKitPageP9viewModelAA0cd4ViewF0_pvp":{"name":"viewModel","abstract":"

    ViewModel, отвечающая за заполнение контентом табличного экрана

    ","parent_name":"PlaybookUIKitPage"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP2idSSvp":{"name":"id","abstract":"

    Идентификатор абстрактного координатора,","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4nameSSvp":{"name":"name","abstract":"

    Название координатора, будет отображено на UI

    ","parent_name":"PlaybookFlowCoordinator"},"Protocols/PlaybookFlowCoordinator.html#/s:12SurfPlaybook0B15FlowCoordinatorP4typeAA0cD4TypeOvp":{"name":"type","abstract":"

    Тип координатора, подробнее объяснение смотреть в FlowCoordinatorType

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

    В плейбуке присутствует возможность показа какого либо экрана приложения,"},"Protocols/PlaybookUIKitPage.html":{"name":"PlaybookUIKitPage","abstract":"

    Протокол, который должна реализовывать каждая страница UIKIt-а в рамках playbook-а.

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

    Протокол для объекта, способного построить табличный экран"},"Protocols/StringRepresentable.html":{"name":"StringRepresentable","abstract":"

    Абстрактный протокол для всех возможных вариантов выбора внутри модуля OptionSelector."},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO11coordinatoryACyyc_tcACmF":{"name":"coordinator(startBlock:)","abstract":"

    Тип конечного координатора, startBlock - замыкание,","parent_name":"FlowCoordinatorType"},"Enums/FlowCoordinatorType.html#/s:12SurfPlaybook19FlowCoordinatorTypeO4nodeyACSayAA0bcD0_pG_tcACmF":{"name":"node(coordinators:)","abstract":"

    Тип узла для координаторов, обязательный параметр - вложенные в него координаторы

    ","parent_name":"FlowCoordinatorType"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12mainTabTitleSSvpZ":{"name":"mainTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13uiKitTabTitleSSvpZ":{"name":"uiKitTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO13flowsTabTitleSSvpZ":{"name":"flowsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO16settingsTabTitleSSvpZ":{"name":"settingsTabTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO20searchBarPlaceholderSSvpZ":{"name":"searchBarPlaceholder","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO18emptySearchMessageSSvpZ":{"name":"emptySearchMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO17emptyStateMessageSSvpZ":{"name":"emptyStateMessage","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO12showAllTitleSSvpZ":{"name":"showAllTitle","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO21coloredBackgroundNameSSvpZ":{"name":"coloredBackgroundName","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO6cancelSSvpZ":{"name":"cancel","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/StringsConfig.html#/s:12SurfPlaybook13StringsConfigO4doneSSvpZ":{"name":"done","abstract":"

    Undocumented

    ","parent_name":"StringsConfig"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO9containerSo7UIColorCvpZ":{"name":"container","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO11placeholderSo7UIColorCvpZ":{"name":"placeholder","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/SearchBar.html#/s:12SurfPlaybook12ColorsConfigO9SearchBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"SearchBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO8itemTintSo7UIColorCvpZ":{"name":"itemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO16selectedItemTintSo7UIColorCvpZ":{"name":"selectedItemTint","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/TabBar.html#/s:12SurfPlaybook12ColorsConfigO6TabBarO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    Undocumented

    ","parent_name":"TabBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4textSo7UIColorCvpZ":{"name":"text","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO4tintSo7UIColorCvpZ":{"name":"tint","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/NavigationBar.html#/s:12SurfPlaybook12ColorsConfigO13NavigationBarO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    Undocumented

    ","parent_name":"NavigationBar"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    цвет текста в done-кнопке на экране выбора preset-а","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO4mainSo7UIColorCvpZ":{"name":"main","abstract":"

    основной цвет текста

    ","parent_name":"Text"},"Enums/ColorsConfig/Text.html#/s:12SurfPlaybook12ColorsConfigO4TextO6secondSo7UIColorCvpZ":{"name":"second","abstract":"

    вспомогательный цвет текста (cancel-кнопка экрана выбора preset-а, empty-лейблы)

    ","parent_name":"Text"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6activeSo7UIColorCvpZ":{"name":"active","abstract":"

    иконка лупы в search-bar + radio-button на экране настроек

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO10backgroundSo7UIColorCvpZ":{"name":"background","abstract":"

    основной цвет фона

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO5pressSo7UIColorCvpZ":{"name":"press","abstract":"

    цвет фона при нажатии на элемент (например, ячейку)

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO17coloredBackgroundSo7UIColorCvpZ":{"name":"coloredBackground","abstract":"

    цвет фона на экране страницы UI-компонента, когда включена опция coloredBackground

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO11translucentSo7UIColorCvpZ":{"name":"translucent","abstract":"

    цвет полупрохрачного фона на экране выбора preset-а

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO9separatorSo7UIColorCvpZ":{"name":"separator","abstract":"

    цвет сепараторов в ячейке

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html#/s:12SurfPlaybook12ColorsConfigO4MainO6shadowSo7UIColorCvpZ":{"name":"shadow","abstract":"

    цвет тени для ячеек в карусели на главном экране

    ","parent_name":"Main"},"Enums/ColorsConfig/Main.html":{"name":"Main","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/Text.html":{"name":"Text","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/NavigationBar.html":{"name":"NavigationBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/TabBar.html":{"name":"TabBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig/SearchBar.html":{"name":"SearchBar","abstract":"

    Undocumented

    ","parent_name":"ColorsConfig"},"Enums/ColorsConfig.html":{"name":"ColorsConfig","abstract":"

    Конфиг со всеми цветами приложения.

    "},"Enums/StringsConfig.html":{"name":"StringsConfig","abstract":"

    Используемые тексты внутри playbook-а

    "},"Enums/FlowCoordinatorType.html":{"name":"FlowCoordinatorType","abstract":"

    Тип flow-координатора

    "},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC4name5pagesACSS_SayAA0B4PageVGtcfc":{"name":"init(name:pages:)","abstract":"

    Конструктор главы плейбука

    ","parent_name":"PlaybookChapter"},"Classes/PlaybookChapter.html#/s:12SurfPlaybook0B7ChapterC3add4pageAcA0B4PageV_tF":{"name":"add(page:)","abstract":"

    Undocumented

    ","parent_name":"PlaybookChapter"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C6sharedACvpZ":{"name":"shared","abstract":"

    Вся работа с плейбуком должна вестись через данный singltone

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C5start4fromySo8UIWindowCSg_tF":{"name":"start(from:)","abstract":"

    Метод для показа плейбука

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add7chapterAcA0B7ChapterC_tF":{"name":"add(chapter:)","abstract":"

    Метод для добавления соответствующих глав с reuse-компонентами в playbook

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add9uiKitPageAcA0b5UIKitF0_p_tF":{"name":"add(uiKitPage:)","abstract":"

    Метод для добавления страницы для UIKIt-а

    ","parent_name":"Playbook"},"Classes/Playbook.html#/s:12SurfPlaybook0B0C3add15flowCoordinatorAcA0b4FlowE0_p_tF":{"name":"add(flowCoordinator:)","abstract":"

    Метод для добавления абстрактного координатора,","parent_name":"Playbook"},"Classes/ViewContainer.html#/s:12SurfPlaybook13ViewContainerC_5width6heightACyxGx_12CoreGraphics7CGFloatVSgAJtcfc":{"name":"init(_:width:height:)","abstract":"

    Создание контейнера для обычных UIView внутри плейбука.

    ","parent_name":"ViewContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC0E12Configuratora":{"name":"CellConfigurator","abstract":"

    Typealias на замыкание, при определении которого","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC14HeightResolvera":{"name":"HeightResolver","abstract":"

    Typealias на замыкание, в рамках которого вы должны посчитать и вернуть необходимую высоту ячейку,","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC5width09configureE014heightResolverACyxG12CoreGraphics7CGFloatV_yx_So07UITableD0CtcA2JcSgtcfc":{"name":"init(width:configureCell:heightResolver:)","abstract":"

    Создание контейнера для ячеек внутри плейбука.

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_21numberOfRowsInSectionSiSo07UITableD0C_SitF":{"name":"tableView(_:numberOfRowsInSection:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_12cellForRowAtSo07UITabledE0CSo0lD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:cellForRowAt:)","abstract":"

    Undocumented

    ","parent_name":"TableViewCellContainer"},"Classes/TableViewCellContainer.html#/s:12SurfPlaybook22TableViewCellContainerC05tableD0_14heightForRowAt12CoreGraphics7CGFloatVSo07UITableD0C_10Foundation9IndexPathVtF":{"name":"tableView(_:heightForRowAt:)","abstract":"

    Undocumented

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

    Вспомогательный контейнер-таблица, позвооляет обернуть UI-компонент типа UITableViewCell"},"Classes/ViewContainer.html":{"name":"ViewContainer","abstract":"

    Вспомогательный контейнер-view, позвооляет обернуть UI-компонент типа UIView"},"Classes/Playbook.html":{"name":"Playbook","abstract":"

    Основной класс для всей механики playbook-а.

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

    Отдельная глава Playbook-а.

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

    The following classes are available globally.

    "},"Enums.html":{"name":"Enumerations","abstract":"

    The following enumerations are available globally.

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

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/undocumented.json b/docs/undocumented.json index eea9cd5..6629401 100644 --- a/docs/undocumented.json +++ b/docs/undocumented.json @@ -175,23 +175,37 @@ "symbol_kind": "source.lang.swift.decl.var.static", "warning": "undocumented" }, + { + "file": "/Users/chausov/Documents/SurfProjects/github/playbook/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift", + "line": 26, + "symbol": "StringsConfig.emptyStateMessage", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, { "file": "/Users/chausov/Documents/SurfProjects/github/playbook/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift", "line": 27, - "symbol": "StringsConfig.coloredBackgroundName", + "symbol": "StringsConfig.showAllTitle", "symbol_kind": "source.lang.swift.decl.var.static", "warning": "undocumented" }, { "file": "/Users/chausov/Documents/SurfProjects/github/playbook/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift", "line": 29, + "symbol": "StringsConfig.coloredBackgroundName", + "symbol_kind": "source.lang.swift.decl.var.static", + "warning": "undocumented" + }, + { + "file": "/Users/chausov/Documents/SurfProjects/github/playbook/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift", + "line": 31, "symbol": "StringsConfig.cancel", "symbol_kind": "source.lang.swift.decl.var.static", "warning": "undocumented" }, { "file": "/Users/chausov/Documents/SurfProjects/github/playbook/SurfPlaybook/Playbook/Core/Customization/StringsConfig.swift", - "line": 30, + "line": 32, "symbol": "StringsConfig.done", "symbol_kind": "source.lang.swift.decl.var.static", "warning": "undocumented" From 884c80fe1dac5623130e282423b4c0f095ddddbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Fri, 28 May 2021 09:47:43 +0300 Subject: [PATCH 10/11] changelog updated --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e8f830b..2ac5f7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.2.1 + +- Отдельный экран для отображения всех компонентов из одной главы + ## 1.2.0 - Появилась возможность в третьем табе с flow-координаторами реализовать вложенную структуру экранов [#4](https://github.com/chausovSurfStudio/SurfPlaybook/pull/4) From 9fb3ea591c456fe8e319ba1b5bd8034635a98a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B0=D0=BD=D0=B4=D1=80=20?= =?UTF-8?q?=D0=A7=D0=B0=D1=83=D1=81=D0=BE=D0=B2?= Date: Fri, 28 May 2021 09:48:57 +0300 Subject: [PATCH 11/11] added link in changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ac5f7d..0bb6b26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 1.2.1 -- Отдельный экран для отображения всех компонентов из одной главы +- Отдельный экран для отображения всех компонентов из одной главы [#6](https://github.com/chausovSurfStudio/SurfPlaybook/pull/6) ## 1.2.0