diff --git a/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift b/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift new file mode 100644 index 0000000..5a2c24e --- /dev/null +++ b/Projects/UI/DesignSystem/Demo/DesignSystemDemoApp.swift @@ -0,0 +1,22 @@ +// +// DesignSystemDemoApp.swift +// DesignSystem +// +// Created by Seoyeon Choi on 11/25/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import SwiftUI +import DesignSystem + +@main +struct DesignSystemDemoApp: App { + init() { + DesignSystemFontFamily.registerAllCustomFonts() + } + var body: some Scene { + WindowGroup { + WSSFontDemoView() + } + } +} diff --git a/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift b/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift new file mode 100644 index 0000000..eaa9f34 --- /dev/null +++ b/Projects/UI/DesignSystem/Demo/WSSFontDemoView.swift @@ -0,0 +1,33 @@ +// +// WSSFontDemoView.swift +// DesignSystem +// +// Created by Seoyeon Choi on 11/25/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import SwiftUI +import DesignSystem + +struct WSSFontDemoView: View { + var body: some View { + VStack { + Text("제목입니다 제목이라구요 제목이야 이게 제목이라고") + .applyWSSFont(.headline1) + .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor) + + Text("마법학교 마법사로 살아가는 법마법학교 마법사로 살아가는 법마법학교 마법사로 살아가는 법") + .applyWSSFont(.title3) + .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor) + + Text("대학원생이 환생에서 대학원생이 됨. 주인공 완전 갓갓! 일단 작가가 세계관이나 마법에 대해서 진지하게 생각해보고설정을 짠게 느껴져서 좋아요. 요즘 하도 라이트하고 가짜 마법물이 많아서 ㅠ 찐 성장+마법물!!글고 일단 작가님 필력이 무난하게 잘뽑으시고 연재도 빠르") + .applyWSSFont(.body2) + .border(DesignSystemAsset.Colors.wssPrimary100.swiftUIColor) + } + .padding(40) + } +} + +#Preview { + WSSFontDemoView() +} diff --git a/Projects/UI/DesignSystem/Project.swift b/Projects/UI/DesignSystem/Project.swift new file mode 100644 index 0000000..6359147 --- /dev/null +++ b/Projects/UI/DesignSystem/Project.swift @@ -0,0 +1,15 @@ +// +// Project.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// + +import ProjectDescription +import ProjectDescriptionHelpers +import DependencyPlugin + +let project = Project.createUIModule( + name: ModuleType.UI.designSystem.name, + targets: [.sources, .demo, .tests] +) diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json new file mode 100644 index 0000000..a0729d9 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/blBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFD", + "green" : "0xFA", + "red" : "0xF0" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json new file mode 100644 index 0000000..9b92188 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/dramaBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF0", + "red" : "0xEE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json new file mode 100644 index 0000000..a2226b1 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/fantasyBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xF1", + "red" : "0xF0" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json new file mode 100644 index 0000000..d492966 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/lightBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xD6", + "green" : "0xF3", + "red" : "0xEF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json new file mode 100644 index 0000000..82936be --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/modernBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xF2", + "red" : "0xE9" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json new file mode 100644 index 0000000..2e28cbe --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/mysteryBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF2", + "green" : "0xE6", + "red" : "0xF2" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json new file mode 100644 index 0000000..a952c4a --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/rofanBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE9", + "green" : "0xEB", + "red" : "0xF9" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json new file mode 100644 index 0000000..898c382 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/romanceBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFC", + "green" : "0xF5", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json new file mode 100644 index 0000000..83c6190 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Block/wuxiaBlock.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE3", + "green" : "0xF2", + "red" : "0xFD" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json new file mode 100644 index 0000000..b776d04 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/blLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xA6", + "red" : "0x21" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json new file mode 100644 index 0000000..e9d58ef --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/dramaLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xA0", + "green" : "0x78", + "red" : "0x5D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json new file mode 100644 index 0000000..a27acb3 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/fantasyLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFC", + "green" : "0x57", + "red" : "0x64" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json new file mode 100644 index 0000000..e747a2b --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/lightLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x3B", + "green" : "0xC2", + "red" : "0xAE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json new file mode 100644 index 0000000..4fee6f9 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/modernLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0x67", + "red" : "0x47" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json new file mode 100644 index 0000000..624b910 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/mysteryLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xBF", + "green" : "0x60", + "red" : "0x95" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json new file mode 100644 index 0000000..f087969 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/rofanLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x58", + "green" : "0x2F", + "red" : "0xB7" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json new file mode 100644 index 0000000..6381a81 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/romanceLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xCA", + "green" : "0x86", + "red" : "0xE5" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json new file mode 100644 index 0000000..ac49558 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/Genre/Link/wuxiaLink.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x6E", + "green" : "0x89", + "red" : "0xB8" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json new file mode 100644 index 0000000..90f961c --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x18", + "green" : "0x11", + "red" : "0x11" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json new file mode 100644 index 0000000..79f8eea --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssBlack60.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "0.600", + "blue" : "0x00", + "green" : "0x00", + "red" : "0x00" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json new file mode 100644 index 0000000..6c7dad2 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xD1", + "green" : "0xCB", + "red" : "0xCB" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json new file mode 100644 index 0000000..7d23684 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray20.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFA", + "green" : "0xFA", + "red" : "0xFA" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json new file mode 100644 index 0000000..6f0961a --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x99", + "green" : "0x93", + "red" : "0x94" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json new file mode 100644 index 0000000..9e84e08 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray300.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x5F", + "green" : "0x51", + "red" : "0x52" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json new file mode 100644 index 0000000..277b0f4 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray50.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF8", + "green" : "0xF5", + "red" : "0xF4" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json new file mode 100644 index 0000000..fd9b89a --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGray70.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE3", + "green" : "0xDF", + "red" : "0xDF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json new file mode 100644 index 0000000..68f5a2e --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssGrayToast.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x58", + "green" : "0x42", + "red" : "0x39" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json new file mode 100644 index 0000000..384d6ba --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFD", + "green" : "0x5D", + "red" : "0x6A" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json new file mode 100644 index 0000000..59e6bde --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary20.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xF7", + "red" : "0xF5" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json new file mode 100644 index 0000000..01e5d35 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary200.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x91", + "green" : "0x09", + "red" : "0x24" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json new file mode 100644 index 0000000..19be8c9 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssPrimary50.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xEF", + "red" : "0xF1" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json new file mode 100644 index 0000000..1179db5 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssSecondary100.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x5D", + "green" : "0x67", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json new file mode 100644 index 0000000..2d196a2 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Colors.xcassets/wssWhite.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "extended-srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xFF", + "red" : "0xFF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf new file mode 100644 index 0000000..8e5e30a Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Bold.otf differ diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf new file mode 100644 index 0000000..0575069 Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Medium.otf differ diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf new file mode 100644 index 0000000..08bf4cf Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-Regular.otf differ diff --git a/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf new file mode 100644 index 0000000..e7e36ab Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Fonts/Pretendard-SemiBold.otf differ diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json new file mode 100644 index 0000000..20fe1ac --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "icAnnouncement.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg new file mode 100644 index 0000000..dc320fd --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icAnnouncement.imageset/icAnnouncement.svg @@ -0,0 +1,3 @@ + + + diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json new file mode 100644 index 0000000..77c4037 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "icCommasFinished.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg new file mode 100644 index 0000000..007bc4c --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasFinished.imageset/icCommasFinished.svg @@ -0,0 +1,3 @@ + + + diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json new file mode 100644 index 0000000..a7c9805 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "icCommasStarted.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg new file mode 100644 index 0000000..ddcd227 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icCommasStarted.imageset/icCommasStarted.svg @@ -0,0 +1,3 @@ + + + diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json new file mode 100644 index 0000000..c87e539 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "icTextHot.svg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg new file mode 100644 index 0000000..3d60cd3 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Icons/icTextHot.imageset/icTextHot.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json new file mode 100644 index 0000000..036d668 --- /dev/null +++ b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "imgLogoType.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "imgLogoType@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "imgLogoType@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png new file mode 100644 index 0000000..dfd6d2c Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType.png differ diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png new file mode 100644 index 0000000..3af8dfb Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@2x.png differ diff --git a/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png new file mode 100644 index 0000000..ed9ddf5 Binary files /dev/null and b/Projects/UI/DesignSystem/Resources/Images.xcassets/Images/imgLogoType.imageset/imgLogoType@3x.png differ diff --git a/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift b/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift new file mode 100644 index 0000000..bfe7a02 --- /dev/null +++ b/Projects/UI/DesignSystem/Sources/Extensions/UIScreenScaling.swift @@ -0,0 +1,44 @@ +// +// UIScreenScaling.swift +// DesignSystem +// +// Created by Seoyeon Choi on 12/8/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import Foundation +import UIKit + +extension CGFloat { + var adjustedWidth: CGFloat { + let ratio: CGFloat = UIScreen.main.bounds.width / 375 + return self * ratio + } + + var adjustedHeight: CGFloat { + let ratio: CGFloat = UIScreen.main.bounds.height / 812 + return self * ratio + } +} + +extension Double { + var adjustedWidth: Double { + let ratio: Double = Double(UIScreen.main.bounds.width / 375) + return self * ratio + } + + var adjustedHeight: Double { + let ratio: Double = Double(UIScreen.main.bounds.height / 812) + return self * ratio + } +} + +extension Int { + var adjustedWidth: CGFloat { + return CGFloat(self).adjustedWidth + } + + var adjustedHeight: CGFloat { + return CGFloat(self).adjustedHeight + } +} diff --git a/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift b/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift new file mode 100644 index 0000000..b0f399b --- /dev/null +++ b/Projects/UI/DesignSystem/Sources/Font/View+applyWSSFont.swift @@ -0,0 +1,22 @@ +// +// View+applyWSSFont.swift +// DesignSystem +// +// Created by Seoyeon Choi on 11/25/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import UIKit +import SwiftUI + +extension View { + public func applyWSSFont(_ style: WSSFontStyle) -> some View { + modifier( + WSSFontViewModifier( + uiFont: style.uiFontGuide(), + lineHeight: style.defaultFontSize * style.lineHeight, + letterSpacing: style.letterSpacing + ) + ) + } +} diff --git a/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift b/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift new file mode 100644 index 0000000..a52e15a --- /dev/null +++ b/Projects/UI/DesignSystem/Sources/Font/WSSFontStyle.swift @@ -0,0 +1,143 @@ +// +// WSSFontStyle.swift +// DesignSystem +// +// Created by Seoyeon Choi on 11/25/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import SwiftUI + +public enum WSSFontStyle { + case headline1 + + case title1 + case title2 + case title3 + + case body1 + case body2 + case body3 + case body4 + case body4_2 + case body5 + case body5_2 + + case label1 + case label2 +} + +public extension WSSFontStyle { + var fontName: DesignSystemFontConvertible { + switch self { + case .headline1: + return DesignSystemFontFamily.Pretendard.bold + + case .title1: + return DesignSystemFontFamily.Pretendard.bold + case .title2: + return DesignSystemFontFamily.Pretendard.semiBold + case .title3: + return DesignSystemFontFamily.Pretendard.medium + + case .body1: + return DesignSystemFontFamily.Pretendard.regular + case .body2: + return DesignSystemFontFamily.Pretendard.regular + case .body3: + return DesignSystemFontFamily.Pretendard.regular + case .body4: + return DesignSystemFontFamily.Pretendard.medium + case .body4_2: + return DesignSystemFontFamily.Pretendard.regular + case .body5: + return DesignSystemFontFamily.Pretendard.regular + case .body5_2: + return DesignSystemFontFamily.Pretendard.medium + + case .label1: + return DesignSystemFontFamily.Pretendard.medium + case .label2: + return DesignSystemFontFamily.Pretendard.medium + } + } +} + +extension WSSFontStyle { + private static let scaleRatio: CGFloat = max(1.adjustedHeight, 1.adjustedWidth) + + var defaultFontSize: CGFloat { + switch self { + case .headline1: 20 + + case .title1: 18 + case .title2: 16 + case .title3: 14 + + case .body1: 17 + case .body2: 15 + case .body3: 14 + case .body4: 13 + case .body4_2: 13 + case .body5: 12 + case .body5_2: 12 + + case .label1: 13 + case .label2: 10 + } + } + + private var adjustedSize: CGFloat { + return defaultFontSize * WSSFontStyle.scaleRatio + } + + func uiFontGuide() -> UIFont { + switch self { + default: return UIFont(name: self.fontName.name, size: self.adjustedSize)! + } + } +} + +extension WSSFontStyle { + var letterSpacing: CGFloat { + switch self { + case .headline1: -0.6 + + case .title1: -0.6 + case .title2: -0.6 + case .title3: -0.6 + + case .body1: -0.6 + case .body2: -0.6 + case .body3: -0.4 + case .body4: -0.4 + case .body4_2: -0.4 + case .body5: 0 + case .body5_2: 0 + + case .label1: -0.4 + case .label2: 0 + } + } + + var lineHeight: CGFloat { + switch self { + case .headline1: return 1.4 + + case .title1: return 1.4 + case .title2: return 1.4 + case .title3: return 1.5 + + case .body1: return 1.4 + case .body2: return 1.5 + case .body3: return 1.5 + case .body4: return 1.45 + case .body4_2: return 1.45 + case .body5: return 1.45 + case .body5_2: return 1.45 + + case .label1: return 1.45 + case .label2: return 1.0 + } + } +} diff --git a/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift b/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift new file mode 100644 index 0000000..8754e79 --- /dev/null +++ b/Projects/UI/DesignSystem/Sources/Font/WSSFontViewModifier.swift @@ -0,0 +1,24 @@ +// +// WSSFontViewModifier.swift +// DesignSystem +// +// Created by Seoyeon Choi on 12/8/25. +// Copyright © 2025 kr.websoso.app. All rights reserved. +// + +import SwiftUI +import UIKit + +struct WSSFontViewModifier: ViewModifier { + let uiFont: UIFont + let lineHeight: CGFloat + let letterSpacing: CGFloat + + func body(content: Content) -> some View { + return content + .font(Font(uiFont)) + .lineSpacing(lineHeight - uiFont.lineHeight) + .kerning(letterSpacing) + .padding(.vertical, (lineHeight - uiFont.lineHeight) / 2) + } +} diff --git a/Projects/UI/DesignSystem/Tests/Tests.swift b/Projects/UI/DesignSystem/Tests/Tests.swift new file mode 100644 index 0000000..e9b75c0 --- /dev/null +++ b/Projects/UI/DesignSystem/Tests/Tests.swift @@ -0,0 +1,7 @@ +// +// Tests.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// + diff --git a/Projects/UI/WSSComponent/Demo/Demo.swift b/Projects/UI/WSSComponent/Demo/Demo.swift new file mode 100644 index 0000000..680181e --- /dev/null +++ b/Projects/UI/WSSComponent/Demo/Demo.swift @@ -0,0 +1,7 @@ +// +// Demo.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// + diff --git a/Projects/UI/WSSComponent/Project.swift b/Projects/UI/WSSComponent/Project.swift new file mode 100644 index 0000000..d18fb52 --- /dev/null +++ b/Projects/UI/WSSComponent/Project.swift @@ -0,0 +1,15 @@ +// +// Project.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// + +import ProjectDescription +import ProjectDescriptionHelpers +import DependencyPlugin + +let project = Project.createUIModule( + name: ModuleType.UI.wssComponent.name, + targets: [.sources, .demo, .tests] +) diff --git a/Projects/UI/WSSComponent/Sources/Sources.swift b/Projects/UI/WSSComponent/Sources/Sources.swift new file mode 100644 index 0000000..a8c667c --- /dev/null +++ b/Projects/UI/WSSComponent/Sources/Sources.swift @@ -0,0 +1,7 @@ +// +// Sources.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// + diff --git a/Projects/UI/WSSComponent/Tests/Tests.swift b/Projects/UI/WSSComponent/Tests/Tests.swift new file mode 100644 index 0000000..e9b75c0 --- /dev/null +++ b/Projects/UI/WSSComponent/Tests/Tests.swift @@ -0,0 +1,7 @@ +// +// Tests.swift +// Manifests +// +// Created by Seoyeon Choi on 11/25/25. +// +