feat(shared): gate paid features from one entitlement source
Desktop, web, mobile, and the API each decided locally what a tier could do, so a plan change could unlock a feature on one surface and not another. Entitlement checks now live in `@d3ro/core` and are exercised by tests. The shared theme and design-system packages also gain the tokens the new surfaces consume, and the api-client exposes the dictionary and team types the clients now send.
This commit is contained in:
parent
6ba25f53b7
commit
f6a29db95a
13 changed files with 576 additions and 11 deletions
|
|
@ -62,6 +62,12 @@
|
|||
"dictionary.noResults": "No results found",
|
||||
"dictionary.noWords": "No words — add custom words to improve STT accuracy",
|
||||
"dictionary.used": "Used {{count}} times",
|
||||
"dictionary.export": "Export",
|
||||
"dictionary.import": "Import",
|
||||
"dictionary.exported": "Dictionary exported.",
|
||||
"dictionary.exportFailed": "Dictionary export failed.",
|
||||
"dictionary.importedCount": "Imported {{imported}}, skipped {{skipped}}, errors {{errors}}.",
|
||||
"dictionary.importFailed": "Dictionary import failed.",
|
||||
"dictionary.editTitle": "Edit Word",
|
||||
"dictionary.addTitle": "Add Word",
|
||||
"dictionary.word": "Word",
|
||||
|
|
@ -1390,6 +1396,12 @@
|
|||
"mobile.teams.deleteTitle": "Permanently delete team",
|
||||
"mobile.teams.deleteBody": "This permanently deletes the team, invitations, and memberships. Shared meetings will be detached. This cannot be undone.",
|
||||
"mobile.teams.realtimeWaiting": "Waiting for realtime sync. Pull down to verify the latest server state.",
|
||||
"mobile.teams.activity": "Activity",
|
||||
"mobile.teams.activityPlaceholder": "Leave a note for the team...",
|
||||
"mobile.teams.post": "Post",
|
||||
"mobile.teams.posting": "Posting...",
|
||||
"mobile.teams.noActivity": "No activity yet.",
|
||||
"mobile.teams.system": "System",
|
||||
"mobile.teams.acceptTitle": "Team invitation",
|
||||
"mobile.teams.inviteLoading": "Checking invitation link",
|
||||
"mobile.teams.loginToAccept": "Sign in before accepting this invitation.",
|
||||
|
|
|
|||
|
|
@ -70,6 +70,12 @@
|
|||
"dictionary.noResults": "검색 결과 없음",
|
||||
"dictionary.noWords": "단어 없음 — STT 정확도 향상을 위해 커스텀 단어를 추가하세요",
|
||||
"dictionary.used": "{{count}}회 사용",
|
||||
"dictionary.export": "내보내기",
|
||||
"dictionary.import": "가져오기",
|
||||
"dictionary.exported": "사전을 내보냈습니다.",
|
||||
"dictionary.exportFailed": "사전 내보내기에 실패했습니다.",
|
||||
"dictionary.importedCount": "가져오기 {{imported}}건, 건너뜀 {{skipped}}건, 오류 {{errors}}건.",
|
||||
"dictionary.importFailed": "사전 가져오기에 실패했습니다.",
|
||||
"dictionary.editTitle": "단어 편집",
|
||||
"dictionary.addTitle": "단어 추가",
|
||||
"dictionary.word": "단어",
|
||||
|
|
@ -1397,6 +1403,12 @@
|
|||
"mobile.teams.deleteTitle": "팀 영구 삭제",
|
||||
"mobile.teams.deleteBody": "팀과 초대, 멤버 연결을 영구 삭제합니다. 공유 회의의 팀 연결도 해제됩니다. 이 작업은 되돌릴 수 없습니다.",
|
||||
"mobile.teams.realtimeWaiting": "실시간 동기화 연결을 기다리는 중입니다. 아래로 당겨 최신 상태를 확인할 수 있습니다.",
|
||||
"mobile.teams.activity": "활동",
|
||||
"mobile.teams.activityPlaceholder": "팀에 메모를 남겨보세요...",
|
||||
"mobile.teams.post": "등록",
|
||||
"mobile.teams.posting": "등록 중...",
|
||||
"mobile.teams.noActivity": "아직 활동이 없습니다.",
|
||||
"mobile.teams.system": "시스템",
|
||||
"mobile.teams.acceptTitle": "팀 초대",
|
||||
"mobile.teams.inviteLoading": "초대 링크를 확인하는 중",
|
||||
"mobile.teams.loginToAccept": "이 초대를 수락하려면 먼저 로그인하세요.",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue