@appsupportkit/support-sdk 0.2.0 → 0.3.0

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 (196) hide show
  1. package/lib/commonjs/api.js +17 -2
  2. package/lib/commonjs/api.js.map +1 -1
  3. package/lib/commonjs/components/SupportButton.js +123 -23
  4. package/lib/commonjs/components/SupportButton.js.map +1 -1
  5. package/lib/commonjs/components/icons.js +36 -0
  6. package/lib/commonjs/components/icons.js.map +1 -1
  7. package/lib/commonjs/components/primitives.js +9 -7
  8. package/lib/commonjs/components/primitives.js.map +1 -1
  9. package/lib/commonjs/components/screens/ComposeScreen.js +14 -23
  10. package/lib/commonjs/components/screens/ComposeScreen.js.map +1 -1
  11. package/lib/commonjs/components/screens/HomeScreen.js +70 -22
  12. package/lib/commonjs/components/screens/HomeScreen.js.map +1 -1
  13. package/lib/commonjs/components/screens/LanguageScreen.js +150 -0
  14. package/lib/commonjs/components/screens/LanguageScreen.js.map +1 -0
  15. package/lib/commonjs/components/screens/ThreadScreen.js +31 -19
  16. package/lib/commonjs/components/screens/ThreadScreen.js.map +1 -1
  17. package/lib/commonjs/i18n/index.js +101 -0
  18. package/lib/commonjs/i18n/index.js.map +1 -0
  19. package/lib/commonjs/i18n/languages.js +95 -0
  20. package/lib/commonjs/i18n/languages.js.map +1 -0
  21. package/lib/commonjs/i18n/strings/de.js +72 -0
  22. package/lib/commonjs/i18n/strings/de.js.map +1 -0
  23. package/lib/commonjs/i18n/strings/en.js +88 -0
  24. package/lib/commonjs/i18n/strings/en.js.map +1 -0
  25. package/lib/commonjs/i18n/strings/es.js +72 -0
  26. package/lib/commonjs/i18n/strings/es.js.map +1 -0
  27. package/lib/commonjs/i18n/strings/fr.js +72 -0
  28. package/lib/commonjs/i18n/strings/fr.js.map +1 -0
  29. package/lib/commonjs/i18n/strings/hi.js +72 -0
  30. package/lib/commonjs/i18n/strings/hi.js.map +1 -0
  31. package/lib/commonjs/i18n/strings/it.js +72 -0
  32. package/lib/commonjs/i18n/strings/it.js.map +1 -0
  33. package/lib/commonjs/i18n/strings/ja.js +72 -0
  34. package/lib/commonjs/i18n/strings/ja.js.map +1 -0
  35. package/lib/commonjs/i18n/strings/ko.js +72 -0
  36. package/lib/commonjs/i18n/strings/ko.js.map +1 -0
  37. package/lib/commonjs/i18n/strings/nl.js +72 -0
  38. package/lib/commonjs/i18n/strings/nl.js.map +1 -0
  39. package/lib/commonjs/i18n/strings/pl.js +72 -0
  40. package/lib/commonjs/i18n/strings/pl.js.map +1 -0
  41. package/lib/commonjs/i18n/strings/pt.js +72 -0
  42. package/lib/commonjs/i18n/strings/pt.js.map +1 -0
  43. package/lib/commonjs/i18n/strings/ru.js +72 -0
  44. package/lib/commonjs/i18n/strings/ru.js.map +1 -0
  45. package/lib/commonjs/i18n/strings/tr.js +72 -0
  46. package/lib/commonjs/i18n/strings/tr.js.map +1 -0
  47. package/lib/commonjs/i18n/strings/zh.js +72 -0
  48. package/lib/commonjs/i18n/strings/zh.js.map +1 -0
  49. package/lib/commonjs/index.js +31 -0
  50. package/lib/commonjs/index.js.map +1 -1
  51. package/lib/commonjs/types.js +11 -0
  52. package/lib/commonjs/types.js.map +1 -1
  53. package/lib/commonjs/useSupportThreads.js +19 -9
  54. package/lib/commonjs/useSupportThreads.js.map +1 -1
  55. package/lib/commonjs/utils.js +32 -17
  56. package/lib/commonjs/utils.js.map +1 -1
  57. package/lib/module/api.js +16 -2
  58. package/lib/module/api.js.map +1 -1
  59. package/lib/module/components/SupportButton.js +126 -26
  60. package/lib/module/components/SupportButton.js.map +1 -1
  61. package/lib/module/components/icons.js +35 -0
  62. package/lib/module/components/icons.js.map +1 -1
  63. package/lib/module/components/primitives.js +9 -7
  64. package/lib/module/components/primitives.js.map +1 -1
  65. package/lib/module/components/screens/ComposeScreen.js +15 -22
  66. package/lib/module/components/screens/ComposeScreen.js.map +1 -1
  67. package/lib/module/components/screens/HomeScreen.js +71 -23
  68. package/lib/module/components/screens/HomeScreen.js.map +1 -1
  69. package/lib/module/components/screens/LanguageScreen.js +147 -0
  70. package/lib/module/components/screens/LanguageScreen.js.map +1 -0
  71. package/lib/module/components/screens/ThreadScreen.js +31 -19
  72. package/lib/module/components/screens/ThreadScreen.js.map +1 -1
  73. package/lib/module/i18n/index.js +56 -0
  74. package/lib/module/i18n/index.js.map +1 -0
  75. package/lib/module/i18n/languages.js +88 -0
  76. package/lib/module/i18n/languages.js.map +1 -0
  77. package/lib/module/i18n/strings/de.js +68 -0
  78. package/lib/module/i18n/strings/de.js.map +1 -0
  79. package/lib/module/i18n/strings/en.js +84 -0
  80. package/lib/module/i18n/strings/en.js.map +1 -0
  81. package/lib/module/i18n/strings/es.js +68 -0
  82. package/lib/module/i18n/strings/es.js.map +1 -0
  83. package/lib/module/i18n/strings/fr.js +68 -0
  84. package/lib/module/i18n/strings/fr.js.map +1 -0
  85. package/lib/module/i18n/strings/hi.js +68 -0
  86. package/lib/module/i18n/strings/hi.js.map +1 -0
  87. package/lib/module/i18n/strings/it.js +68 -0
  88. package/lib/module/i18n/strings/it.js.map +1 -0
  89. package/lib/module/i18n/strings/ja.js +68 -0
  90. package/lib/module/i18n/strings/ja.js.map +1 -0
  91. package/lib/module/i18n/strings/ko.js +68 -0
  92. package/lib/module/i18n/strings/ko.js.map +1 -0
  93. package/lib/module/i18n/strings/nl.js +68 -0
  94. package/lib/module/i18n/strings/nl.js.map +1 -0
  95. package/lib/module/i18n/strings/pl.js +68 -0
  96. package/lib/module/i18n/strings/pl.js.map +1 -0
  97. package/lib/module/i18n/strings/pt.js +68 -0
  98. package/lib/module/i18n/strings/pt.js.map +1 -0
  99. package/lib/module/i18n/strings/ru.js +68 -0
  100. package/lib/module/i18n/strings/ru.js.map +1 -0
  101. package/lib/module/i18n/strings/tr.js +68 -0
  102. package/lib/module/i18n/strings/tr.js.map +1 -0
  103. package/lib/module/i18n/strings/zh.js +68 -0
  104. package/lib/module/i18n/strings/zh.js.map +1 -0
  105. package/lib/module/index.js +1 -0
  106. package/lib/module/index.js.map +1 -1
  107. package/lib/module/types.js +11 -0
  108. package/lib/module/types.js.map +1 -1
  109. package/lib/module/useSupportThreads.js +19 -9
  110. package/lib/module/useSupportThreads.js.map +1 -1
  111. package/lib/module/utils.js +32 -17
  112. package/lib/module/utils.js.map +1 -1
  113. package/lib/typescript/api.d.ts +9 -0
  114. package/lib/typescript/api.d.ts.map +1 -1
  115. package/lib/typescript/components/SupportButton.d.ts.map +1 -1
  116. package/lib/typescript/components/icons.d.ts +5 -0
  117. package/lib/typescript/components/icons.d.ts.map +1 -1
  118. package/lib/typescript/components/primitives.d.ts +7 -3
  119. package/lib/typescript/components/primitives.d.ts.map +1 -1
  120. package/lib/typescript/components/screens/ComposeScreen.d.ts +3 -1
  121. package/lib/typescript/components/screens/ComposeScreen.d.ts.map +1 -1
  122. package/lib/typescript/components/screens/HomeScreen.d.ts +6 -1
  123. package/lib/typescript/components/screens/HomeScreen.d.ts.map +1 -1
  124. package/lib/typescript/components/screens/LanguageScreen.d.ts +30 -0
  125. package/lib/typescript/components/screens/LanguageScreen.d.ts.map +1 -0
  126. package/lib/typescript/components/screens/ThreadScreen.d.ts +3 -1
  127. package/lib/typescript/components/screens/ThreadScreen.d.ts.map +1 -1
  128. package/lib/typescript/i18n/index.d.ts +15 -0
  129. package/lib/typescript/i18n/index.d.ts.map +1 -0
  130. package/lib/typescript/i18n/languages.d.ts +36 -0
  131. package/lib/typescript/i18n/languages.d.ts.map +1 -0
  132. package/lib/typescript/i18n/strings/de.d.ts +3 -0
  133. package/lib/typescript/i18n/strings/de.d.ts.map +1 -0
  134. package/lib/typescript/i18n/strings/en.d.ts +83 -0
  135. package/lib/typescript/i18n/strings/en.d.ts.map +1 -0
  136. package/lib/typescript/i18n/strings/es.d.ts +3 -0
  137. package/lib/typescript/i18n/strings/es.d.ts.map +1 -0
  138. package/lib/typescript/i18n/strings/fr.d.ts +3 -0
  139. package/lib/typescript/i18n/strings/fr.d.ts.map +1 -0
  140. package/lib/typescript/i18n/strings/hi.d.ts +3 -0
  141. package/lib/typescript/i18n/strings/hi.d.ts.map +1 -0
  142. package/lib/typescript/i18n/strings/it.d.ts +3 -0
  143. package/lib/typescript/i18n/strings/it.d.ts.map +1 -0
  144. package/lib/typescript/i18n/strings/ja.d.ts +3 -0
  145. package/lib/typescript/i18n/strings/ja.d.ts.map +1 -0
  146. package/lib/typescript/i18n/strings/ko.d.ts +3 -0
  147. package/lib/typescript/i18n/strings/ko.d.ts.map +1 -0
  148. package/lib/typescript/i18n/strings/nl.d.ts +3 -0
  149. package/lib/typescript/i18n/strings/nl.d.ts.map +1 -0
  150. package/lib/typescript/i18n/strings/pl.d.ts +3 -0
  151. package/lib/typescript/i18n/strings/pl.d.ts.map +1 -0
  152. package/lib/typescript/i18n/strings/pt.d.ts +3 -0
  153. package/lib/typescript/i18n/strings/pt.d.ts.map +1 -0
  154. package/lib/typescript/i18n/strings/ru.d.ts +3 -0
  155. package/lib/typescript/i18n/strings/ru.d.ts.map +1 -0
  156. package/lib/typescript/i18n/strings/tr.d.ts +3 -0
  157. package/lib/typescript/i18n/strings/tr.d.ts.map +1 -0
  158. package/lib/typescript/i18n/strings/zh.d.ts +3 -0
  159. package/lib/typescript/i18n/strings/zh.d.ts.map +1 -0
  160. package/lib/typescript/index.d.ts +1 -0
  161. package/lib/typescript/index.d.ts.map +1 -1
  162. package/lib/typescript/types.d.ts +32 -2
  163. package/lib/typescript/types.d.ts.map +1 -1
  164. package/lib/typescript/useSupportThreads.d.ts +11 -1
  165. package/lib/typescript/useSupportThreads.d.ts.map +1 -1
  166. package/lib/typescript/utils.d.ts +6 -5
  167. package/lib/typescript/utils.d.ts.map +1 -1
  168. package/package.json +2 -2
  169. package/src/api.ts +24 -1
  170. package/src/components/SupportButton.tsx +162 -33
  171. package/src/components/icons.tsx +36 -0
  172. package/src/components/primitives.tsx +14 -4
  173. package/src/components/screens/ComposeScreen.tsx +19 -23
  174. package/src/components/screens/HomeScreen.tsx +84 -25
  175. package/src/components/screens/LanguageScreen.tsx +172 -0
  176. package/src/components/screens/ThreadScreen.tsx +48 -21
  177. package/src/i18n/index.ts +81 -0
  178. package/src/i18n/languages.ts +106 -0
  179. package/src/i18n/strings/de.ts +78 -0
  180. package/src/i18n/strings/en.ts +94 -0
  181. package/src/i18n/strings/es.ts +77 -0
  182. package/src/i18n/strings/fr.ts +78 -0
  183. package/src/i18n/strings/hi.ts +77 -0
  184. package/src/i18n/strings/it.ts +77 -0
  185. package/src/i18n/strings/ja.ts +77 -0
  186. package/src/i18n/strings/ko.ts +76 -0
  187. package/src/i18n/strings/nl.ts +77 -0
  188. package/src/i18n/strings/pl.ts +77 -0
  189. package/src/i18n/strings/pt.ts +77 -0
  190. package/src/i18n/strings/ru.ts +77 -0
  191. package/src/i18n/strings/tr.ts +77 -0
  192. package/src/i18n/strings/zh.ts +75 -0
  193. package/src/index.tsx +8 -0
  194. package/src/types.ts +32 -2
  195. package/src/useSupportThreads.ts +30 -10
  196. package/src/utils.ts +22 -17
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.pt = void 0;
7
+ const pt = exports.pt = {
8
+ 'home.title': 'Suporte',
9
+ 'home.subtitle': 'Inicie uma conversa — respondemos aqui mesmo.',
10
+ 'home.close': 'Fechar suporte',
11
+ 'home.open': 'Abertas',
12
+ 'home.resolved': 'Resolvidas',
13
+ 'home.empty': 'Ainda não há conversas',
14
+ 'home.emptyHint': 'Tudo o que você enviar chega à equipe, e as respostas voltam para esta janela.',
15
+ 'home.noMessages': 'Ainda não há mensagens',
16
+ 'home.you': 'Você',
17
+ 'home.threadA11y': 'Conversa: {type}',
18
+ 'home.threadUnreadA11y': 'Conversa: {type}, {count} não lidas',
19
+ 'home.newA11y': 'Novo: {type}',
20
+ 'home.language': 'Idioma',
21
+ 'type.feedback': 'Feedback',
22
+ 'type.feature_request': 'Sugestão de recurso',
23
+ 'type.bug_report': 'Relato de erro',
24
+ 'hint.feedback': 'Conte o que você acha',
25
+ 'hint.feature_request': 'Sugira uma melhoria',
26
+ 'hint.bug_report': 'Algo não está funcionando',
27
+ 'prompt.feedback': 'O que precisamos saber?',
28
+ 'prompt.feature_request': 'O que você gostaria de ver?',
29
+ 'prompt.bug_report': 'O que aconteceu e o que você esperava?',
30
+ 'sub.feedback': 'Bom ou ruim — vai direto para a equipe.',
31
+ 'sub.feature_request': 'Conte o que você está tentando fazer.',
32
+ 'sub.bug_report': 'Os passos, a tela e o que você esperava ajudam muito.',
33
+ 'compose.back': 'Voltar às conversas',
34
+ 'compose.sent': 'Enviado',
35
+ 'compose.sentHint': 'Vamos responder aqui mesmo. Você encontra a conversa em Abertas, e o botão mostra um aviso quando respondermos.',
36
+ 'compose.done': 'Concluído',
37
+ 'compose.send': 'Enviar',
38
+ 'compose.sending': 'Enviando…',
39
+ 'compose.minChars': 'Pelo menos {count} caracteres',
40
+ 'thread.support': 'Suporte',
41
+ 'thread.new': 'Novo',
42
+ 'thread.resolvedAt': 'Resolvida · {date}',
43
+ 'thread.readOnly': 'Esta conversa está resolvida e é somente leitura',
44
+ 'thread.placeholder': 'Escreva uma resposta…',
45
+ 'thread.sendA11y': 'Enviar resposta',
46
+ 'thread.sendingA11y': 'Enviando',
47
+ 'thread.translating': 'Traduzindo…',
48
+ 'status.open': 'Aberta',
49
+ 'status.resolved': 'Resolvida',
50
+ 'error.tryAgain': 'Tentar novamente',
51
+ 'error.rateLimited': 'Muitas solicitações — tente novamente mais tarde',
52
+ 'error.offline': 'Você está sem conexão — verifique sua rede',
53
+ 'error.sendFailed': 'Não foi possível enviar — tente novamente',
54
+ 'error.loadFailed': 'Não foi possível carregar suas conversas',
55
+ 'error.unavailable': 'O suporte está indisponível no momento',
56
+ 'error.loadRateLimited': 'Muitas solicitações — tente novamente em instantes',
57
+ 'lang.title': 'Escolha seu idioma',
58
+ 'lang.subtitle': 'Escreva no idioma que preferir — traduzimos entre você e a equipe de suporte.',
59
+ 'lang.continue': 'Continuar',
60
+ 'lang.change': 'Alterar idioma',
61
+ 'lang.saveFailed': 'Não foi possível salvar — tente novamente',
62
+ 'time.justNow': 'agora mesmo',
63
+ 'time.minutes': 'há {count} min',
64
+ 'time.hours': 'há {count} h',
65
+ 'time.days': 'há {count} d',
66
+ 'time.weeks': 'há {count} sem',
67
+ 'time.months': 'há {count} meses',
68
+ 'time.years': 'há {count} anos',
69
+ 'time.today': 'Hoje',
70
+ 'time.yesterday': 'Ontem'
71
+ };
72
+ //# sourceMappingURL=pt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["pt","exports"],"sourceRoot":"../../../../src","sources":["i18n/strings/pt.ts"],"mappings":";;;;;;AAEO,MAAMA,EAAe,GAAAC,OAAA,CAAAD,EAAA,GAAG;EAC7B,YAAY,EAAE,SAAS;EACvB,eAAe,EAAE,+CAA+C;EAChE,YAAY,EAAE,gBAAgB;EAC9B,WAAW,EAAE,SAAS;EACtB,eAAe,EAAE,YAAY;EAC7B,YAAY,EAAE,wBAAwB;EACtC,gBAAgB,EACd,gFAAgF;EAClF,iBAAiB,EAAE,wBAAwB;EAC3C,UAAU,EAAE,MAAM;EAClB,iBAAiB,EAAE,kBAAkB;EACrC,uBAAuB,EAAE,qCAAqC;EAC9D,cAAc,EAAE,cAAc;EAC9B,eAAe,EAAE,QAAQ;EAEzB,eAAe,EAAE,UAAU;EAC3B,sBAAsB,EAAE,qBAAqB;EAC7C,iBAAiB,EAAE,gBAAgB;EACnC,eAAe,EAAE,uBAAuB;EACxC,sBAAsB,EAAE,qBAAqB;EAC7C,iBAAiB,EAAE,2BAA2B;EAC9C,iBAAiB,EAAE,yBAAyB;EAC5C,wBAAwB,EAAE,6BAA6B;EACvD,mBAAmB,EAAE,wCAAwC;EAC7D,cAAc,EAAE,yCAAyC;EACzD,qBAAqB,EAAE,uCAAuC;EAC9D,gBAAgB,EAAE,uDAAuD;EAEzE,cAAc,EAAE,qBAAqB;EACrC,cAAc,EAAE,SAAS;EACzB,kBAAkB,EAChB,iHAAiH;EACnH,cAAc,EAAE,WAAW;EAC3B,cAAc,EAAE,QAAQ;EACxB,iBAAiB,EAAE,WAAW;EAC9B,kBAAkB,EAAE,+BAA+B;EAEnD,gBAAgB,EAAE,SAAS;EAC3B,YAAY,EAAE,MAAM;EACpB,mBAAmB,EAAE,oBAAoB;EACzC,iBAAiB,EAAE,kDAAkD;EACrE,oBAAoB,EAAE,uBAAuB;EAC7C,iBAAiB,EAAE,iBAAiB;EACpC,oBAAoB,EAAE,UAAU;EAChC,oBAAoB,EAAE,aAAa;EAEnC,aAAa,EAAE,QAAQ;EACvB,iBAAiB,EAAE,WAAW;EAE9B,gBAAgB,EAAE,kBAAkB;EACpC,mBAAmB,EAAE,kDAAkD;EACvE,eAAe,EAAE,4CAA4C;EAC7D,kBAAkB,EAAE,2CAA2C;EAC/D,kBAAkB,EAAE,0CAA0C;EAC9D,mBAAmB,EAAE,wCAAwC;EAC7D,uBAAuB,EAAE,oDAAoD;EAE7E,YAAY,EAAE,oBAAoB;EAClC,eAAe,EACb,+EAA+E;EACjF,eAAe,EAAE,WAAW;EAC5B,aAAa,EAAE,gBAAgB;EAC/B,iBAAiB,EAAE,2CAA2C;EAE9D,cAAc,EAAE,aAAa;EAC7B,cAAc,EAAE,gBAAgB;EAChC,YAAY,EAAE,cAAc;EAC5B,WAAW,EAAE,cAAc;EAC3B,YAAY,EAAE,gBAAgB;EAC9B,aAAa,EAAE,kBAAkB;EACjC,YAAY,EAAE,iBAAiB;EAC/B,YAAY,EAAE,MAAM;EACpB,gBAAgB,EAAE;AACpB,CAAC","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ru = void 0;
7
+ const ru = exports.ru = {
8
+ 'home.title': 'Поддержка',
9
+ 'home.subtitle': 'Начните разговор — мы ответим прямо здесь.',
10
+ 'home.close': 'Закрыть поддержку',
11
+ 'home.open': 'Открытые',
12
+ 'home.resolved': 'Решённые',
13
+ 'home.empty': 'Пока нет разговоров',
14
+ 'home.emptyHint': 'Всё, что вы отправите, попадёт к команде, а ответы вернутся в это окно.',
15
+ 'home.noMessages': 'Пока нет сообщений',
16
+ 'home.you': 'Вы',
17
+ 'home.threadA11y': 'Разговор: {type}',
18
+ 'home.threadUnreadA11y': 'Разговор: {type}, непрочитанных: {count}',
19
+ 'home.newA11y': 'Новое: {type}',
20
+ 'home.language': 'Язык',
21
+ 'type.feedback': 'Отзыв',
22
+ 'type.feature_request': 'Запрос функции',
23
+ 'type.bug_report': 'Сообщение об ошибке',
24
+ 'hint.feedback': 'Расскажите, что вы думаете',
25
+ 'hint.feature_request': 'Предложите улучшение',
26
+ 'hint.bug_report': 'Что-то не работает',
27
+ 'prompt.feedback': 'Что нам следует знать?',
28
+ 'prompt.feature_request': 'Что вы хотели бы увидеть?',
29
+ 'prompt.bug_report': 'Что произошло и чего вы ожидали?',
30
+ 'sub.feedback': 'Хороший или плохой — он идёт прямо к команде.',
31
+ 'sub.feature_request': 'Расскажите, что вы пытаетесь сделать.',
32
+ 'sub.bug_report': 'Шаги, экран и ваши ожидания — всё это помогает.',
33
+ 'compose.back': 'Назад к разговорам',
34
+ 'compose.sent': 'Отправлено',
35
+ 'compose.sentHint': 'Мы ответим прямо здесь. Разговор появится в разделе «Открытые», а на кнопке загорится значок, когда мы ответим.',
36
+ 'compose.done': 'Готово',
37
+ 'compose.send': 'Отправить',
38
+ 'compose.sending': 'Отправка…',
39
+ 'compose.minChars': 'Не менее {count} символов',
40
+ 'thread.support': 'Поддержка',
41
+ 'thread.new': 'Новое',
42
+ 'thread.resolvedAt': 'Решено · {date}',
43
+ 'thread.readOnly': 'Этот разговор решён и доступен только для чтения',
44
+ 'thread.placeholder': 'Напишите ответ…',
45
+ 'thread.sendA11y': 'Отправить ответ',
46
+ 'thread.sendingA11y': 'Отправка',
47
+ 'thread.translating': 'Перевод…',
48
+ 'status.open': 'Открыт',
49
+ 'status.resolved': 'Решён',
50
+ 'error.tryAgain': 'Повторить',
51
+ 'error.rateLimited': 'Слишком много запросов — попробуйте позже',
52
+ 'error.offline': 'Нет подключения — проверьте сеть',
53
+ 'error.sendFailed': 'Не удалось отправить — попробуйте ещё раз',
54
+ 'error.loadFailed': 'Не удалось загрузить ваши разговоры',
55
+ 'error.unavailable': 'Поддержка сейчас недоступна',
56
+ 'error.loadRateLimited': 'Слишком много запросов — попробуйте через минуту',
57
+ 'lang.title': 'Выберите язык',
58
+ 'lang.subtitle': 'Пишите на удобном вам языке — мы переводим между вами и командой поддержки.',
59
+ 'lang.continue': 'Продолжить',
60
+ 'lang.change': 'Изменить язык',
61
+ 'lang.saveFailed': 'Не удалось сохранить — попробуйте ещё раз',
62
+ 'time.justNow': 'только что',
63
+ 'time.minutes': '{count} мин назад',
64
+ 'time.hours': '{count} ч назад',
65
+ 'time.days': '{count} дн назад',
66
+ 'time.weeks': '{count} нед назад',
67
+ 'time.months': '{count} мес назад',
68
+ 'time.years': '{count} г назад',
69
+ 'time.today': 'Сегодня',
70
+ 'time.yesterday': 'Вчера'
71
+ };
72
+ //# sourceMappingURL=ru.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["ru","exports"],"sourceRoot":"../../../../src","sources":["i18n/strings/ru.ts"],"mappings":";;;;;;AAEO,MAAMA,EAAe,GAAAC,OAAA,CAAAD,EAAA,GAAG;EAC7B,YAAY,EAAE,WAAW;EACzB,eAAe,EAAE,4CAA4C;EAC7D,YAAY,EAAE,mBAAmB;EACjC,WAAW,EAAE,UAAU;EACvB,eAAe,EAAE,UAAU;EAC3B,YAAY,EAAE,qBAAqB;EACnC,gBAAgB,EACd,yEAAyE;EAC3E,iBAAiB,EAAE,oBAAoB;EACvC,UAAU,EAAE,IAAI;EAChB,iBAAiB,EAAE,kBAAkB;EACrC,uBAAuB,EAAE,0CAA0C;EACnE,cAAc,EAAE,eAAe;EAC/B,eAAe,EAAE,MAAM;EAEvB,eAAe,EAAE,OAAO;EACxB,sBAAsB,EAAE,gBAAgB;EACxC,iBAAiB,EAAE,qBAAqB;EACxC,eAAe,EAAE,4BAA4B;EAC7C,sBAAsB,EAAE,sBAAsB;EAC9C,iBAAiB,EAAE,oBAAoB;EACvC,iBAAiB,EAAE,wBAAwB;EAC3C,wBAAwB,EAAE,2BAA2B;EACrD,mBAAmB,EAAE,kCAAkC;EACvD,cAAc,EAAE,+CAA+C;EAC/D,qBAAqB,EAAE,uCAAuC;EAC9D,gBAAgB,EAAE,iDAAiD;EAEnE,cAAc,EAAE,oBAAoB;EACpC,cAAc,EAAE,YAAY;EAC5B,kBAAkB,EAChB,iHAAiH;EACnH,cAAc,EAAE,QAAQ;EACxB,cAAc,EAAE,WAAW;EAC3B,iBAAiB,EAAE,WAAW;EAC9B,kBAAkB,EAAE,2BAA2B;EAE/C,gBAAgB,EAAE,WAAW;EAC7B,YAAY,EAAE,OAAO;EACrB,mBAAmB,EAAE,iBAAiB;EACtC,iBAAiB,EAAE,kDAAkD;EACrE,oBAAoB,EAAE,iBAAiB;EACvC,iBAAiB,EAAE,iBAAiB;EACpC,oBAAoB,EAAE,UAAU;EAChC,oBAAoB,EAAE,UAAU;EAEhC,aAAa,EAAE,QAAQ;EACvB,iBAAiB,EAAE,OAAO;EAE1B,gBAAgB,EAAE,WAAW;EAC7B,mBAAmB,EAAE,2CAA2C;EAChE,eAAe,EAAE,kCAAkC;EACnD,kBAAkB,EAAE,2CAA2C;EAC/D,kBAAkB,EAAE,qCAAqC;EACzD,mBAAmB,EAAE,6BAA6B;EAClD,uBAAuB,EAAE,kDAAkD;EAE3E,YAAY,EAAE,eAAe;EAC7B,eAAe,EACb,6EAA6E;EAC/E,eAAe,EAAE,YAAY;EAC7B,aAAa,EAAE,eAAe;EAC9B,iBAAiB,EAAE,2CAA2C;EAE9D,cAAc,EAAE,YAAY;EAC5B,cAAc,EAAE,mBAAmB;EACnC,YAAY,EAAE,iBAAiB;EAC/B,WAAW,EAAE,kBAAkB;EAC/B,YAAY,EAAE,mBAAmB;EACjC,aAAa,EAAE,mBAAmB;EAClC,YAAY,EAAE,iBAAiB;EAC/B,YAAY,EAAE,SAAS;EACvB,gBAAgB,EAAE;AACpB,CAAC","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.tr = void 0;
7
+ const tr = exports.tr = {
8
+ 'home.title': 'Destek',
9
+ 'home.subtitle': 'Bir görüşme başlatın — tam burada yanıtlıyoruz.',
10
+ 'home.close': 'Desteği kapat',
11
+ 'home.open': 'Açık',
12
+ 'home.resolved': 'Çözüldü',
13
+ 'home.empty': 'Henüz görüşme yok',
14
+ 'home.emptyHint': 'Gönderdiğiniz her şey ekibe ulaşır ve yanıtları bu pencereye geri gelir.',
15
+ 'home.noMessages': 'Henüz mesaj yok',
16
+ 'home.you': 'Siz',
17
+ 'home.threadA11y': 'Görüşme: {type}',
18
+ 'home.threadUnreadA11y': 'Görüşme: {type}, {count} okunmamış',
19
+ 'home.newA11y': 'Yeni: {type}',
20
+ 'home.language': 'Dil',
21
+ 'type.feedback': 'Geri bildirim',
22
+ 'type.feature_request': 'Özellik isteği',
23
+ 'type.bug_report': 'Hata bildirimi',
24
+ 'hint.feedback': 'Ne düşündüğünüzü söyleyin',
25
+ 'hint.feature_request': 'Bir iyileştirme önerin',
26
+ 'hint.bug_report': 'Bir şey çalışmıyor',
27
+ 'prompt.feedback': 'Neyi bilmemiz gerekiyor?',
28
+ 'prompt.feature_request': 'Neyi görmek istersiniz?',
29
+ 'prompt.bug_report': 'Ne oldu ve ne olmasını bekliyordunuz?',
30
+ 'sub.feedback': 'İyi ya da kötü — doğrudan ekibe gider.',
31
+ 'sub.feature_request': 'Ne yapmaya çalıştığınızı anlatın.',
32
+ 'sub.bug_report': 'Adımlar, ekran ve beklentiniz bize yardımcı olur.',
33
+ 'compose.back': 'Görüşmelere dön',
34
+ 'compose.sent': 'Gönderildi',
35
+ 'compose.sentHint': 'Tam burada yanıtlayacağız. Görüşmeyi Açık bölümünde bulursunuz ve yanıtladığımızda düğmede bir işaret belirir.',
36
+ 'compose.done': 'Tamam',
37
+ 'compose.send': 'Gönder',
38
+ 'compose.sending': 'Gönderiliyor…',
39
+ 'compose.minChars': 'En az {count} karakter',
40
+ 'thread.support': 'Destek',
41
+ 'thread.new': 'Yeni',
42
+ 'thread.resolvedAt': 'Çözüldü · {date}',
43
+ 'thread.readOnly': 'Bu görüşme çözüldü ve salt okunur',
44
+ 'thread.placeholder': 'Bir yanıt yazın…',
45
+ 'thread.sendA11y': 'Yanıtı gönder',
46
+ 'thread.sendingA11y': 'Gönderiliyor',
47
+ 'thread.translating': 'Çevriliyor…',
48
+ 'status.open': 'Açık',
49
+ 'status.resolved': 'Çözüldü',
50
+ 'error.tryAgain': 'Tekrar dene',
51
+ 'error.rateLimited': 'Çok fazla istek — daha sonra tekrar deneyin',
52
+ 'error.offline': 'Çevrimdışısınız — bağlantınızı kontrol edin',
53
+ 'error.sendFailed': 'Gönderilemedi — tekrar deneyin',
54
+ 'error.loadFailed': 'Görüşmeleriniz yüklenemedi',
55
+ 'error.unavailable': 'Destek şu anda kullanılamıyor',
56
+ 'error.loadRateLimited': 'Çok fazla istek — birazdan tekrar deneyin',
57
+ 'lang.title': 'Dilinizi seçin',
58
+ 'lang.subtitle': 'İstediğiniz dilde yazın — sizinle destek ekibi arasında çeviri yapıyoruz.',
59
+ 'lang.continue': 'Devam',
60
+ 'lang.change': 'Dili değiştir',
61
+ 'lang.saveFailed': 'Kaydedilemedi — tekrar deneyin',
62
+ 'time.justNow': 'az önce',
63
+ 'time.minutes': '{count} dk önce',
64
+ 'time.hours': '{count} sa önce',
65
+ 'time.days': '{count} g önce',
66
+ 'time.weeks': '{count} hf önce',
67
+ 'time.months': '{count} ay önce',
68
+ 'time.years': '{count} yıl önce',
69
+ 'time.today': 'Bugün',
70
+ 'time.yesterday': 'Dün'
71
+ };
72
+ //# sourceMappingURL=tr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["tr","exports"],"sourceRoot":"../../../../src","sources":["i18n/strings/tr.ts"],"mappings":";;;;;;AAEO,MAAMA,EAAe,GAAAC,OAAA,CAAAD,EAAA,GAAG;EAC7B,YAAY,EAAE,QAAQ;EACtB,eAAe,EAAE,iDAAiD;EAClE,YAAY,EAAE,eAAe;EAC7B,WAAW,EAAE,MAAM;EACnB,eAAe,EAAE,SAAS;EAC1B,YAAY,EAAE,mBAAmB;EACjC,gBAAgB,EACd,0EAA0E;EAC5E,iBAAiB,EAAE,iBAAiB;EACpC,UAAU,EAAE,KAAK;EACjB,iBAAiB,EAAE,iBAAiB;EACpC,uBAAuB,EAAE,oCAAoC;EAC7D,cAAc,EAAE,cAAc;EAC9B,eAAe,EAAE,KAAK;EAEtB,eAAe,EAAE,eAAe;EAChC,sBAAsB,EAAE,gBAAgB;EACxC,iBAAiB,EAAE,gBAAgB;EACnC,eAAe,EAAE,2BAA2B;EAC5C,sBAAsB,EAAE,wBAAwB;EAChD,iBAAiB,EAAE,oBAAoB;EACvC,iBAAiB,EAAE,0BAA0B;EAC7C,wBAAwB,EAAE,yBAAyB;EACnD,mBAAmB,EAAE,uCAAuC;EAC5D,cAAc,EAAE,wCAAwC;EACxD,qBAAqB,EAAE,mCAAmC;EAC1D,gBAAgB,EAAE,mDAAmD;EAErE,cAAc,EAAE,iBAAiB;EACjC,cAAc,EAAE,YAAY;EAC5B,kBAAkB,EAChB,gHAAgH;EAClH,cAAc,EAAE,OAAO;EACvB,cAAc,EAAE,QAAQ;EACxB,iBAAiB,EAAE,eAAe;EAClC,kBAAkB,EAAE,wBAAwB;EAE5C,gBAAgB,EAAE,QAAQ;EAC1B,YAAY,EAAE,MAAM;EACpB,mBAAmB,EAAE,kBAAkB;EACvC,iBAAiB,EAAE,mCAAmC;EACtD,oBAAoB,EAAE,kBAAkB;EACxC,iBAAiB,EAAE,eAAe;EAClC,oBAAoB,EAAE,cAAc;EACpC,oBAAoB,EAAE,aAAa;EAEnC,aAAa,EAAE,MAAM;EACrB,iBAAiB,EAAE,SAAS;EAE5B,gBAAgB,EAAE,aAAa;EAC/B,mBAAmB,EAAE,6CAA6C;EAClE,eAAe,EAAE,6CAA6C;EAC9D,kBAAkB,EAAE,gCAAgC;EACpD,kBAAkB,EAAE,4BAA4B;EAChD,mBAAmB,EAAE,+BAA+B;EACpD,uBAAuB,EAAE,2CAA2C;EAEpE,YAAY,EAAE,gBAAgB;EAC9B,eAAe,EACb,2EAA2E;EAC7E,eAAe,EAAE,OAAO;EACxB,aAAa,EAAE,eAAe;EAC9B,iBAAiB,EAAE,gCAAgC;EAEnD,cAAc,EAAE,SAAS;EACzB,cAAc,EAAE,iBAAiB;EACjC,YAAY,EAAE,iBAAiB;EAC/B,WAAW,EAAE,gBAAgB;EAC7B,YAAY,EAAE,iBAAiB;EAC/B,aAAa,EAAE,iBAAiB;EAChC,YAAY,EAAE,kBAAkB;EAChC,YAAY,EAAE,OAAO;EACrB,gBAAgB,EAAE;AACpB,CAAC","ignoreList":[]}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.zh = void 0;
7
+ const zh = exports.zh = {
8
+ 'home.title': '客服支持',
9
+ 'home.subtitle': '发起一次对话 —— 我们就在这里回复你。',
10
+ 'home.close': '关闭客服',
11
+ 'home.open': '进行中',
12
+ 'home.resolved': '已解决',
13
+ 'home.empty': '还没有对话',
14
+ 'home.emptyHint': '你发送的内容都会送到团队,他们的回复也会回到这个窗口。',
15
+ 'home.noMessages': '还没有消息',
16
+ 'home.you': '你',
17
+ 'home.threadA11y': '对话:{type}',
18
+ 'home.threadUnreadA11y': '对话:{type},{count} 条未读',
19
+ 'home.newA11y': '新建:{type}',
20
+ 'home.language': '语言',
21
+ 'type.feedback': '反馈',
22
+ 'type.feature_request': '功能请求',
23
+ 'type.bug_report': '错误报告',
24
+ 'hint.feedback': '告诉我们你的想法',
25
+ 'hint.feature_request': '提出一个改进建议',
26
+ 'hint.bug_report': '有功能无法正常使用',
27
+ 'prompt.feedback': '有什么想让我们知道的?',
28
+ 'prompt.feature_request': '你希望看到什么?',
29
+ 'prompt.bug_report': '发生了什么,你期待的结果是什么?',
30
+ 'sub.feedback': '好评差评都会直接送到团队。',
31
+ 'sub.feature_request': '告诉我们你想完成什么。',
32
+ 'sub.bug_report': '操作步骤、所在页面和你的预期都很有帮助。',
33
+ 'compose.back': '返回对话列表',
34
+ 'compose.sent': '已发送',
35
+ 'compose.sentHint': '我们会在这里回复。对话会出现在「进行中」,我们回复后按钮上会显示提示。',
36
+ 'compose.done': '完成',
37
+ 'compose.send': '发送',
38
+ 'compose.sending': '发送中…',
39
+ 'compose.minChars': '至少输入 {count} 个字符',
40
+ 'thread.support': '客服支持',
41
+ 'thread.new': '新消息',
42
+ 'thread.resolvedAt': '已解决 · {date}',
43
+ 'thread.readOnly': '此对话已解决,仅供查看',
44
+ 'thread.placeholder': '写下回复…',
45
+ 'thread.sendA11y': '发送回复',
46
+ 'thread.sendingA11y': '发送中',
47
+ 'thread.translating': '翻译中…',
48
+ 'status.open': '进行中',
49
+ 'status.resolved': '已解决',
50
+ 'error.tryAgain': '重试',
51
+ 'error.rateLimited': '请求过于频繁 —— 请稍后再试',
52
+ 'error.offline': '你已离线 —— 请检查网络连接',
53
+ 'error.sendFailed': '发送失败 —— 请重试',
54
+ 'error.loadFailed': '无法加载你的对话',
55
+ 'error.unavailable': '客服支持暂时不可用',
56
+ 'error.loadRateLimited': '请求过于频繁 —— 请稍等片刻再试',
57
+ 'lang.title': '选择你的语言',
58
+ 'lang.subtitle': '用你习惯的语言书写 —— 我们会在你和客服团队之间翻译。',
59
+ 'lang.continue': '继续',
60
+ 'lang.change': '更改语言',
61
+ 'lang.saveFailed': '保存失败 —— 请重试',
62
+ 'time.justNow': '刚刚',
63
+ 'time.minutes': '{count} 分钟前',
64
+ 'time.hours': '{count} 小时前',
65
+ 'time.days': '{count} 天前',
66
+ 'time.weeks': '{count} 周前',
67
+ 'time.months': '{count} 个月前',
68
+ 'time.years': '{count} 年前',
69
+ 'time.today': '今天',
70
+ 'time.yesterday': '昨天'
71
+ };
72
+ //# sourceMappingURL=zh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["zh","exports"],"sourceRoot":"../../../../src","sources":["i18n/strings/zh.ts"],"mappings":";;;;;;AAEO,MAAMA,EAAe,GAAAC,OAAA,CAAAD,EAAA,GAAG;EAC7B,YAAY,EAAE,MAAM;EACpB,eAAe,EAAE,sBAAsB;EACvC,YAAY,EAAE,MAAM;EACpB,WAAW,EAAE,KAAK;EAClB,eAAe,EAAE,KAAK;EACtB,YAAY,EAAE,OAAO;EACrB,gBAAgB,EAAE,6BAA6B;EAC/C,iBAAiB,EAAE,OAAO;EAC1B,UAAU,EAAE,GAAG;EACf,iBAAiB,EAAE,WAAW;EAC9B,uBAAuB,EAAE,uBAAuB;EAChD,cAAc,EAAE,WAAW;EAC3B,eAAe,EAAE,IAAI;EAErB,eAAe,EAAE,IAAI;EACrB,sBAAsB,EAAE,MAAM;EAC9B,iBAAiB,EAAE,MAAM;EACzB,eAAe,EAAE,UAAU;EAC3B,sBAAsB,EAAE,UAAU;EAClC,iBAAiB,EAAE,WAAW;EAC9B,iBAAiB,EAAE,aAAa;EAChC,wBAAwB,EAAE,UAAU;EACpC,mBAAmB,EAAE,kBAAkB;EACvC,cAAc,EAAE,eAAe;EAC/B,qBAAqB,EAAE,aAAa;EACpC,gBAAgB,EAAE,sBAAsB;EAExC,cAAc,EAAE,QAAQ;EACxB,cAAc,EAAE,KAAK;EACrB,kBAAkB,EAChB,qCAAqC;EACvC,cAAc,EAAE,IAAI;EACpB,cAAc,EAAE,IAAI;EACpB,iBAAiB,EAAE,MAAM;EACzB,kBAAkB,EAAE,kBAAkB;EAEtC,gBAAgB,EAAE,MAAM;EACxB,YAAY,EAAE,KAAK;EACnB,mBAAmB,EAAE,cAAc;EACnC,iBAAiB,EAAE,aAAa;EAChC,oBAAoB,EAAE,OAAO;EAC7B,iBAAiB,EAAE,MAAM;EACzB,oBAAoB,EAAE,KAAK;EAC3B,oBAAoB,EAAE,MAAM;EAE5B,aAAa,EAAE,KAAK;EACpB,iBAAiB,EAAE,KAAK;EAExB,gBAAgB,EAAE,IAAI;EACtB,mBAAmB,EAAE,iBAAiB;EACtC,eAAe,EAAE,iBAAiB;EAClC,kBAAkB,EAAE,aAAa;EACjC,kBAAkB,EAAE,UAAU;EAC9B,mBAAmB,EAAE,WAAW;EAChC,uBAAuB,EAAE,mBAAmB;EAE5C,YAAY,EAAE,QAAQ;EACtB,eAAe,EAAE,8BAA8B;EAC/C,eAAe,EAAE,IAAI;EACrB,aAAa,EAAE,MAAM;EACrB,iBAAiB,EAAE,aAAa;EAEhC,cAAc,EAAE,IAAI;EACpB,cAAc,EAAE,aAAa;EAC7B,YAAY,EAAE,aAAa;EAC3B,WAAW,EAAE,YAAY;EACzB,YAAY,EAAE,YAAY;EAC1B,aAAa,EAAE,aAAa;EAC5B,YAAY,EAAE,YAAY;EAC1B,YAAY,EAAE,IAAI;EAClB,gBAAgB,EAAE;AACpB,CAAC","ignoreList":[]}
@@ -3,12 +3,30 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "DEFAULT_LANGUAGE", {
7
+ enumerable: true,
8
+ get: function () {
9
+ return _languages.DEFAULT_LANGUAGE;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "LANGUAGE_LABELS", {
13
+ enumerable: true,
14
+ get: function () {
15
+ return _languages.LANGUAGE_LABELS;
16
+ }
17
+ });
6
18
  Object.defineProperty(exports, "QUERY_TYPE_LABEL", {
7
19
  enumerable: true,
8
20
  get: function () {
9
21
  return _types.QUERY_TYPE_LABEL;
10
22
  }
11
23
  });
24
+ Object.defineProperty(exports, "SUPPORTED_LANGUAGES", {
25
+ enumerable: true,
26
+ get: function () {
27
+ return _languages.SUPPORTED_LANGUAGES;
28
+ }
29
+ });
12
30
  Object.defineProperty(exports, "SupportApiError", {
13
31
  enumerable: true,
14
32
  get: function () {
@@ -33,12 +51,24 @@ Object.defineProperty(exports, "USER_MESSAGE_MIN", {
33
51
  return _types.USER_MESSAGE_MIN;
34
52
  }
35
53
  });
54
+ Object.defineProperty(exports, "deviceLanguage", {
55
+ enumerable: true,
56
+ get: function () {
57
+ return _languages.deviceLanguage;
58
+ }
59
+ });
36
60
  Object.defineProperty(exports, "isPushAvailable", {
37
61
  enumerable: true,
38
62
  get: function () {
39
63
  return _push.isPushAvailable;
40
64
  }
41
65
  });
66
+ Object.defineProperty(exports, "isSupportedLanguage", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _languages.isSupportedLanguage;
70
+ }
71
+ });
42
72
  Object.defineProperty(exports, "resolveTheme", {
43
73
  enumerable: true,
44
74
  get: function () {
@@ -61,5 +91,6 @@ var _SupportButton = require("./components/SupportButton");
61
91
  var _theme = require("./theme");
62
92
  var _api = require("./api");
63
93
  var _push = require("./push");
94
+ var _languages = require("./i18n/languages");
64
95
  var _types = require("./types");
65
96
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_SupportButton","require","_theme","_api","_push","_types"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAMA,IAAAE,IAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAcA,IAAAI,MAAA,GAAAJ,OAAA","ignoreList":[]}
1
+ {"version":3,"names":["_SupportButton","require","_theme","_api","_push","_languages","_types"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAMA,IAAAE,IAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAqBA,IAAAK,MAAA,GAAAL,OAAA","ignoreList":[]}
@@ -11,6 +11,17 @@ exports.USER_MESSAGE_MIN = exports.USER_MESSAGE_MAX = exports.QUERY_TYPE_LABEL =
11
11
  * minimal — bare mark, no fill or border. Sits in a nav bar.
12
12
  */
13
13
 
14
+ /**
15
+ * Note the absence of any admin identity: end users see one support team,
16
+ * not the people staffing it, so the names never leave the server. The
17
+ * dashboard still shows who wrote and who resolved what.
18
+ */
19
+
20
+ /**
21
+ * English labels, kept for host apps that render their own entry points.
22
+ * Inside the sheet the labels come from the string table instead, so they
23
+ * follow the user's language.
24
+ */
14
25
  const QUERY_TYPE_LABEL = exports.QUERY_TYPE_LABEL = {
15
26
  feedback: 'Feedback',
16
27
  feature_request: 'Feature request',
@@ -1 +1 @@
1
- {"version":3,"names":["QUERY_TYPE_LABEL","exports","feedback","feature_request","bug_report","USER_MESSAGE_MIN","USER_MESSAGE_MAX"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AAQA;AACA;AACA;AACA;AACA;AACA;;AA4FO,MAAMA,gBAA2C,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EACzDE,QAAQ,EAAE,UAAU;EACpBC,eAAe,EAAE,iBAAiB;EAClCC,UAAU,EAAE;AACd,CAAC;AAEM,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG,EAAE;AAC3B,MAAMC,gBAAgB,GAAAL,OAAA,CAAAK,gBAAA,GAAG,GAAG","ignoreList":[]}
1
+ {"version":3,"names":["QUERY_TYPE_LABEL","exports","feedback","feature_request","bug_report","USER_MESSAGE_MIN","USER_MESSAGE_MAX"],"sourceRoot":"../../src","sources":["types.ts"],"mappings":";;;;;;AASA;AACA;AACA;AACA;AACA;AACA;;AAwFA;AACA;AACA;AACA;AACA;;AAwBA;AACA;AACA;AACA;AACA;AACO,MAAMA,gBAA2C,GAAAC,OAAA,CAAAD,gBAAA,GAAG;EACzDE,QAAQ,EAAE,UAAU;EACpBC,eAAe,EAAE,iBAAiB;EAClCC,UAAU,EAAE;AACd,CAAC;AAEM,MAAMC,gBAAgB,GAAAJ,OAAA,CAAAI,gBAAA,GAAG,EAAE;AAC3B,MAAMC,gBAAgB,GAAAL,OAAA,CAAAK,gBAAA,GAAG,GAAG","ignoreList":[]}
@@ -44,19 +44,23 @@ const MARK_READ_BACKOFF_MS = 1_500;
44
44
  * an integration mistake — the end user retrying forever won't fix a key
45
45
  * that doesn't match the app — so the real cause is logged for whoever is
46
46
  * running the build instead of hidden behind "couldn't load".
47
+ *
48
+ * Returns a key rather than a message: the hook has no business knowing what
49
+ * language the sheet is in, and resolving it here would make every callback
50
+ * depend on the translator.
47
51
  */
48
- function loadErrorMessage(e) {
52
+ function loadErrorKey(e) {
49
53
  if (e instanceof _api.SupportApiError) {
50
- if (e.offline) return "You're offline — check your connection";
54
+ if (e.offline) return 'error.offline';
51
55
  if (e.status === 401 || e.status === 403) {
52
56
  if (__DEV__) {
53
57
  console.error('SupportButton: the support API rejected this app (401). Check that ' + '`apiKey` is the key shown when the app was registered and that ' + '`appName` matches that app exactly.');
54
58
  }
55
- return 'Support is unavailable right now';
59
+ return 'error.unavailable';
56
60
  }
57
- if (e.status === 429) return 'Too many requests — try again in a bit';
61
+ if (e.status === 429) return 'error.loadRateLimited';
58
62
  }
59
- return "Couldn't load your conversations";
63
+ return 'error.loadFailed';
60
64
  }
61
65
  function useSupportThreads({
62
66
  config,
@@ -70,7 +74,9 @@ function useSupportThreads({
70
74
  const [totalUnread, setTotalUnread] = (0, _react.useState)(0);
71
75
  const [loading, setLoading] = (0, _react.useState)(false);
72
76
  const [refreshing, setRefreshing] = (0, _react.useState)(false);
73
- const [error, setError] = (0, _react.useState)(null);
77
+ const [errorKey, setErrorKey] = (0, _react.useState)(null);
78
+ const [serverLanguage, setServerLanguage] = (0, _react.useState)(null);
79
+ const [languageLoaded, setLanguageLoaded] = (0, _react.useState)(false);
74
80
  const mounted = (0, _react.useRef)(true);
75
81
  /** Last server payload, before local read reconciliation. */
76
82
  const rawThreads = (0, _react.useRef)(null);
@@ -192,7 +198,9 @@ function useSupportThreads({
192
198
  appliedSeq.current = seq;
193
199
  rawThreads.current = data.threads;
194
200
  watermarks.current = (0, _unread.pruneWatermarks)(watermarks.current, data.threads);
195
- setError(null);
201
+ setErrorKey(null);
202
+ setServerLanguage(data.language);
203
+ setLanguageLoaded(true);
196
204
  publish();
197
205
 
198
206
  // Replies that arrived while the user is sitting in the thread are
@@ -203,7 +211,7 @@ function useSupportThreads({
203
211
  } catch (e) {
204
212
  if (!mounted.current) return;
205
213
  // A failed background poll must not blow away cached threads.
206
- if (rawThreads.current === null) setError(loadErrorMessage(e));
214
+ if (rawThreads.current === null) setErrorKey(loadErrorKey(e));
207
215
  } finally {
208
216
  if (mounted.current) {
209
217
  if (spinner) setRefreshing(false);
@@ -278,7 +286,9 @@ function useSupportThreads({
278
286
  totalUnread,
279
287
  loading,
280
288
  refreshing,
281
- error,
289
+ errorKey,
290
+ serverLanguage,
291
+ languageLoaded,
282
292
  refresh,
283
293
  reload
284
294
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_api","_unread","THREAD_POLL_MS","SHEET_POLL_MS","IDLE_POLL_MS","exports","MIN_POLL_MS","MARK_READ_MAX_ATTEMPTS","MARK_READ_BACKOFF_MS","loadErrorMessage","e","SupportApiError","offline","status","__DEV__","console","error","useSupportThreads","config","revenuecatId","enabled","sheetOpen","activeThreadId","idlePollMs","threads","setThreads","useState","totalUnread","setTotalUnread","loading","setLoading","refreshing","setRefreshing","setError","mounted","useRef","rawThreads","watermarks","Map","reads","requestSeq","appliedSeq","readEpoch","activeThreadIdRef","useEffect","current","timers","attempt","values","timer","clearTimeout","clear","publish","useCallback","raw","reconciled","reconcileThreads","sumUnread","sendRead","threadId","get","inFlight","covers","target","markRead","queryId","then","attempts","delete","catch","setTimeout","flushReads","markThreadRead","thread","find","t","id","latest","latestAdminMessageAt","set","fetchThreads","mode","seq","blank","spinner","skeleton","data","getThreads","pruneWatermarks","active","fetchCount","epoch","getUnreadCount","total_unread","idle","intervalMs","tick","size","setInterval","Math","max","appStateSub","AppState","addEventListener","state","clearInterval","remove","refresh","reload"],"sourceRoot":"../../src","sources":["useSupportThreads.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_api","_unread","THREAD_POLL_MS","SHEET_POLL_MS","IDLE_POLL_MS","exports","MIN_POLL_MS","MARK_READ_MAX_ATTEMPTS","MARK_READ_BACKOFF_MS","loadErrorKey","e","SupportApiError","offline","status","__DEV__","console","error","useSupportThreads","config","revenuecatId","enabled","sheetOpen","activeThreadId","idlePollMs","threads","setThreads","useState","totalUnread","setTotalUnread","loading","setLoading","refreshing","setRefreshing","errorKey","setErrorKey","serverLanguage","setServerLanguage","languageLoaded","setLanguageLoaded","mounted","useRef","rawThreads","watermarks","Map","reads","requestSeq","appliedSeq","readEpoch","activeThreadIdRef","useEffect","current","timers","attempt","values","timer","clearTimeout","clear","publish","useCallback","raw","reconciled","reconcileThreads","sumUnread","sendRead","threadId","get","inFlight","covers","target","markRead","queryId","then","attempts","delete","catch","setTimeout","flushReads","markThreadRead","thread","find","t","id","latest","latestAdminMessageAt","set","fetchThreads","mode","seq","blank","spinner","skeleton","data","getThreads","pruneWatermarks","language","active","fetchCount","epoch","getUnreadCount","total_unread","idle","intervalMs","tick","size","setInterval","Math","max","appStateSub","AppState","addEventListener","state","clearInterval","remove","refresh","reload"],"sourceRoot":"../../src","sources":["useSupportThreads.ts"],"mappings":"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","ignoreList":[]}
@@ -9,34 +9,49 @@ exports.formatTime = formatTime;
9
9
  exports.isSameDay = isSameDay;
10
10
  exports.relativeTime = relativeTime;
11
11
  exports.validateProps = validateProps;
12
+ // Dates and times follow the language the user picked, not the device's:
13
+ // a sheet that says "Traduction…" above "2 days ago" reads as broken.
14
+
12
15
  /** "2h ago" relative time — mirrors the web dashboard's formatting. */
13
- function relativeTime(iso) {
16
+ function relativeTime(iso, strings) {
14
17
  const then = new Date(iso).getTime();
15
18
  const seconds = Math.max(0, Math.floor((Date.now() - then) / 1000));
16
- if (seconds < 60) return 'just now';
19
+ if (seconds < 60) return strings.t('time.justNow');
17
20
  const minutes = Math.floor(seconds / 60);
18
- if (minutes < 60) return `${minutes}m ago`;
21
+ if (minutes < 60) return strings.t('time.minutes', {
22
+ count: minutes
23
+ });
19
24
  const hours = Math.floor(minutes / 60);
20
- if (hours < 24) return `${hours}h ago`;
25
+ if (hours < 24) return strings.t('time.hours', {
26
+ count: hours
27
+ });
21
28
  const days = Math.floor(hours / 24);
22
- if (days < 7) return `${days}d ago`;
29
+ if (days < 7) return strings.t('time.days', {
30
+ count: days
31
+ });
23
32
  const weeks = Math.floor(days / 7);
24
- if (weeks < 5) return `${weeks}w ago`;
33
+ if (weeks < 5) return strings.t('time.weeks', {
34
+ count: weeks
35
+ });
25
36
  const months = Math.floor(days / 30);
26
- if (months < 12) return `${months}mo ago`;
27
- return `${Math.floor(days / 365)}y ago`;
37
+ if (months < 12) return strings.t('time.months', {
38
+ count: months
39
+ });
40
+ return strings.t('time.years', {
41
+ count: Math.floor(days / 365)
42
+ });
28
43
  }
29
- function formatDate(iso) {
30
- return new Date(iso).toLocaleDateString(undefined, {
44
+ function formatDate(iso, strings) {
45
+ return new Date(iso).toLocaleDateString(strings.locale, {
31
46
  year: 'numeric',
32
47
  month: 'short',
33
48
  day: 'numeric'
34
49
  });
35
50
  }
36
51
 
37
- /** "14:32" in the device's locale — shown under a group of messages. */
38
- function formatTime(iso) {
39
- return new Date(iso).toLocaleTimeString(undefined, {
52
+ /** "14:32" in the user's locale — shown under a group of messages. */
53
+ function formatTime(iso, strings) {
54
+ return new Date(iso).toLocaleTimeString(strings.locale, {
40
55
  hour: 'numeric',
41
56
  minute: '2-digit'
42
57
  });
@@ -48,13 +63,13 @@ function isSameDay(a, b) {
48
63
  }
49
64
 
50
65
  /** Date separator label: Today / Yesterday / "Mon, 5 Jan". */
51
- function dayLabel(iso) {
66
+ function dayLabel(iso, strings) {
52
67
  const now = new Date();
53
- if (isSameDay(iso, now.toISOString())) return 'Today';
68
+ if (isSameDay(iso, now.toISOString())) return strings.t('time.today');
54
69
  const yesterday = new Date(now.getTime() - 86_400_000);
55
- if (isSameDay(iso, yesterday.toISOString())) return 'Yesterday';
70
+ if (isSameDay(iso, yesterday.toISOString())) return strings.t('time.yesterday');
56
71
  const date = new Date(iso);
57
- return date.toLocaleDateString(undefined, {
72
+ return date.toLocaleDateString(strings.locale, {
58
73
  weekday: 'short',
59
74
  month: 'short',
60
75
  day: 'numeric',