feat: add initial Tauri mobile app demo#166
Conversation
## Rust 디코더 - `libs/braillify/src/decoder.rs` 신규 작성 - 한국 점자 → 한글 상태 머신 디코더 (`Start / GotCho / GotJung`) - 약자(을·억·언·얼·연·열·영·옥·온·옹·운·울·은·인) 디코딩 - 2바이트 특수 약자(성·정·청·것) 디코딩 - 가나다마바사자카타파하 초성 단독 약자 디코딩 - Unicode TIndex 종성 값 정확히 반영 (ㄹ=8, ㅇ=21 등) - 7개 단위 테스트 전체 통과 - `libs/braillify/src/lib.rs`: `pub fn decode()` 공개 함수 추가 ## WASM 바인딩 - `packages/node/src/lib.rs`: `decodeFromUnicode()` JS 함수 노출 ## 모바일 앱 UI - `apps/mobile/src/lib/translate.ts` - `translateReverse()` 구현 — `decodeFromUnicode` WASM 연결 - `apps/mobile/src/pages/TranslatorPage.tsx` - 정점역 / 역점역 방향 토글 추가 - 역점역 모드에서 `BrailleInput` 컴포넌트로 전환 - `apps/mobile/src/components/BrailleInput.tsx` 신규 작성 - 직접 입력/붙여넣기 텍스트 필드 (점자 유니코드) - 도트 키보드: `EditableBrailleCell` 재사용, 셀 단위 점 토글 - 두 입력 방식 실시간 동기화 (`masksToString` / `parseToCells`) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- 모바일 앱 개발에 필요한 스크립트를 추가했습니다. - Tauri 앱에 있던 템플릿 메타데이터를 Braillify 프로젝트에 맞게 작성했습니다.
- 다음과 같은 문제를 해결: 11번째 번역을 하면 → 가장 오래된 10번째 항목이 자동으로 삭제
PR 리뷰 피드백 반영 (gemini-code-assist Critical). 된소리표 ⠠(32) 뒤의 바이트 패턴이 두 가지임을 확인: - ㅏ 모음: 된소리표 + 약자/공유 바이트 (까=[32,43], 싸=[32,7]) - 기타 모음: 된소리표 + 초성 바이트 + 별도 중성 (꺼=[32,8,14], 쏘=[32,32,37]) try_choseong_with_double() 함수 추가: 43|8 → ㄲ(1) / 10 → ㄸ(4) / 24 → ㅃ(8) 7|32 → ㅆ(10) / 40 → ㅉ(13) Stage::Start, Stage::GotJung 두 곳에서 try_choseong → try_choseong_with_double 교체. 된소리 테스트 8개 추가 (ㅏ 모음 5종 + ㅏ 외 모음 3종 + 단어 2종). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
PR 리뷰 피드백 반영 (gemini-code-assist High Priority).
붙여넣기 시 일반 공백(' ')과 줄바꿈('\n')이 무시되어
단어 경계가 사라지는 문제 수정.
→ 두 문자 모두 0(⠀ U+2800 점자 공백)으로 매핑하여 단어 경계 보존.
PR 리뷰 피드백 반영 (gemini-code-assist Medium Priority). 단음절 테스트만으로는 놓칠 수 있는 케이스를 보완: - 껐어요: 된소리 + 종성 + 후속 음절 - 아까: 단어 중간에 된소리 - 기쁘다: ㅃ(된소리ㅂ) 포함 단어
PR 리뷰 피드백 반영 (gemini-code-assist Medium Priority). 배열 인덱스를 key로 쓰면 셀 삭제 시 React가 잘못된 컴포넌트를 재사용하는 버그가 생길 수 있음. counter useRef로 단조 증가 ID를 생성하고 cellIds state에 저장. - 셀 추가/공백/삭제 시 ID 배열도 함께 업데이트 - 텍스트 붙여넣기로 전체 교체 시 모든 셀에 새 ID 발급 - 방향 전환 등 외부 초기화(cells.length===0) 시 useEffect로 동기화
리뷰어(Nohgh) 피드백 반영.
기존: direction(정점역/역점역) + mode(일반/수학) 두 개의 토글
변경: PageMode('general'|'math'|'reverse') 단일 상태로 통합
→ [일반] [수학] [역점역] 한 줄 토글로 3가지 기능이 명확하게 표시됨
- direction/mode 두 상태 제거, pageMode 하나로 대체
- 수학 점역 기능 유지 확인
feat: 역점역(점자→한글) 기능 구현 및 점자 입력 키보드 추가
feat: Braillify Android 초기 설정 및 UI/UX 정리
- Next.js App Router + 정적 export(output:'export')로 마이그레이션 - @devup-ui/vite-plugin → @devup-ui/next-plugin 교체, WASM(asyncWebAssembly) webpack 설정 이식 - RSC 경계 분리: layout/page는 서버 컴포넌트, 탭 상태만 AppShell client island로 격리 - src/pages → src/views 이동(Next Pages Router 충돌 회피), 상호작용 화면에만 'use client' - global.css → devup-ui globalCss 이식 - Tauri frontendDist를 ../out(Next export 출력)으로 변경 - Vite 설정/진입점 제거
owjs3901
left a comment
There was a problem hiding this comment.
lint를 통과하고 있지 못한 것 같습니다
기본적인 tauri의 아이콘을 사용하는 것을 금합니다
Codecov Report❌ Patch coverage is
🚀 New features to boost your workflow:
|
|
Init 테스트 통과 가능하게끔 수정하여 대부분의 빌드, 테스트까지 진행되는걸로 확인됩니다. failing check를 확인해본 결과 이전에 추가했던 역점역 기능에 대한 테스트가 적은것이 이유로 보입니다. 테스트 케이스 또한 제가 추가하면 될까요? |
|
추가적으로 윈도우 테스트가 계속해서 timeout이 발생하여, 파이썬 버전과 역점역 쪽 코드가 잘못되었나 싶어 확인해 보았지만 별다른 문제를 확인하지 못했습니다. 몇 번 진단해봐도 이유를 찾지 못하고 있어 한번 봐주시면 감사하겠습니다. |
|
@coom1222 조금 더 자세히 내용을 전달해주실 수 있을까요? |
|
@owjs3901
두 건 모두 bun test가 테스트를 전부 통과시키고 최종 요약 이후 아무 출력 없이 GitHub job 상한(6시간)에 걸려 time out 됩니다. time out된 job과 통과한 job 모두 같은 bun v1.3.14이고, 같은 run 안에서도 Windows job 하나만 멈추고 나머지는 통과합니다. bun 이슈 트래커에도 "test 완료 후 프로세스 미종료" 로 비슷한 증상이 있다고 확인하였습니다. 제가 수정했던 파일들에서는 time out 될만한 요소가 없다고 생각되어, 코드 중 어디를 진단해야 할 지와 모니터링 시에 추가로 확인해야 할 부분이 어디인지 잘 모르겠습니다. 문제가 발생하는 이유를 추측하기로는 bun의 버전 문제인 것 같은데, 이 경우는 임의로 조작할 수 없을 것 같아 코멘트 남깁니다! coverage(codecov/patch)는 별도로 채워서 다시 푸시하겠습니다. |
Summary
apps/mobile워크스페이스를 추가하고, Braillify 변환 흐름을 모바일 UI에서 확인할 수 있도록 구성했습니다.Changes
apps/mobile앱 추가braillify의translateToUnicode를 사용해 점역 결과를 출력src-tauri설정 추가apps/mobile추가Tests
bun -F mobile checkbun -F mobile ios:buildbun -F mobile ios:runNotes
apps/mobile/src-tauri/icons와gen/apple/Assets.xcassets의 아이콘은 Tauri 기본 아이콘 입니다. 공식 Braillify 앱 아이콘으로 추후 교체하겠습니다.