diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 14b7f62..9ed8e18 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -13,18 +13,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/other.xml b/.idea/other.xml
index 1811ddc..c5b36a6 100644
--- a/.idea/other.xml
+++ b/.idea/other.xml
@@ -14,6 +14,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -58,6 +69,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -91,6 +113,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -259,13 +292,13 @@
-
-
+
+
-
-
-
-
+
+
+
+
@@ -278,6 +311,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -333,6 +388,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -422,6 +488,17 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md
deleted file mode 100644
index 86e945a..0000000
--- a/PULL_REQUEST_TEMPLATE.md
+++ /dev/null
@@ -1,11 +0,0 @@
-## ๐ก ๊ฐ์
-
-## ๐ ์์
๋ด์ฉ
-
-## ๐ ๋ณ๊ฒฝ์ฌํญ
-
-## ๐โโ๏ธ ์ง๋ฌธ์ฌํญ
-- ๊ฐ์ ํ ์ , ์คํ, ์ฝ๋์ ์ด์ฐํ ๋ถ๋ถ์ด ์๋ค๋ฉด Comment ๋ฌ์์ฃผ์ธ์.
-## ๐ด ์ฌ์ฉ๋ฐฉ๋ฒ
-
-## ๐ธ ๊ธฐํ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab
index 3d45cc6..4481883 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream
index 1e191fd..a5d4309 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at
index 315c727..9f176ec 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i
index ea2da69..dcffb4b 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab
index b330dab..2346e54 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream
index 92a1d94..25a2c14 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len
index 26579f8..f84639f 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len
index 0539f67..8fe89d8 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at
index 8ea3d1a..850852d 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i
index 8efc84c..e9883c8 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab
index facb210..8b2c471 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream
index 92a1d94..25a2c14 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len
index 26579f8..f84639f 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len
index 0539f67..8fe89d8 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at
index f0f243f..8f080ff 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i
index 8efc84c..e9883c8 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab
index 959b9d1..5077792 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream
index 1d2aea4..04597ad 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len
index cb8b8ec..0150f67 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len
index 14f7c06..09407ef 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at
index e742fc3..e1da83e 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i
index 569e37d..7c55195 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab
index 70c4abd..8b2c471 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream
index 9fe1208..dd89c3c 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len
index 26579f8..f84639f 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len
index 0539f67..8fe89d8 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at
index f0f243f..8f080ff 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i
index 7e460b2..012baea 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab
index 011ab17..887b94c 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream
index 9698817..1430db6 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len
index 4d93ba4..b797c4d 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len
index b31f54b..0539f67 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at
index 16d77fa..8e68f63 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i
index d9928ab..263c26a 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab
index d150557..c2db8a9 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at
index c0c5049..3c6c7db 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab
index 4a12dea..c393a51 100644
--- a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab
+++ b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/counters.tab
@@ -1,2 +1,2 @@
-5
+3
0
\ No newline at end of file
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab
index 80360bc..f3f813d 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at
index f6a4f17..9f383b5 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab
index e1dbbaa..bda0762 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream
index 1dd772c..636f34a 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len
index 62f3e6f..29ce11c 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len
index ec8f944..a9f80ae 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at
index 1977041..b6e6373 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i
index e6ff6ac..e9905b3 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab
index 11e8144..5f176c9 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream
index 80ec77a..a880cc3 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len
index b1beb13..d09f73f 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len
index 04a2552..123d5b3 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.len differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at
index 7896120..356a8d9 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i
index 315ad57..0668866 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i and b/buildSrc/build/kotlin/compileKotlin/cacheable/caches-jvm/lookups/lookups.tab_i differ
diff --git a/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin b/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin
index 473febd..dd734c3 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin and b/buildSrc/build/kotlin/compileKotlin/cacheable/last-build.bin differ
diff --git a/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin b/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin
index 0082936..d882ce7 100644
Binary files a/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin and b/buildSrc/build/kotlin/compileKotlin/local-state/build-history.bin differ
diff --git a/buildSrc/build/libs/buildSrc.jar b/buildSrc/build/libs/buildSrc.jar
index a3511c6..357b1aa 100644
Binary files a/buildSrc/build/libs/buildSrc.jar and b/buildSrc/build/libs/buildSrc.jar differ
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 5b14620..4e44738 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -13,6 +13,7 @@ material = "1.12.0"
jetbrainsKotlinJvm = "1.9.0"
identityJvm = "202411.1"
lifecycleViewmodelAndroid = "2.8.6"
+firebaseAnnotations = "16.2.0"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -33,6 +34,7 @@ androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
identity-jvm = { group = "com.android.identity", name = "identity-jvm", version.ref = "identityJvm" }
androidx-lifecycle-viewmodel-android = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-android", version.ref = "lifecycleViewmodelAndroid" }
+firebase-annotations = { group = "com.google.firebase", name = "firebase-annotations", version.ref = "firebaseAnnotations" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }
diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts
index d2e3c72..343ea14 100644
--- a/presentation/build.gradle.kts
+++ b/presentation/build.gradle.kts
@@ -61,6 +61,7 @@ dependencies {
implementation(Dependency.Compose.COMPOSE_MATERIAL3)
implementation(Dependency.Compose.COMPOSE_MATERIAL)
implementation(Dependency.Compose.COMPOSE_NAVIGATION)
+ implementation(libs.firebase.annotations)
debugImplementation(Dependency.Compose.COMPOSE_TOOLING)
implementation(Dependency.Hilt.HILT)
diff --git a/presentation/src/main/java/Untill/Result.kt b/presentation/src/main/java/until/Result.kt
similarity index 97%
rename from presentation/src/main/java/Untill/Result.kt
rename to presentation/src/main/java/until/Result.kt
index 1d8484c..f8a9df3 100644
--- a/presentation/src/main/java/Untill/Result.kt
+++ b/presentation/src/main/java/until/Result.kt
@@ -1,4 +1,4 @@
-package Untill
+package until
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
diff --git a/presentation/src/main/java/view/signin/component/DoMaInputID.kt b/presentation/src/main/java/view/signin/component/DoMaInputID.kt
new file mode 100644
index 0000000..84972b9
--- /dev/null
+++ b/presentation/src/main/java/view/signin/component/DoMaInputID.kt
@@ -0,0 +1,70 @@
+package view.signin.component
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.*
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import view.theme.DoMaAndroidTheme
+import view.theme.DoMaTypography
+
+@Composable
+fun DoMaInputID(
+ modifier: Modifier = Modifier,
+ idValue: TextFieldValue,
+ onIdValueChange: (TextFieldValue) -> Unit
+) {
+ DoMaAndroidTheme { colors, typography ->
+
+ Column(
+ modifier = modifier
+ ) {
+ Text(
+ text = "์์ด๋",
+ style = DoMaTypography.bodyMedium.copy(color = colors.WHITE)
+ )
+ Spacer(
+ modifier = Modifier.height(4.dp)
+ )
+ OutlinedTextField(
+ modifier = Modifier.fillMaxWidth(),
+ value = idValue,
+ onValueChange = onIdValueChange,
+ textStyle = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ shape = RoundedCornerShape(12.dp),
+ singleLine = true,
+ placeholder = {
+ Text(
+ text = "์์ด๋๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.",
+ style = DoMaTypography.labelLarge.copy(color = colors.silver)
+ )
+ },
+ colors = TextFieldDefaults.outlinedTextFieldColors(
+ backgroundColor = colors.BACKGROUND,
+ cursorColor = colors.WHITE,
+ focusedBorderColor = colors.GRAY,
+ unfocusedBorderColor = colors.GRAY
+ )
+ )
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewDoMaInputID() {
+ val idState = remember { mutableStateOf(TextFieldValue("")) }
+
+ DoMaInputID(
+ idValue = idState.value,
+ onIdValueChange = { idState.value = it }
+ )
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/signin/component/DoMaInputPassWord.kt b/presentation/src/main/java/view/signin/component/DoMaInputPassWord.kt
new file mode 100644
index 0000000..c0db983
--- /dev/null
+++ b/presentation/src/main/java/view/signin/component/DoMaInputPassWord.kt
@@ -0,0 +1,74 @@
+
+package view.signin.component
+
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import view.theme.DoMaAndroidTheme
+import view.theme.DoMaTypography
+import view.theme.color.DoMaColor
+
+@Composable
+fun DoMaInputPassword(
+ modifier: Modifier = Modifier,
+ passwordValue: TextFieldValue,
+ onPasswordValueChange: (TextFieldValue) -> Unit
+) {
+ DoMaAndroidTheme { colors, typography ->
+
+ Column(
+ modifier = modifier
+ ) {
+ Text(
+ text = "๋น๋ฐ๋ฒํธ",
+ style = DoMaTypography.bodyMedium.copy(color = colors.WHITE)
+ )
+ Spacer(
+ modifier = Modifier.height(4.dp)
+ )
+ OutlinedTextField(
+ modifier = Modifier.fillMaxWidth(),
+ value = passwordValue,
+ onValueChange = onPasswordValueChange,
+ textStyle = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ shape = RoundedCornerShape(12.dp),
+ singleLine = true,
+ placeholder = {
+ Text(
+ text = "๋น๋ฐ๋ฒํธ๋ฅผ ์
๋ ฅํด์ฃผ์ธ์.",
+ style = DoMaTypography.labelLarge.copy(color = colors.silver)
+ )
+ },
+ colors = TextFieldDefaults.outlinedTextFieldColors(
+ backgroundColor = DoMaColor.BACKGROUND,
+ cursorColor = DoMaColor.WHITE,
+ focusedBorderColor = DoMaColor.GRAY,
+ unfocusedBorderColor = DoMaColor.GRAY
+ )
+ )
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewDoMaInputPassword() {
+ val passwordState = remember { mutableStateOf(TextFieldValue("")) }
+
+ DoMaInputPassword(
+ passwordValue = passwordState.value,
+ onPasswordValueChange = { passwordState.value = it }
+ )
+}
diff --git a/presentation/src/main/java/view/signin/component/DoMaLoginButton.kt b/presentation/src/main/java/view/signin/component/DoMaLoginButton.kt
new file mode 100644
index 0000000..56a3ff9
--- /dev/null
+++ b/presentation/src/main/java/view/signin/component/DoMaLoginButton.kt
@@ -0,0 +1,56 @@
+package view.signin.component
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.Stable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.kim.presentation.component.modifier.clickablesingle
+import view.theme.DoMaAndroidTheme
+
+@Stable
+@Composable
+fun DoMaLoginButton(
+ modifier: Modifier = Modifier,
+ onClick: () -> Unit,
+) {
+ DoMaAndroidTheme { colors, typography ->
+
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(10.dp, Alignment.CenterHorizontally),
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = modifier
+ .fillMaxWidth()
+ .clickablesingle(onClick = onClick)
+ .background(color = colors.LOGIN, shape = RoundedCornerShape(size = 10.dp))
+ .padding(
+ horizontal = 16.dp,
+ vertical = 12.dp,
+ ),
+
+ ) {
+ Text(
+ text = "๋ก๊ทธ์ธ",
+ style = TextStyle(
+ fontSize = 16.sp,
+ fontWeight = FontWeight(700),
+ color = colors.WHITE,
+ )
+ )
+ }
+ }
+}
+
+@Preview
+@Composable
+fun DoMaLoginButtonPreview() {
+ DoMaLoginButton {}
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/signin/screen/SignInScreen.kt b/presentation/src/main/java/view/signin/screen/SignInScreen.kt
new file mode 100644
index 0000000..57aed0f
--- /dev/null
+++ b/presentation/src/main/java/view/signin/screen/SignInScreen.kt
@@ -0,0 +1,127 @@
+package view.signin.screen
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
+import androidx.compose.foundation.layout.*
+import androidx.compose.material.Text
+import androidx.compose.material.ripple.rememberRipple
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.msg.gauthsignin.GAuthSigninWebView
+import view.signin.component.DoMaLoginButton
+import view.theme.DoMaAndroidTheme
+import view.theme.DoMaTypography
+
+@Composable
+fun SignInScreen(
+ modifier: Modifier = Modifier,
+ clickButton: Boolean,
+ gAuthLogin: (String) -> Unit,
+ leIsClickLoginButton: () -> Unit,
+) {
+ DoMaAndroidTheme { colors, typography ->
+
+ Column(
+ modifier = modifier
+ .fillMaxSize()
+ .background(color = colors.BACKGROUND)
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(start = 20.dp, end = 20.dp, bottom = 20.dp)
+ .weight(1f),
+ horizontalAlignment = Alignment.Start,
+ verticalArrangement = Arrangement.Bottom
+ ) {
+ Text(
+ text = "์๋
ํ์ธ์!",
+ style = DoMaTypography.headlineSmall.copy(color = colors.WHITE),
+ )
+ Text(
+ text = "๋ก๊ทธ์ธ์ ํด๋ณผ๊น์?",
+ style = DoMaTypography.headlineSmall.copy(color = colors.GREEN),
+ )
+ }
+
+ DoMaLoginButton(
+ onClick = leIsClickLoginButton,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 20.dp, vertical = 10.dp)
+ )
+
+ Row(
+ horizontalArrangement = Arrangement.End,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(horizontal = 20.dp),
+ ) {
+ Text(
+ text = "์์ด๋ ์ฐพ๊ธฐ",
+ modifier = Modifier,
+ style = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ )
+ Text(
+ text = " | ",
+ style = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ )
+ Text(
+ text = "๋น๋ฐ๋ฒํธ ์ฐพ๊ธฐ",
+ modifier = Modifier,
+ style = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ )
+ }
+
+ Spacer(modifier = Modifier.weight(1f))
+
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 20.dp),
+ horizontalArrangement = Arrangement.Center,
+ verticalAlignment = Alignment.CenterVertically,
+ ) {
+ Text(
+ text = "์์ง ํจ๊ปํ์ง ๋ชปํ๋ค๋ฉด?",
+ style = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ )
+
+ Spacer(modifier = Modifier.width(4.dp))
+
+ Text(
+ text = "ํ์๊ฐ์
ํ๊ธฐ",
+ style = DoMaTypography.labelLarge.copy(color = colors.WHITE),
+ textAlign = TextAlign.Center
+ )
+ }
+
+ if (clickButton) {
+ GAuthSigninWebView(
+ clientId = "ghskfend",
+ redirectUri = "ghskfen"
+ ) { code ->
+ gAuthLogin(code)
+ }
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewSignInScreen() {
+ SignInScreen(
+ clickButton = false,
+ gAuthLogin = {},
+ leIsClickLoginButton = {}
+ )
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/signin/screen/SignInSubScreen.kt b/presentation/src/main/java/view/signin/screen/SignInSubScreen.kt
new file mode 100644
index 0000000..3be2728
--- /dev/null
+++ b/presentation/src/main/java/view/signin/screen/SignInSubScreen.kt
@@ -0,0 +1,125 @@
+package view.signin.screen
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.input.TextFieldValue
+import androidx.compose.ui.text.withStyle
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import com.msg.gauthsignin.GAuthSigninWebView
+import view.signin.component.DoMaInputID
+import view.signin.component.DoMaInputPassword
+import view.signin.component.DoMaLoginButton
+import view.theme.DoMaAndroidTheme
+import view.theme.DoMaTypography
+
+@Composable
+fun SignInSubScreen(
+ modifier: Modifier = Modifier,
+ clickButton: Boolean,
+ gAuthLogin: (String) -> Unit,
+ leIsClickLoginButton: () -> Unit,
+ idValue: TextFieldValue,
+ onIdValueChange: (TextFieldValue) -> Unit,
+ passwordValue: TextFieldValue,
+ onPasswordValueChange: (TextFieldValue) -> Unit
+) {
+ DoMaAndroidTheme { colors, typography ->
+
+ Column(
+ modifier = modifier
+ .fillMaxSize()
+ .background(color = colors.BACKGROUND)
+ .padding(horizontal = 20.dp),
+ verticalArrangement = Arrangement.Center,
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth()
+ .weight(1f),
+ verticalArrangement = Arrangement.Center
+ ) {
+ Row(
+ modifier = Modifier.fillMaxWidth(),
+ verticalAlignment = Alignment.Bottom,
+ horizontalArrangement = Arrangement.Start
+ ) {
+ Text(
+ text = buildAnnotatedString {
+ listOf("์์ด๋" to colors.GREEN, "์" to colors.WHITE, " ๋น๋ฐ๋ฒํธ" to colors.GREEN, "๋ฅผ ์
๋ ฅํด์ฃผ์ธ์!" to colors.WHITE)
+ .forEach { (text, color) ->
+ withStyle(style = DoMaTypography.headlineSmall.copy(color = color).toSpanStyle()) {
+ append(text)
+ }
+ }
+ }
+ )
+ }
+
+ Spacer(modifier = Modifier.height(20.dp))
+
+ DoMaInputID(
+ modifier = Modifier.fillMaxWidth(),
+ idValue = idValue,
+ onIdValueChange = onIdValueChange
+ )
+
+ Spacer(modifier = Modifier.height(12.dp))
+
+ DoMaInputPassword(
+ modifier = Modifier.fillMaxWidth(),
+ passwordValue = passwordValue,
+ onPasswordValueChange = onPasswordValueChange
+ )
+ }
+
+ DoMaLoginButton(
+ onClick = leIsClickLoginButton,
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(bottom = 30.dp)
+ )
+
+ if (clickButton) {
+ GAuthSigninWebView(
+ clientId = "ghskfend",
+ redirectUri = "ghskfen"
+ ) { code ->
+ gAuthLogin(code)
+ }
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+fun PreviewSignInSubScreen() {
+ val idState = remember { mutableStateOf(TextFieldValue("")) }
+ val passwordState = remember { mutableStateOf(TextFieldValue("")) }
+
+ SignInSubScreen(
+ clickButton = false,
+ gAuthLogin = {},
+ leIsClickLoginButton = {},
+ idValue = idState.value,
+ onIdValueChange = { idState.value = it },
+ passwordValue = passwordState.value,
+ onPasswordValueChange = { passwordState.value = it }
+ )
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/textfield/DoMaTextField.kt b/presentation/src/main/java/view/textfield/DoMaTextField.kt
new file mode 100644
index 0000000..f08ebaa
--- /dev/null
+++ b/presentation/src/main/java/view/textfield/DoMaTextField.kt
@@ -0,0 +1,141 @@
+package view.textfield
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.OutlinedTextFieldDefaults
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusManager
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.focus.onFocusChanged
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.ImeAction
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.delay
+import view.theme.DoMaAndroidTheme
+import view.theme.DoMaTypography
+
+const val EMPTY = ""
+
+@Composable
+fun DoMaTextField(
+ modifier: Modifier = Modifier,
+ debounceTime: Long = 300L,
+ placeHolder: String = EMPTY,
+ readOnly: Boolean = false,
+ focusManager: FocusManager = LocalFocusManager.current,
+ focusRequester: FocusRequester = FocusRequester(),
+ setText: String,
+ maxLength: Int = 30, // ์ต๋ ๊ธ์ ์ ์ถ๊ฐ
+ isError: Boolean = false, // ์๋ฌ ์ํ ์ถ๊ฐ
+ errorMessage: String = "์
๋ ฅ๊ฐ์ด ์ฌ๋ฐ๋ฅด์ง ์์ต๋๋ค.", // ๊ธฐ๋ณธ ์๋ฌ ๋ฉ์์ง
+ keyboardOptions: KeyboardOptions = KeyboardOptions.Default.copy(
+ imeAction = ImeAction.Search // ๊ฒ์์ ๋ง๊ฒ ๊ธฐ๋ณธ๊ฐ ์ค์
+ ),
+ keyboardActions: KeyboardActions = KeyboardActions(
+ onSearch = {
+ focusManager.clearFocus() // ๊ฒ์ ํ ํค๋ณด๋ ์จ๊ธฐ๊ธฐ
+ }
+ ),
+ maxLines: Int = 1,
+ singleLine: Boolean = true,
+ visualTransformation: VisualTransformation = VisualTransformation.None,
+ onValueChange: (String) -> Unit = {},
+ onSearchTextChange: (String) -> Unit = {}
+) {
+ DoMaAndroidTheme { colors, typography ->
+ val isFocused = remember { mutableStateOf(false) }
+
+ DisposableEffect(Unit) {
+ onDispose {
+ focusManager.clearFocus()
+ }
+ }
+
+ LaunchedEffect(setText) {
+ delay(debounceTime)
+ onSearchTextChange(setText)
+ }
+
+ Column {
+ TextField(
+ value = setText,
+ onValueChange = {
+ if (it.length <= maxLength) { // ์ต๋ ๊ธ์ ์ ์ ํ
+ val filteredText = it.filterNot { text -> text.isWhitespace() }
+ onValueChange(filteredText)
+ }
+ },
+ keyboardOptions = keyboardOptions,
+ keyboardActions = keyboardActions,
+ placeholder = {
+ Text(
+ text = placeHolder,
+ style = typography.bodySmall,
+ fontWeight = FontWeight.Normal,
+ color = colors.GRAY
+ )
+ },
+ modifier = modifier
+ .fillMaxWidth()
+ .focusRequester(focusRequester)
+ .border(
+ width = 1.dp,
+ shape = RoundedCornerShape(size = 8.dp),
+ color = if (isError) colors.RED else Color(0xFF4C4C4C),
+ )
+ .background(colors.MAIN)
+ .padding(start = 16.dp, top = 12.dp, end = 16.dp, bottom = 12.dp)
+ .onFocusChanged {
+ isFocused.value = it.isFocused
+ },
+ maxLines = maxLines,
+ singleLine = singleLine,
+ textStyle = typography.bodyMedium,
+ colors = OutlinedTextFieldDefaults.colors(
+ focusedTextColor = colors.MAIN,
+ unfocusedTextColor = colors.MAIN,
+ focusedPlaceholderColor = colors.WHITE,
+ unfocusedPlaceholderColor = colors.WHITE,
+ focusedBorderColor = if (isError) colors.RED else Color.Transparent,
+ unfocusedBorderColor = if (isError) colors.RED else Color.Transparent,
+ cursorColor = colors.Gold
+ ),
+ readOnly = readOnly,
+ visualTransformation = visualTransformation
+ )
+ if (isError) {
+ Text(
+ text = errorMessage,
+ style = DoMaTypography.labelLarge.copy(color = colors.RED)
+ )
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+private fun PreView() {
+ DoMaTextField(
+ setText = "๊ฒ์",
+ onSearchTextChange = {}
+ )
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/theme/color/ColorTheme.kt b/presentation/src/main/java/view/theme/color/ColorTheme.kt
index bc55c77..8a5d4a6 100644
--- a/presentation/src/main/java/view/theme/color/ColorTheme.kt
+++ b/presentation/src/main/java/view/theme/color/ColorTheme.kt
@@ -17,4 +17,9 @@ abstract class ColorTheme {
abstract val CardShadow: Color
abstract val StatusShadow: Color
+
+ abstract val BACKGROUND: Color
+ abstract val GREEN: Color
+ abstract val RED: Color
+ abstract val LOGIN: Color
}
\ No newline at end of file
diff --git a/presentation/src/main/java/view/theme/color/DoMaColor.kt b/presentation/src/main/java/view/theme/color/DoMaColor.kt
index 6403a8a..57679ab 100644
--- a/presentation/src/main/java/view/theme/color/DoMaColor.kt
+++ b/presentation/src/main/java/view/theme/color/DoMaColor.kt
@@ -7,7 +7,7 @@ object DoMaColor : ColorTheme(){
override val Black = Color(0xFF000000)
override val WHITE = Color(0xFFFFFFFF)
- override val GRAY = Color(0xFF74C27D)
+ override val GRAY = Color(0xFF9C9C9C)
override val Gold = Color(0xFFFFD651)
override val silver = Color(0xFFBEBEBE)
override val Broze = Color(0xFFF7A080)
@@ -17,5 +17,8 @@ object DoMaColor : ColorTheme(){
override val CardShadow = Color(0xFF1A1A1A) // ์นด๋ ๊ทธ๋ฆผ์ ์์
override val StatusShadow = Color(0xFF141414) //
-
+ override val BACKGROUND = Color(0xFF1E1E1E)
+ override val GREEN = Color(0xFF9AD54A)
+ override val RED = Color(0xFFE43620)
+ override val LOGIN = Color(0xFF4C4C4C)
}
\ No newline at end of file
diff --git a/presentation/src/main/java/viewModel/admin/AdminViewModel.kt b/presentation/src/main/java/viewModel/admin/AdminViewModel.kt
index 2d8b29f..12421b2 100644
--- a/presentation/src/main/java/viewModel/admin/AdminViewModel.kt
+++ b/presentation/src/main/java/viewModel/admin/AdminViewModel.kt
@@ -1,6 +1,6 @@
package viewmodel.admin
-import Untill.asResult
+import until.asResult
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow
@@ -10,8 +10,6 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import model.admin.request.AdminCleanRequestModel
import model.admin.request.AdminPenaltyRequestModel
-import okhttp3.internal.toImmutableList
-import usecase.Users.GetUsersUseCase
import usecase.admin.GetAdminUsersUseCase
import usecase.admin.GetPenaltyListUseCase
import usecase.admin.GetUsersNameUseCase
@@ -53,15 +51,15 @@ class AdminViewModel @Inject constructor(
.asResult()
.collectLatest { result ->
when (result) {
- is Untill.Result.Success -> {
+ is until.Result.Success -> {
_getUserUiState.value = GetUserUiState.Success(result.data)
}
- is Untill.Result.Loading -> {
+ is until.Result.Loading -> {
_getUserUiState.value = GetUserUiState.Loading
}
- is Untill.Result.Error -> {
+ is until.Result.Error -> {
_getUserUiState.value = GetUserUiState.Fail
}
@@ -77,15 +75,15 @@ class AdminViewModel @Inject constructor(
.asResult()
.collectLatest { result ->
when (result) {
- is Untill.Result.Success -> {
+ is until.Result.Success -> {
_getUserNameUiState.value = GetUserNameUiState.Success(result.data)
}
- is Untill.Result.Loading -> {
+ is until.Result.Loading -> {
_getUserNameUiState.value = GetUserNameUiState.Loading
}
- is Untill.Result.Error -> {
+ is until.Result.Error -> {
_getUserNameUiState.value = GetUserNameUiState.Fail
}
@@ -101,15 +99,15 @@ class AdminViewModel @Inject constructor(
.asResult()
.collectLatest { result ->
when (result) {
- is Untill.Result.Success -> {
+ is until.Result.Success -> {
_adminUiState.value = AdminUiState.Success(result.data)
}
- is Untill.Result.Loading -> {
+ is until.Result.Loading -> {
_adminUiState.value = AdminUiState.Loading
}
- is Untill.Result.Error -> {
+ is until.Result.Error -> {
_adminUiState.value = AdminUiState.Fail
}
@@ -122,15 +120,15 @@ class AdminViewModel @Inject constructor(
.asResult()
.collectLatest { result ->
when (result) {
- is Untill.Result.Success -> {
+ is until.Result.Success -> {
_getPenaltyListUiState.value = GetPenaltyListUiState.Success(result.data)
}
- is Untill.Result.Loading -> {
+ is until.Result.Loading -> {
_getPenaltyListUiState.value = GetPenaltyListUiState.Loading
}
- is Untill.Result.Error -> {
+ is until.Result.Error -> {
_getPenaltyListUiState.value = GetPenaltyListUiState.Fail
}
@@ -146,15 +144,15 @@ class AdminViewModel @Inject constructor(
.asResult()
.collectLatest { result ->
when (result) {
- is Untill.Result.Success -> {
+ is until.Result.Success -> {
_postCleanUiState.value = PostCleanUiState.Success(result.data)
}
- is Untill.Result.Loading -> {
+ is until.Result.Loading -> {
_postCleanUiState.value = PostCleanUiState.Loading
}
- is Untill.Result.Error -> {
+ is until.Result.Error -> {
_postCleanUiState.value = PostCleanUiState.Fail
}
diff --git a/presentation/src/main/java/viewModel/homes/HomesViewmodel.kt b/presentation/src/main/java/viewModel/homes/HomesViewmodel.kt
index 193fdcb..4129d1c 100644
--- a/presentation/src/main/java/viewModel/homes/HomesViewmodel.kt
+++ b/presentation/src/main/java/viewModel/homes/HomesViewmodel.kt
@@ -1,7 +1,7 @@
package viewmodel.homes
-import Untill.asResult
-import Untill.Result
+import until.asResult
+import until.Result
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/presentation/src/main/java/viewModel/users/UsersViewModel.kt b/presentation/src/main/java/viewModel/users/UsersViewModel.kt
index 850572f..924a835 100644
--- a/presentation/src/main/java/viewModel/users/UsersViewModel.kt
+++ b/presentation/src/main/java/viewModel/users/UsersViewModel.kt
@@ -1,11 +1,10 @@
package viewmodel.users
-import Untill.Result
-import Untill.asResult
+import until.Result
+import until.asResult
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
-import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.collectLatest