hanbiro-react16-sdk 1.0.28 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +58 -5
  2. package/dist/components/ChatAIDraft/ChatInput.js +3 -1
  3. package/dist/components/ChatAIDraft/ChatList/MessageItem.js +3 -1
  4. package/dist/components/ChatAIDraft/CreatePanel/EmptyState.js +15 -15
  5. package/dist/components/ChatAIDraft/CreatePanel/index.js +3 -3
  6. package/dist/components/ChatAIDraft/ReplyPanel/ContextPreviewModal.js +3 -1
  7. package/dist/components/ChatAIDraft/ReplyPanel/EmptyState.js +10 -10
  8. package/dist/components/ChatAIDraft/ReplyPanel/Header/index.js +8 -4
  9. package/dist/components/ChatAIDraft/ReplyPanel/MailListSelect.js +12 -9
  10. package/dist/components/ChatAIDraft/ReplyPanel/index.js +7 -5
  11. package/dist/components/ChatAIDraft/SettingPopper/index.js +8 -6
  12. package/dist/components/ChatAIDraft/constants.d.ts +2 -2
  13. package/dist/components/ChatAIDraft/constants.js +16 -14
  14. package/dist/components/ChatAIDraft/index.d.ts +1 -0
  15. package/dist/components/ChatAIDraft/index.js +7 -1
  16. package/dist/components/Pagination/index.js +4 -2
  17. package/dist/components/SummaryAIEmails/FilterTabs.js +4 -2
  18. package/dist/components/SummaryAIEmails/SummaryItem.js +3 -1
  19. package/dist/components/SummaryAIEmails/index.d.ts +1 -0
  20. package/dist/components/SummaryAIEmails/index.js +11 -2
  21. package/dist/components/SummaryAIEmails/utils.d.ts +2 -1
  22. package/dist/components/SummaryAIEmails/utils.js +5 -4
  23. package/dist/hanbiro-react16-sdk.style.css +1 -1
  24. package/dist/hanbiro-react16-sdk.umd.js +241 -98
  25. package/dist/index.js +4 -3
  26. package/dist/lang/en.d.ts +3 -0
  27. package/dist/lang/en.js +66 -0
  28. package/dist/lang/index.d.ts +4 -0
  29. package/dist/lang/index.js +18 -0
  30. package/dist/lang/keyLang.d.ts +62 -0
  31. package/dist/lang/keyLang.js +66 -0
  32. package/dist/lang/ko.d.ts +3 -0
  33. package/dist/lang/ko.js +66 -0
  34. package/dist/lang/vi.d.ts +3 -0
  35. package/dist/lang/vi.js +66 -0
  36. package/dist/utils/index.d.ts +1 -1
  37. package/dist/utils/lang.d.ts +1 -0
  38. package/dist/utils/lang.js +30 -0
  39. package/dist/utils/storage.d.ts +8 -0
  40. package/dist/utils/storage.js +19 -0
  41. package/dist/utils/url.d.ts +2 -0
  42. package/dist/utils/url.js +8 -2
  43. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * hanbiro-react16-sdk v1.0.28
2
+ * hanbiro-react16-sdk v1.0.29
3
3
  * Build Date: 2026-05-22
4
4
  */
5
5
  /* empty css */
@@ -9,7 +9,7 @@ import { default as default3 } from "./components/LoadingCircular/index.js";
9
9
  import { default as default4 } from "./components/LoadingContainer/index.js";
10
10
  import { default as default5 } from "./components/Pagination/index.js";
11
11
  import { default as default6 } from "./components/SummaryAIEmails/index.js";
12
- import { initHanbiroReactSDK } from "./utils/url.js";
12
+ import { initHanbiroReactSDK, setLibLang } from "./utils/url.js";
13
13
  export {
14
14
  AI_LANG_FLAGS,
15
15
  default2 as ChatAIDraft,
@@ -17,5 +17,6 @@ export {
17
17
  default4 as LoadingContainer,
18
18
  default5 as Pagination,
19
19
  default6 as SummaryAIEmails,
20
- initHanbiroReactSDK
20
+ initHanbiroReactSDK,
21
+ setLibLang
21
22
  };
@@ -0,0 +1,3 @@
1
+ import { LangKey } from './keyLang';
2
+
3
+ export declare const en: Record<LangKey, string>;
@@ -0,0 +1,66 @@
1
+ import { LangKey } from "./keyLang.js";
2
+ const en = {
3
+ [LangKey.SUMMARY_WARNING]: "This is a summary compiled by AI · May contain some inaccuracies",
4
+ [LangKey.NO_DATA]: "No data",
5
+ [LangKey.SENT]: "Sent",
6
+ [LangKey.RECEIVED]: "Received",
7
+ [LangKey.ALL]: "All",
8
+ [LangKey.CREATE_EMPTY_TITLE]: "Let's draft a new email together from scratch.",
9
+ [LangKey.CREATE_EMPTY_SUBTITLE]: "Tell me what kind of email you'd like to write.",
10
+ [LangKey.CREATE_EMPTY_GUIDE]: "Give me the recipient, purpose, and key points\nand AI will generate a polished draft.",
11
+ [LangKey.CREATE_FEATURE_1_TITLE]: "Request via message",
12
+ [LangKey.CREATE_FEATURE_1_DESC]: 'e.g., "Draft an email to Director Hong proposing a Q3 collaboration meeting (May 20, 3 PM)"',
13
+ [LangKey.CREATE_FEATURE_2_TITLE]: "AI generates a draft",
14
+ [LangKey.CREATE_FEATURE_2_DESC]: "Refine the draft freely with follow-ups like 'more polite' or 'add a deadline'.",
15
+ [LangKey.CREATE_FEATURE_3_TITLE]: "Apply to body",
16
+ [LangKey.CREATE_FEATURE_3_DESC]: "Insert the response you like into the email body and send.",
17
+ [LangKey.CREATE_PROMPT_HINT]: "💡 Try these prompts to get a draft right away",
18
+ [LangKey.CREATE_SUGGESTION_1]: "Propose a Q3 meeting to Director Hong (May 20, 3 PM)",
19
+ [LangKey.CREATE_SUGGESTION_2]: "Notify client of payment schedule (Due May 30)",
20
+ [LangKey.CREATE_SUGGESTION_3]: "Welcome message to new employee (Joining May 22)",
21
+ [LangKey.REPLY_EMPTY_TITLE]: "We'll draft a reply based on the received email.\nAdd send history if you want to match the tone.",
22
+ [LangKey.REPLY_EMPTY_GUIDE]: "The source is auto-included. Adjust tone and length through conversation.",
23
+ [LangKey.REPLY_FEATURE_1_TITLE]: "Auto-include source",
24
+ [LangKey.REPLY_FEATURE_1_DESC]: "The email you are replying to is automatically added as context.",
25
+ [LangKey.REPLY_FEATURE_2_TITLE]: "Add send history (optional)",
26
+ [LangKey.REPLY_FEATURE_2_DESC]: "Use '+ Add' to pick past emails and reference their tone.",
27
+ [LangKey.REPLY_FEATURE_3_TITLE]: "Refine with conversation",
28
+ [LangKey.REPLY_FEATURE_3_DESC]: "Get an AI draft, then adjust freely with chips or messages.",
29
+ [LangKey.CHAT_INPUT_PLACEHOLDER]: "Describe your email...",
30
+ [LangKey.CHAT_INPUT_PLACEHOLDER_REPLY]: "Type a message...",
31
+ [LangKey.APPLY_CONTENT]: "Apply content",
32
+ [LangKey.SETTING_LANGUAGE]: "Language",
33
+ [LangKey.SETTING_TONE]: "Tone",
34
+ [LangKey.SETTING_LENGTH]: "Length",
35
+ [LangKey.TONE_FORMAL]: "Formal",
36
+ [LangKey.TONE_POLITE]: "Polite",
37
+ [LangKey.TONE_NEUTRAL]: "Neutral",
38
+ [LangKey.TONE_FRIENDLY]: "Friendly",
39
+ [LangKey.TONE_FIRM]: "Firm",
40
+ [LangKey.TONE_APOLOGY]: "Apology",
41
+ [LangKey.LENGTH_SHORT]: "Short",
42
+ [LangKey.LENGTH_MEDIUM]: "Medium",
43
+ [LangKey.LENGTH_LONG]: "Long",
44
+ [LangKey.LENGTH_ONE_LINER]: "1-liner",
45
+ [LangKey.PAGINATION_TOTAL]: "Total",
46
+ [LangKey.PAGINATION_PAGE]: "Page",
47
+ [LangKey.PAGINATION_PAGE_OF]: "Page",
48
+ [LangKey.REPLY_LOADING_CONTEXT]: "Loading context...",
49
+ [LangKey.SOURCE_CONTEXT]: "Source context",
50
+ [LangKey.AUTO]: "Auto",
51
+ [LangKey.SELECTED_CONTEXT]: "Selected context",
52
+ [LangKey.ADD]: "Add",
53
+ [LangKey.BACK]: "Back",
54
+ [LangKey.ADD_CONTEXT_TITLE]: "Add context from receive history",
55
+ [LangKey.ADD_CONTEXT_DESC]: "Select related emails to provide AI context.",
56
+ [LangKey.SELECTED_UP_TO]: "selected · up to",
57
+ [LangKey.CLEAR_ALL]: "Clear all",
58
+ [LangKey.SORT_LATEST]: "Sort: latest",
59
+ [LangKey.NO_EMAILS_FOUND]: "No emails found.",
60
+ [LangKey.CANCEL]: "Cancel",
61
+ [LangKey.ADD_AS_CONTEXT]: "as context →",
62
+ [LangKey.NO_SUBJECT]: "(no subject)"
63
+ };
64
+ export {
65
+ en
66
+ };
@@ -0,0 +1,4 @@
1
+ import { LangKey } from './keyLang';
2
+
3
+ export declare const t: (key: LangKey) => string;
4
+ export { LangKey };
@@ -0,0 +1,18 @@
1
+ import { SDKConfig } from "../utils/url.js";
2
+ import { en } from "./en.js";
3
+ import { vi } from "./vi.js";
4
+ import { ko } from "./ko.js";
5
+ const dicts = {
6
+ en,
7
+ vi,
8
+ ko
9
+ };
10
+ const t = (key) => {
11
+ const lang = SDKConfig.lang || "en";
12
+ const prefix = lang.split("-")[0];
13
+ const dict = dicts[lang] || dicts[prefix] || dicts.en;
14
+ return dict[key] || en[key] || key;
15
+ };
16
+ export {
17
+ t
18
+ };
@@ -0,0 +1,62 @@
1
+ export declare enum LangKey {
2
+ SUMMARY_WARNING = "SUMMARY_WARNING",
3
+ NO_DATA = "NO_DATA",
4
+ SENT = "SENT",
5
+ RECEIVED = "RECEIVED",
6
+ ALL = "ALL",
7
+ CREATE_EMPTY_TITLE = "CREATE_EMPTY_TITLE",
8
+ CREATE_EMPTY_SUBTITLE = "CREATE_EMPTY_SUBTITLE",
9
+ CREATE_EMPTY_GUIDE = "CREATE_EMPTY_GUIDE",
10
+ CREATE_FEATURE_1_TITLE = "CREATE_FEATURE_1_TITLE",
11
+ CREATE_FEATURE_1_DESC = "CREATE_FEATURE_1_DESC",
12
+ CREATE_FEATURE_2_TITLE = "CREATE_FEATURE_2_TITLE",
13
+ CREATE_FEATURE_2_DESC = "CREATE_FEATURE_2_DESC",
14
+ CREATE_FEATURE_3_TITLE = "CREATE_FEATURE_3_TITLE",
15
+ CREATE_FEATURE_3_DESC = "CREATE_FEATURE_3_DESC",
16
+ CREATE_PROMPT_HINT = "CREATE_PROMPT_HINT",
17
+ CREATE_SUGGESTION_1 = "CREATE_SUGGESTION_1",
18
+ CREATE_SUGGESTION_2 = "CREATE_SUGGESTION_2",
19
+ CREATE_SUGGESTION_3 = "CREATE_SUGGESTION_3",
20
+ REPLY_EMPTY_TITLE = "REPLY_EMPTY_TITLE",
21
+ REPLY_EMPTY_GUIDE = "REPLY_EMPTY_GUIDE",
22
+ REPLY_FEATURE_1_TITLE = "REPLY_FEATURE_1_TITLE",
23
+ REPLY_FEATURE_1_DESC = "REPLY_FEATURE_1_DESC",
24
+ REPLY_FEATURE_2_TITLE = "REPLY_FEATURE_2_TITLE",
25
+ REPLY_FEATURE_2_DESC = "REPLY_FEATURE_2_DESC",
26
+ REPLY_FEATURE_3_TITLE = "REPLY_FEATURE_3_TITLE",
27
+ REPLY_FEATURE_3_DESC = "REPLY_FEATURE_3_DESC",
28
+ CHAT_INPUT_PLACEHOLDER = "CHAT_INPUT_PLACEHOLDER",
29
+ CHAT_INPUT_PLACEHOLDER_REPLY = "CHAT_INPUT_PLACEHOLDER_REPLY",
30
+ APPLY_CONTENT = "APPLY_CONTENT",
31
+ SETTING_LANGUAGE = "SETTING_LANGUAGE",
32
+ SETTING_TONE = "SETTING_TONE",
33
+ SETTING_LENGTH = "SETTING_LENGTH",
34
+ TONE_FORMAL = "TONE_FORMAL",
35
+ TONE_POLITE = "TONE_POLITE",
36
+ TONE_NEUTRAL = "TONE_NEUTRAL",
37
+ TONE_FRIENDLY = "TONE_FRIENDLY",
38
+ TONE_FIRM = "TONE_FIRM",
39
+ TONE_APOLOGY = "TONE_APOLOGY",
40
+ LENGTH_SHORT = "LENGTH_SHORT",
41
+ LENGTH_MEDIUM = "LENGTH_MEDIUM",
42
+ LENGTH_LONG = "LENGTH_LONG",
43
+ LENGTH_ONE_LINER = "LENGTH_ONE_LINER",
44
+ PAGINATION_TOTAL = "PAGINATION_TOTAL",
45
+ PAGINATION_PAGE = "PAGINATION_PAGE",
46
+ PAGINATION_PAGE_OF = "PAGINATION_PAGE_OF",
47
+ REPLY_LOADING_CONTEXT = "REPLY_LOADING_CONTEXT",
48
+ SOURCE_CONTEXT = "SOURCE_CONTEXT",
49
+ AUTO = "AUTO",
50
+ SELECTED_CONTEXT = "SELECTED_CONTEXT",
51
+ ADD = "ADD",
52
+ BACK = "BACK",
53
+ ADD_CONTEXT_TITLE = "ADD_CONTEXT_TITLE",
54
+ ADD_CONTEXT_DESC = "ADD_CONTEXT_DESC",
55
+ SELECTED_UP_TO = "SELECTED_UP_TO",
56
+ CLEAR_ALL = "CLEAR_ALL",
57
+ SORT_LATEST = "SORT_LATEST",
58
+ NO_EMAILS_FOUND = "NO_EMAILS_FOUND",
59
+ CANCEL = "CANCEL",
60
+ ADD_AS_CONTEXT = "ADD_AS_CONTEXT",
61
+ NO_SUBJECT = "NO_SUBJECT"
62
+ }
@@ -0,0 +1,66 @@
1
+ var LangKey = /* @__PURE__ */ ((LangKey2) => {
2
+ LangKey2["SUMMARY_WARNING"] = "SUMMARY_WARNING";
3
+ LangKey2["NO_DATA"] = "NO_DATA";
4
+ LangKey2["SENT"] = "SENT";
5
+ LangKey2["RECEIVED"] = "RECEIVED";
6
+ LangKey2["ALL"] = "ALL";
7
+ LangKey2["CREATE_EMPTY_TITLE"] = "CREATE_EMPTY_TITLE";
8
+ LangKey2["CREATE_EMPTY_SUBTITLE"] = "CREATE_EMPTY_SUBTITLE";
9
+ LangKey2["CREATE_EMPTY_GUIDE"] = "CREATE_EMPTY_GUIDE";
10
+ LangKey2["CREATE_FEATURE_1_TITLE"] = "CREATE_FEATURE_1_TITLE";
11
+ LangKey2["CREATE_FEATURE_1_DESC"] = "CREATE_FEATURE_1_DESC";
12
+ LangKey2["CREATE_FEATURE_2_TITLE"] = "CREATE_FEATURE_2_TITLE";
13
+ LangKey2["CREATE_FEATURE_2_DESC"] = "CREATE_FEATURE_2_DESC";
14
+ LangKey2["CREATE_FEATURE_3_TITLE"] = "CREATE_FEATURE_3_TITLE";
15
+ LangKey2["CREATE_FEATURE_3_DESC"] = "CREATE_FEATURE_3_DESC";
16
+ LangKey2["CREATE_PROMPT_HINT"] = "CREATE_PROMPT_HINT";
17
+ LangKey2["CREATE_SUGGESTION_1"] = "CREATE_SUGGESTION_1";
18
+ LangKey2["CREATE_SUGGESTION_2"] = "CREATE_SUGGESTION_2";
19
+ LangKey2["CREATE_SUGGESTION_3"] = "CREATE_SUGGESTION_3";
20
+ LangKey2["REPLY_EMPTY_TITLE"] = "REPLY_EMPTY_TITLE";
21
+ LangKey2["REPLY_EMPTY_GUIDE"] = "REPLY_EMPTY_GUIDE";
22
+ LangKey2["REPLY_FEATURE_1_TITLE"] = "REPLY_FEATURE_1_TITLE";
23
+ LangKey2["REPLY_FEATURE_1_DESC"] = "REPLY_FEATURE_1_DESC";
24
+ LangKey2["REPLY_FEATURE_2_TITLE"] = "REPLY_FEATURE_2_TITLE";
25
+ LangKey2["REPLY_FEATURE_2_DESC"] = "REPLY_FEATURE_2_DESC";
26
+ LangKey2["REPLY_FEATURE_3_TITLE"] = "REPLY_FEATURE_3_TITLE";
27
+ LangKey2["REPLY_FEATURE_3_DESC"] = "REPLY_FEATURE_3_DESC";
28
+ LangKey2["CHAT_INPUT_PLACEHOLDER"] = "CHAT_INPUT_PLACEHOLDER";
29
+ LangKey2["CHAT_INPUT_PLACEHOLDER_REPLY"] = "CHAT_INPUT_PLACEHOLDER_REPLY";
30
+ LangKey2["APPLY_CONTENT"] = "APPLY_CONTENT";
31
+ LangKey2["SETTING_LANGUAGE"] = "SETTING_LANGUAGE";
32
+ LangKey2["SETTING_TONE"] = "SETTING_TONE";
33
+ LangKey2["SETTING_LENGTH"] = "SETTING_LENGTH";
34
+ LangKey2["TONE_FORMAL"] = "TONE_FORMAL";
35
+ LangKey2["TONE_POLITE"] = "TONE_POLITE";
36
+ LangKey2["TONE_NEUTRAL"] = "TONE_NEUTRAL";
37
+ LangKey2["TONE_FRIENDLY"] = "TONE_FRIENDLY";
38
+ LangKey2["TONE_FIRM"] = "TONE_FIRM";
39
+ LangKey2["TONE_APOLOGY"] = "TONE_APOLOGY";
40
+ LangKey2["LENGTH_SHORT"] = "LENGTH_SHORT";
41
+ LangKey2["LENGTH_MEDIUM"] = "LENGTH_MEDIUM";
42
+ LangKey2["LENGTH_LONG"] = "LENGTH_LONG";
43
+ LangKey2["LENGTH_ONE_LINER"] = "LENGTH_ONE_LINER";
44
+ LangKey2["PAGINATION_TOTAL"] = "PAGINATION_TOTAL";
45
+ LangKey2["PAGINATION_PAGE"] = "PAGINATION_PAGE";
46
+ LangKey2["PAGINATION_PAGE_OF"] = "PAGINATION_PAGE_OF";
47
+ LangKey2["REPLY_LOADING_CONTEXT"] = "REPLY_LOADING_CONTEXT";
48
+ LangKey2["SOURCE_CONTEXT"] = "SOURCE_CONTEXT";
49
+ LangKey2["AUTO"] = "AUTO";
50
+ LangKey2["SELECTED_CONTEXT"] = "SELECTED_CONTEXT";
51
+ LangKey2["ADD"] = "ADD";
52
+ LangKey2["BACK"] = "BACK";
53
+ LangKey2["ADD_CONTEXT_TITLE"] = "ADD_CONTEXT_TITLE";
54
+ LangKey2["ADD_CONTEXT_DESC"] = "ADD_CONTEXT_DESC";
55
+ LangKey2["SELECTED_UP_TO"] = "SELECTED_UP_TO";
56
+ LangKey2["CLEAR_ALL"] = "CLEAR_ALL";
57
+ LangKey2["SORT_LATEST"] = "SORT_LATEST";
58
+ LangKey2["NO_EMAILS_FOUND"] = "NO_EMAILS_FOUND";
59
+ LangKey2["CANCEL"] = "CANCEL";
60
+ LangKey2["ADD_AS_CONTEXT"] = "ADD_AS_CONTEXT";
61
+ LangKey2["NO_SUBJECT"] = "NO_SUBJECT";
62
+ return LangKey2;
63
+ })(LangKey || {});
64
+ export {
65
+ LangKey
66
+ };
@@ -0,0 +1,3 @@
1
+ import { LangKey } from './keyLang';
2
+
3
+ export declare const ko: Record<LangKey, string>;
@@ -0,0 +1,66 @@
1
+ import { LangKey } from "./keyLang.js";
2
+ const ko = {
3
+ [LangKey.SUMMARY_WARNING]: "이것은 AI가 작성한 요약입니다 · 일부 부정확한 내용이 포함될 수 있습니다",
4
+ [LangKey.NO_DATA]: "데이터 없음",
5
+ [LangKey.SENT]: "보낸 편지",
6
+ [LangKey.RECEIVED]: "받은 편지",
7
+ [LangKey.ALL]: "전체",
8
+ [LangKey.CREATE_EMPTY_TITLE]: "처음부터 새로운 이메일 초안을 함께 작성해 봅시다.",
9
+ [LangKey.CREATE_EMPTY_SUBTITLE]: "어떤 종류의 이메일을 작성하고 싶으신가요?",
10
+ [LangKey.CREATE_EMPTY_GUIDE]: "수신자, 목적 및 주요 내용을 알려주시면\nAI가 완성도 높은 초안을 생성해 드립니다.",
11
+ [LangKey.CREATE_FEATURE_1_TITLE]: "메시지로 요청",
12
+ [LangKey.CREATE_FEATURE_1_DESC]: '예: "홍길동 이사님께 3분기 협력 회의 제안 이메일 작성 (5월 20일 오후 3시)"',
13
+ [LangKey.CREATE_FEATURE_2_TITLE]: "AI 초안 생성",
14
+ [LangKey.CREATE_FEATURE_2_DESC]: "'더 정중하게' 또는 '마감일 추가'와 같은 후속 요청으로 초안을 자유롭게 수정하세요.",
15
+ [LangKey.CREATE_FEATURE_3_TITLE]: "본문에 적용",
16
+ [LangKey.CREATE_FEATURE_3_DESC]: "마음에 드는 답변을 이메일 본문에 삽입하고 전송하세요.",
17
+ [LangKey.CREATE_PROMPT_HINT]: "💡 바로 초안을 받으려면 다음 프롬프트를 시도해 보세요",
18
+ [LangKey.CREATE_SUGGESTION_1]: "홍길동 이사님께 3분기 회의 제안 (5월 20일 오후 3시)",
19
+ [LangKey.CREATE_SUGGESTION_2]: "고객에게 결제 일정 안내 (마감일 5월 30일)",
20
+ [LangKey.CREATE_SUGGESTION_3]: "신입 사원 환영 메시지 (5월 22일 입사)",
21
+ [LangKey.REPLY_EMPTY_TITLE]: "받은 이메일을 바탕으로 답장 초안을 작성합니다.\n어조를 맞추고 싶다면 보낸 내역을 추가하세요.",
22
+ [LangKey.REPLY_EMPTY_GUIDE]: "원본 메일은 자동으로 포함됩니다. 대화를 통해 어조와 길이를 조정하세요.",
23
+ [LangKey.REPLY_FEATURE_1_TITLE]: "원본 자동 포함",
24
+ [LangKey.REPLY_FEATURE_1_DESC]: "답장하려는 이메일이 자동으로 컨텍스트로 추가됩니다.",
25
+ [LangKey.REPLY_FEATURE_2_TITLE]: "발송 내역 추가 (선택사항)",
26
+ [LangKey.REPLY_FEATURE_2_DESC]: "'+ 추가'를 사용하여 과거 이메일을 선택하고 어조를 참조하세요.",
27
+ [LangKey.REPLY_FEATURE_3_TITLE]: "대화로 수정",
28
+ [LangKey.REPLY_FEATURE_3_DESC]: "AI 초안을 받은 후 칩이나 메시지를 사용하여 자유롭게 조정하세요.",
29
+ [LangKey.CHAT_INPUT_PLACEHOLDER]: "이메일을 설명해주세요...",
30
+ [LangKey.CHAT_INPUT_PLACEHOLDER_REPLY]: "메시지 입력...",
31
+ [LangKey.APPLY_CONTENT]: "내용 적용",
32
+ [LangKey.SETTING_LANGUAGE]: "언어",
33
+ [LangKey.SETTING_TONE]: "어조",
34
+ [LangKey.SETTING_LENGTH]: "길이",
35
+ [LangKey.TONE_FORMAL]: "격식",
36
+ [LangKey.TONE_POLITE]: "정중",
37
+ [LangKey.TONE_NEUTRAL]: "중립",
38
+ [LangKey.TONE_FRIENDLY]: "친근",
39
+ [LangKey.TONE_FIRM]: "단호",
40
+ [LangKey.TONE_APOLOGY]: "사과",
41
+ [LangKey.LENGTH_SHORT]: "짧게",
42
+ [LangKey.LENGTH_MEDIUM]: "보통",
43
+ [LangKey.LENGTH_LONG]: "길게",
44
+ [LangKey.LENGTH_ONE_LINER]: "한 줄",
45
+ [LangKey.PAGINATION_TOTAL]: "전체",
46
+ [LangKey.PAGINATION_PAGE]: "페이지",
47
+ [LangKey.PAGINATION_PAGE_OF]: "페이지",
48
+ [LangKey.REPLY_LOADING_CONTEXT]: "컨텍스트 로딩 중...",
49
+ [LangKey.SOURCE_CONTEXT]: "원본 컨텍스트",
50
+ [LangKey.AUTO]: "자동",
51
+ [LangKey.SELECTED_CONTEXT]: "선택한 컨텍스트",
52
+ [LangKey.ADD]: "추가",
53
+ [LangKey.BACK]: "뒤로",
54
+ [LangKey.ADD_CONTEXT_TITLE]: "수신 내역에서 컨텍스트 추가",
55
+ [LangKey.ADD_CONTEXT_DESC]: "관련 이메일을 선택하여 AI에 컨텍스트를 제공하세요.",
56
+ [LangKey.SELECTED_UP_TO]: "개 선택됨 · 최대",
57
+ [LangKey.CLEAR_ALL]: "모두 지우기",
58
+ [LangKey.SORT_LATEST]: "정렬: 최신순",
59
+ [LangKey.NO_EMAILS_FOUND]: "이메일을 찾을 수 없습니다.",
60
+ [LangKey.CANCEL]: "취소",
61
+ [LangKey.ADD_AS_CONTEXT]: "컨텍스트로 추가 →",
62
+ [LangKey.NO_SUBJECT]: "(제목 없음)"
63
+ };
64
+ export {
65
+ ko
66
+ };
@@ -0,0 +1,3 @@
1
+ import { LangKey } from './keyLang';
2
+
3
+ export declare const vi: Record<LangKey, string>;
@@ -0,0 +1,66 @@
1
+ import { LangKey } from "./keyLang.js";
2
+ const vi = {
3
+ [LangKey.SUMMARY_WARNING]: "Đây là bản tóm tắt do AI tổng hợp · Có thể chứa một số điểm không chính xác",
4
+ [LangKey.NO_DATA]: "Không có dữ liệu",
5
+ [LangKey.SENT]: "Đã gửi",
6
+ [LangKey.RECEIVED]: "Đã nhận",
7
+ [LangKey.ALL]: "Tất cả",
8
+ [LangKey.CREATE_EMPTY_TITLE]: "Hãy cùng nhau soạn thảo một email mới từ đầu.",
9
+ [LangKey.CREATE_EMPTY_SUBTITLE]: "Hãy cho tôi biết bạn muốn viết loại email nào.",
10
+ [LangKey.CREATE_EMPTY_GUIDE]: "Cho tôi người nhận, mục đích và những điểm chính\nvà AI sẽ tạo ra một bản nháp hoàn chỉnh.",
11
+ [LangKey.CREATE_FEATURE_1_TITLE]: "Yêu cầu qua tin nhắn",
12
+ [LangKey.CREATE_FEATURE_1_DESC]: 'VD: "Soạn email gửi Giám đốc Hong đề xuất cuộc họp hợp tác quý 3 (20/5, 3 giờ chiều)"',
13
+ [LangKey.CREATE_FEATURE_2_TITLE]: "AI tạo bản nháp",
14
+ [LangKey.CREATE_FEATURE_2_DESC]: "Tinh chỉnh bản nháp thoải mái với các yêu cầu tiếp theo như 'lịch sự hơn' hoặc 'thêm thời hạn'.",
15
+ [LangKey.CREATE_FEATURE_3_TITLE]: "Áp dụng vào nội dung",
16
+ [LangKey.CREATE_FEATURE_3_DESC]: "Chèn phản hồi bạn thích vào nội dung email và gửi.",
17
+ [LangKey.CREATE_PROMPT_HINT]: "💡 Thử các câu lệnh này để nhận bản nháp ngay lập tức",
18
+ [LangKey.CREATE_SUGGESTION_1]: "Đề xuất cuộc họp quý 3 với Giám đốc Hong (20/5, 3 giờ chiều)",
19
+ [LangKey.CREATE_SUGGESTION_2]: "Thông báo lịch thanh toán cho khách hàng (Hạn chót 30/5)",
20
+ [LangKey.CREATE_SUGGESTION_3]: "Tin nhắn chào mừng nhân viên mới (Gia nhập 22/5)",
21
+ [LangKey.REPLY_EMPTY_TITLE]: "Chúng tôi sẽ soạn thảo thư trả lời dựa trên email đã nhận.\nThêm lịch sử gửi nếu bạn muốn khớp với giọng điệu.",
22
+ [LangKey.REPLY_EMPTY_GUIDE]: "Nguồn được tự động bao gồm. Điều chỉnh giọng điệu và độ dài thông qua cuộc trò chuyện.",
23
+ [LangKey.REPLY_FEATURE_1_TITLE]: "Tự động bao gồm nguồn",
24
+ [LangKey.REPLY_FEATURE_1_DESC]: "Email bạn đang trả lời tự động được thêm làm ngữ cảnh.",
25
+ [LangKey.REPLY_FEATURE_2_TITLE]: "Thêm lịch sử gửi (tùy chọn)",
26
+ [LangKey.REPLY_FEATURE_2_DESC]: "Sử dụng '+ Thêm' để chọn các email trước đây và tham khảo giọng điệu của chúng.",
27
+ [LangKey.REPLY_FEATURE_3_TITLE]: "Tinh chỉnh thông qua trò chuyện",
28
+ [LangKey.REPLY_FEATURE_3_DESC]: "Nhận bản nháp AI, sau đó điều chỉnh thoải mái bằng thẻ hoặc tin nhắn.",
29
+ [LangKey.CHAT_INPUT_PLACEHOLDER]: "Mô tả email của bạn...",
30
+ [LangKey.CHAT_INPUT_PLACEHOLDER_REPLY]: "Nhập tin nhắn...",
31
+ [LangKey.APPLY_CONTENT]: "Áp dụng nội dung",
32
+ [LangKey.SETTING_LANGUAGE]: "Ngôn ngữ",
33
+ [LangKey.SETTING_TONE]: "Giọng điệu",
34
+ [LangKey.SETTING_LENGTH]: "Độ dài",
35
+ [LangKey.TONE_FORMAL]: "Trang trọng",
36
+ [LangKey.TONE_POLITE]: "Lịch sự",
37
+ [LangKey.TONE_NEUTRAL]: "Trung lập",
38
+ [LangKey.TONE_FRIENDLY]: "Thân thiện",
39
+ [LangKey.TONE_FIRM]: "Cứng rắn",
40
+ [LangKey.TONE_APOLOGY]: "Xin lỗi",
41
+ [LangKey.LENGTH_SHORT]: "Ngắn",
42
+ [LangKey.LENGTH_MEDIUM]: "Trung bình",
43
+ [LangKey.LENGTH_LONG]: "Dài",
44
+ [LangKey.LENGTH_ONE_LINER]: "1 dòng",
45
+ [LangKey.PAGINATION_TOTAL]: "Tổng",
46
+ [LangKey.PAGINATION_PAGE]: "Trang",
47
+ [LangKey.PAGINATION_PAGE_OF]: "Trang",
48
+ [LangKey.REPLY_LOADING_CONTEXT]: "Đang tải ngữ cảnh...",
49
+ [LangKey.SOURCE_CONTEXT]: "Ngữ cảnh nguồn",
50
+ [LangKey.AUTO]: "Tự động",
51
+ [LangKey.SELECTED_CONTEXT]: "Ngữ cảnh đã chọn",
52
+ [LangKey.ADD]: "Thêm",
53
+ [LangKey.BACK]: "Trở lại",
54
+ [LangKey.ADD_CONTEXT_TITLE]: "Thêm ngữ cảnh từ lịch sử nhận",
55
+ [LangKey.ADD_CONTEXT_DESC]: "Chọn các email liên quan để cung cấp ngữ cảnh cho AI.",
56
+ [LangKey.SELECTED_UP_TO]: "đã chọn · tối đa",
57
+ [LangKey.CLEAR_ALL]: "Xóa tất cả",
58
+ [LangKey.SORT_LATEST]: "Sắp xếp: mới nhất",
59
+ [LangKey.NO_EMAILS_FOUND]: "Không tìm thấy email nào.",
60
+ [LangKey.CANCEL]: "Hủy bỏ",
61
+ [LangKey.ADD_AS_CONTEXT]: "làm ngữ cảnh →",
62
+ [LangKey.NO_SUBJECT]: "(không có chủ đề)"
63
+ };
64
+ export {
65
+ vi
66
+ };
@@ -1 +1 @@
1
- export { initHanbiroReactSDK } from './url';
1
+ export { initHanbiroReactSDK, setLibLang } from './url';
@@ -0,0 +1 @@
1
+ export declare const getCurrentLang: () => string;
@@ -0,0 +1,30 @@
1
+ import { localStorageService, LOCAL_STORAGE_KEY } from "./storage.js";
2
+ function getBrowserLang(shortCode = true) {
3
+ let language = navigator.language;
4
+ if (language.indexOf("-") !== -1 && shortCode) {
5
+ language = language.substring(0, 2);
6
+ }
7
+ if (language === "ja") {
8
+ language = "jp";
9
+ }
10
+ const supportLanguage = [
11
+ "ko",
12
+ "en",
13
+ "jp",
14
+ "ch",
15
+ "zh",
16
+ "id",
17
+ "vi",
18
+ "es"
19
+ ];
20
+ if (!(supportLanguage.indexOf(language) > -1)) {
21
+ language = "en";
22
+ }
23
+ return language || "en";
24
+ }
25
+ const getCurrentLang = () => {
26
+ return localStorageService.get(LOCAL_STORAGE_KEY.LANG_CODE) || getBrowserLang(true);
27
+ };
28
+ export {
29
+ getCurrentLang
30
+ };
@@ -0,0 +1,8 @@
1
+ export declare enum LOCAL_STORAGE_KEY {
2
+ LANG_CODE = "lang.code"
3
+ }
4
+ export declare const localStorageService: {
5
+ get: (key: LOCAL_STORAGE_KEY) => string | null;
6
+ set: (key: LOCAL_STORAGE_KEY, value: string) => void;
7
+ remove: (key: LOCAL_STORAGE_KEY) => void;
8
+ };
@@ -0,0 +1,19 @@
1
+ var LOCAL_STORAGE_KEY = /* @__PURE__ */ ((LOCAL_STORAGE_KEY2) => {
2
+ LOCAL_STORAGE_KEY2["LANG_CODE"] = "lang.code";
3
+ return LOCAL_STORAGE_KEY2;
4
+ })(LOCAL_STORAGE_KEY || {});
5
+ const localStorageService = {
6
+ get: (key) => {
7
+ return localStorage.getItem(key);
8
+ },
9
+ set: (key, value) => {
10
+ localStorage.setItem(key, value);
11
+ },
12
+ remove: (key) => {
13
+ localStorage.removeItem(key);
14
+ }
15
+ };
16
+ export {
17
+ LOCAL_STORAGE_KEY,
18
+ localStorageService
19
+ };
@@ -1,9 +1,11 @@
1
1
  interface SDKConfig {
2
2
  baseUrl: string;
3
3
  signer: any | null;
4
+ lang?: string;
4
5
  }
5
6
  export declare const SDKConfig: SDKConfig;
6
7
  export declare const initHanbiroReactSDK: ({ baseUrl, signer }: SDKConfig) => void;
8
+ export declare const setLibLang: (lang: string) => void;
7
9
  export declare const isDevelopment: boolean;
8
10
  export declare const getBaseUrl: () => string;
9
11
  export declare const getGroupwareUrl: () => string;
package/dist/utils/url.js CHANGED
@@ -1,11 +1,16 @@
1
+ import { getCurrentLang } from "./lang.js";
1
2
  const SDKConfig = {
2
3
  baseUrl: "V3",
3
- signer: null
4
+ signer: null,
5
+ lang: getCurrentLang()
4
6
  };
5
7
  const initHanbiroReactSDK = ({ baseUrl, signer }) => {
6
8
  SDKConfig.baseUrl = baseUrl;
7
9
  SDKConfig.signer = signer;
8
10
  };
11
+ const setLibLang = (lang) => {
12
+ if (lang) SDKConfig.lang = lang;
13
+ };
9
14
  const checkDevelopment = () => {
10
15
  const locationInfo = window.location;
11
16
  const { hostname } = locationInfo;
@@ -37,5 +42,6 @@ export {
37
42
  SDKConfig,
38
43
  getBaseUrl,
39
44
  initHanbiroReactSDK,
40
- isDevelopment
45
+ isDevelopment,
46
+ setLibLang
41
47
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hanbiro-react16-sdk",
3
- "version": "1.0.28",
3
+ "version": "1.0.29",
4
4
  "description": "React 16.2.0 compatible UI components for Hanbiro",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/hanbiro-react16-sdk.umd.js",