From 75cf4571cf0c2c11beac0b3aad3198648a441b31 Mon Sep 17 00:00:00 2001 From: jtw Date: Fri, 24 Apr 2026 02:51:22 +0900 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20=ED=86=B5=EC=9D=BC=EB=90=98=EC=A7=80?= =?UTF-8?q?=20=EC=95=8A=EC=9D=80=20=EB=B2=84=ED=8A=BC=20=EB=94=94=EC=9E=90?= =?UTF-8?q?=EC=9D=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/components/HelpModal.tsx | 10 ++++------ src/app/manager-tool/Home.tsx | 2 +- src/app/manager-tool/extract/containx/ContainX.tsx | 4 ++-- src/app/manager-tool/extract/endx/EndX.tsx | 6 +++--- .../extract/english-mission/EnglishMission.tsx | 6 +++--- .../extract/korean-mission-b/KoreanMissionB.tsx | 4 ++-- .../extract/korean-mission/KoreanMission.tsx | 4 ++-- src/app/manager-tool/extract/lenx/LenX.tsx | 4 ++-- src/app/manager-tool/extract/loop/Loop.tsx | 4 ++-- src/app/manager-tool/extract/merge/Merge.tsx | 4 ++-- src/app/manager-tool/extract/startx/StartX.tsx | 4 ++-- 11 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/app/components/HelpModal.tsx b/src/app/components/HelpModal.tsx index c1db22fb..bd4d6672 100644 --- a/src/app/components/HelpModal.tsx +++ b/src/app/components/HelpModal.tsx @@ -7,6 +7,7 @@ import { DialogTitle, DialogTrigger, } from '@/src/app/components/ui/dialog'; +import { Button } from './ui/button'; interface HelpModalProps { title: string; @@ -28,13 +29,10 @@ const HelpModal = ({ return ( - + {triggerText && {triggerText}} + diff --git a/src/app/manager-tool/Home.tsx b/src/app/manager-tool/Home.tsx index e0c13570..9a9a409d 100644 --- a/src/app/manager-tool/Home.tsx +++ b/src/app/manager-tool/Home.tsx @@ -47,7 +47,7 @@ export default function Home() {
- 등등 + 미션 단어 추출
diff --git a/src/app/manager-tool/extract/containx/ContainX.tsx b/src/app/manager-tool/extract/containx/ContainX.tsx index c3a15351..53d2eec0 100644 --- a/src/app/manager-tool/extract/containx/ContainX.tsx +++ b/src/app/manager-tool/extract/containx/ContainX.tsx @@ -106,14 +106,14 @@ const WordExtractorApp = () => {
diff --git a/src/app/manager-tool/extract/endx/EndX.tsx b/src/app/manager-tool/extract/endx/EndX.tsx index 639feb9d..c984e016 100644 --- a/src/app/manager-tool/extract/endx/EndX.tsx +++ b/src/app/manager-tool/extract/endx/EndX.tsx @@ -110,15 +110,15 @@ const WordExtractorApp = () => {
-
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/english-mission/EnglishMission.tsx b/src/app/manager-tool/extract/english-mission/EnglishMission.tsx index 82deb559..a6f40a02 100644 --- a/src/app/manager-tool/extract/english-mission/EnglishMission.tsx +++ b/src/app/manager-tool/extract/english-mission/EnglishMission.tsx @@ -126,15 +126,15 @@ const WordExtractorApp = () => {
-
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/korean-mission-b/KoreanMissionB.tsx b/src/app/manager-tool/extract/korean-mission-b/KoreanMissionB.tsx index adafc1f3..e99ff1c5 100644 --- a/src/app/manager-tool/extract/korean-mission-b/KoreanMissionB.tsx +++ b/src/app/manager-tool/extract/korean-mission-b/KoreanMissionB.tsx @@ -186,14 +186,14 @@ const WordExtractorApp = () => {
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/korean-mission/KoreanMission.tsx b/src/app/manager-tool/extract/korean-mission/KoreanMission.tsx index 67eb5d65..352b004b 100644 --- a/src/app/manager-tool/extract/korean-mission/KoreanMission.tsx +++ b/src/app/manager-tool/extract/korean-mission/KoreanMission.tsx @@ -323,14 +323,14 @@ const WordExtractorApp = () => {
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/lenx/LenX.tsx b/src/app/manager-tool/extract/lenx/LenX.tsx index 85da5dc1..422c153a 100644 --- a/src/app/manager-tool/extract/lenx/LenX.tsx +++ b/src/app/manager-tool/extract/lenx/LenX.tsx @@ -109,14 +109,14 @@ const WordExtractorApp = () => {
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/loop/Loop.tsx b/src/app/manager-tool/extract/loop/Loop.tsx index e52aba57..3cb35ea3 100644 --- a/src/app/manager-tool/extract/loop/Loop.tsx +++ b/src/app/manager-tool/extract/loop/Loop.tsx @@ -134,14 +134,14 @@ const LoopWordExtractorApp = () => {
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/merge/Merge.tsx b/src/app/manager-tool/extract/merge/Merge.tsx index 98c30220..3867078f 100644 --- a/src/app/manager-tool/extract/merge/Merge.tsx +++ b/src/app/manager-tool/extract/merge/Merge.tsx @@ -324,14 +324,14 @@ const WordExtractorApp = () => {
{/* Step 0 */} diff --git a/src/app/manager-tool/extract/startx/StartX.tsx b/src/app/manager-tool/extract/startx/StartX.tsx index 92bc89cf..da65b2d6 100644 --- a/src/app/manager-tool/extract/startx/StartX.tsx +++ b/src/app/manager-tool/extract/startx/StartX.tsx @@ -110,14 +110,14 @@ const WordExtractorApp = () => {
{/* Step 0 */} From fbc7fb25af7d0e67149d56ee57d97134261e2c77 Mon Sep 17 00:00:00 2001 From: jtw Date: Fri, 24 Apr 2026 02:55:42 +0900 Subject: [PATCH 2/5] =?UTF-8?q?chore:=20=EB=8F=84=EC=9B=80=EB=A7=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/components/HelpModal.tsx | 2 +- src/app/word/search/components/WordSearchHelpModal.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/components/HelpModal.tsx b/src/app/components/HelpModal.tsx index bd4d6672..17a4e0da 100644 --- a/src/app/components/HelpModal.tsx +++ b/src/app/components/HelpModal.tsx @@ -29,7 +29,7 @@ const HelpModal = ({ return ( - diff --git a/src/app/word/search/components/WordSearchHelpModal.tsx b/src/app/word/search/components/WordSearchHelpModal.tsx index fab69ca8..63aa55c4 100644 --- a/src/app/word/search/components/WordSearchHelpModal.tsx +++ b/src/app/word/search/components/WordSearchHelpModal.tsx @@ -84,7 +84,7 @@ const WordSearchHelpModal = () => { 매너: 한방 단어를 표시 하지 않습니다.
  • - 젠틀: 후속단어 수가 5개 미만인 단어를 표시 하지 않습니다. + 젠틀: 후속단어 수가 10개 미만인 단어를 표시 하지 않습니다.
  • 에티켓: 노인정을 기준으로 한방 글자를 산정한 한방단어를 표시하지 않습니다. From a1f7ceab7684df0c76f2e41343767b49813a5220 Mon Sep 17 00:00:00 2001 From: jtw Date: Wed, 29 Apr 2026 00:26:29 +0900 Subject: [PATCH 3/5] =?UTF-8?q?fix:=20=EC=9E=90=ED=80=B4=20=EB=8B=A8?= =?UTF-8?q?=EC=96=B4=20=EA=B2=80=EC=83=89=EC=97=90=EC=84=9C=20=EC=A3=BC?= =?UTF-8?q?=EC=A0=9C=20=EC=84=A0=ED=83=9D=20=EB=AA=A8=EB=8B=AC=EC=9D=98=20?= =?UTF-8?q?=EA=B2=80=EC=83=89=20=EB=B6=80=EB=B6=84=EC=9D=98=20=EC=98=A4?= =?UTF-8?q?=EB=A5=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Copilot --- src/app/lib/lib.ts | 29 ++++++++++++++++++- src/app/word/components/WordAddFrom.tsx | 22 +------------- .../search/components/ThemeSelectionModal.tsx | 5 ++-- 3 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/app/lib/lib.ts b/src/app/lib/lib.ts index 74f42d34..137182c5 100644 --- a/src/app/lib/lib.ts +++ b/src/app/lib/lib.ts @@ -47,4 +47,31 @@ export function misssionCharMask(chars: string[]): number { } } return base; -} \ No newline at end of file +} + + +/** + * 한글 텍스트 필터링 함수 + * + * @param text 필터링할 텍스트 + * @param search 검색할 텍스트 + * @returns text가 search를 포함하는지 여부 + */ +export function filterKoreanText(text: string, search: string): boolean { + if (search === "") return true; + let indexText = 0; + let indexSearch = 0; + + while (indexText < text.length && indexSearch < search.length) { + if ( + text[indexText] === search[indexSearch] || + (("ㄱ" <= search[indexSearch] && search[indexSearch] <= "ㅎ") && + calculateKoreanInitials(text[indexText]) === calculateKoreanInitials(search[indexSearch])) + ) { + indexSearch++; + } + indexText++; + } + + return indexSearch === search.length; +}; \ No newline at end of file diff --git a/src/app/word/components/WordAddFrom.tsx b/src/app/word/components/WordAddFrom.tsx index f8febdd0..99bd38b1 100644 --- a/src/app/word/components/WordAddFrom.tsx +++ b/src/app/word/components/WordAddFrom.tsx @@ -19,27 +19,7 @@ import ErrorModal from "@/src/app/components/ErrModal"; import { fetcher } from "../lib"; import { PostgrestError } from "@supabase/supabase-js"; import HelpModal from "@/src/app/components/HelpModal"; -import { calculateKoreanInitials } from "@/src/app/lib/lib"; - -// Utility function for Korean search filtering -const filterKoreanText = (text: string, search: string) => { - if (search === "") return true; - let indexText = 0; - let indexSearch = 0; - - while (indexText < text.length && indexSearch < search.length) { - if ( - text[indexText] === search[indexSearch] || - (("ㄱ" <= search[indexSearch] && search[indexSearch] <= "ㅎ") && - calculateKoreanInitials(text[indexText]) === calculateKoreanInitials(search[indexSearch])) - ) { - indexSearch++; - } - indexText++; - } - - return indexSearch === search.length; -}; +import { calculateKoreanInitials, filterKoreanText } from "@/src/app/lib/lib"; type TopicItemProps = { label: string; diff --git a/src/app/word/search/components/ThemeSelectionModal.tsx b/src/app/word/search/components/ThemeSelectionModal.tsx index 4a3d67b0..09137725 100644 --- a/src/app/word/search/components/ThemeSelectionModal.tsx +++ b/src/app/word/search/components/ThemeSelectionModal.tsx @@ -4,6 +4,7 @@ import { X, Loader2 } from 'lucide-react'; import { SCM } from '@/src/app/lib/supabaseClient'; import { Theme } from '../types'; import { disassemble } from 'es-hangul'; +import { filterKoreanText } from '@/src/app/lib/lib'; interface ThemeSelectionModalProps { isOpen: boolean; @@ -39,9 +40,7 @@ export default function ThemeSelectionModal({ const filtered = themeSearchQuery.trim() === '' ? themes : themes.filter(theme => - theme.name.toLowerCase().includes(themeSearchQuery.toLowerCase()) || - theme.code.toLowerCase().includes(themeSearchQuery.toLowerCase()) || - theme.name.split('').map(c => disassemble(c)[0]).join('').includes(cho) + filterKoreanText(theme.name, themeSearchQuery) || filterKoreanText(theme.name, cho) ); const groupA = filtered.filter(theme => /^\d+$/.test(theme.code)); From 497089cde4ccbed40b56d862f63b005b7ab1ef56 Mon Sep 17 00:00:00 2001 From: jtw Date: Tue, 21 Jul 2026 23:46:04 +0900 Subject: [PATCH 4/5] =?UTF-8?q?fix:=20=EC=84=9C=EB=B9=84=EC=8A=A4=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=EC=95=BD=EA=B4=80=20=EC=97=85=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +- src/app/terms/page.tsx | 99 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 95 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 938355ad..dc39bc70 100644 --- a/.gitignore +++ b/.gitignore @@ -46,4 +46,5 @@ app/test/ app/api/test # Idea -/.idea \ No newline at end of file +/.idea +/.claude \ No newline at end of file diff --git a/src/app/terms/page.tsx b/src/app/terms/page.tsx index a7dc42c5..7f9a94f1 100644 --- a/src/app/terms/page.tsx +++ b/src/app/terms/page.tsx @@ -29,7 +29,7 @@ const TermsOfService = () => {
    - 최종 수정일: 2025년 12월 20일 + 최종 수정일: 2026년 7월 22일
    제1조 (목적) @@ -132,13 +132,100 @@ const TermsOfService = () => {

    - 제8조 (콘텐츠 및 지적재산권) + 제8조 (콘텐츠, 데이터 및 지적재산권)

    +
    -

    1. 서비스에 대한 저작권 및 지적재산권은 서비스 제공자에게 귀속됩니다.

    -

    2. 이용자가 서비스 내에 게시한 콘텐츠(단어, 데이터 등)에 대한 권리는 해당 이용자에게 있습니다.

    -

    3. 이용자는 자신이 게시한 콘텐츠에 대해 다른 이용자들이 서비스 내에서 이용할 수 있도록 동의합니다.

    -

    4. 이용자는 타인의 저작권, 상표권 등 지적재산권을 침해하는 콘텐츠를 게시해서는 안 됩니다.

    +

    + 1. 서비스 및 서비스 제공자가 직접 제작한 소프트웨어, 화면 구성, + 디자인, 문서 등에 관한 저작권과 그 밖의 지적재산권은 서비스 + 제공자에게 귀속됩니다. 다만, 별도의 라이선스가 명시된 경우에는 + 해당 라이선스를 따릅니다. +

    + +

    + 2. 이용자가 서비스 내에 게시하거나 등록한 콘텐츠에 대한 권리는 + 해당 이용자 또는 정당한 권리자에게 귀속됩니다. +

    + +

    + 3. 이용자는 자신이 서비스 내에 게시하거나 등록한 콘텐츠를 서비스의 + 운영, 제공 및 다른 이용자의 서비스 내 이용을 위하여 필요한 범위에서 + 서비스 제공자가 이용하는 것에 동의합니다. +

    + +

    + 4. 서비스에서 제공하는 단어 목록, 단어 데이터베이스 및 이에 부수하는 + 데이터 중 서비스 제공자가 권리를 보유하거나 이용허락 권한을 가진 + 데이터(이하 "제공 데이터")는 별도의 표시가 없는 한{' '} + + 크리에이티브 커먼즈 저작자표시-비영리-동일조건변경허락 4.0 + 국제 라이선스(CC BY-NC-SA 4.0) + + 에 따라 이용할 수 있습니다. +

    + +

    + 5. 제공 데이터를 복제, 배포, 공개, 가공하거나 외부 프로젝트에서 + 이용하는 경우 이용자는 다음 조건을 모두 준수해야 합니다. +

    + +
      +
    • + • "끄코 유틸리티(Kkuko Utils)"를 출처로 명시하고 + 서비스로 연결되는 링크를 함께 표시할 것 +
    • +
    • + • CC BY-NC-SA 4.0 라이선스의 명칭과 해당 라이선스 안내 페이지의 + 링크를 표시할 것 +
    • +
    • + • 제공 데이터를 수정, 번역, 정리, 병합하거나 그 밖의 방법으로 + 변경한 경우 그 변경 사실을 표시할 것 +
    • +
    • • 제공 데이터를 영리 목적으로 이용하지 않을 것
    • +
    • + • 제공 데이터를 변경하거나 이를 기반으로 결과물을 제작하여 공개하는 + 경우 해당 결과물을 CC BY-NC-SA 4.0 또는 이와 호환되는 라이선스로 + 제공할 것 +
    • +
    • + • 라이선스가 허용하는 이용을 제한하는 추가적인 법적 조건이나 기술적 + 보호조치를 적용하지 않을 것 +
    • +
    + +

    6. 다음 자료에는 위 라이선스가 적용되지 않습니다.

    + +
      +
    • • 이용자가 직접 게시하거나 등록한 콘텐츠
    • +
    • + • 제3자가 저작권, 데이터베이스제작자권리 또는 그 밖의 권리를 + 보유한 자료 +
    • +
    • • 별도의 출처 또는 이용조건이 표시된 자료
    • +
    • • 상표, 로고, 서비스 명칭 및 서비스의 소스코드
    • +
    • + • 관련 법령에 따라 권리가 서비스 제공자에게 귀속되지 않는 개별 + 단어 또는 사실정보 +
    • +
    + +

    + 7. 제3자의 자료를 이용하는 경우 이용자는 해당 자료에 표시된 출처와 + 이용조건을 별도로 확인하고 준수해야 합니다. +

    + +

    + 8. 이용자는 타인의 저작권, 상표권, 데이터베이스제작자권리 및 그 밖의 + 지적재산권을 침해하는 콘텐츠를 게시하거나 서비스를 통하여 이용해서는 + 안 됩니다. +

    From 151fb2ada3861fb8b20b0129fa077d29c29f45fb Mon Sep 17 00:00:00 2001 From: jtw Date: Tue, 21 Jul 2026 23:51:24 +0900 Subject: [PATCH 5/5] =?UTF-8?q?fix:=20fix:=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=20=EC=9A=94=EC=B2=AD=20=EB=AC=B8=EA=B5=AC?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/kkuko/profile/KkukoProfile.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/app/kkuko/profile/KkukoProfile.tsx b/src/app/kkuko/profile/KkukoProfile.tsx index c9643297..453e1e70 100644 --- a/src/app/kkuko/profile/KkukoProfile.tsx +++ b/src/app/kkuko/profile/KkukoProfile.tsx @@ -107,7 +107,8 @@ export default function KkukoProfile() {

    {error}

    - 2026-01-18 17시 이후 게임 접속한 유저에 대해서 조회할 수 있습니다. + 2026-01-18 17시 ~ 2026-03-03 00시 사이에 게임 접속한 유저에 대해서 조회할 수 있습니다. + 프로필 등록을 원하신다면 id검색을 이용해주세요.

    )}