diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt
index bb1f3ea3..dbf15e18 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/Badge.kt
@@ -42,21 +42,14 @@ class Badge : LinearLayout {
)
}
- private var hasIcon: Boolean = false
+ var text: String = ""
set(value) {
field = value
setBadgeInfo()
requestLayout()
}
- private var text: String = ""
- set(value) {
- field = value
- setBadgeInfo()
- requestLayout()
- }
-
- private var color: ItemColor = ItemColor.Mono
+ var color: ItemColor = ItemColor.Mono
set(color) {
field = color
setBadgeInfo()
@@ -64,18 +57,13 @@ class Badge : LinearLayout {
}
@Icon.Iconography
- private var icon: Int = Icon.ic_adbadge_filled
+ var icon: Int? = null
set(icon) {
field = icon
setBadgeInfo()
requestLayout()
}
- fun setBadgeIcon(@Icon.Iconography value: Int) {
- hasIcon = true
- icon = value
- }
-
private fun setBadgeInfo() {
val color = getBadgeColor(color)
@@ -86,11 +74,11 @@ class Badge : LinearLayout {
binding.badgeContent.text = text
- if (hasIcon) {
+ icon?.let {
binding.badgeFrame.setPadding(context.dpToIntPx(8F), 0, context.dpToIntPx(8F), 0)
binding.badgeIcon.visibility = View.VISIBLE
- binding.badgeIcon.setIconResource(icon)
- } else {
+ binding.badgeIcon.setIconResource(it)
+ } ?: run {
binding.badgeFrame.setPadding(context.dpToIntPx(12F), 0, context.dpToIntPx(12F), 0)
binding.badgeIcon.visibility = View.GONE
}
@@ -107,12 +95,7 @@ class Badge : LinearLayout {
@JvmStatic
@BindingAdapter("icon")
fun setIcon(badge: Badge, @Icon.Iconography icon: Int?) {
- if (icon == null) {
- badge.hasIcon = false
- } else {
- badge.hasIcon = true
- badge.icon = icon
- }
+ badge.icon = icon
}
@JvmStatic
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt
index e2efbad3..a0702b0c 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/CheckBox.kt
@@ -127,24 +127,6 @@ class CheckBox @JvmOverloads constructor(
private const val MARGIN_SMALL = 4f
private const val MARGIN_MEDIUM = 8f
private const val MARGIN_LARGE = 8f
-
- fun Context.checkBox(block: CheckBox.() -> Unit) = CheckBox(this).run {
- block.invoke(this)
- this
- }
-
- fun ViewGroup.checkBox(block: CheckBox.() -> Unit) = CheckBox(this.context).run {
- block.invoke(this)
- this@checkBox.addView(this)
- this
- }
-
- fun ComponentGroup.checkBox(block: CheckBox.() -> Unit) =
- CheckBox(this.componentContext).run {
- block.invoke(this)
- this@checkBox.addComponent(this)
- this
- }
}
// change means will access to binding
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt
index b8336b13..5935ecca 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/PasswordTextField.kt
@@ -15,6 +15,7 @@ import android.widget.TextView
import com.yourssu.design.R
import com.yourssu.design.databinding.LayoutPasswordTextFieldBinding
import com.yourssu.design.system.foundation.Icon
+import com.yourssu.design.undercarriage.base.TextField
class PasswordTextField @JvmOverloads constructor(
context: Context,
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt
index 3aa33067..a41e782e 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SimpleTextField.kt
@@ -12,6 +12,7 @@ import android.view.LayoutInflater
import android.widget.TextView
import com.yourssu.design.R
import com.yourssu.design.databinding.LayoutSimpleTextFieldBinding
+import com.yourssu.design.undercarriage.base.TextField
class SimpleTextField @JvmOverloads constructor(
context: Context,
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt
index 9a4f96a4..8bcc8d03 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/atom/SuffixTextField.kt
@@ -13,6 +13,7 @@ import android.widget.TextView
import androidx.databinding.BindingAdapter
import com.yourssu.design.R
import com.yourssu.design.databinding.LayoutSuffixTextFieldBinding
+import com.yourssu.design.undercarriage.base.TextField
class SuffixTextField @JvmOverloads constructor(
context: Context,
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt
new file mode 100644
index 00000000..3329b9c1
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Android.kt
@@ -0,0 +1,41 @@
+package com.yourssu.design.system.language
+
+import android.view.View
+import android.view.ViewGroup
+import androidx.annotation.ColorRes
+import androidx.appcompat.app.AppCompatActivity
+
+fun AppCompatActivity.setContentView(block: () -> View) {
+ this.setContentView(block.invoke())
+}
+
+const val WRAP_CONTENT = ViewGroup.LayoutParams.WRAP_CONTENT
+const val MATCH_PARENT = ViewGroup.LayoutParams.MATCH_PARENT
+
+fun View.setLayout(
+ width: Int? = null,
+ height: Int? = null,
+ leftMarginPx: Int? = null,
+ rightMarginPx: Int? = null,
+ topMarginPx: Int? = null,
+ bottomMarginPx: Int? = null,
+ leftPaddingPx: Int? = null,
+ rightPaddingPx: Int? = null,
+ topPaddingPx: Int? = null,
+ bottomPaddingPx: Int? = null,
+) {
+ this.layoutParams = ViewGroup.MarginLayoutParams(
+ width ?: WRAP_CONTENT,
+ height ?: WRAP_CONTENT)
+ .apply {
+ leftMarginPx?.let { this.leftMargin = it }
+ rightMarginPx?.let { this.rightMargin = it }
+ topMarginPx?.let { this.topMargin = it }
+ bottomMarginPx?.let { this.bottomMargin = it }
+ }
+ this.setPadding(leftPaddingPx ?: 0, topPaddingPx ?: 0, rightPaddingPx ?: 0, bottomPaddingPx ?: 0)
+}
+
+fun View.backgroundColor(@ColorRes color: Int) {
+ this.setBackgroundColor(this.context.getColor(color))
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt
new file mode 100644
index 00000000..5e8318c7
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Badge.kt
@@ -0,0 +1,22 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.Badge
+
+fun Context.badge(block: Badge.() -> Unit) = Badge(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.badge(block: Badge.() -> Unit) = Badge(this.context).run {
+ block.invoke(this)
+ this@badge.addView(this)
+ this
+}
+
+fun ComponentGroup.badge(block: Badge.() -> Unit) = Badge(this.componentContext).run {
+ block.invoke(this)
+ this@badge.addComponent(this)
+ this
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt
new file mode 100644
index 00000000..45752800
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/CheckBox.kt
@@ -0,0 +1,23 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.CheckBox
+
+fun Context.checkBox(block: CheckBox.() -> Unit) = CheckBox(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.checkBox(block: CheckBox.() -> Unit) = CheckBox(this.context).run {
+ block.invoke(this)
+ this@checkBox.addView(this)
+ this
+}
+
+fun ComponentGroup.checkBox(block: CheckBox.() -> Unit) =
+ CheckBox(this.componentContext).run {
+ block.invoke(this)
+ this@checkBox.addComponent(this)
+ this
+ }
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt
new file mode 100644
index 00000000..fd5921f2
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/IconView.kt
@@ -0,0 +1,22 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.IconView
+
+fun Context.iconView(block: IconView.() -> Unit) = IconView(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.iconView(block: IconView.() -> Unit) = IconView(this.context).run {
+ block.invoke(this)
+ this@iconView.addView(this)
+ this
+}
+
+fun ComponentGroup.iconView(block: IconView.() -> Unit) = IconView(this.componentContext).run {
+ block.invoke(this)
+ this@iconView.addComponent(this)
+ this
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt
new file mode 100644
index 00000000..3677474c
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Picker.kt
@@ -0,0 +1,22 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.Picker
+
+fun Context.picker(block: Picker.() -> Unit) = Picker(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.picker(block: Picker.() -> Unit) = Picker(this.context).run {
+ block.invoke(this)
+ this@picker.addView(this)
+ this
+}
+
+fun ComponentGroup.picker(block: Picker.() -> Unit) = Picker(this.componentContext).run {
+ block.invoke(this)
+ this@picker.addComponent(this)
+ this
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt
new file mode 100644
index 00000000..178cc2a4
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/ProfileImageView.kt
@@ -0,0 +1,22 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.ProfileImageView
+
+fun Context.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this.context).run {
+ block.invoke(this)
+ this@profileImageView.addView(this)
+ this
+}
+
+fun ComponentGroup.profileImageView(block: ProfileImageView.() -> Unit) = ProfileImageView(this.componentContext).run {
+ block.invoke(this)
+ this@profileImageView.addComponent(this)
+ this
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt
index 87a69ff4..1b0af016 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/Text.kt
@@ -2,6 +2,7 @@ package com.yourssu.design.system.language
import android.content.Context
import android.view.ViewGroup
+import androidx.annotation.ColorRes
import com.yourssu.design.system.atom.Text
fun Context.text(block: Text.() -> Unit) = Text(this).run {
@@ -19,4 +20,8 @@ fun ComponentGroup.text(block: Text.() -> Unit) = Text(this.componentContext).ru
block.invoke(this)
this@text.addComponent(this)
this
+}
+
+fun Text.textColor(@ColorRes color: Int) {
+ setTextColor(this.context.getColor(color))
}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt b/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt
new file mode 100644
index 00000000..7f66f5df
--- /dev/null
+++ b/DesignSystem/src/main/java/com/yourssu/design/system/language/TextField.kt
@@ -0,0 +1,76 @@
+package com.yourssu.design.system.language
+
+import android.content.Context
+import android.view.ViewGroup
+import com.yourssu.design.system.atom.PasswordTextField
+import com.yourssu.design.system.atom.SearchTextField
+import com.yourssu.design.system.atom.SimpleTextField
+import com.yourssu.design.system.atom.SuffixTextField
+
+fun Context.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this.context).run {
+ block.invoke(this)
+ this@passwordTextField.addView(this)
+ this
+}
+
+fun ComponentGroup.passwordTextField(block: PasswordTextField.() -> Unit) = PasswordTextField(this.componentContext).run {
+ block.invoke(this)
+ this@passwordTextField.addComponent(this)
+ this
+}
+
+fun Context.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this.context).run {
+ block.invoke(this)
+ this@searchTextField.addView(this)
+ this
+}
+
+fun ComponentGroup.searchTextField(block: SearchTextField.() -> Unit) = SearchTextField(this.componentContext).run {
+ block.invoke(this)
+ this@searchTextField.addComponent(this)
+ this
+}
+
+fun Context.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this.context).run {
+ block.invoke(this)
+ this@simpleTextField.addView(this)
+ this
+}
+
+fun ComponentGroup.simpleTextField(block: SimpleTextField.() -> Unit) = SimpleTextField(this.componentContext).run {
+ block.invoke(this)
+ this@simpleTextField.addComponent(this)
+ this
+}
+
+fun Context.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this).run {
+ block.invoke(this)
+ this
+}
+
+fun ViewGroup.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this.context).run {
+ block.invoke(this)
+ this@suffixTextField.addView(this)
+ this
+}
+
+fun ComponentGroup.suffixTextField(block: SuffixTextField.() -> Unit) = SuffixTextField(this.componentContext).run {
+ block.invoke(this)
+ this@suffixTextField.addComponent(this)
+ this
+}
\ No newline at end of file
diff --git a/DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt b/DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt
similarity index 99%
rename from DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt
rename to DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt
index 7e54166b..7d826533 100644
--- a/DesignSystem/src/main/java/com/yourssu/design/system/atom/TextField.kt
+++ b/DesignSystem/src/main/java/com/yourssu/design/undercarriage/base/TextField.kt
@@ -1,4 +1,4 @@
-package com.yourssu.design.system.atom
+package com.yourssu.design.undercarriage.base
import android.content.Context
import android.text.Editable
diff --git a/app/storybook/.gitignore b/app/storybook/.gitignore
new file mode 100644
index 00000000..42afabfd
--- /dev/null
+++ b/app/storybook/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/app/storybook/build.gradle b/app/storybook/build.gradle
new file mode 100644
index 00000000..9b196904
--- /dev/null
+++ b/app/storybook/build.gradle
@@ -0,0 +1,46 @@
+plugins {
+ id 'com.android.application'
+ id 'kotlin-android'
+}
+
+android {
+ compileSdkVersion 30
+ buildToolsVersion "30.0.3"
+
+ defaultConfig {
+ applicationId "com.yourssu.storybook"
+ minSdkVersion 23
+ targetSdkVersion 30
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+ implementation project(path: ':DesignSystem')
+
+ implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
+ implementation 'androidx.core:core-ktx:1.6.0'
+ implementation 'androidx.appcompat:appcompat:1.3.1'
+ implementation 'com.google.android.material:material:1.4.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
+ testImplementation 'junit:junit:4.+'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+}
\ No newline at end of file
diff --git a/app/storybook/proguard-rules.pro b/app/storybook/proguard-rules.pro
new file mode 100644
index 00000000..481bb434
--- /dev/null
+++ b/app/storybook/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
\ No newline at end of file
diff --git a/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt b/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt
new file mode 100644
index 00000000..23057b0b
--- /dev/null
+++ b/app/storybook/src/androidTest/java/com/yourssu/storybook/ExampleInstrumentedTest.kt
@@ -0,0 +1,24 @@
+package com.yourssu.storybook
+
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
+
+import org.junit.Test
+import org.junit.runner.RunWith
+
+import org.junit.Assert.*
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+@RunWith(AndroidJUnit4::class)
+class ExampleInstrumentedTest {
+ @Test
+ fun useAppContext() {
+ // Context of the app under test.
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("com.yourssu.storybook", appContext.packageName)
+ }
+}
\ No newline at end of file
diff --git a/app/storybook/src/main/AndroidManifest.xml b/app/storybook/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..d2696fb8
--- /dev/null
+++ b/app/storybook/src/main/AndroidManifest.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt b/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt
new file mode 100644
index 00000000..1067f74c
--- /dev/null
+++ b/app/storybook/src/main/java/com/yourssu/storybook/MainActivity.kt
@@ -0,0 +1,156 @@
+package com.yourssu.storybook
+
+import android.annotation.SuppressLint
+import androidx.appcompat.app.AppCompatActivity
+import android.os.Bundle
+import com.yourssu.design.system.foundation.Typo
+import com.yourssu.design.system.language.*
+import com.yourssu.design.undercarriage.size.dpToIntPx
+
+class MainActivity : AppCompatActivity() {
+
+ /** 추가시 여기에만 선언하면 됨 */
+ private val foundation = listOf(
+ "SemanticColor",
+ "Typography"
+ )
+ private val atom = listOf(
+ "Text",
+ "Toggle",
+ "ProfileImageView",
+ "Badge",
+ "BoxButton",
+ "BottomSheet",
+ "Divider",
+ "IconView",
+ "Picker",
+ "PlainButton",
+ "Checkbox",
+ "SimpleTextField",
+ "SuffixTextField",
+ "PasswordTextField",
+ "SearchTextField"
+ )
+ private val component = listOf(
+ "Toast",
+ "TopBar",
+ "SingleTitleTopBar",
+ "DoubleTitleTopBar",
+ "BottomBar"
+ )
+ /** 추가시 여기에만 선언하면 됨 */
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ initView()
+ }
+
+ @SuppressLint("SetTextI18n")
+ private fun initView() {
+ setContentView {
+ verticalLayout {
+ horizontalLayout { // TODO change to SingleTitleTopBar
+ text {
+ text = "StoryBook"
+ typo = Typo.Title2
+ textColor(R.color.textPrimary)
+ setLayout(
+ leftMarginPx = context.dpToIntPx(16f),
+ topMarginPx = context.dpToIntPx(8f),
+ bottomMarginPx = context.dpToIntPx(8f)
+ )
+ }
+ }
+ scrollView {
+ verticalLayout {
+ text {
+ text = "1. Foundation"
+ typo = Typo.SubTitle3
+ textColor(R.color.textPrimary)
+ backgroundColor(R.color.dimNormal)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(2f),
+ bottomPaddingPx = context.dpToIntPx(2f)
+ )
+ }
+ foundation.forEach {
+ text {
+ text = it
+ typo = Typo.Body1
+ textColor(R.color.textPrimary)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(16f),
+ bottomPaddingPx = context.dpToIntPx(16f)
+ )
+ }
+ divider {
+ setLayout(leftMarginPx = context.dpToIntPx(16f))
+ }
+ }
+ text {
+ text = "2. Atom"
+ typo = Typo.SubTitle3
+ textColor(R.color.textPrimary)
+ backgroundColor(R.color.dimNormal)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(2f),
+ bottomPaddingPx = context.dpToIntPx(2f)
+ )
+ }
+ atom.forEach {
+ text {
+ text = it
+ typo = Typo.Body1
+ textColor(R.color.textPrimary)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(16f),
+ bottomPaddingPx = context.dpToIntPx(16f)
+ )
+ }
+ divider {
+ setLayout(leftMarginPx = context.dpToIntPx(16f))
+ }
+ }
+ text {
+ text = "3. Component"
+ typo = Typo.SubTitle3
+ textColor(R.color.textPrimary)
+ backgroundColor(R.color.dimNormal)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(2f),
+ bottomPaddingPx = context.dpToIntPx(2f)
+ )
+ }
+ component.forEach {
+ text {
+ text = it
+ typo = Typo.Body1
+ textColor(R.color.textPrimary)
+ setLayout(
+ width = MATCH_PARENT,
+ leftPaddingPx = context.dpToIntPx(16f),
+ topPaddingPx = context.dpToIntPx(16f),
+ bottomPaddingPx = context.dpToIntPx(16f)
+ )
+ }
+ divider {
+ setLayout(leftMarginPx = context.dpToIntPx(16f))
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/storybook/src/main/res/layout/activity_main.xml b/app/storybook/src/main/res/layout/activity_main.xml
new file mode 100644
index 00000000..4fc24441
--- /dev/null
+++ b/app/storybook/src/main/res/layout/activity_main.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..11bea4c6
Binary files /dev/null and b/app/storybook/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/storybook/src/main/res/values/strings.xml b/app/storybook/src/main/res/values/strings.xml
new file mode 100644
index 00000000..90b7167c
--- /dev/null
+++ b/app/storybook/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ YDS\nStoryBook
+
\ No newline at end of file
diff --git a/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt b/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt
new file mode 100644
index 00000000..56da8388
--- /dev/null
+++ b/app/storybook/src/test/java/com/yourssu/storybook/ExampleUnitTest.kt
@@ -0,0 +1,17 @@
+package com.yourssu.storybook
+
+import org.junit.Test
+
+import org.junit.Assert.*
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * See [testing documentation](http://d.android.com/tools/testing).
+ */
+class ExampleUnitTest {
+ @Test
+ fun addition_isCorrect() {
+ assertEquals(4, 2 + 2)
+ }
+}
\ No newline at end of file
diff --git a/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt b/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt
index e4ccbee8..ea340cf8 100644
--- a/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt
+++ b/app/yds-ui-tester/src/main/java/com/yourssu/yds_ui_tester/CheckBoxActivity.kt
@@ -2,12 +2,8 @@ package com.yourssu.yds_ui_tester
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
-import android.util.Log
-import android.view.View
-import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
-import com.yourssu.design.system.atom.CheckBox
-import com.yourssu.design.system.atom.CheckBox.Companion.checkBox
+import com.yourssu.design.system.language.checkBox
import com.yourssu.yds_ui_tester.databinding.ActivityCheckBoxBinding
class CheckBoxActivity : AppCompatActivity() {
diff --git a/settings.gradle b/settings.gradle
index 3dd695eb..9315919e 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,3 +1,4 @@
include ':DesignSystem'
+include ':app:storybook'
include ':app:yds-ui-tester'
rootProject.name = "YDS-Android"
\ No newline at end of file