diff --git a/Playbook.xcodeproj/project.pbxproj b/Playbook.xcodeproj/project.pbxproj index 925955f..e7acb99 100644 --- a/Playbook.xcodeproj/project.pbxproj +++ b/Playbook.xcodeproj/project.pbxproj @@ -11,8 +11,10 @@ 04E6DA15062197311CB80A23 /* ScenarioProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68E1EB13B5ED8DD48245B1E8 /* ScenarioProvider.swift */; }; 08DB4240FAF948F16398C1C9 /* SearchResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = C509DD2858530167BEC5BB11 /* SearchResult.swift */; }; 0A26157EE6E7B940067CA211 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 559B640B10AF07E0E4755344 /* SearchBar.swift */; }; + 11A69B581C6D7B8FF291BC62 /* CatalogCategoryRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAA78867352C050D5A9D3EAB /* CatalogCategoryRow.swift */; }; 14CB92EA193DE1EEB60DC590 /* ColorSchemePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F44D4BCEA15399D487993CA /* ColorSchemePicker.swift */; }; 14DBC83A78A328C77BF96AAF /* Playbook.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08B7BB8752007FC3BB78EC8A /* Playbook.framework */; }; + 166B5D414B646688FF4ACF23 /* SearchedCategoryData.swift in Sources */ = {isa = PBXBuildFile; fileRef = E973DACD1A89EF359895A32F /* SearchedCategoryData.swift */; }; 1742749E8A4E3AB081B5DCB2 /* PlaybookUI.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0B038E054D3A0F626DD32C93 /* PlaybookUI.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17740091AF2876BEA30F0E68 /* HighlightText.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCBE2887B8D2BD7EA50CD94B /* HighlightText.swift */; }; 1F6EB9E17EC82DFFE52C8FE9 /* MaterialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85A9B46FFAE9273D84C8A395 /* MaterialView.swift */; }; @@ -35,6 +37,7 @@ 5CEC9BCEB07DA6F388499754 /* SnapshotWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B09750B60723BB88EB4E0BE /* SnapshotWindow.swift */; }; 5DC9DF46A93B504BEC043D62 /* Snapshot.swift in Sources */ = {isa = PBXBuildFile; fileRef = 66200EEB348D4A81C09138E5 /* Snapshot.swift */; }; 668D80F30C0A09A5667C592A /* PlaybookCatalog.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA762F5B447EF9828E1F86F2 /* PlaybookCatalog.swift */; }; + 688AB217A6B085C2D219E6A9 /* ScenarioTitle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 931C69C6BC3169EFD19F7DB5 /* ScenarioTitle.swift */; }; 6CF7056823EA1730746AB145 /* ScenarioViewControllerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F913250C8A5AB7148459FEC6 /* ScenarioViewControllerTests.swift */; }; 6FC965BE651532324127C71C /* ScenariosBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97823B5F50AA1F1689DB8F56 /* ScenariosBuilder.swift */; }; 71721E7FA3A9FC3017EEA4FC /* Spacer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE9E33C79F43CEDD6BA712 /* Spacer.swift */; }; @@ -42,7 +45,6 @@ 748569229F0F50D9C36EE2E9 /* UnavailableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B5E679D86934A2FB5A0856 /* UnavailableView.swift */; }; 78E68D7FE09DC81B3F3659F7 /* Playbook.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 08B7BB8752007FC3BB78EC8A /* Playbook.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 7AF75286918869ED0516B47D /* CatalogTop.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4846AD7448E08DBA3E2C18A5 /* CatalogTop.swift */; }; - 8298234AB8AC2B9046BE09D0 /* GalleryKindRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = ECE9B3C751E8D95A68E247DF /* GalleryKindRow.swift */; }; 8C596670DA8078B4CA2AA743 /* CatalogSplit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C925FCA9E427334E3128E21D /* CatalogSplit.swift */; }; 8DDAA3EF4EB3E70B9360432F /* Separator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11067B4E4A9D6494867D706A /* Separator.swift */; }; 8E518A8B8563E1B97B7A61D7 /* PlaybookSnapshot.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96A0C0FCA9FA7F91E01BB5A7 /* PlaybookSnapshot.framework */; }; @@ -62,16 +64,13 @@ B366B5D2A9ECB2E5289FDCD1 /* AllScenarios.swift in Sources */ = {isa = PBXBuildFile; fileRef = 302C484FF86103B73D1C1122 /* AllScenarios.swift */; }; B44C35245CFBC0043183D67C /* ImageSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA6720986B0B52A13B30D528 /* ImageSource.swift */; }; B945D03AD556F3F8B3161147 /* ScenarioStoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81538A32C0A57BA96700E55E /* ScenarioStoreTests.swift */; }; - BE7BF04B28E47309D2D7608D /* ScenarioKind.swift in Sources */ = {isa = PBXBuildFile; fileRef = F830987472F2FBD2C3BA7284 /* ScenarioKind.swift */; }; BF44BEAFAA1183BE4B9952AF /* Scenario.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E50413A08A9CF285D97A65C /* Scenario.swift */; }; C51E0AB09C31FA61FE7D90BF /* ExtraScenarios.swift in Sources */ = {isa = PBXBuildFile; fileRef = 56D23A73BBBCC7E6D4027CDB /* ExtraScenarios.swift */; }; C57746152ACAC8D242E7992A /* GalleryState.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEC649C8437116C1FFCA36D9 /* GalleryState.swift */; }; CF8244A4AB05E5ED99B68742 /* SnapshotTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B59B5A8B33031C6AF8A049E /* SnapshotTests.swift */; }; D016FBABE74D6996F5648DDC /* SnapshotDevice.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6C5F051089936C546DFBB95 /* SnapshotDevice.swift */; }; - D97CC8D3208EEDF6B11EF898 /* SearchedKindData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73329E8A55711E5737C66ACD /* SearchedKindData.swift */; }; - D99764328B0478E65C0FDEB0 /* ScenarioName.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F065DE6EA72726CE6FE821D /* ScenarioName.swift */; }; + D769DF3F276195F1FA6C6FE5 /* GalleryCategoryRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2154DCBD0157902E1977F73F /* GalleryCategoryRow.swift */; }; DDF763A23C1AE9464827CCCE /* ScenarioLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF835DB024B80E2FADFFD0FC /* ScenarioLayout.swift */; }; - DE001E8A450A047BE1F2AB7C /* CatalogKindRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B268BD03E4ADE4AE1F5BF269 /* CatalogKindRow.swift */; }; E5C77A25F77EC8ED48C13512 /* SnapshotError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 108C38EAC8F960E10B0FA627 /* SnapshotError.swift */; }; E7597D8F364FF8D2CD4DF584 /* PlaybookTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9370D44977281AAEBF6DEF44 /* PlaybookTests.swift */; }; EC542FAB97124C8728AE06DD /* CatalogState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8908E9DA16AB4BA3A659914C /* CatalogState.swift */; }; @@ -84,6 +83,7 @@ F9DF0B63F62E3A7B5ED2E619 /* Mocks.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEB78746E7DE13CB4BBD42FC /* Mocks.swift */; }; FB311A5E12E4B63A845D274A /* CatalogSearchPane.swift in Sources */ = {isa = PBXBuildFile; fileRef = 028BA6B86229E5CB18B406C1 /* CatalogSearchPane.swift */; }; FD3C77D1442C7CAADC579CB2 /* Playbook.swift in Sources */ = {isa = PBXBuildFile; fileRef = 385C5E36DF37E9A2AF379859 /* Playbook.swift */; }; + FD6F7E111847FC7C3544FD88 /* ScenarioCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75AB28FDD54A377BB933538F /* ScenarioCategory.swift */; }; FE054384773081FAFD2F3A55 /* GalleryDetailTopBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA2CB89FE909D51ACCC78465 /* GalleryDetailTopBar.swift */; }; FEE775B5BE1C7E957E0306DA /* PlaybookSnapshot.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 96A0C0FCA9FA7F91E01BB5A7 /* PlaybookSnapshot.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ @@ -150,12 +150,12 @@ 0B038E054D3A0F626DD32C93 /* PlaybookUI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PlaybookUI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 108C38EAC8F960E10B0FA627 /* SnapshotError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotError.swift; sourceTree = ""; }; 11067B4E4A9D6494867D706A /* Separator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Separator.swift; sourceTree = ""; }; + 2154DCBD0157902E1977F73F /* GalleryCategoryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryCategoryRow.swift; sourceTree = ""; }; 21A6A1D8849030D7DD8BE135 /* PlaybookGalleryContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybookGalleryContent.swift; sourceTree = ""; }; 2532CFEE0AB6105AEB5B74E2 /* SelectData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SelectData.swift; sourceTree = ""; }; 25344536B72D76889805B50D /* OrderedStorage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OrderedStorage.swift; sourceTree = ""; }; 29B5E679D86934A2FB5A0856 /* UnavailableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnavailableView.swift; sourceTree = ""; }; 2B12B3F422F9EE7600CA7B8C /* ImageCache.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCache.swift; sourceTree = ""; }; - 2F065DE6EA72726CE6FE821D /* ScenarioName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioName.swift; sourceTree = ""; }; 2F412670B8570C6C62C7875E /* SearchedData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchedData.swift; sourceTree = ""; }; 2F44D4BCEA15399D487993CA /* ColorSchemePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ColorSchemePicker.swift; sourceTree = ""; }; 302C484FF86103B73D1C1122 /* AllScenarios.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AllScenarios.swift; sourceTree = ""; }; @@ -175,7 +175,7 @@ 6B09750B60723BB88EB4E0BE /* SnapshotWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotWindow.swift; sourceTree = ""; }; 6E50413A08A9CF285D97A65C /* Scenario.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Scenario.swift; sourceTree = ""; }; 6ED586C95333C4B752C85423 /* UIImage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIImage.swift; sourceTree = ""; }; - 73329E8A55711E5737C66ACD /* SearchedKindData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchedKindData.swift; sourceTree = ""; }; + 75AB28FDD54A377BB933538F /* ScenarioCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioCategory.swift; sourceTree = ""; }; 77D5B1C44FC9E87FD3237459 /* ScenarioViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioViewController.swift; sourceTree = ""; }; 7B2681920272C74A1032D3A4 /* ShareState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareState.swift; sourceTree = ""; }; 80C668330D834FEE619E6735 /* GalleryThumbnail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryThumbnail.swift; sourceTree = ""; }; @@ -184,6 +184,7 @@ 8700BC5E0B042913C8C10CBA /* TestTool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTool.swift; sourceTree = ""; }; 8908E9DA16AB4BA3A659914C /* CatalogState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogState.swift; sourceTree = ""; }; 89B9EFFA662D997B8B95EE74 /* Export.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Export.swift; sourceTree = ""; }; + 931C69C6BC3169EFD19F7DB5 /* ScenarioTitle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioTitle.swift; sourceTree = ""; }; 9370D44977281AAEBF6DEF44 /* PlaybookTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybookTests.swift; sourceTree = ""; }; 96A0C0FCA9FA7F91E01BB5A7 /* PlaybookSnapshot.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PlaybookSnapshot.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 97823B5F50AA1F1689DB8F56 /* ScenariosBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenariosBuilder.swift; sourceTree = ""; }; @@ -194,7 +195,6 @@ A5527163A80E0C62E2C9C19F /* ScenarioSwiftUI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioSwiftUI.swift; sourceTree = ""; }; AA6720986B0B52A13B30D528 /* ImageSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageSource.swift; sourceTree = ""; }; AEB78746E7DE13CB4BBD42FC /* Mocks.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Mocks.swift; sourceTree = ""; }; - B268BD03E4ADE4AE1F5BF269 /* CatalogKindRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogKindRow.swift; sourceTree = ""; }; B446C3A548A2DC847F032CA0 /* ScenarioContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioContentView.swift; sourceTree = ""; }; B47949D75D9EE00D1B41E460 /* Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Image.swift; sourceTree = ""; }; B6C5F051089936C546DFBB95 /* SnapshotDevice.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SnapshotDevice.swift; sourceTree = ""; }; @@ -203,6 +203,7 @@ BEC649C8437116C1FFCA36D9 /* GalleryState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryState.swift; sourceTree = ""; }; C509DD2858530167BEC5BB11 /* SearchResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResult.swift; sourceTree = ""; }; C925FCA9E427334E3128E21D /* CatalogSplit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogSplit.swift; sourceTree = ""; }; + CAA78867352C050D5A9D3EAB /* CatalogCategoryRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogCategoryRow.swift; sourceTree = ""; }; CDE860C77A4DCDA2055ACC0C /* PlaybookCatalogContent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybookCatalogContent.swift; sourceTree = ""; }; CEB51C85B7D63CEF5DC83B60 /* ScenarioSwiftUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioSwiftUITests.swift; sourceTree = ""; }; D15384CB93B122425863A487 /* CatalogScenarios.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CatalogScenarios.swift; sourceTree = ""; }; @@ -211,11 +212,10 @@ D63CD111722A3B8067BFE548 /* ScenarioContext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioContext.swift; sourceTree = ""; }; DA2CB89FE909D51ACCC78465 /* GalleryDetailTopBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryDetailTopBar.swift; sourceTree = ""; }; DDF2169FF71AF568BF427357 /* UIColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColor.swift; sourceTree = ""; }; + E973DACD1A89EF359895A32F /* SearchedCategoryData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchedCategoryData.swift; sourceTree = ""; }; EA762F5B447EF9828E1F86F2 /* PlaybookCatalog.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybookCatalog.swift; sourceTree = ""; }; EC23506D3CC07FABB1992787 /* Playbook-Tests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = "Playbook-Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; - ECE9B3C751E8D95A68E247DF /* GalleryKindRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GalleryKindRow.swift; sourceTree = ""; }; F6B0431D91C939D181493ECC /* PlaybookGallery.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybookGallery.swift; sourceTree = ""; }; - F830987472F2FBD2C3BA7284 /* ScenarioKind.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioKind.swift; sourceTree = ""; }; F913250C8A5AB7148459FEC6 /* ScenarioViewControllerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioViewControllerTests.swift; sourceTree = ""; }; FF835DB024B80E2FADFFD0FC /* ScenarioLayout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScenarioLayout.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -284,12 +284,12 @@ children = ( 385C5E36DF37E9A2AF379859 /* Playbook.swift */, 6E50413A08A9CF285D97A65C /* Scenario.swift */, + 75AB28FDD54A377BB933538F /* ScenarioCategory.swift */, D63CD111722A3B8067BFE548 /* ScenarioContext.swift */, - F830987472F2FBD2C3BA7284 /* ScenarioKind.swift */, FF835DB024B80E2FADFFD0FC /* ScenarioLayout.swift */, - 2F065DE6EA72726CE6FE821D /* ScenarioName.swift */, 68E1EB13B5ED8DD48245B1E8 /* ScenarioProvider.swift */, B6CEC4F17D84235922932498 /* ScenarioStore.swift */, + 931C69C6BC3169EFD19F7DB5 /* ScenarioTitle.swift */, 77D5B1C44FC9E87FD3237459 /* ScenarioViewController.swift */, 8700BC5E0B042913C8C10CBA /* TestTool.swift */, 50CA27E8E257875AB0E26932 /* FunctionBuilder */, @@ -369,8 +369,8 @@ 9F0631225653E9350F11DD57 /* Entities */ = { isa = PBXGroup; children = ( + E973DACD1A89EF359895A32F /* SearchedCategoryData.swift */, 2F412670B8570C6C62C7875E /* SearchedData.swift */, - 73329E8A55711E5737C66ACD /* SearchedKindData.swift */, C509DD2858530167BEC5BB11 /* SearchResult.swift */, 2532CFEE0AB6105AEB5B74E2 /* SelectData.swift */, ); @@ -381,17 +381,17 @@ isa = PBXGroup; children = ( 698312DFD253858E0CE488E6 /* CatalogBottomBar.swift */, + CAA78867352C050D5A9D3EAB /* CatalogCategoryRow.swift */, 3FC40B940F3E03A47FEC3EC8 /* CatalogDrawer.swift */, - B268BD03E4ADE4AE1F5BF269 /* CatalogKindRow.swift */, 9A940D28E31EFAE5B3694CEE /* CatalogScenarioRow.swift */, 028BA6B86229E5CB18B406C1 /* CatalogSearchPane.swift */, C925FCA9E427334E3128E21D /* CatalogSplit.swift */, 4846AD7448E08DBA3E2C18A5 /* CatalogTop.swift */, 2F44D4BCEA15399D487993CA /* ColorSchemePicker.swift */, 556DC8B6487B074BB222CDA9 /* Counter.swift */, + 2154DCBD0157902E1977F73F /* GalleryCategoryRow.swift */, 676CCC73E9C6DED60834DCF0 /* GalleryDetail.swift */, DA2CB89FE909D51ACCC78465 /* GalleryDetailTopBar.swift */, - ECE9B3C751E8D95A68E247DF /* GalleryKindRow.swift */, 80C668330D834FEE619E6735 /* GalleryThumbnail.swift */, BCBE2887B8D2BD7EA50CD94B /* HighlightText.swift */, 85A9B46FFAE9273D84C8A395 /* MaterialView.swift */, @@ -599,13 +599,13 @@ 99904F2A1ECCD16DC130B51A /* OrderedStorage.swift in Sources */, FD3C77D1442C7CAADC579CB2 /* Playbook.swift in Sources */, BF44BEAFAA1183BE4B9952AF /* Scenario.swift in Sources */, + FD6F7E111847FC7C3544FD88 /* ScenarioCategory.swift in Sources */, 341406194DDF8C7A82AB96D0 /* ScenarioContext.swift in Sources */, - BE7BF04B28E47309D2D7608D /* ScenarioKind.swift in Sources */, DDF763A23C1AE9464827CCCE /* ScenarioLayout.swift in Sources */, - D99764328B0478E65C0FDEB0 /* ScenarioName.swift in Sources */, 04E6DA15062197311CB80A23 /* ScenarioProvider.swift in Sources */, AF9004569675F2D36F6108AE /* ScenarioStore.swift in Sources */, 4FD59723F2D559B839F6AE9D /* ScenarioSwiftUI.swift in Sources */, + 688AB217A6B085C2D219E6A9 /* ScenarioTitle.swift in Sources */, 358D72B04367A43CD12978FD /* ScenarioViewController.swift in Sources */, AFD49E9D98CDDBEBAA1D9E3A /* ScenariosBuildable.swift in Sources */, 6FC965BE651532324127C71C /* ScenariosBuilder.swift in Sources */, @@ -632,8 +632,8 @@ buildActionMask = 2147483647; files = ( EE5F75875FDD118B4A5F0BF8 /* CatalogBottomBar.swift in Sources */, + 11A69B581C6D7B8FF291BC62 /* CatalogCategoryRow.swift in Sources */, AD7EFE7D41A4801FEABBF156 /* CatalogDrawer.swift in Sources */, - DE001E8A450A047BE1F2AB7C /* CatalogKindRow.swift in Sources */, 4C55A5EE142078443D368124 /* CatalogScenarioRow.swift in Sources */, FB311A5E12E4B63A845D274A /* CatalogSearchPane.swift in Sources */, 8C596670DA8078B4CA2AA743 /* CatalogSplit.swift in Sources */, @@ -642,9 +642,9 @@ 14CB92EA193DE1EEB60DC590 /* ColorSchemePicker.swift in Sources */, B257A455408A87DD7A0D9F6B /* Counter.swift in Sources */, 509D6D27E6A76DCBDEE64226 /* Export.swift in Sources */, + D769DF3F276195F1FA6C6FE5 /* GalleryCategoryRow.swift in Sources */, EC7FB83606201C8AAA15D098 /* GalleryDetail.swift in Sources */, FE054384773081FAFD2F3A55 /* GalleryDetailTopBar.swift in Sources */, - 8298234AB8AC2B9046BE09D0 /* GalleryKindRow.swift in Sources */, C57746152ACAC8D242E7992A /* GalleryState.swift in Sources */, 3D179776ADD757235527A929 /* GalleryThumbnail.swift in Sources */, 17740091AF2876BEA30F0E68 /* HighlightText.swift in Sources */, @@ -661,8 +661,8 @@ 0A26157EE6E7B940067CA211 /* SearchBar.swift in Sources */, 08DB4240FAF948F16398C1C9 /* SearchResult.swift in Sources */, 56FFC73C5EA4C3F7AB583136 /* SearchState.swift in Sources */, + 166B5D414B646688FF4ACF23 /* SearchedCategoryData.swift in Sources */, F16829BEF3BB1173FFFA18B0 /* SearchedData.swift in Sources */, - D97CC8D3208EEDF6B11EF898 /* SearchedKindData.swift in Sources */, 5494FCBB0627B107CAF044DB /* SelectData.swift in Sources */, 8DDAA3EF4EB3E70B9360432F /* Separator.swift in Sources */, B1B7C962BA824C7739DD7486 /* ShareState.swift in Sources */, diff --git a/Sources/Playbook/Playbook.swift b/Sources/Playbook/Playbook.swift index d049203..67c26ae 100755 --- a/Sources/Playbook/Playbook.swift +++ b/Sources/Playbook/Playbook.swift @@ -25,21 +25,21 @@ open class Playbook { Array(storage) } - private var storage = OrderedStorage() + private var storage = OrderedStorage() /// Initialize a new `Playbook`. public init() {} - /// Returns a store identified by specified kind. + /// Returns a store identified by specified category. /// /// If there is no store yet, add and return it. /// /// - Parameters: - /// - kind: A unique identifier that stores a set of scenarios. + /// - category: A unique identifier that stores a set of scenarios. /// - /// - Returns: A store identified by specified kind. - public func scenarios(of kind: ScenarioKind) -> ScenarioStore { - storage.element(for: kind, default: ScenarioStore(kind: kind)) + /// - Returns: A store identified by specified category. + public func scenarios(of category: ScenarioCategory) -> ScenarioStore { + storage.element(for: category, default: ScenarioStore(category: category)) } /// Adds a set scenarios defined in specified provider. @@ -57,13 +57,13 @@ open class Playbook { /// Adds a set of scenarios passed by function builder. /// /// - Parameters: - /// - kind: A unique identifier that stores a set of scenarios. + /// - category: A unique identifier that stores a set of scenarios. /// - scenarios: A function builder that create a set of scenarios. /// /// - Returns: A instance of `self`. @discardableResult - public func addScenarios(of kind: ScenarioKind, @ScenariosBuilder _ scenarios: () -> S) -> Self { - let store = self.scenarios(of: kind) + public func addScenarios(of category: ScenarioCategory, @ScenariosBuilder _ scenarios: () -> S) -> Self { + let store = self.scenarios(of: category) for scenario in scenarios().buildScenarios() { store.add(scenario) diff --git a/Sources/Playbook/Scenario.swift b/Sources/Playbook/Scenario.swift index 380f765..7e8541f 100644 --- a/Sources/Playbook/Scenario.swift +++ b/Sources/Playbook/Scenario.swift @@ -2,8 +2,8 @@ import UIKit /// Represents part of the component state. public struct Scenario { - /// A unique name of scenario that describes component and its state. - public var name: ScenarioName + /// A unique title of scenario that describes component and its state. + public var title: ScenarioTitle /// Represents how the component should be laid out. public var layout: ScenarioLayout @@ -20,19 +20,19 @@ public struct Scenario { /// Creates a new scenario. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content with passed context. public init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, content: @escaping (ScenarioContext) -> UIViewController ) { - self.name = name + self.title = title self.layout = layout self.file = file self.line = line @@ -42,20 +42,20 @@ public struct Scenario { /// Creates a new scenario. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content with passed context. public init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, content: @escaping (ScenarioContext) -> UIView ) { self.init( - name, + title, layout: layout, file: file, line: line, @@ -68,20 +68,20 @@ public struct Scenario { /// Creates a new scenario. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content. public init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, content: @escaping () -> UIViewController ) { self.init( - name, + title, layout: layout, file: file, line: line, @@ -92,20 +92,20 @@ public struct Scenario { /// Creates a new scenario. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content. public init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, content: @escaping () -> UIView ) { self.init( - name, + title, layout: layout, file: file, line: line, diff --git a/Sources/Playbook/ScenarioKind.swift b/Sources/Playbook/ScenarioCategory.swift similarity index 66% rename from Sources/Playbook/ScenarioKind.swift rename to Sources/Playbook/ScenarioCategory.swift index 2c805db..fe21ab7 100644 --- a/Sources/Playbook/ScenarioKind.swift +++ b/Sources/Playbook/ScenarioCategory.swift @@ -1,12 +1,12 @@ /// Represents a unique identifier of the set of scenarios. -public struct ScenarioKind: Hashable, RawRepresentable, ExpressibleByStringLiteral, CustomStringConvertible, ExpressibleByStringInterpolation { +public struct ScenarioCategory: Hashable, RawRepresentable, ExpressibleByStringLiteral, CustomStringConvertible, ExpressibleByStringInterpolation { /// The raw string value. public var rawValue: String /// A textual representation of this instance. public var description: String { rawValue } - /// Creates a new kind with given raw string value. + /// Creates a new category with given raw string value. /// /// - Parameters: /// - rawValue: The raw string value. @@ -14,7 +14,7 @@ public struct ScenarioKind: Hashable, RawRepresentable, ExpressibleByStringLiter self.rawValue = rawValue } - /// Creates a new kind with given raw string value. + /// Creates a new category with given raw string value. /// /// - Parameters: /// - value: The raw string value. diff --git a/Sources/Playbook/ScenarioStore.swift b/Sources/Playbook/ScenarioStore.swift index f1fa1cd..e9eb9de 100644 --- a/Sources/Playbook/ScenarioStore.swift +++ b/Sources/Playbook/ScenarioStore.swift @@ -1,21 +1,21 @@ -/// The class for managing a set of scenarios identified by the arbitrary kind. +/// The class for managing a set of scenarios identified by the arbitrary category. public final class ScenarioStore { /// A unique identifier of the secenarios managed by this instance. - public let kind: ScenarioKind + public let category: ScenarioCategory - private var storage = OrderedStorage() + private var storage = OrderedStorage() /// The set of scenarios managed by this store. public var scenarios: [Scenario] { Array(storage) } - /// Initialize a new store with given kind. + /// Initialize a new store with given category. /// /// - Parameters: - /// - kind: A unique identifier of the secenarios managed by this instance. - public init(kind: ScenarioKind) { - self.kind = kind + /// - category: A unique identifier of the secenarios managed by this instance. + public init(category: ScenarioCategory) { + self.category = category } /// Adds a scenario to this store instance. @@ -26,7 +26,7 @@ public final class ScenarioStore { /// - Returns: A instance of `self`. @discardableResult public func add(_ scenario: Scenario) -> Self { - storage.append(scenario, for: scenario.name) + storage.append(scenario, for: scenario.title) return self } } diff --git a/Sources/Playbook/ScenarioName.swift b/Sources/Playbook/ScenarioTitle.swift similarity index 60% rename from Sources/Playbook/ScenarioName.swift rename to Sources/Playbook/ScenarioTitle.swift index def2dae..d66014e 100644 --- a/Sources/Playbook/ScenarioName.swift +++ b/Sources/Playbook/ScenarioTitle.swift @@ -1,12 +1,12 @@ -/// Represents a unique name of the scenario. -public struct ScenarioName: Hashable, RawRepresentable, ExpressibleByStringLiteral, CustomStringConvertible, ExpressibleByStringInterpolation { +/// Represents a unique title of the scenario. +public struct ScenarioTitle: Hashable, RawRepresentable, ExpressibleByStringLiteral, CustomStringConvertible, ExpressibleByStringInterpolation { /// The raw string value. public var rawValue: String /// A textual representation of this instance. public var description: String { rawValue } - /// Creates a new name with given raw string value. + /// Creates a new title with given raw string value. /// /// - Parameters: /// - rawValue: The raw string value. @@ -14,7 +14,7 @@ public struct ScenarioName: Hashable, RawRepresentable, ExpressibleByStringLiter self.rawValue = rawValue } - /// Creates a new name with given raw string value. + /// Creates a new title with given raw string value. /// /// - Parameters: /// - rawValue: The raw string value. diff --git a/Sources/Playbook/ScenarioViewController.swift b/Sources/Playbook/ScenarioViewController.swift index 691174e..336cf60 100644 --- a/Sources/Playbook/ScenarioViewController.swift +++ b/Sources/Playbook/ScenarioViewController.swift @@ -77,7 +77,7 @@ private extension ScenarioViewController { return contentViewController = nil } - if let previous = previous, scenario.name == previous.name { + if let previous = previous, scenario.title == previous.title { return } diff --git a/Sources/Playbook/SnapshotSupport/SnapshotSupport.swift b/Sources/Playbook/SnapshotSupport/SnapshotSupport.swift index c41eae4..d0dce84 100644 --- a/Sources/Playbook/SnapshotSupport/SnapshotSupport.swift +++ b/Sources/Playbook/SnapshotSupport/SnapshotSupport.swift @@ -123,11 +123,11 @@ private extension SnapshotSupport { window.prepareForSnapshot { if contentView.bounds.size.width <= 0 { - fatalError("The view was laid out with zero width in scenario - \(scenario.name)", file: scenario.file, line: scenario.line) + fatalError("The view was laid out with zero width in scenario - \(scenario.title)", file: scenario.file, line: scenario.line) } if contentView.bounds.size.height <= 0 { - fatalError("The view was laid out with zero height in scenario - \(scenario.name)", file: scenario.file, line: scenario.line) + fatalError("The view was laid out with zero height in scenario - \(scenario.title)", file: scenario.file, line: scenario.line) } let format = UIGraphicsImageRendererFormat(for: device.traitCollection) diff --git a/Sources/Playbook/SwiftUISupport/ScenarioSwiftUI.swift b/Sources/Playbook/SwiftUISupport/ScenarioSwiftUI.swift index cbf6243..baa0a33 100644 --- a/Sources/Playbook/SwiftUISupport/ScenarioSwiftUI.swift +++ b/Sources/Playbook/SwiftUISupport/ScenarioSwiftUI.swift @@ -5,19 +5,19 @@ public extension Scenario { /// Creates a new scenario with SwiftUI view. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content with passed context. init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, @ViewBuilder content: @escaping (ScenarioContext) -> Content ) { - self.init(name, layout: layout, file: file, line: line) { context in + self.init(title, layout: layout, file: file, line: line) { context in let content = content(context).transaction { transaction in if context.isSnapshot { transaction.disablesAnimations = true @@ -32,20 +32,20 @@ public extension Scenario { /// Creates a new scenario with SwiftUI view. /// /// - Parameters: - /// - name: A unique name of this scenario. + /// - title: A unique title of this scenario. /// - layout: Represents how the component should be laid out. /// - file: A file path where defined this scenario. /// - line: A line number where defined this scenario in file. /// - content: A closure that make a new content. init( - _ name: ScenarioName, + _ title: ScenarioTitle, layout: ScenarioLayout, file: StaticString = #file, line: UInt = #line, @ViewBuilder content: @escaping () -> Content ) { self.init( - name, + title, layout: layout, file: file, line: line, diff --git a/Sources/PlaybookSnapshot/Snapshot.swift b/Sources/PlaybookSnapshot/Snapshot.swift index 1ce7cba..377096f 100644 --- a/Sources/PlaybookSnapshot/Snapshot.swift +++ b/Sources/PlaybookSnapshot/Snapshot.swift @@ -82,14 +82,14 @@ public struct Snapshot: TestTool { let directoryURL = directoryURL .appendingPathComponent(device.name, isDirectory: true) - .appendingPathComponent(normalize(store.kind.rawValue), isDirectory: true) + .appendingPathComponent(normalize(store.category.rawValue), isDirectory: true) try fileManager.createDirectory(at: directoryURL, withIntermediateDirectories: true) func attemptToWrite(data: Data, scenario: Scenario) { let fileURL = directoryURL - .appendingPathComponent(normalize(scenario.name.rawValue)) + .appendingPathComponent(normalize(scenario.title.rawValue)) .appendingPathExtension(format.fileExtension) do { diff --git a/Sources/PlaybookUI/Internal/Entities/SearchResult.swift b/Sources/PlaybookUI/Internal/Entities/SearchResult.swift index c05948e..a75c424 100644 --- a/Sources/PlaybookUI/Internal/Entities/SearchResult.swift +++ b/Sources/PlaybookUI/Internal/Entities/SearchResult.swift @@ -1,5 +1,5 @@ internal struct SearchResult { let count: Int let total: Int - let kinds: [SearchedKindData] + let categories: [SearchedCategoryData] } diff --git a/Sources/PlaybookUI/Internal/Entities/SearchedKindData.swift b/Sources/PlaybookUI/Internal/Entities/SearchedCategoryData.swift similarity index 56% rename from Sources/PlaybookUI/Internal/Entities/SearchedKindData.swift rename to Sources/PlaybookUI/Internal/Entities/SearchedCategoryData.swift index a011b59..5a8089a 100644 --- a/Sources/PlaybookUI/Internal/Entities/SearchedKindData.swift +++ b/Sources/PlaybookUI/Internal/Entities/SearchedCategoryData.swift @@ -1,7 +1,7 @@ import Playbook -internal struct SearchedKindData { - let kind: ScenarioKind +internal struct SearchedCategoryData { + let category: ScenarioCategory let highlightRange: Range? let scenarios: [SearchedData] } diff --git a/Sources/PlaybookUI/Internal/Entities/SearchedData.swift b/Sources/PlaybookUI/Internal/Entities/SearchedData.swift index 1388ce6..c4883e1 100644 --- a/Sources/PlaybookUI/Internal/Entities/SearchedData.swift +++ b/Sources/PlaybookUI/Internal/Entities/SearchedData.swift @@ -1,7 +1,7 @@ import Playbook internal struct SearchedData { - let kind: ScenarioKind + let category: ScenarioCategory let scenario: Scenario let highlightRange: Range? } diff --git a/Sources/PlaybookUI/Internal/Entities/SelectData.swift b/Sources/PlaybookUI/Internal/Entities/SelectData.swift index dc27fa5..89f8005 100644 --- a/Sources/PlaybookUI/Internal/Entities/SelectData.swift +++ b/Sources/PlaybookUI/Internal/Entities/SelectData.swift @@ -2,14 +2,14 @@ import Playbook internal struct SelectData: Identifiable { struct ID: Hashable { - let kind: ScenarioKind - let name: ScenarioName + let category: ScenarioCategory + let title: ScenarioTitle } var id: ID { - ID(kind: kind, name: scenario.name) + ID(category: category, title: scenario.title) } - let kind: ScenarioKind + let category: ScenarioCategory let scenario: Scenario } diff --git a/Sources/PlaybookUI/Internal/State/CatalogState.swift b/Sources/PlaybookUI/Internal/State/CatalogState.swift index b8f06fc..0e738a2 100644 --- a/Sources/PlaybookUI/Internal/State/CatalogState.swift +++ b/Sources/PlaybookUI/Internal/State/CatalogState.swift @@ -10,18 +10,18 @@ internal final class CatalogState: ObservableObject { @Published var colorScheme: ColorScheme? @Published - var expandedKinds = Set() + var expandedCategories = Set() @Published - var searchingKinds: Set? + var searchingCategories: Set? - var currentExpandedKinds: Set { - get { searchingKinds ?? expandedKinds } + var currentExpandedCategories: Set { + get { searchingCategories ?? expandedCategories } set { - if searchingKinds != nil { - searchingKinds = newValue + if searchingCategories != nil { + searchingCategories = newValue } else { - expandedKinds = newValue + expandedCategories = newValue } } } @@ -31,19 +31,19 @@ internal final class CatalogState: ObservableObject { return } - let scenario = searchResult.kinds.first?.scenarios.first + let scenario = searchResult.categories.first?.scenarios.first selected = scenario.map { scenario in SelectData( - kind: scenario.kind, + category: scenario.category, scenario: scenario.scenario ) } } - func updateSearchingKinds(query: String, searchResult: SearchResult) { - searchingKinds = + func updateSearchingCategories(query: String, searchResult: SearchResult) { + searchingCategories = query.isEmpty ? nil - : Set(searchResult.kinds.map(\.kind)) + : Set(searchResult.categories.map(\.category)) } } diff --git a/Sources/PlaybookUI/Internal/State/SearchState.swift b/Sources/PlaybookUI/Internal/State/SearchState.swift index f5d7b32..812e06e 100644 --- a/Sources/PlaybookUI/Internal/State/SearchState.swift +++ b/Sources/PlaybookUI/Internal/State/SearchState.swift @@ -11,7 +11,7 @@ internal final class SearchState: ObservableObject { } @Published - private(set) var result = SearchResult(count: 0, total: 0, kinds: []) + private(set) var result = SearchResult(count: 0, total: 0, categories: []) init(playbook: Playbook) { self.playbook = playbook @@ -27,15 +27,15 @@ private extension SearchState { string.lowercased().range(of: query) } - let kinds: [SearchedKindData] = + let categories: [SearchedCategoryData] = if query.isEmpty { playbook.stores.map { store in - SearchedKindData( - kind: store.kind, + SearchedCategoryData( + category: store.category, highlightRange: nil, scenarios: store.scenarios.map { scenario in SearchedData( - kind: store.kind, + category: store.category, scenario: scenario, highlightRange: nil ) @@ -45,30 +45,30 @@ private extension SearchState { } else { playbook.stores.compactMap { store in - if let range = matchedRange(store.kind.rawValue) { - return SearchedKindData( - kind: store.kind, + if let range = matchedRange(store.category.rawValue) { + return SearchedCategoryData( + category: store.category, highlightRange: range, scenarios: store.scenarios.map { scenario in SearchedData( - kind: store.kind, + category: store.category, scenario: scenario, - highlightRange: matchedRange(scenario.name.rawValue) + highlightRange: matchedRange(scenario.title.rawValue) ) } ) } else { - let data = SearchedKindData( - kind: store.kind, + let data = SearchedCategoryData( + category: store.category, highlightRange: nil, scenarios: store.scenarios.compactMap { scenario in - guard let range = matchedRange(scenario.name.rawValue) else { + guard let range = matchedRange(scenario.title.rawValue) else { return nil } return SearchedData( - kind: store.kind, + category: store.category, scenario: scenario, highlightRange: range ) @@ -80,9 +80,9 @@ private extension SearchState { } result = SearchResult( - count: kinds.reduce(0) { $0 + $1.scenarios.count }, + count: categories.reduce(0) { $0 + $1.scenarios.count }, total: playbook.stores.reduce(0) { $0 + $1.scenarios.count }, - kinds: kinds + categories: categories ) } } diff --git a/Sources/PlaybookUI/Internal/Utilities/ImageCache.swift b/Sources/PlaybookUI/Internal/Utilities/ImageCache.swift index 3cc2b90..7370dd6 100644 --- a/Sources/PlaybookUI/Internal/Utilities/ImageCache.swift +++ b/Sources/PlaybookUI/Internal/Utilities/ImageCache.swift @@ -63,8 +63,8 @@ private extension ImageCache { .appendingPathComponent(source.size.height.description, isDirectory: true) .appendingPathComponent(source.scale.description, isDirectory: true) .appendingPathComponent("\(source.colorScheme)", isDirectory: true) - .appendingPathComponent(normalize(source.kind.rawValue), isDirectory: true) - .appendingPathComponent(normalize(source.scenario.name.rawValue)) + .appendingPathComponent(normalize(source.category.rawValue), isDirectory: true) + .appendingPathComponent(normalize(source.scenario.title.rawValue)) .appendingPathExtension(SnapshotSupport.ImageFormat.png.fileExtension) } diff --git a/Sources/PlaybookUI/Internal/Utilities/ImageLoader.swift b/Sources/PlaybookUI/Internal/Utilities/ImageLoader.swift index 27e08b6..6946ef1 100644 --- a/Sources/PlaybookUI/Internal/Utilities/ImageLoader.swift +++ b/Sources/PlaybookUI/Internal/Utilities/ImageLoader.swift @@ -67,7 +67,7 @@ private extension ImageLoader { SnapshotSupport.data( for: item.source.scenario, on: SnapshotDevice( - name: item.source.scenario.name.rawValue, + name: item.source.scenario.title.rawValue, size: item.source.size, traitCollection: UITraitCollection( traitsFrom: [ diff --git a/Sources/PlaybookUI/Internal/Utilities/ImageSource.swift b/Sources/PlaybookUI/Internal/Utilities/ImageSource.swift index 9263bf8..5f6b14c 100644 --- a/Sources/PlaybookUI/Internal/Utilities/ImageSource.swift +++ b/Sources/PlaybookUI/Internal/Utilities/ImageSource.swift @@ -3,7 +3,7 @@ import SwiftUI struct ImageSource { let scenario: Scenario - let kind: ScenarioKind + let category: ScenarioCategory let size: CGSize let scale: CGFloat let colorScheme: ColorScheme diff --git a/Sources/PlaybookUI/Internal/Views/CatalogKindRow.swift b/Sources/PlaybookUI/Internal/Views/CatalogCategoryRow.swift similarity index 88% rename from Sources/PlaybookUI/Internal/Views/CatalogKindRow.swift rename to Sources/PlaybookUI/Internal/Views/CatalogCategoryRow.swift index 90363b8..679cd2f 100644 --- a/Sources/PlaybookUI/Internal/Views/CatalogKindRow.swift +++ b/Sources/PlaybookUI/Internal/Views/CatalogCategoryRow.swift @@ -1,8 +1,8 @@ import SwiftUI @available(iOS 15, *) -internal struct CatalogKindRow: View { - let data: SearchedKindData +internal struct CatalogCategoryRow: View { + let data: SearchedCategoryData let isExpanded: Bool let onSelect: () -> Void @@ -18,7 +18,7 @@ internal struct CatalogKindRow: View { Spacer.fixed(length: 8) HighlightText( - content: data.kind.rawValue, + content: data.category.rawValue, range: data.highlightRange ) .textStyle(font: .headline) diff --git a/Sources/PlaybookUI/Internal/Views/CatalogScenarioRow.swift b/Sources/PlaybookUI/Internal/Views/CatalogScenarioRow.swift index ad839b0..3c6e7a5 100644 --- a/Sources/PlaybookUI/Internal/Views/CatalogScenarioRow.swift +++ b/Sources/PlaybookUI/Internal/Views/CatalogScenarioRow.swift @@ -19,7 +19,7 @@ internal struct CatalogScenarioRow: View { Spacer.fixed(length: 8) HighlightText( - content: data.scenario.name.rawValue, + content: data.scenario.title.rawValue, range: data.highlightRange ) .textStyle(font: .subheadline) diff --git a/Sources/PlaybookUI/Internal/Views/CatalogSearchPane.swift b/Sources/PlaybookUI/Internal/Views/CatalogSearchPane.swift index f296d72..a228265 100644 --- a/Sources/PlaybookUI/Internal/Views/CatalogSearchPane.swift +++ b/Sources/PlaybookUI/Internal/Views/CatalogSearchPane.swift @@ -29,31 +29,31 @@ internal struct CatalogSearchPane: View { List { Group { - if searchState.result.kinds.isEmpty { + if searchState.result.categories.isEmpty { UnavailableView( symbol: .magnifyingglass, description: "No Result for \"\(searchState.query)\"" ) } else { - ForEach(searchState.result.kinds, id: \.kind) { data in - let isExpanded = catalogState.currentExpandedKinds.contains(data.kind) + ForEach(searchState.result.categories, id: \.category) { data in + let isExpanded = catalogState.currentExpandedCategories.contains(data.category) - CatalogKindRow(data: data, isExpanded: isExpanded) { + CatalogCategoryRow(data: data, isExpanded: isExpanded) { withAnimation(.smooth(duration: 0.1)) { if isExpanded { - catalogState.currentExpandedKinds.remove(data.kind) + catalogState.currentExpandedCategories.remove(data.category) } else { - catalogState.currentExpandedKinds.insert(data.kind) + catalogState.currentExpandedCategories.insert(data.category) } } } if isExpanded { - ForEach(data.scenarios, id: \.scenario.name) { data in + ForEach(data.scenarios, id: \.scenario.title) { data in let select = SelectData( - kind: data.kind, + category: data.category, scenario: data.scenario ) @@ -91,7 +91,7 @@ internal struct CatalogSearchPane: View { } .frame(maxWidth: .infinity, maxHeight: .infinity) .onChange(of: searchState.query) { query in - catalogState.updateSearchingKinds(query: query, searchResult: searchState.result) + catalogState.updateSearchingCategories(query: query, searchResult: searchState.result) } .onChange(of: catalogState.isSearchPainCollapsed) { isCollapsed in if isCollapsed { diff --git a/Sources/PlaybookUI/Internal/Views/GalleryKindRow.swift b/Sources/PlaybookUI/Internal/Views/GalleryCategoryRow.swift similarity index 86% rename from Sources/PlaybookUI/Internal/Views/GalleryKindRow.swift rename to Sources/PlaybookUI/Internal/Views/GalleryCategoryRow.swift index b317c80..7aac721 100644 --- a/Sources/PlaybookUI/Internal/Views/GalleryKindRow.swift +++ b/Sources/PlaybookUI/Internal/Views/GalleryCategoryRow.swift @@ -1,8 +1,8 @@ import SwiftUI @available(iOS 15.0, *) -internal struct GalleryKindRow: View { - let data: SearchedKindData +internal struct GalleryCategoryRow: View { + let data: SearchedCategoryData let onSelect: (SearchedData) -> Void var body: some View { @@ -14,7 +14,7 @@ internal struct GalleryKindRow: View { .frame(height: 16) HighlightText( - content: data.kind.rawValue, + content: data.category.rawValue, range: data.highlightRange ) .textStyle(font: .headline) @@ -24,7 +24,7 @@ internal struct GalleryKindRow: View { ScrollView(.horizontal, showsIndicators: false) { LazyHStack(spacing: 8) { - ForEach(data.scenarios, id: \.scenario.name) { data in + ForEach(data.scenarios, id: \.scenario.title) { data in Button { onSelect(data) } label: { diff --git a/Sources/PlaybookUI/Internal/Views/GalleryDetail.swift b/Sources/PlaybookUI/Internal/Views/GalleryDetail.swift index 7233aa2..a5a4741 100644 --- a/Sources/PlaybookUI/Internal/Views/GalleryDetail.swift +++ b/Sources/PlaybookUI/Internal/Views/GalleryDetail.swift @@ -22,7 +22,7 @@ internal struct GalleryDetail: View { .ignoresSafeArea() } .safeAreaInset(edge: .top, spacing: 0) { - GalleryDetailTopBar(title: data.scenario.name.rawValue) { + GalleryDetailTopBar(title: data.scenario.title.rawValue) { shareState.shareSnapshot() } } diff --git a/Sources/PlaybookUI/Internal/Views/GalleryThumbnail.swift b/Sources/PlaybookUI/Internal/Views/GalleryThumbnail.swift index 1b45e23..6ab26f7 100644 --- a/Sources/PlaybookUI/Internal/Views/GalleryThumbnail.swift +++ b/Sources/PlaybookUI/Internal/Views/GalleryThumbnail.swift @@ -48,7 +48,7 @@ internal struct GalleryThumbnail: View { .task(id: colorScheme, priority: .background) { let source = ImageSource( scenario: data.scenario, - kind: data.kind, + category: data.category, size: screenSize, scale: imageScale, colorScheme: colorScheme @@ -68,7 +68,7 @@ private struct NameLabel: View { .ignoresSafeArea() HighlightText( - content: data.scenario.name.rawValue, + content: data.scenario.title.rawValue, range: data.highlightRange ) .textStyle(font: .caption, lineLimit: 3) diff --git a/Sources/PlaybookUI/Internal/Views/PlaybookGalleryContent.swift b/Sources/PlaybookUI/Internal/Views/PlaybookGalleryContent.swift index 658e3ae..02ee5fc 100644 --- a/Sources/PlaybookUI/Internal/Views/PlaybookGalleryContent.swift +++ b/Sources/PlaybookUI/Internal/Views/PlaybookGalleryContent.swift @@ -30,17 +30,17 @@ internal struct PlaybookGalleryContent: View { isFocused = false } - if searchState.result.kinds.isEmpty { + if searchState.result.categories.isEmpty { UnavailableView( symbol: .magnifyingglass, description: "No Result for \"\(searchState.query)\"" ) } else { - ForEach(searchState.result.kinds, id: \.kind) { data in - GalleryKindRow(data: data) { selected in + ForEach(searchState.result.categories, id: \.category) { data in + GalleryCategoryRow(data: data) { selected in galleryState.selected = SelectData( - kind: selected.kind, + category: selected.category, scenario: selected.scenario ) } diff --git a/Tests/CatalogScenarios.swift b/Tests/CatalogScenarios.swift index 601d121..aab17dc 100644 --- a/Tests/CatalogScenarios.swift +++ b/Tests/CatalogScenarios.swift @@ -64,10 +64,10 @@ enum CatalogScenarios: ScenarioProvider { Scenario("SearchPane", layout: .sizing(h: .fixed(300), v: .fill)) { let catalogState = CatalogState() catalogState.selected = SelectData( - kind: "Kind 1", + category: "Category 1", scenario: .stub("Scenario 1") ) - catalogState.expandedKinds = ["Kind 1"] + catalogState.expandedCategories = ["Category 1"] catalogState.isSearchPainCollapsed = false return CatalogSearchPane { _ in } diff --git a/Tests/GalleryScenarios.swift b/Tests/GalleryScenarios.swift index e8beb96..dc76bf3 100644 --- a/Tests/GalleryScenarios.swift +++ b/Tests/GalleryScenarios.swift @@ -26,7 +26,7 @@ enum GalleryScenarios: ScenarioProvider { } Scenario("Row", layout: .fillH) { context in - GalleryKindRow(data: .stub()) { _ in } + GalleryCategoryRow(data: .stub()) { _ in } .environmentObject(ImageLoader()) } diff --git a/Tests/Mocks.swift b/Tests/Mocks.swift index 8f2b8dc..c54b769 100644 --- a/Tests/Mocks.swift +++ b/Tests/Mocks.swift @@ -7,8 +7,8 @@ extension Playbook { static let test: Playbook = { let playbok = Playbook() - for kindNumber in 1...3 { - let store = playbok.scenarios(of: "Kind \(kindNumber)") + for categoryNumber in 1...3 { + let store = playbok.scenarios(of: "Category \(categoryNumber)") for scenarioNumber in 1...3 { store.add(.stub("Scenario \(scenarioNumber)")) @@ -21,26 +21,26 @@ extension Playbook { extension SelectData { static func stub() -> Self { - SelectData(kind: "Kind", scenario: .stub("Scenario")) + SelectData(category: "Category", scenario: .stub("Scenario")) } } extension SearchedData { static func stub(_ index: Int) -> Self { SearchedData( - kind: "Kind", + category: "Category", scenario: .stub("Scenario \(index)"), highlightRange: nil ) } } -extension SearchedKindData { +extension SearchedCategoryData { static func stub( scenarios: [SearchedData] = (0..<3).map { .stub($0) } ) -> Self { - SearchedKindData( - kind: "Kind", + SearchedCategoryData( + category: "Category", highlightRange: nil, scenarios: scenarios ) @@ -48,8 +48,8 @@ extension SearchedKindData { } extension Scenario { - static func stub(_ name: ScenarioName) -> Self { - Scenario(name, layout: .fill) { + static func stub(_ title: ScenarioTitle) -> Self { + Scenario(title, layout: .fill) { StubView() } } diff --git a/Tests/PlaybookTests.swift b/Tests/PlaybookTests.swift index abb931a..d7b7cfc 100644 --- a/Tests/PlaybookTests.swift +++ b/Tests/PlaybookTests.swift @@ -4,8 +4,8 @@ import XCTest final class PlaybookTests: XCTestCase { func testScenarios() { let playbook = Playbook() - let first = playbook.scenarios(of: "kind") - let second = playbook.scenarios(of: "kind") + let first = playbook.scenarios(of: "category") + let second = playbook.scenarios(of: "category") XCTAssertEqual(ObjectIdentifier(first), ObjectIdentifier(second)) } @@ -16,11 +16,11 @@ final class PlaybookTests: XCTestCase { let third = playbook.scenarios(of: "third") XCTAssertEqual( - playbook.stores.map { $0.kind }, + playbook.stores.map { $0.category }, [ - first.kind, - second.kind, - third.kind, + first.category, + second.category, + third.category, ] ) } @@ -29,16 +29,16 @@ final class PlaybookTests: XCTestCase { struct TestProvider: ScenarioProvider { static func addScenarios(into playbook: Playbook) { playbook - .scenarios(of: "kind") - .add(Scenario("name", layout: .fill) { UIView() }) + .scenarios(of: "category") + .add(Scenario("title", layout: .fill) { UIView() }) } } let playbook = Playbook() playbook.add(TestProvider.self) - let scenario = playbook.scenarios(of: "kind").scenarios.first - XCTAssertEqual(scenario?.name, "name") + let scenario = playbook.scenarios(of: "category").scenarios.first + XCTAssertEqual(scenario?.title, "title") } func testAddScenarios() { @@ -46,16 +46,16 @@ final class PlaybookTests: XCTestCase { let scenario0 = Scenario("0", layout: .fill) { UIView() } let scenario1 = Scenario("1", layout: .fill) { UIView() } - playbook.addScenarios(of: "kind") { + playbook.addScenarios(of: "category") { scenario0 scenario1 } - let store = playbook.scenarios(of: "kind") + let store = playbook.scenarios(of: "category") XCTAssertEqual(store.scenarios.count, 2) - XCTAssertEqual(store.scenarios[0].name, scenario0.name) - XCTAssertEqual(store.scenarios[1].name, scenario1.name) + XCTAssertEqual(store.scenarios[0].title, scenario0.title) + XCTAssertEqual(store.scenarios[1].title, scenario1.title) } func testRunTestTools() throws { diff --git a/Tests/ScenarioStoreTests.swift b/Tests/ScenarioStoreTests.swift index d5aefec..b2125b3 100644 --- a/Tests/ScenarioStoreTests.swift +++ b/Tests/ScenarioStoreTests.swift @@ -3,7 +3,7 @@ import XCTest final class ScenarioStoreTests: XCTestCase { func testScenariosOrder() { - let store = ScenarioStore(kind: "kind") + let store = ScenarioStore(category: "category") let first = Scenario("first", layout: .fill) { UIView() } let second = Scenario("second", layout: .fill) { UIView() } let third = Scenario("third", layout: .fill) { UIView() } @@ -13,11 +13,11 @@ final class ScenarioStoreTests: XCTestCase { store.add(third) XCTAssertEqual( - store.scenarios.map { $0.name }, + store.scenarios.map { $0.title }, [ - first.name, - second.name, - third.name, + first.title, + second.title, + third.title, ] ) } diff --git a/Tests/ScenarioSwiftUITests.swift b/Tests/ScenarioSwiftUITests.swift index 7756d93..f393e08 100644 --- a/Tests/ScenarioSwiftUITests.swift +++ b/Tests/ScenarioSwiftUITests.swift @@ -6,14 +6,14 @@ final class ScenarioSwiftUITests: XCTestCase { @available(iOS 13.0, *) func testSwiftUI() { let scenario = Scenario( - "name", + "title", layout: .fill, file: "file", line: 10, content: { Color.blue } ) - XCTAssertEqual(scenario.name, "name") + XCTAssertEqual(scenario.title, "title") XCTAssertEqual(scenario.layout, .fill) XCTAssertEqual(String(describing: scenario.file), "file") XCTAssertEqual(scenario.line, 10) diff --git a/Tests/ScenarioViewControllerTests.swift b/Tests/ScenarioViewControllerTests.swift index a73e41a..ec219d2 100644 --- a/Tests/ScenarioViewControllerTests.swift +++ b/Tests/ScenarioViewControllerTests.swift @@ -12,7 +12,7 @@ final class ScenarioViewControllerTests: XCTestCase { let controller = ScenarioViewController(context: .stub) let content = UIView() - controller.scenario = Scenario("name", layout: .fill) { + controller.scenario = Scenario("title", layout: .fill) { content } @@ -34,7 +34,7 @@ final class ScenarioViewControllerTests: XCTestCase { ) { let controller = ScenarioViewController(context: .stub) - controller.scenario = Scenario("name", layout: layout) { + controller.scenario = Scenario("title", layout: layout) { IntrinsicSizeView(intrinsicSize) } controller.view.layoutIfNeeded()