@bootdesk/js-web-adapter-react 0.1.0 → 0.3.4

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.
package/dist/index.cjs CHANGED
@@ -72,7 +72,7 @@ __export(index_exports, {
72
72
  module.exports = __toCommonJS(index_exports);
73
73
 
74
74
  // src/components/ChatWidget.tsx
75
- var import_react13 = require("react");
75
+ var import_react14 = require("react");
76
76
 
77
77
  // src/hooks/useChatClient.ts
78
78
  var import_react = require("react");
@@ -410,6 +410,8 @@ function usePushNotifications(options) {
410
410
  onSubscribe: options.onSubscribe,
411
411
  onUnsubscribe: options.onUnsubscribe,
412
412
  serviceWorkerUrl: options.serviceWorkerUrl,
413
+ serviceWorkerScope: options.serviceWorkerScope,
414
+ serviceWorkerType: options.serviceWorkerType,
413
415
  notificationOptions: options.notificationOptions
414
416
  });
415
417
  pushManagerRef.current = pushManager;
@@ -466,6 +468,7 @@ function useAttachmentUpload(uploadConfig) {
466
468
  }, []);
467
469
  const uploadFile = (0, import_react6.useCallback)(
468
470
  async (attachment) => {
471
+ if (!uploadConfig) return;
469
472
  const controller = new AbortController();
470
473
  abortControllers.current.set(attachment.id, controller);
471
474
  try {
@@ -654,6 +657,7 @@ function getFallbackChain(locale) {
654
657
 
655
658
  // src/i18n/locales/en.json
656
659
  var en_default = {
660
+ direction: "ltr",
657
661
  chatWidget: {
658
662
  title: "Chat",
659
663
  placeholder: "Type a message...",
@@ -695,6 +699,20 @@ var en_default = {
695
699
  openChat: "Open chat",
696
700
  closeChat: "Close chat"
697
701
  },
702
+ push: {
703
+ title: "Notifications",
704
+ description: "Receive messages even when chat is closed",
705
+ enable: "Enable Notifications",
706
+ disable: "Disable Notifications",
707
+ denied: "Notifications blocked",
708
+ unsupported: "Notifications not supported",
709
+ subscribing: "Subscribing...",
710
+ notifications: "Notifications"
711
+ },
712
+ notification: {
713
+ openChat: "Open Chat",
714
+ dismiss: "Dismiss"
715
+ },
698
716
  common: {
699
717
  loading: "Loading...",
700
718
  error: "Error",
@@ -706,6 +724,7 @@ var en_default = {
706
724
 
707
725
  // src/i18n/locales/en-US.json
708
726
  var en_US_default = {
727
+ direction: "ltr",
709
728
  chatWidget: {
710
729
  title: "Chat"
711
730
  }
@@ -713,6 +732,7 @@ var en_US_default = {
713
732
 
714
733
  // src/i18n/locales/en-GB.json
715
734
  var en_GB_default = {
735
+ direction: "ltr",
716
736
  chatWidget: {
717
737
  title: "Chat"
718
738
  },
@@ -723,6 +743,7 @@ var en_GB_default = {
723
743
 
724
744
  // src/i18n/locales/pt.json
725
745
  var pt_default = {
746
+ direction: "ltr",
726
747
  chatWidget: {
727
748
  title: "Chat",
728
749
  placeholder: "Digite uma mensagem...",
@@ -755,12 +776,29 @@ var pt_default = {
755
776
  header: {
756
777
  enterFullscreen: "Tela cheia",
757
778
  exitFullscreen: "Sair da tela cheia",
758
- closeChat: "Fechar chat"
779
+ closeChat: "Fechar chat",
780
+ lightMode: "Modo claro",
781
+ darkMode: "Modo escuro",
782
+ autoMode: "Tema do sistema"
759
783
  },
760
784
  floatingButton: {
761
785
  openChat: "Abrir chat",
762
786
  closeChat: "Fechar chat"
763
787
  },
788
+ push: {
789
+ title: "Notifica\xE7\xF5es",
790
+ description: "Receba mensagens mesmo com o chat fechado",
791
+ enable: "Habilitar notifica\xE7\xF5es",
792
+ disable: "Desabilitar notifica\xE7\xF5es",
793
+ denied: "Notifica\xE7\xF5es bloqueadas",
794
+ unsupported: "Notifica\xE7\xF5es n\xE3o suportadas",
795
+ subscribing: "Inscrevendo...",
796
+ notifications: "Notifica\xE7\xF5es"
797
+ },
798
+ notification: {
799
+ openChat: "Abrir chat",
800
+ dismiss: "Dispensar"
801
+ },
764
802
  common: {
765
803
  loading: "Carregando...",
766
804
  error: "Erro",
@@ -772,6 +810,7 @@ var pt_default = {
772
810
 
773
811
  // src/i18n/locales/pt-BR.json
774
812
  var pt_BR_default = {
813
+ direction: "ltr",
775
814
  chatWidget: {
776
815
  placeholder: "Digite uma mensagem..."
777
816
  },
@@ -797,6 +836,7 @@ var pt_BR_default = {
797
836
 
798
837
  // src/i18n/locales/pt-PT.json
799
838
  var pt_PT_default = {
839
+ direction: "ltr",
800
840
  chatWidget: {
801
841
  placeholder: "Escreva uma mensagem..."
802
842
  },
@@ -822,50 +862,1810 @@ var pt_PT_default = {
822
862
 
823
863
  // src/i18n/locales/es.json
824
864
  var es_default = {
865
+ direction: "ltr",
825
866
  chatWidget: {
826
867
  title: "Chat",
827
868
  placeholder: "Escribe un mensaje...",
828
869
  openChat: "Abrir chat",
829
870
  closeChat: "Cerrar chat",
830
871
  connectionStatus: {
831
- connected: "Conectado",
832
- disconnected: "Desconectado"
872
+ connected: "Conectado",
873
+ disconnected: "Desconectado"
874
+ }
875
+ },
876
+ inputArea: {
877
+ send: "Enviar",
878
+ uploading: "Subiendo...",
879
+ dropzone: {
880
+ dropFiles: "Suelta archivos aqu\xED",
881
+ dropOrClick: "Suelta o haz clic para adjuntar"
882
+ }
883
+ },
884
+ typingIndicator: {
885
+ typing: "escribiendo",
886
+ isTyping: "est\xE1 escribiendo..."
887
+ },
888
+ messageList: {
889
+ emptyState: "No hay mensajes todav\xEDa. \xA1Inicia la conversaci\xF3n!"
890
+ },
891
+ attachmentList: {
892
+ remove: "Eliminar",
893
+ uploadFailed: "Error al subir"
894
+ },
895
+ header: {
896
+ enterFullscreen: "Pantalla completa",
897
+ exitFullscreen: "Salir de pantalla completa",
898
+ closeChat: "Cerrar chat",
899
+ lightMode: "Modo claro",
900
+ darkMode: "Modo oscuro",
901
+ autoMode: "Tema del sistema"
902
+ },
903
+ floatingButton: {
904
+ openChat: "Abrir chat",
905
+ closeChat: "Cerrar chat"
906
+ },
907
+ push: {
908
+ title: "Notificaciones",
909
+ description: "Recibe mensajes incluso con el chat cerrado",
910
+ enable: "Habilitar notificaciones",
911
+ disable: "Deshabilitar notificaciones",
912
+ denied: "Notificaciones bloqueadas",
913
+ unsupported: "Notificaciones no compatibles",
914
+ subscribing: "Suscribiendo...",
915
+ notifications: "Notificaciones"
916
+ },
917
+ notification: {
918
+ openChat: "Abrir chat",
919
+ dismiss: "Descartar"
920
+ },
921
+ common: {
922
+ loading: "Cargando...",
923
+ error: "Error",
924
+ retry: "Reintentar",
925
+ cancel: "Cancelar",
926
+ download: "Descargar"
927
+ }
928
+ };
929
+
930
+ // src/i18n/locales/da.json
931
+ var da_default = {
932
+ direction: "ltr",
933
+ chatWidget: {
934
+ title: "Chat",
935
+ placeholder: "Skriv en besked...",
936
+ openChat: "\xC5bn chat",
937
+ closeChat: "Luk chat",
938
+ connectionStatus: {
939
+ connected: "Forbundet",
940
+ disconnected: "Afbrudt"
941
+ }
942
+ },
943
+ inputArea: {
944
+ send: "Send",
945
+ uploading: "Uploader...",
946
+ dropzone: {
947
+ dropFiles: "Slip filer her",
948
+ dropOrClick: "Slip eller klik for at vedh\xE6fte"
949
+ }
950
+ },
951
+ typingIndicator: {
952
+ typing: "skriver",
953
+ isTyping: "skriver..."
954
+ },
955
+ messageList: {
956
+ emptyState: "Ingen beskeder endnu. Start samtalen!"
957
+ },
958
+ attachmentList: {
959
+ remove: "Fjern",
960
+ uploadFailed: "Upload fejlede"
961
+ },
962
+ header: {
963
+ enterFullscreen: "Fuld sk\xE6rm",
964
+ exitFullscreen: "Afslut fuld sk\xE6rm",
965
+ closeChat: "Luk chat",
966
+ lightMode: "Lys tilstand",
967
+ darkMode: "M\xF8rk tilstand",
968
+ autoMode: "Systemtema"
969
+ },
970
+ floatingButton: {
971
+ openChat: "\xC5bn chat",
972
+ closeChat: "Luk chat"
973
+ },
974
+ push: {
975
+ title: "Notifikationer",
976
+ description: "Modtag beskeder, selv n\xE5r chatten er lukket",
977
+ enable: "Aktiver notifikationer",
978
+ disable: "Deaktiver notifikationer",
979
+ denied: "Notifikationer blokeret",
980
+ unsupported: "Notifikationer underst\xF8ttes ikke",
981
+ subscribing: "Abonnerer...",
982
+ notifications: "Notifikationer"
983
+ },
984
+ notification: {
985
+ openChat: "\xC5bn Chat",
986
+ dismiss: "Afvis"
987
+ },
988
+ common: {
989
+ loading: "Indl\xE6ser...",
990
+ error: "Fejl",
991
+ retry: "Pr\xF8v igen",
992
+ cancel: "Annuller",
993
+ download: "Download"
994
+ }
995
+ };
996
+
997
+ // src/i18n/locales/sv.json
998
+ var sv_default = {
999
+ direction: "ltr",
1000
+ chatWidget: {
1001
+ title: "Chatt",
1002
+ placeholder: "Skriv ett meddelande...",
1003
+ openChat: "\xD6ppna chatt",
1004
+ closeChat: "St\xE4ng chatt",
1005
+ connectionStatus: {
1006
+ connected: "Ansluten",
1007
+ disconnected: "Fr\xE5nkopplad"
1008
+ }
1009
+ },
1010
+ inputArea: {
1011
+ send: "Skicka",
1012
+ uploading: "Laddar upp...",
1013
+ dropzone: {
1014
+ dropFiles: "Sl\xE4pp filer h\xE4r",
1015
+ dropOrClick: "Sl\xE4pp eller klicka f\xF6r att bifoga"
1016
+ }
1017
+ },
1018
+ typingIndicator: {
1019
+ typing: "skriver",
1020
+ isTyping: "skriver..."
1021
+ },
1022
+ messageList: {
1023
+ emptyState: "Inga meddelanden \xE4n. Starta konversationen!"
1024
+ },
1025
+ attachmentList: {
1026
+ remove: "Ta bort",
1027
+ uploadFailed: "Uppladdning misslyckades"
1028
+ },
1029
+ header: {
1030
+ enterFullscreen: "Fullsk\xE4rm",
1031
+ exitFullscreen: "Avsluta fullsk\xE4rm",
1032
+ closeChat: "St\xE4ng chatt",
1033
+ lightMode: "Ljust l\xE4ge",
1034
+ darkMode: "M\xF6rkt l\xE4ge",
1035
+ autoMode: "Systemtema"
1036
+ },
1037
+ floatingButton: {
1038
+ openChat: "\xD6ppna chatt",
1039
+ closeChat: "St\xE4ng chatt"
1040
+ },
1041
+ push: {
1042
+ title: "Notifikationer",
1043
+ description: "Ta emot meddelanden \xE4ven n\xE4r chatten \xE4r st\xE4ngd",
1044
+ enable: "Aktivera notifikationer",
1045
+ disable: "Inaktivera notifikationer",
1046
+ denied: "Notifikationer blockerade",
1047
+ unsupported: "Notifikationer st\xF6ds inte",
1048
+ subscribing: "Prenumererar...",
1049
+ notifications: "Notifikationer"
1050
+ },
1051
+ notification: {
1052
+ openChat: "\xD6ppna Chatt",
1053
+ dismiss: "Avf\xE4rda"
1054
+ },
1055
+ common: {
1056
+ loading: "Laddar...",
1057
+ error: "Fel",
1058
+ retry: "F\xF6rs\xF6k igen",
1059
+ cancel: "Avbryt",
1060
+ download: "Ladda ner"
1061
+ }
1062
+ };
1063
+
1064
+ // src/i18n/locales/nb.json
1065
+ var nb_default = {
1066
+ direction: "ltr",
1067
+ chatWidget: {
1068
+ title: "Chat",
1069
+ placeholder: "Skriv en melding...",
1070
+ openChat: "\xC5pne chat",
1071
+ closeChat: "Lukk chat",
1072
+ connectionStatus: {
1073
+ connected: "Tilkoblet",
1074
+ disconnected: "Frakoblet"
1075
+ }
1076
+ },
1077
+ inputArea: {
1078
+ send: "Send",
1079
+ uploading: "Laster opp...",
1080
+ dropzone: {
1081
+ dropFiles: "Slipp filer her",
1082
+ dropOrClick: "Slipp eller klikk for \xE5 legge ved"
1083
+ }
1084
+ },
1085
+ typingIndicator: {
1086
+ typing: "skriver",
1087
+ isTyping: "skriver..."
1088
+ },
1089
+ messageList: {
1090
+ emptyState: "Ingen meldinger enn\xE5. Start samtalen!"
1091
+ },
1092
+ attachmentList: {
1093
+ remove: "Fjern",
1094
+ uploadFailed: "Opplasting mislyktes"
1095
+ },
1096
+ header: {
1097
+ enterFullscreen: "Fullskjerm",
1098
+ exitFullscreen: "Avslutt fullskjerm",
1099
+ closeChat: "Lukk chat",
1100
+ lightMode: "Lys modus",
1101
+ darkMode: "M\xF8rk modus",
1102
+ autoMode: "Systemtema"
1103
+ },
1104
+ floatingButton: {
1105
+ openChat: "\xC5pne chat",
1106
+ closeChat: "Lukk chat"
1107
+ },
1108
+ push: {
1109
+ title: "Varsler",
1110
+ description: "Motta meldinger selv n\xE5r chatten er lukket",
1111
+ enable: "Aktiver varsler",
1112
+ disable: "Deaktiver varsler",
1113
+ denied: "Varsler blokkert",
1114
+ unsupported: "Varsler st\xF8ttes ikke",
1115
+ subscribing: "Abonnerer...",
1116
+ notifications: "Varsler"
1117
+ },
1118
+ notification: {
1119
+ openChat: "\xC5pne Chat",
1120
+ dismiss: "Avvis"
1121
+ },
1122
+ common: {
1123
+ loading: "Laster...",
1124
+ error: "Feil",
1125
+ retry: "Pr\xF8v igjen",
1126
+ cancel: "Avbryt",
1127
+ download: "Last ned"
1128
+ }
1129
+ };
1130
+
1131
+ // src/i18n/locales/fi.json
1132
+ var fi_default = {
1133
+ direction: "ltr",
1134
+ chatWidget: {
1135
+ title: "Chat",
1136
+ placeholder: "Kirjoita viesti...",
1137
+ openChat: "Avaa chat",
1138
+ closeChat: "Sulje chat",
1139
+ connectionStatus: {
1140
+ connected: "Yhdistetty",
1141
+ disconnected: "Katkaistu"
1142
+ }
1143
+ },
1144
+ inputArea: {
1145
+ send: "L\xE4het\xE4",
1146
+ uploading: "Ladataan...",
1147
+ dropzone: {
1148
+ dropFiles: "Pudota tiedostot t\xE4h\xE4n",
1149
+ dropOrClick: "Pudota tai klikkaa liitt\xE4\xE4ksesi"
1150
+ }
1151
+ },
1152
+ typingIndicator: {
1153
+ typing: "kirjoittaa",
1154
+ isTyping: "kirjoittaa..."
1155
+ },
1156
+ messageList: {
1157
+ emptyState: "Ei viestej\xE4 viel\xE4. Aloita keskustelu!"
1158
+ },
1159
+ attachmentList: {
1160
+ remove: "Poista",
1161
+ uploadFailed: "Lataus ep\xE4onnistui"
1162
+ },
1163
+ header: {
1164
+ enterFullscreen: "Koko n\xE4ytt\xF6",
1165
+ exitFullscreen: "Poistu koko n\xE4yt\xF6st\xE4",
1166
+ closeChat: "Sulje chat",
1167
+ lightMode: "Vaalea tila",
1168
+ darkMode: "Tumma tila",
1169
+ autoMode: "J\xE4rjestelm\xE4n teema"
1170
+ },
1171
+ floatingButton: {
1172
+ openChat: "Avaa chat",
1173
+ closeChat: "Sulje chat"
1174
+ },
1175
+ push: {
1176
+ title: "Ilmoitukset",
1177
+ description: "Vastaanota viestej\xE4, vaikka chat olisi suljettu",
1178
+ enable: "Ota ilmoitukset k\xE4ytt\xF6\xF6n",
1179
+ disable: "Poista ilmoitukset k\xE4yt\xF6st\xE4",
1180
+ denied: "Ilmoitukset estetty",
1181
+ unsupported: "Ilmoituksia ei tueta",
1182
+ subscribing: "Tilataan...",
1183
+ notifications: "Ilmoitukset"
1184
+ },
1185
+ notification: {
1186
+ openChat: "Avaa Chat",
1187
+ dismiss: "Hylk\xE4\xE4"
1188
+ },
1189
+ common: {
1190
+ loading: "Ladataan...",
1191
+ error: "Virhe",
1192
+ retry: "Yrit\xE4 uudelleen",
1193
+ cancel: "Peruuta",
1194
+ download: "Lataa"
1195
+ }
1196
+ };
1197
+
1198
+ // src/i18n/locales/fr.json
1199
+ var fr_default = {
1200
+ direction: "ltr",
1201
+ chatWidget: {
1202
+ title: "Chat",
1203
+ placeholder: "\xC9crivez un message...",
1204
+ openChat: "Ouvrir le chat",
1205
+ closeChat: "Fermer le chat",
1206
+ connectionStatus: {
1207
+ connected: "Connect\xE9",
1208
+ disconnected: "D\xE9connect\xE9"
1209
+ }
1210
+ },
1211
+ inputArea: {
1212
+ send: "Envoyer",
1213
+ uploading: "T\xE9l\xE9chargement...",
1214
+ dropzone: {
1215
+ dropFiles: "D\xE9posez les fichiers ici",
1216
+ dropOrClick: "D\xE9posez ou cliquez pour joindre"
1217
+ }
1218
+ },
1219
+ typingIndicator: {
1220
+ typing: "tape",
1221
+ isTyping: "tape..."
1222
+ },
1223
+ messageList: {
1224
+ emptyState: "Aucun message pour l'instant. Lancez la conversation !"
1225
+ },
1226
+ attachmentList: {
1227
+ remove: "Supprimer",
1228
+ uploadFailed: "\xC9chec du t\xE9l\xE9chargement"
1229
+ },
1230
+ header: {
1231
+ enterFullscreen: "Plein \xE9cran",
1232
+ exitFullscreen: "Quitter le plein \xE9cran",
1233
+ closeChat: "Fermer le chat",
1234
+ lightMode: "Mode clair",
1235
+ darkMode: "Mode sombre",
1236
+ autoMode: "Th\xE8me syst\xE8me"
1237
+ },
1238
+ floatingButton: {
1239
+ openChat: "Ouvrir le chat",
1240
+ closeChat: "Fermer le chat"
1241
+ },
1242
+ push: {
1243
+ title: "Notifications",
1244
+ description: "Recevez des messages m\xEAme lorsque le chat est ferm\xE9",
1245
+ enable: "Activer les notifications",
1246
+ disable: "D\xE9sactiver les notifications",
1247
+ denied: "Notifications bloqu\xE9es",
1248
+ unsupported: "Notifications non prises en charge",
1249
+ subscribing: "Abonnement...",
1250
+ notifications: "Notifications"
1251
+ },
1252
+ notification: {
1253
+ openChat: "Ouvrir le Chat",
1254
+ dismiss: "Ignorer"
1255
+ },
1256
+ common: {
1257
+ loading: "Chargement...",
1258
+ error: "Erreur",
1259
+ retry: "R\xE9essayer",
1260
+ cancel: "Annuler",
1261
+ download: "T\xE9l\xE9charger"
1262
+ }
1263
+ };
1264
+
1265
+ // src/i18n/locales/de.json
1266
+ var de_default = {
1267
+ direction: "ltr",
1268
+ chatWidget: {
1269
+ title: "Chat",
1270
+ placeholder: "Nachricht schreiben...",
1271
+ openChat: "Chat \xF6ffnen",
1272
+ closeChat: "Chat schlie\xDFen",
1273
+ connectionStatus: {
1274
+ connected: "Verbunden",
1275
+ disconnected: "Getrennt"
1276
+ }
1277
+ },
1278
+ inputArea: {
1279
+ send: "Senden",
1280
+ uploading: "Hochladen...",
1281
+ dropzone: {
1282
+ dropFiles: "Dateien hier ablegen",
1283
+ dropOrClick: "Ablegen oder klicken zum Anh\xE4ngen"
1284
+ }
1285
+ },
1286
+ typingIndicator: {
1287
+ typing: "schreibt",
1288
+ isTyping: "schreibt..."
1289
+ },
1290
+ messageList: {
1291
+ emptyState: "Noch keine Nachrichten. Starten Sie die Unterhaltung!"
1292
+ },
1293
+ attachmentList: {
1294
+ remove: "Entfernen",
1295
+ uploadFailed: "Hochladen fehlgeschlagen"
1296
+ },
1297
+ header: {
1298
+ enterFullscreen: "Vollbild",
1299
+ exitFullscreen: "Vollbild beenden",
1300
+ closeChat: "Chat schlie\xDFen",
1301
+ lightMode: "Heller Modus",
1302
+ darkMode: "Dunkler Modus",
1303
+ autoMode: "System-Design"
1304
+ },
1305
+ floatingButton: {
1306
+ openChat: "Chat \xF6ffnen",
1307
+ closeChat: "Chat schlie\xDFen"
1308
+ },
1309
+ push: {
1310
+ title: "Benachrichtigungen",
1311
+ description: "Nachrichten auch bei geschlossenem Chat erhalten",
1312
+ enable: "Benachrichtigungen aktivieren",
1313
+ disable: "Benachrichtigungen deaktivieren",
1314
+ denied: "Benachrichtigungen blockiert",
1315
+ unsupported: "Benachrichtigungen nicht unterst\xFCtzt",
1316
+ subscribing: "Abonnieren...",
1317
+ notifications: "Benachrichtigungen"
1318
+ },
1319
+ notification: {
1320
+ openChat: "Chat \xF6ffnen",
1321
+ dismiss: "Schlie\xDFen"
1322
+ },
1323
+ common: {
1324
+ loading: "L\xE4dt...",
1325
+ error: "Fehler",
1326
+ retry: "Erneut versuchen",
1327
+ cancel: "Abbrechen",
1328
+ download: "Herunterladen"
1329
+ }
1330
+ };
1331
+
1332
+ // src/i18n/locales/it.json
1333
+ var it_default = {
1334
+ direction: "ltr",
1335
+ chatWidget: {
1336
+ title: "Chat",
1337
+ placeholder: "Scrivi un messaggio...",
1338
+ openChat: "Apri chat",
1339
+ closeChat: "Chiudi chat",
1340
+ connectionStatus: {
1341
+ connected: "Connesso",
1342
+ disconnected: "Disconnesso"
1343
+ }
1344
+ },
1345
+ inputArea: {
1346
+ send: "Invia",
1347
+ uploading: "Caricamento...",
1348
+ dropzone: {
1349
+ dropFiles: "Rilascia i file qui",
1350
+ dropOrClick: "Rilascia o clicca per allegare"
1351
+ }
1352
+ },
1353
+ typingIndicator: {
1354
+ typing: "sta scrivendo",
1355
+ isTyping: "sta scrivendo..."
1356
+ },
1357
+ messageList: {
1358
+ emptyState: "Nessun messaggio ancora. Inizia la conversazione!"
1359
+ },
1360
+ attachmentList: {
1361
+ remove: "Rimuovi",
1362
+ uploadFailed: "Caricamento fallito"
1363
+ },
1364
+ header: {
1365
+ enterFullscreen: "Schermo intero",
1366
+ exitFullscreen: "Esci da schermo intero",
1367
+ closeChat: "Chiudi chat",
1368
+ lightMode: "Modalit\xE0 chiara",
1369
+ darkMode: "Modalit\xE0 scura",
1370
+ autoMode: "Tema sistema"
1371
+ },
1372
+ floatingButton: {
1373
+ openChat: "Apri chat",
1374
+ closeChat: "Chiudi chat"
1375
+ },
1376
+ push: {
1377
+ title: "Notifiche",
1378
+ description: "Ricevi messaggi anche quando la chat \xE8 chiusa",
1379
+ enable: "Attiva notifiche",
1380
+ disable: "Disattiva notifiche",
1381
+ denied: "Notifiche bloccate",
1382
+ unsupported: "Notifiche non supportate",
1383
+ subscribing: "Iscrizione...",
1384
+ notifications: "Notifiche"
1385
+ },
1386
+ notification: {
1387
+ openChat: "Apri Chat",
1388
+ dismiss: "Ignora"
1389
+ },
1390
+ common: {
1391
+ loading: "Caricamento...",
1392
+ error: "Errore",
1393
+ retry: "Riprova",
1394
+ cancel: "Annulla",
1395
+ download: "Scarica"
1396
+ }
1397
+ };
1398
+
1399
+ // src/i18n/locales/nl.json
1400
+ var nl_default = {
1401
+ direction: "ltr",
1402
+ chatWidget: {
1403
+ title: "Chat",
1404
+ placeholder: "Typ een bericht...",
1405
+ openChat: "Open chat",
1406
+ closeChat: "Sluit chat",
1407
+ connectionStatus: {
1408
+ connected: "Verbonden",
1409
+ disconnected: "Verbinding verbroken"
1410
+ }
1411
+ },
1412
+ inputArea: {
1413
+ send: "Versturen",
1414
+ uploading: "Uploaden...",
1415
+ dropzone: {
1416
+ dropFiles: "Zet bestanden hier neer",
1417
+ dropOrClick: "Sleep of klik om bij te voegen"
1418
+ }
1419
+ },
1420
+ typingIndicator: {
1421
+ typing: "typt",
1422
+ isTyping: "typt..."
1423
+ },
1424
+ messageList: {
1425
+ emptyState: "Nog geen berichten. Start het gesprek!"
1426
+ },
1427
+ attachmentList: {
1428
+ remove: "Verwijderen",
1429
+ uploadFailed: "Upload mislukt"
1430
+ },
1431
+ header: {
1432
+ enterFullscreen: "Volledig scherm",
1433
+ exitFullscreen: "Volledig scherm afsluiten",
1434
+ closeChat: "Sluit chat",
1435
+ lightMode: "Lichte modus",
1436
+ darkMode: "Donkere modus",
1437
+ autoMode: "Systeemthema"
1438
+ },
1439
+ floatingButton: {
1440
+ openChat: "Open chat",
1441
+ closeChat: "Sluit chat"
1442
+ },
1443
+ push: {
1444
+ title: "Meldingen",
1445
+ description: "Ontvang berichten zelfs wanneer de chat gesloten is",
1446
+ enable: "Meldingen inschakelen",
1447
+ disable: "Meldingen uitschakelen",
1448
+ denied: "Meldingen geblokkeerd",
1449
+ unsupported: "Meldingen niet ondersteund",
1450
+ subscribing: "Abonneren...",
1451
+ notifications: "Meldingen"
1452
+ },
1453
+ notification: {
1454
+ openChat: "Open Chat",
1455
+ dismiss: "Sluiten"
1456
+ },
1457
+ common: {
1458
+ loading: "Laden...",
1459
+ error: "Fout",
1460
+ retry: "Opnieuw proberen",
1461
+ cancel: "Annuleren",
1462
+ download: "Downloaden"
1463
+ }
1464
+ };
1465
+
1466
+ // src/i18n/locales/pl.json
1467
+ var pl_default = {
1468
+ direction: "ltr",
1469
+ chatWidget: {
1470
+ title: "Czat",
1471
+ placeholder: "Napisz wiadomo\u015B\u0107...",
1472
+ openChat: "Otw\xF3rz czat",
1473
+ closeChat: "Zamknij czat",
1474
+ connectionStatus: {
1475
+ connected: "Po\u0142\u0105czono",
1476
+ disconnected: "Roz\u0142\u0105czono"
1477
+ }
1478
+ },
1479
+ inputArea: {
1480
+ send: "Wy\u015Blij",
1481
+ uploading: "Przesy\u0142anie...",
1482
+ dropzone: {
1483
+ dropFiles: "Upu\u015B\u0107 pliki tutaj",
1484
+ dropOrClick: "Upu\u015B\u0107 lub kliknij, aby do\u0142\u0105czy\u0107"
1485
+ }
1486
+ },
1487
+ typingIndicator: {
1488
+ typing: "pisze",
1489
+ isTyping: "pisze..."
1490
+ },
1491
+ messageList: {
1492
+ emptyState: "Brak wiadomo\u015Bci. Rozpocznij rozmow\u0119!"
1493
+ },
1494
+ attachmentList: {
1495
+ remove: "Usu\u0144",
1496
+ uploadFailed: "Przesy\u0142anie nie powiod\u0142o si\u0119"
1497
+ },
1498
+ header: {
1499
+ enterFullscreen: "Pe\u0142ny ekran",
1500
+ exitFullscreen: "Opu\u015B\u0107 pe\u0142ny ekran",
1501
+ closeChat: "Zamknij czat",
1502
+ lightMode: "Jasny tryb",
1503
+ darkMode: "Ciemny tryb",
1504
+ autoMode: "Motyw systemu"
1505
+ },
1506
+ floatingButton: {
1507
+ openChat: "Otw\xF3rz czat",
1508
+ closeChat: "Zamknij czat"
1509
+ },
1510
+ push: {
1511
+ title: "Powiadomienia",
1512
+ description: "Otrzymuj wiadomo\u015Bci nawet przy zamkni\u0119tym czacie",
1513
+ enable: "W\u0142\u0105cz powiadomienia",
1514
+ disable: "Wy\u0142\u0105cz powiadomienia",
1515
+ denied: "Powiadomienia zablokowane",
1516
+ unsupported: "Powiadomienia nieobs\u0142ugiwane",
1517
+ subscribing: "Subskrybowanie...",
1518
+ notifications: "Powiadomienia"
1519
+ },
1520
+ notification: {
1521
+ openChat: "Otw\xF3rz Czat",
1522
+ dismiss: "Odrzu\u0107"
1523
+ },
1524
+ common: {
1525
+ loading: "\u0141adowanie...",
1526
+ error: "B\u0142\u0105d",
1527
+ retry: "Spr\xF3buj ponownie",
1528
+ cancel: "Anuluj",
1529
+ download: "Pobierz"
1530
+ }
1531
+ };
1532
+
1533
+ // src/i18n/locales/cs.json
1534
+ var cs_default = {
1535
+ direction: "ltr",
1536
+ chatWidget: {
1537
+ title: "Chat",
1538
+ placeholder: "Napi\u0161te zpr\xE1vu...",
1539
+ openChat: "Otev\u0159\xEDt chat",
1540
+ closeChat: "Zav\u0159\xEDt chat",
1541
+ connectionStatus: {
1542
+ connected: "P\u0159ipojeno",
1543
+ disconnected: "Odpojeno"
1544
+ }
1545
+ },
1546
+ inputArea: {
1547
+ send: "Odeslat",
1548
+ uploading: "Nahr\xE1v\xE1n\xED...",
1549
+ dropzone: {
1550
+ dropFiles: "P\u0159et\xE1hn\u011Bte soubory sem",
1551
+ dropOrClick: "P\u0159et\xE1hn\u011Bte nebo klikn\u011Bte pro p\u0159ilo\u017Een\xED"
1552
+ }
1553
+ },
1554
+ typingIndicator: {
1555
+ typing: "p\xED\u0161e",
1556
+ isTyping: "p\xED\u0161e..."
1557
+ },
1558
+ messageList: {
1559
+ emptyState: "Zat\xEDm \u017E\xE1dn\xE9 zpr\xE1vy. Zahajte konverzaci!"
1560
+ },
1561
+ attachmentList: {
1562
+ remove: "Odebrat",
1563
+ uploadFailed: "Nahr\xE1v\xE1n\xED selhalo"
1564
+ },
1565
+ header: {
1566
+ enterFullscreen: "Cel\xE1 obrazovka",
1567
+ exitFullscreen: "Opustit celou obrazovku",
1568
+ closeChat: "Zav\u0159\xEDt chat",
1569
+ lightMode: "Sv\u011Btl\xFD re\u017Eim",
1570
+ darkMode: "Tmav\xFD re\u017Eim",
1571
+ autoMode: "Syst\xE9mov\xE9 t\xE9ma"
1572
+ },
1573
+ floatingButton: {
1574
+ openChat: "Otev\u0159\xEDt chat",
1575
+ closeChat: "Zav\u0159\xEDt chat"
1576
+ },
1577
+ push: {
1578
+ title: "Ozn\xE1men\xED",
1579
+ description: "P\u0159ij\xEDmejte zpr\xE1vy i kdy\u017E je chat zav\u0159en\xFD",
1580
+ enable: "Povolit ozn\xE1men\xED",
1581
+ disable: "Zak\xE1zat ozn\xE1men\xED",
1582
+ denied: "Ozn\xE1men\xED blokov\xE1na",
1583
+ unsupported: "Ozn\xE1men\xED nejsou podporov\xE1na",
1584
+ subscribing: "P\u0159ihla\u0161ov\xE1n\xED...",
1585
+ notifications: "Ozn\xE1men\xED"
1586
+ },
1587
+ notification: {
1588
+ openChat: "Otev\u0159\xEDt Chat",
1589
+ dismiss: "Zav\u0159\xEDt"
1590
+ },
1591
+ common: {
1592
+ loading: "Na\u010D\xEDt\xE1n\xED...",
1593
+ error: "Chyba",
1594
+ retry: "Zkusit znovu",
1595
+ cancel: "Zru\u0161it",
1596
+ download: "St\xE1hnout"
1597
+ }
1598
+ };
1599
+
1600
+ // src/i18n/locales/ro.json
1601
+ var ro_default = {
1602
+ direction: "ltr",
1603
+ chatWidget: {
1604
+ title: "Chat",
1605
+ placeholder: "Scrie un mesaj...",
1606
+ openChat: "Deschide chat",
1607
+ closeChat: "\xCEnchide chat",
1608
+ connectionStatus: {
1609
+ connected: "Conectat",
1610
+ disconnected: "Deconectat"
1611
+ }
1612
+ },
1613
+ inputArea: {
1614
+ send: "Trimite",
1615
+ uploading: "Se \xEEncarc\u0103...",
1616
+ dropzone: {
1617
+ dropFiles: "Plasa\u021Bi fi\u0219ierele aici",
1618
+ dropOrClick: "Plasa\u021Bi sau face\u021Bi clic pentru a ata\u0219a"
1619
+ }
1620
+ },
1621
+ typingIndicator: {
1622
+ typing: "scrie",
1623
+ isTyping: "scrie..."
1624
+ },
1625
+ messageList: {
1626
+ emptyState: "\xCEnc\u0103 nu exist\u0103 mesaje. \xCEncepe conversa\u021Bia!"
1627
+ },
1628
+ attachmentList: {
1629
+ remove: "Elimin\u0103",
1630
+ uploadFailed: "\xCEnc\u0103rcare e\u0219uat\u0103"
1631
+ },
1632
+ header: {
1633
+ enterFullscreen: "Ecran complet",
1634
+ exitFullscreen: "Ie\u0219i\u021Bi din ecran complet",
1635
+ closeChat: "\xCEnchide chat",
1636
+ lightMode: "Mod luminos",
1637
+ darkMode: "Mod \xEEntunecat",
1638
+ autoMode: "Tem\u0103 sistem"
1639
+ },
1640
+ floatingButton: {
1641
+ openChat: "Deschide chat",
1642
+ closeChat: "\xCEnchide chat"
1643
+ },
1644
+ push: {
1645
+ title: "Notific\u0103ri",
1646
+ description: "Primi\u021Bi mesaje chiar \u0219i c\xE2nd chatul este \xEEnchis",
1647
+ enable: "Activeaz\u0103 notific\u0103rile",
1648
+ disable: "Dezactiveaz\u0103 notific\u0103rile",
1649
+ denied: "Notific\u0103ri blocate",
1650
+ unsupported: "Notific\u0103ri nesuportate",
1651
+ subscribing: "Abonare...",
1652
+ notifications: "Notific\u0103ri"
1653
+ },
1654
+ notification: {
1655
+ openChat: "Deschide Chat",
1656
+ dismiss: "Ignor\u0103"
1657
+ },
1658
+ common: {
1659
+ loading: "Se \xEEncarc\u0103...",
1660
+ error: "Eroare",
1661
+ retry: "Re\xEEncearc\u0103",
1662
+ cancel: "Anuleaz\u0103",
1663
+ download: "Descarc\u0103"
1664
+ }
1665
+ };
1666
+
1667
+ // src/i18n/locales/hu.json
1668
+ var hu_default = {
1669
+ direction: "ltr",
1670
+ chatWidget: {
1671
+ title: "Chat",
1672
+ placeholder: "\xCDrj egy \xFCzenetet...",
1673
+ openChat: "Chat megnyit\xE1sa",
1674
+ closeChat: "Chat bez\xE1r\xE1sa",
1675
+ connectionStatus: {
1676
+ connected: "Csatlakozva",
1677
+ disconnected: "Lecsatlakozva"
1678
+ }
1679
+ },
1680
+ inputArea: {
1681
+ send: "K\xFCld\xE9s",
1682
+ uploading: "Felt\xF6lt\xE9s...",
1683
+ dropzone: {
1684
+ dropFiles: "Dobja ide a f\xE1jlokat",
1685
+ dropOrClick: "Dobja vagy kattintson a csatol\xE1shoz"
1686
+ }
1687
+ },
1688
+ typingIndicator: {
1689
+ typing: "\xEDr",
1690
+ isTyping: "\xEDr..."
1691
+ },
1692
+ messageList: {
1693
+ emptyState: "M\xE9g nincsenek \xFCzenetek. Ind\xEDtsa el a besz\xE9lget\xE9st!"
1694
+ },
1695
+ attachmentList: {
1696
+ remove: "Elt\xE1vol\xEDt\xE1s",
1697
+ uploadFailed: "Felt\xF6lt\xE9s sikertelen"
1698
+ },
1699
+ header: {
1700
+ enterFullscreen: "Teljes k\xE9perny\u0151",
1701
+ exitFullscreen: "Kil\xE9p\xE9s a teljes k\xE9perny\u0151b\u0151l",
1702
+ closeChat: "Chat bez\xE1r\xE1sa",
1703
+ lightMode: "Vil\xE1gos m\xF3d",
1704
+ darkMode: "S\xF6t\xE9t m\xF3d",
1705
+ autoMode: "Rendszert\xE9ma"
1706
+ },
1707
+ floatingButton: {
1708
+ openChat: "Chat megnyit\xE1sa",
1709
+ closeChat: "Chat bez\xE1r\xE1sa"
1710
+ },
1711
+ push: {
1712
+ title: "\xC9rtes\xEDt\xE9sek",
1713
+ description: "\xDCzenetek fogad\xE1sa akkor is, ha a chat be van z\xE1rva",
1714
+ enable: "\xC9rtes\xEDt\xE9sek enged\xE9lyez\xE9se",
1715
+ disable: "\xC9rtes\xEDt\xE9sek letilt\xE1sa",
1716
+ denied: "\xC9rtes\xEDt\xE9sek blokkolva",
1717
+ unsupported: "\xC9rtes\xEDt\xE9sek nem t\xE1mogatottak",
1718
+ subscribing: "Feliratkoz\xE1s...",
1719
+ notifications: "\xC9rtes\xEDt\xE9sek"
1720
+ },
1721
+ notification: {
1722
+ openChat: "Chat Megnyit\xE1sa",
1723
+ dismiss: "Elutas\xEDt\xE1s"
1724
+ },
1725
+ common: {
1726
+ loading: "Bet\xF6lt\xE9s...",
1727
+ error: "Hiba",
1728
+ retry: "\xDAjrapr\xF3b\xE1lkoz\xE1s",
1729
+ cancel: "M\xE9gse",
1730
+ download: "Let\xF6lt\xE9s"
1731
+ }
1732
+ };
1733
+
1734
+ // src/i18n/locales/uk.json
1735
+ var uk_default = {
1736
+ direction: "ltr",
1737
+ chatWidget: {
1738
+ title: "\u0427\u0430\u0442",
1739
+ placeholder: "\u041D\u0430\u043F\u0438\u0448\u0456\u0442\u044C \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F...",
1740
+ openChat: "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442",
1741
+ closeChat: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442",
1742
+ connectionStatus: {
1743
+ connected: "\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E",
1744
+ disconnected: "\u0412\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E"
1745
+ }
1746
+ },
1747
+ inputArea: {
1748
+ send: "\u041D\u0430\u0434\u0456\u0441\u043B\u0430\u0442\u0438",
1749
+ uploading: "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F...",
1750
+ dropzone: {
1751
+ dropFiles: "\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0430\u0439\u043B\u0438 \u0441\u044E\u0434\u0438",
1752
+ dropOrClick: "\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0430\u0431\u043E \u043D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C, \u0449\u043E\u0431 \u043F\u0440\u0438\u043A\u0440\u0456\u043F\u0438\u0442\u0438"
1753
+ }
1754
+ },
1755
+ typingIndicator: {
1756
+ typing: "\u0434\u0440\u0443\u043A\u0443\u0454",
1757
+ isTyping: "\u0434\u0440\u0443\u043A\u0443\u0454..."
1758
+ },
1759
+ messageList: {
1760
+ emptyState: "\u041F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u044C \u0449\u0435 \u043D\u0435\u043C\u0430\u0454. \u041F\u043E\u0447\u043D\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u043E\u0432\u0443!"
1761
+ },
1762
+ attachmentList: {
1763
+ remove: "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438",
1764
+ uploadFailed: "\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438"
1765
+ },
1766
+ header: {
1767
+ enterFullscreen: "\u041F\u043E\u0432\u043D\u0438\u0439 \u0435\u043A\u0440\u0430\u043D",
1768
+ exitFullscreen: "\u0412\u0438\u0439\u0442\u0438 \u0437 \u043F\u043E\u0432\u043D\u043E\u0433\u043E \u0435\u043A\u0440\u0430\u043D\u0443",
1769
+ closeChat: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442",
1770
+ lightMode: "\u0421\u0432\u0456\u0442\u043B\u0438\u0439 \u0440\u0435\u0436\u0438\u043C",
1771
+ darkMode: "\u0422\u0435\u043C\u043D\u0438\u0439 \u0440\u0435\u0436\u0438\u043C",
1772
+ autoMode: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430 \u0442\u0435\u043C\u0430"
1773
+ },
1774
+ floatingButton: {
1775
+ openChat: "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442",
1776
+ closeChat: "\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0442"
1777
+ },
1778
+ push: {
1779
+ title: "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F",
1780
+ description: "\u041E\u0442\u0440\u0438\u043C\u0443\u0439\u0442\u0435 \u043F\u043E\u0432\u0456\u0434\u043E\u043C\u043B\u0435\u043D\u043D\u044F, \u043D\u0430\u0432\u0456\u0442\u044C \u043A\u043E\u043B\u0438 \u0447\u0430\u0442 \u0437\u0430\u043A\u0440\u0438\u0442\u043E",
1781
+ enable: "\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F",
1782
+ disable: "\u0412\u0438\u043C\u043A\u043D\u0443\u0442\u0438 \u0441\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F",
1783
+ denied: "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u0437\u0430\u0431\u043B\u043E\u043A\u043E\u0432\u0430\u043D\u043E",
1784
+ unsupported: "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u044E\u0442\u044C\u0441\u044F",
1785
+ subscribing: "\u041F\u0456\u0434\u043F\u0438\u0441\u043A\u0430...",
1786
+ notifications: "\u0421\u043F\u043E\u0432\u0456\u0449\u0435\u043D\u043D\u044F"
1787
+ },
1788
+ notification: {
1789
+ openChat: "\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0427\u0430\u0442",
1790
+ dismiss: "\u0412\u0456\u0434\u0445\u0438\u043B\u0438\u0442\u0438"
1791
+ },
1792
+ common: {
1793
+ loading: "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043D\u044F...",
1794
+ error: "\u041F\u043E\u043C\u0438\u043B\u043A\u0430",
1795
+ retry: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438",
1796
+ cancel: "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438",
1797
+ download: "\u0417\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0438\u0442\u0438"
1798
+ }
1799
+ };
1800
+
1801
+ // src/i18n/locales/ru.json
1802
+ var ru_default = {
1803
+ direction: "ltr",
1804
+ chatWidget: {
1805
+ title: "\u0427\u0430\u0442",
1806
+ placeholder: "\u041D\u0430\u043F\u0438\u0448\u0438\u0442\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435...",
1807
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442",
1808
+ closeChat: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442",
1809
+ connectionStatus: {
1810
+ connected: "\u041F\u043E\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043E",
1811
+ disconnected: "\u041E\u0442\u043A\u043B\u044E\u0447\u0435\u043D\u043E"
1812
+ }
1813
+ },
1814
+ inputArea: {
1815
+ send: "\u041E\u0442\u043F\u0440\u0430\u0432\u0438\u0442\u044C",
1816
+ uploading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
1817
+ dropzone: {
1818
+ dropFiles: "\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0430\u0439\u043B\u044B \u0441\u044E\u0434\u0430",
1819
+ dropOrClick: "\u041F\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0438\u043B\u0438 \u043D\u0430\u0436\u043C\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u043F\u0440\u0438\u043A\u0440\u0435\u043F\u0438\u0442\u044C"
1820
+ }
1821
+ },
1822
+ typingIndicator: {
1823
+ typing: "\u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442",
1824
+ isTyping: "\u043F\u0435\u0447\u0430\u0442\u0430\u0435\u0442..."
1825
+ },
1826
+ messageList: {
1827
+ emptyState: "\u0421\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0439 \u043F\u043E\u043A\u0430 \u043D\u0435\u0442. \u041D\u0430\u0447\u043D\u0438\u0442\u0435 \u0440\u0430\u0437\u0433\u043E\u0432\u043E\u0440!"
1828
+ },
1829
+ attachmentList: {
1830
+ remove: "\u0423\u0434\u0430\u043B\u0438\u0442\u044C",
1831
+ uploadFailed: "\u041E\u0448\u0438\u0431\u043A\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043A\u0438"
1832
+ },
1833
+ header: {
1834
+ enterFullscreen: "\u041F\u043E\u043B\u043D\u044B\u0439 \u044D\u043A\u0440\u0430\u043D",
1835
+ exitFullscreen: "\u0412\u044B\u0439\u0442\u0438 \u0438\u0437 \u043F\u043E\u043B\u043D\u043E\u0433\u043E \u044D\u043A\u0440\u0430\u043D\u0430",
1836
+ closeChat: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442",
1837
+ lightMode: "\u0421\u0432\u0435\u0442\u043B\u0430\u044F \u0442\u0435\u043C\u0430",
1838
+ darkMode: "\u0422\u0451\u043C\u043D\u0430\u044F \u0442\u0435\u043C\u0430",
1839
+ autoMode: "\u0421\u0438\u0441\u0442\u0435\u043C\u043D\u0430\u044F \u0442\u0435\u043C\u0430"
1840
+ },
1841
+ floatingButton: {
1842
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442",
1843
+ closeChat: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u0447\u0430\u0442"
1844
+ },
1845
+ push: {
1846
+ title: "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F",
1847
+ description: "\u041F\u043E\u043B\u0443\u0447\u0430\u0439\u0442\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F, \u0434\u0430\u0436\u0435 \u043A\u043E\u0433\u0434\u0430 \u0447\u0430\u0442 \u0437\u0430\u043A\u0440\u044B\u0442",
1848
+ enable: "\u0412\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F",
1849
+ disable: "\u041E\u0442\u043A\u043B\u044E\u0447\u0438\u0442\u044C \u0443\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F",
1850
+ denied: "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u0437\u0430\u0431\u043B\u043E\u043A\u0438\u0440\u043E\u0432\u0430\u043D\u044B",
1851
+ unsupported: "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F \u043D\u0435 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044E\u0442\u0441\u044F",
1852
+ subscribing: "\u041F\u043E\u0434\u043F\u0438\u0441\u043A\u0430...",
1853
+ notifications: "\u0423\u0432\u0435\u0434\u043E\u043C\u043B\u0435\u043D\u0438\u044F"
1854
+ },
1855
+ notification: {
1856
+ openChat: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0427\u0430\u0442",
1857
+ dismiss: "\u0417\u0430\u043A\u0440\u044B\u0442\u044C"
1858
+ },
1859
+ common: {
1860
+ loading: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430...",
1861
+ error: "\u041E\u0448\u0438\u0431\u043A\u0430",
1862
+ retry: "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u044C",
1863
+ cancel: "\u041E\u0442\u043C\u0435\u043D\u0430",
1864
+ download: "\u0421\u043A\u0430\u0447\u0430\u0442\u044C"
1865
+ }
1866
+ };
1867
+
1868
+ // src/i18n/locales/el.json
1869
+ var el_default = {
1870
+ direction: "ltr",
1871
+ chatWidget: {
1872
+ title: "\u03A3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1",
1873
+ placeholder: "\u0393\u03C1\u03AC\u03C8\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03BC\u03AE\u03BD\u03C5\u03BC\u03B1...",
1874
+ openChat: "\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2",
1875
+ closeChat: "\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2",
1876
+ connectionStatus: {
1877
+ connected: "\u03A3\u03C5\u03BD\u03B4\u03B5\u03B4\u03B5\u03BC\u03AD\u03BD\u03BF",
1878
+ disconnected: "\u0391\u03C0\u03BF\u03C3\u03C5\u03BD\u03B4\u03B5\u03B4\u03B5\u03BC\u03AD\u03BD\u03BF"
1879
+ }
1880
+ },
1881
+ inputArea: {
1882
+ send: "\u0391\u03C0\u03BF\u03C3\u03C4\u03BF\u03BB\u03AE",
1883
+ uploading: "\u039C\u03B5\u03C4\u03B1\u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...",
1884
+ dropzone: {
1885
+ dropFiles: "\u0391\u03C6\u03AE\u03C3\u03C4\u03B5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03B5\u03B4\u03CE",
1886
+ dropOrClick: "\u0391\u03C6\u03AE\u03C3\u03C4\u03B5 \u03AE \u03BA\u03AC\u03BD\u03C4\u03B5 \u03BA\u03BB\u03B9\u03BA \u03B3\u03B9\u03B1 \u03B5\u03C0\u03B9\u03C3\u03CD\u03BD\u03B1\u03C8\u03B7"
1887
+ }
1888
+ },
1889
+ typingIndicator: {
1890
+ typing: "\u03B3\u03C1\u03AC\u03C6\u03B5\u03B9",
1891
+ isTyping: "\u03B3\u03C1\u03AC\u03C6\u03B5\u03B9..."
1892
+ },
1893
+ messageList: {
1894
+ emptyState: "\u0394\u03B5\u03BD \u03C5\u03C0\u03AC\u03C1\u03C7\u03BF\u03C5\u03BD \u03B1\u03BA\u03CC\u03BC\u03B7 \u03BC\u03B7\u03BD\u03CD\u03BC\u03B1\u03C4\u03B1. \u039E\u03B5\u03BA\u03B9\u03BD\u03AE\u03C3\u03C4\u03B5 \u03C4\u03B7 \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1!"
1895
+ },
1896
+ attachmentList: {
1897
+ remove: "\u0391\u03C6\u03B1\u03AF\u03C1\u03B5\u03C3\u03B7",
1898
+ uploadFailed: "\u0397 \u03BC\u03B5\u03C4\u03B1\u03C6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7 \u03B1\u03C0\u03AD\u03C4\u03C5\u03C7\u03B5"
1899
+ },
1900
+ header: {
1901
+ enterFullscreen: "\u03A0\u03BB\u03AE\u03C1\u03B7\u03C2 \u03BF\u03B8\u03CC\u03BD\u03B7",
1902
+ exitFullscreen: "\u0388\u03BE\u03BF\u03B4\u03BF\u03C2 \u03B1\u03C0\u03CC \u03C0\u03BB\u03AE\u03C1\u03B7 \u03BF\u03B8\u03CC\u03BD\u03B7",
1903
+ closeChat: "\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2",
1904
+ lightMode: "\u03A6\u03C9\u03C4\u03B5\u03B9\u03BD\u03AE \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",
1905
+ darkMode: "\u03A3\u03BA\u03BF\u03C4\u03B5\u03B9\u03BD\u03AE \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1",
1906
+ autoMode: "\u0398\u03AD\u03BC\u03B1 \u03C3\u03C5\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2"
1907
+ },
1908
+ floatingButton: {
1909
+ openChat: "\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2",
1910
+ closeChat: "\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2"
1911
+ },
1912
+ push: {
1913
+ title: "\u0395\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2",
1914
+ description: "\u039B\u03AC\u03B2\u03B5\u03C4\u03B5 \u03BC\u03B7\u03BD\u03CD\u03BC\u03B1\u03C4\u03B1 \u03B1\u03BA\u03CC\u03BC\u03B1 \u03BA\u03B1\u03B9 \u03CC\u03C4\u03B1\u03BD \u03B7 \u03C3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BA\u03BB\u03B5\u03B9\u03C3\u03C4\u03AE",
1915
+ enable: "\u0395\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C9\u03BD",
1916
+ disable: "\u0391\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03C9\u03BD",
1917
+ denied: "\u0395\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B1\u03C0\u03BF\u03BA\u03BB\u03B5\u03B9\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2",
1918
+ unsupported: "\u039F\u03B9 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9",
1919
+ subscribing: "\u0395\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE...",
1920
+ notifications: "\u0395\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2"
1921
+ },
1922
+ notification: {
1923
+ openChat: "\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03A3\u03C5\u03BD\u03BF\u03BC\u03B9\u03BB\u03AF\u03B1\u03C2",
1924
+ dismiss: "\u0391\u03C0\u03CC\u03C1\u03C1\u03B9\u03C8\u03B7"
1925
+ },
1926
+ common: {
1927
+ loading: "\u03A6\u03CC\u03C1\u03C4\u03C9\u03C3\u03B7...",
1928
+ error: "\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1",
1929
+ retry: "\u0394\u03BF\u03BA\u03B9\u03BC\u03AE \u03BE\u03B1\u03BD\u03AC",
1930
+ cancel: "\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7",
1931
+ download: "\u039B\u03AE\u03C8\u03B7"
1932
+ }
1933
+ };
1934
+
1935
+ // src/i18n/locales/tr.json
1936
+ var tr_default = {
1937
+ direction: "ltr",
1938
+ chatWidget: {
1939
+ title: "Sohbet",
1940
+ placeholder: "Bir mesaj yaz\u0131n...",
1941
+ openChat: "Sohbeti a\xE7",
1942
+ closeChat: "Sohbeti kapat",
1943
+ connectionStatus: {
1944
+ connected: "Ba\u011Fland\u0131",
1945
+ disconnected: "Ba\u011Flant\u0131 kesildi"
1946
+ }
1947
+ },
1948
+ inputArea: {
1949
+ send: "G\xF6nder",
1950
+ uploading: "Y\xFCkleniyor...",
1951
+ dropzone: {
1952
+ dropFiles: "Dosyalar\u0131 buraya b\u0131rak\u0131n",
1953
+ dropOrClick: "Eklemek i\xE7in b\u0131rak\u0131n veya t\u0131klay\u0131n"
1954
+ }
1955
+ },
1956
+ typingIndicator: {
1957
+ typing: "yaz\u0131yor",
1958
+ isTyping: "yaz\u0131yor..."
1959
+ },
1960
+ messageList: {
1961
+ emptyState: "Hen\xFCz mesaj yok. Sohbeti ba\u015Flat\u0131n!"
1962
+ },
1963
+ attachmentList: {
1964
+ remove: "Kald\u0131r",
1965
+ uploadFailed: "Y\xFCkleme ba\u015Far\u0131s\u0131z"
1966
+ },
1967
+ header: {
1968
+ enterFullscreen: "Tam ekran",
1969
+ exitFullscreen: "Tam ekrandan \xE7\u0131k",
1970
+ closeChat: "Sohbeti kapat",
1971
+ lightMode: "A\xE7\u0131k mod",
1972
+ darkMode: "Koyu mod",
1973
+ autoMode: "Sistem temas\u0131"
1974
+ },
1975
+ floatingButton: {
1976
+ openChat: "Sohbeti a\xE7",
1977
+ closeChat: "Sohbeti kapat"
1978
+ },
1979
+ push: {
1980
+ title: "Bildirimler",
1981
+ description: "Sohbet kapal\u0131yken bile mesaj al\u0131n",
1982
+ enable: "Bildirimleri etkinle\u015Ftir",
1983
+ disable: "Bildirimleri devre d\u0131\u015F\u0131 b\u0131rak",
1984
+ denied: "Bildirimler engellendi",
1985
+ unsupported: "Bildirimler desteklenmiyor",
1986
+ subscribing: "Abone olunuyor...",
1987
+ notifications: "Bildirimler"
1988
+ },
1989
+ notification: {
1990
+ openChat: "Sohbeti A\xE7",
1991
+ dismiss: "Kapat"
1992
+ },
1993
+ common: {
1994
+ loading: "Y\xFCkleniyor...",
1995
+ error: "Hata",
1996
+ retry: "Tekrar dene",
1997
+ cancel: "\u0130ptal",
1998
+ download: "\u0130ndir"
1999
+ }
2000
+ };
2001
+
2002
+ // src/i18n/locales/et.json
2003
+ var et_default = {
2004
+ direction: "ltr",
2005
+ chatWidget: {
2006
+ title: "Vestlus",
2007
+ placeholder: "Kirjuta s\xF5num...",
2008
+ openChat: "Ava vestlus",
2009
+ closeChat: "Sulge vestlus",
2010
+ connectionStatus: {
2011
+ connected: "\xDChendatud",
2012
+ disconnected: "\xDChendus katkenud"
2013
+ }
2014
+ },
2015
+ inputArea: {
2016
+ send: "Saada",
2017
+ uploading: "Laadimine...",
2018
+ dropzone: {
2019
+ dropFiles: "Lohista failid siia",
2020
+ dropOrClick: "Lohista v\xF5i kl\xF5psa manustamiseks"
2021
+ }
2022
+ },
2023
+ typingIndicator: {
2024
+ typing: "kirjutab",
2025
+ isTyping: "kirjutab..."
2026
+ },
2027
+ messageList: {
2028
+ emptyState: "Veel pole s\xF5numeid. Alusta vestlust!"
2029
+ },
2030
+ attachmentList: {
2031
+ remove: "Eemalda",
2032
+ uploadFailed: "\xDCleslaadimine eba\xF5nnestus"
2033
+ },
2034
+ header: {
2035
+ enterFullscreen: "T\xE4isekraan",
2036
+ exitFullscreen: "V\xE4lju t\xE4isekraanist",
2037
+ closeChat: "Sulge vestlus",
2038
+ lightMode: "Heledre\u017Eiim",
2039
+ darkMode: "Tumedre\u017Eiim",
2040
+ autoMode: "S\xFCsteemi teema"
2041
+ },
2042
+ floatingButton: {
2043
+ openChat: "Ava vestlus",
2044
+ closeChat: "Sulge vestlus"
2045
+ },
2046
+ push: {
2047
+ title: "Teavitused",
2048
+ description: "Saage s\xF5numeid ka siis, kui vestlus on suletud",
2049
+ enable: "Luba teavitused",
2050
+ disable: "Keela teavitused",
2051
+ denied: "Teavitused blokeeritud",
2052
+ unsupported: "Teavitused pole toetatud",
2053
+ subscribing: "Tellimine...",
2054
+ notifications: "Teavitused"
2055
+ },
2056
+ notification: {
2057
+ openChat: "Ava Vestlus",
2058
+ dismiss: "Loobu"
2059
+ },
2060
+ common: {
2061
+ loading: "Laadimine...",
2062
+ error: "Viga",
2063
+ retry: "Proovi uuesti",
2064
+ cancel: "T\xFChista",
2065
+ download: "Laadi alla"
2066
+ }
2067
+ };
2068
+
2069
+ // src/i18n/locales/ja.json
2070
+ var ja_default = {
2071
+ direction: "ltr",
2072
+ chatWidget: {
2073
+ title: "\u30C1\u30E3\u30C3\u30C8",
2074
+ placeholder: "\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B...",
2075
+ openChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F",
2076
+ closeChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u9589\u3058\u308B",
2077
+ connectionStatus: {
2078
+ connected: "\u63A5\u7D9A\u6E08\u307F",
2079
+ disconnected: "\u5207\u65AD\u6E08\u307F"
2080
+ }
2081
+ },
2082
+ inputArea: {
2083
+ send: "\u9001\u4FE1",
2084
+ uploading: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u4E2D...",
2085
+ dropzone: {
2086
+ dropFiles: "\u30D5\u30A1\u30A4\u30EB\u3092\u3053\u3053\u306B\u30C9\u30ED\u30C3\u30D7",
2087
+ dropOrClick: "\u30C9\u30ED\u30C3\u30D7\u307E\u305F\u306F\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u6DFB\u4ED8"
2088
+ }
2089
+ },
2090
+ typingIndicator: {
2091
+ typing: "\u5165\u529B\u4E2D",
2092
+ isTyping: "\u5165\u529B\u4E2D..."
2093
+ },
2094
+ messageList: {
2095
+ emptyState: "\u307E\u3060\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u4F1A\u8A71\u3092\u59CB\u3081\u307E\u3057\u3087\u3046\uFF01"
2096
+ },
2097
+ attachmentList: {
2098
+ remove: "\u524A\u9664",
2099
+ uploadFailed: "\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
2100
+ },
2101
+ header: {
2102
+ enterFullscreen: "\u5168\u753B\u9762\u8868\u793A",
2103
+ exitFullscreen: "\u5168\u753B\u9762\u3092\u7D42\u4E86",
2104
+ closeChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u9589\u3058\u308B",
2105
+ lightMode: "\u30E9\u30A4\u30C8\u30E2\u30FC\u30C9",
2106
+ darkMode: "\u30C0\u30FC\u30AF\u30E2\u30FC\u30C9",
2107
+ autoMode: "\u30B7\u30B9\u30C6\u30E0\u30C6\u30FC\u30DE"
2108
+ },
2109
+ floatingButton: {
2110
+ openChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F",
2111
+ closeChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u9589\u3058\u308B"
2112
+ },
2113
+ push: {
2114
+ title: "\u901A\u77E5",
2115
+ description: "\u30C1\u30E3\u30C3\u30C8\u304C\u9589\u3058\u3066\u3044\u3066\u3082\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u53D7\u4FE1",
2116
+ enable: "\u901A\u77E5\u3092\u6709\u52B9\u306B\u3059\u308B",
2117
+ disable: "\u901A\u77E5\u3092\u7121\u52B9\u306B\u3059\u308B",
2118
+ denied: "\u901A\u77E5\u304C\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u3066\u3044\u307E\u3059",
2119
+ unsupported: "\u901A\u77E5\u306F\u30B5\u30DD\u30FC\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093",
2120
+ subscribing: "\u767B\u9332\u4E2D...",
2121
+ notifications: "\u901A\u77E5"
2122
+ },
2123
+ notification: {
2124
+ openChat: "\u30C1\u30E3\u30C3\u30C8\u3092\u958B\u304F",
2125
+ dismiss: "\u9589\u3058\u308B"
2126
+ },
2127
+ common: {
2128
+ loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D...",
2129
+ error: "\u30A8\u30E9\u30FC",
2130
+ retry: "\u518D\u8A66\u884C",
2131
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
2132
+ download: "\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9"
2133
+ }
2134
+ };
2135
+
2136
+ // src/i18n/locales/zh-CN.json
2137
+ var zh_CN_default = {
2138
+ direction: "ltr",
2139
+ chatWidget: {
2140
+ title: "\u804A\u5929",
2141
+ placeholder: "\u8F93\u5165\u6D88\u606F...",
2142
+ openChat: "\u6253\u5F00\u804A\u5929",
2143
+ closeChat: "\u5173\u95ED\u804A\u5929",
2144
+ connectionStatus: {
2145
+ connected: "\u5DF2\u8FDE\u63A5",
2146
+ disconnected: "\u5DF2\u65AD\u5F00"
2147
+ }
2148
+ },
2149
+ inputArea: {
2150
+ send: "\u53D1\u9001",
2151
+ uploading: "\u4E0A\u4F20\u4E2D...",
2152
+ dropzone: {
2153
+ dropFiles: "\u5C06\u6587\u4EF6\u62D6\u653E\u5230\u6B64\u5904",
2154
+ dropOrClick: "\u62D6\u653E\u6216\u70B9\u51FB\u4EE5\u9644\u52A0\u6587\u4EF6"
2155
+ }
2156
+ },
2157
+ typingIndicator: {
2158
+ typing: "\u6B63\u5728\u8F93\u5165",
2159
+ isTyping: "\u6B63\u5728\u8F93\u5165..."
2160
+ },
2161
+ messageList: {
2162
+ emptyState: "\u6682\u65E0\u6D88\u606F\u3002\u5F00\u59CB\u5BF9\u8BDD\u5427\uFF01"
2163
+ },
2164
+ attachmentList: {
2165
+ remove: "\u79FB\u9664",
2166
+ uploadFailed: "\u4E0A\u4F20\u5931\u8D25"
2167
+ },
2168
+ header: {
2169
+ enterFullscreen: "\u8FDB\u5165\u5168\u5C4F",
2170
+ exitFullscreen: "\u9000\u51FA\u5168\u5C4F",
2171
+ closeChat: "\u5173\u95ED\u804A\u5929",
2172
+ lightMode: "\u6D45\u8272\u6A21\u5F0F",
2173
+ darkMode: "\u6DF1\u8272\u6A21\u5F0F",
2174
+ autoMode: "\u7CFB\u7EDF\u4E3B\u9898"
2175
+ },
2176
+ floatingButton: {
2177
+ openChat: "\u6253\u5F00\u804A\u5929",
2178
+ closeChat: "\u5173\u95ED\u804A\u5929"
2179
+ },
2180
+ push: {
2181
+ title: "\u901A\u77E5",
2182
+ description: "\u5373\u4F7F\u5728\u804A\u5929\u5173\u95ED\u65F6\u4E5F\u80FD\u63A5\u6536\u6D88\u606F",
2183
+ enable: "\u542F\u7528\u901A\u77E5",
2184
+ disable: "\u7981\u7528\u901A\u77E5",
2185
+ denied: "\u901A\u77E5\u5DF2\u88AB\u963B\u6B62",
2186
+ unsupported: "\u4E0D\u652F\u6301\u901A\u77E5",
2187
+ subscribing: "\u8BA2\u9605\u4E2D...",
2188
+ notifications: "\u901A\u77E5"
2189
+ },
2190
+ notification: {
2191
+ openChat: "\u6253\u5F00\u804A\u5929",
2192
+ dismiss: "\u5173\u95ED"
2193
+ },
2194
+ common: {
2195
+ loading: "\u52A0\u8F7D\u4E2D...",
2196
+ error: "\u9519\u8BEF",
2197
+ retry: "\u91CD\u8BD5",
2198
+ cancel: "\u53D6\u6D88",
2199
+ download: "\u4E0B\u8F7D"
2200
+ }
2201
+ };
2202
+
2203
+ // src/i18n/locales/zh-TW.json
2204
+ var zh_TW_default = {
2205
+ direction: "ltr",
2206
+ chatWidget: {
2207
+ title: "\u804A\u5929",
2208
+ placeholder: "\u8F38\u5165\u8A0A\u606F...",
2209
+ openChat: "\u958B\u555F\u804A\u5929",
2210
+ closeChat: "\u95DC\u9589\u804A\u5929",
2211
+ connectionStatus: {
2212
+ connected: "\u5DF2\u9023\u7DDA",
2213
+ disconnected: "\u5DF2\u65B7\u7DDA"
2214
+ }
2215
+ },
2216
+ inputArea: {
2217
+ send: "\u50B3\u9001",
2218
+ uploading: "\u4E0A\u50B3\u4E2D...",
2219
+ dropzone: {
2220
+ dropFiles: "\u5C07\u6A94\u6848\u62D6\u653E\u5230\u6B64\u8655",
2221
+ dropOrClick: "\u62D6\u653E\u6216\u9EDE\u64CA\u4EE5\u9644\u52A0\u6A94\u6848"
2222
+ }
2223
+ },
2224
+ typingIndicator: {
2225
+ typing: "\u6B63\u5728\u8F38\u5165",
2226
+ isTyping: "\u6B63\u5728\u8F38\u5165..."
2227
+ },
2228
+ messageList: {
2229
+ emptyState: "\u5C1A\u7121\u8A0A\u606F\u3002\u958B\u59CB\u5C0D\u8A71\u5427\uFF01"
2230
+ },
2231
+ attachmentList: {
2232
+ remove: "\u79FB\u9664",
2233
+ uploadFailed: "\u4E0A\u50B3\u5931\u6557"
2234
+ },
2235
+ header: {
2236
+ enterFullscreen: "\u9032\u5165\u5168\u87A2\u5E55",
2237
+ exitFullscreen: "\u9000\u51FA\u5168\u87A2\u5E55",
2238
+ closeChat: "\u95DC\u9589\u804A\u5929",
2239
+ lightMode: "\u6DFA\u8272\u6A21\u5F0F",
2240
+ darkMode: "\u6DF1\u8272\u6A21\u5F0F",
2241
+ autoMode: "\u7CFB\u7D71\u4E3B\u984C"
2242
+ },
2243
+ floatingButton: {
2244
+ openChat: "\u958B\u555F\u804A\u5929",
2245
+ closeChat: "\u95DC\u9589\u804A\u5929"
2246
+ },
2247
+ push: {
2248
+ title: "\u901A\u77E5",
2249
+ description: "\u5373\u4F7F\u5728\u804A\u5929\u95DC\u9589\u6642\u4E5F\u80FD\u63A5\u6536\u8A0A\u606F",
2250
+ enable: "\u555F\u7528\u901A\u77E5",
2251
+ disable: "\u505C\u7528\u901A\u77E5",
2252
+ denied: "\u901A\u77E5\u5DF2\u88AB\u5C01\u9396",
2253
+ unsupported: "\u4E0D\u652F\u63F4\u901A\u77E5",
2254
+ subscribing: "\u8A02\u95B1\u4E2D...",
2255
+ notifications: "\u901A\u77E5"
2256
+ },
2257
+ notification: {
2258
+ openChat: "\u958B\u555F\u804A\u5929",
2259
+ dismiss: "\u95DC\u9589"
2260
+ },
2261
+ common: {
2262
+ loading: "\u8F09\u5165\u4E2D...",
2263
+ error: "\u932F\u8AA4",
2264
+ retry: "\u91CD\u8A66",
2265
+ cancel: "\u53D6\u6D88",
2266
+ download: "\u4E0B\u8F09"
2267
+ }
2268
+ };
2269
+
2270
+ // src/i18n/locales/ko.json
2271
+ var ko_default = {
2272
+ direction: "ltr",
2273
+ chatWidget: {
2274
+ title: "\uCC44\uD305",
2275
+ placeholder: "\uBA54\uC2DC\uC9C0\uB97C \uC785\uB825\uD558\uC138\uC694...",
2276
+ openChat: "\uCC44\uD305 \uC5F4\uAE30",
2277
+ closeChat: "\uCC44\uD305 \uB2EB\uAE30",
2278
+ connectionStatus: {
2279
+ connected: "\uC5F0\uACB0\uB428",
2280
+ disconnected: "\uC5F0\uACB0 \uB04A\uAE40"
2281
+ }
2282
+ },
2283
+ inputArea: {
2284
+ send: "\uC804\uC1A1",
2285
+ uploading: "\uC5C5\uB85C\uB4DC \uC911...",
2286
+ dropzone: {
2287
+ dropFiles: "\uD30C\uC77C\uC744 \uC5EC\uAE30\uC5D0 \uB193\uC73C\uC138\uC694",
2288
+ dropOrClick: "\uB193\uAC70\uB098 \uD074\uB9AD\uD558\uC5EC \uCCA8\uBD80"
2289
+ }
2290
+ },
2291
+ typingIndicator: {
2292
+ typing: "\uC785\uB825 \uC911",
2293
+ isTyping: "\uC785\uB825 \uC911..."
2294
+ },
2295
+ messageList: {
2296
+ emptyState: "\uC544\uC9C1 \uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uB300\uD654\uB97C \uC2DC\uC791\uD558\uC138\uC694!"
2297
+ },
2298
+ attachmentList: {
2299
+ remove: "\uC81C\uAC70",
2300
+ uploadFailed: "\uC5C5\uB85C\uB4DC \uC2E4\uD328"
2301
+ },
2302
+ header: {
2303
+ enterFullscreen: "\uC804\uCCB4 \uD654\uBA74",
2304
+ exitFullscreen: "\uC804\uCCB4 \uD654\uBA74 \uC885\uB8CC",
2305
+ closeChat: "\uCC44\uD305 \uB2EB\uAE30",
2306
+ lightMode: "\uB77C\uC774\uD2B8 \uBAA8\uB4DC",
2307
+ darkMode: "\uB2E4\uD06C \uBAA8\uB4DC",
2308
+ autoMode: "\uC2DC\uC2A4\uD15C \uD14C\uB9C8"
2309
+ },
2310
+ floatingButton: {
2311
+ openChat: "\uCC44\uD305 \uC5F4\uAE30",
2312
+ closeChat: "\uCC44\uD305 \uB2EB\uAE30"
2313
+ },
2314
+ push: {
2315
+ title: "\uC54C\uB9BC",
2316
+ description: "\uCC44\uD305\uC774 \uB2EB\uD600 \uC788\uC5B4\uB3C4 \uBA54\uC2DC\uC9C0 \uC218\uC2E0",
2317
+ enable: "\uC54C\uB9BC \uD65C\uC131\uD654",
2318
+ disable: "\uC54C\uB9BC \uBE44\uD65C\uC131\uD654",
2319
+ denied: "\uC54C\uB9BC\uC774 \uCC28\uB2E8\uB428",
2320
+ unsupported: "\uC54C\uB9BC\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC74C",
2321
+ subscribing: "\uAD6C\uB3C5 \uC911...",
2322
+ notifications: "\uC54C\uB9BC"
2323
+ },
2324
+ notification: {
2325
+ openChat: "\uCC44\uD305 \uC5F4\uAE30",
2326
+ dismiss: "\uB2EB\uAE30"
2327
+ },
2328
+ common: {
2329
+ loading: "\uB85C\uB529 \uC911...",
2330
+ error: "\uC624\uB958",
2331
+ retry: "\uC7AC\uC2DC\uB3C4",
2332
+ cancel: "\uCDE8\uC18C",
2333
+ download: "\uB2E4\uC6B4\uB85C\uB4DC"
2334
+ }
2335
+ };
2336
+
2337
+ // src/i18n/locales/vi.json
2338
+ var vi_default = {
2339
+ direction: "ltr",
2340
+ chatWidget: {
2341
+ title: "Tr\xF2 chuy\u1EC7n",
2342
+ placeholder: "Nh\u1EADp tin nh\u1EAFn...",
2343
+ openChat: "M\u1EDF tr\xF2 chuy\u1EC7n",
2344
+ closeChat: "\u0110\xF3ng tr\xF2 chuy\u1EC7n",
2345
+ connectionStatus: {
2346
+ connected: "\u0110\xE3 k\u1EBFt n\u1ED1i",
2347
+ disconnected: "\u0110\xE3 ng\u1EAFt k\u1EBFt n\u1ED1i"
2348
+ }
2349
+ },
2350
+ inputArea: {
2351
+ send: "G\u1EEDi",
2352
+ uploading: "\u0110ang t\u1EA3i l\xEAn...",
2353
+ dropzone: {
2354
+ dropFiles: "Th\u1EA3 t\u1EC7p t\u1EA1i \u0111\xE2y",
2355
+ dropOrClick: "Th\u1EA3 ho\u1EB7c nh\u1EA5p \u0111\u1EC3 \u0111\xEDnh k\xE8m"
2356
+ }
2357
+ },
2358
+ typingIndicator: {
2359
+ typing: "\u0111ang nh\u1EADp",
2360
+ isTyping: "\u0111ang nh\u1EADp..."
2361
+ },
2362
+ messageList: {
2363
+ emptyState: "Ch\u01B0a c\xF3 tin nh\u1EAFn n\xE0o. H\xE3y b\u1EAFt \u0111\u1EA7u cu\u1ED9c tr\xF2 chuy\u1EC7n!"
2364
+ },
2365
+ attachmentList: {
2366
+ remove: "X\xF3a",
2367
+ uploadFailed: "T\u1EA3i l\xEAn th\u1EA5t b\u1EA1i"
2368
+ },
2369
+ header: {
2370
+ enterFullscreen: "To\xE0n m\xE0n h\xECnh",
2371
+ exitFullscreen: "Tho\xE1t to\xE0n m\xE0n h\xECnh",
2372
+ closeChat: "\u0110\xF3ng tr\xF2 chuy\u1EC7n",
2373
+ lightMode: "Ch\u1EBF \u0111\u1ED9 s\xE1ng",
2374
+ darkMode: "Ch\u1EBF \u0111\u1ED9 t\u1ED1i",
2375
+ autoMode: "Giao di\u1EC7n h\u1EC7 th\u1ED1ng"
2376
+ },
2377
+ floatingButton: {
2378
+ openChat: "M\u1EDF tr\xF2 chuy\u1EC7n",
2379
+ closeChat: "\u0110\xF3ng tr\xF2 chuy\u1EC7n"
2380
+ },
2381
+ push: {
2382
+ title: "Th\xF4ng b\xE1o",
2383
+ description: "Nh\u1EADn tin nh\u1EAFn ngay c\u1EA3 khi tr\xF2 chuy\u1EC7n \u0111\xE3 \u0111\xF3ng",
2384
+ enable: "B\u1EADt th\xF4ng b\xE1o",
2385
+ disable: "T\u1EAFt th\xF4ng b\xE1o",
2386
+ denied: "Th\xF4ng b\xE1o b\u1ECB ch\u1EB7n",
2387
+ unsupported: "Th\xF4ng b\xE1o kh\xF4ng \u0111\u01B0\u1EE3c h\u1ED7 tr\u1EE3",
2388
+ subscribing: "\u0110ang \u0111\u0103ng k\xFD...",
2389
+ notifications: "Th\xF4ng b\xE1o"
2390
+ },
2391
+ notification: {
2392
+ openChat: "M\u1EDF Tr\xF2 chuy\u1EC7n",
2393
+ dismiss: "B\u1ECF qua"
2394
+ },
2395
+ common: {
2396
+ loading: "\u0110ang t\u1EA3i...",
2397
+ error: "L\u1ED7i",
2398
+ retry: "Th\u1EED l\u1EA1i",
2399
+ cancel: "H\u1EE7y",
2400
+ download: "T\u1EA3i xu\u1ED1ng"
2401
+ }
2402
+ };
2403
+
2404
+ // src/i18n/locales/th.json
2405
+ var th_default = {
2406
+ direction: "ltr",
2407
+ chatWidget: {
2408
+ title: "\u0E41\u0E0A\u0E17",
2409
+ placeholder: "\u0E1E\u0E34\u0E21\u0E1E\u0E4C\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21...",
2410
+ openChat: "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17",
2411
+ closeChat: "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17",
2412
+ connectionStatus: {
2413
+ connected: "\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27",
2414
+ disconnected: "\u0E15\u0E31\u0E14\u0E01\u0E32\u0E23\u0E40\u0E0A\u0E37\u0E48\u0E2D\u0E21\u0E15\u0E48\u0E2D\u0E41\u0E25\u0E49\u0E27"
2415
+ }
2416
+ },
2417
+ inputArea: {
2418
+ send: "\u0E2A\u0E48\u0E07",
2419
+ uploading: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2D\u0E31\u0E1B\u0E42\u0E2B\u0E25\u0E14...",
2420
+ dropzone: {
2421
+ dropFiles: "\u0E27\u0E32\u0E07\u0E44\u0E1F\u0E25\u0E4C\u0E17\u0E35\u0E48\u0E19\u0E35\u0E48",
2422
+ dropOrClick: "\u0E27\u0E32\u0E07\u0E2B\u0E23\u0E37\u0E2D\u0E04\u0E25\u0E34\u0E01\u0E40\u0E1E\u0E37\u0E48\u0E2D\u0E41\u0E19\u0E1A"
2423
+ }
2424
+ },
2425
+ typingIndicator: {
2426
+ typing: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E1E\u0E34\u0E21\u0E1E\u0E4C",
2427
+ isTyping: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E1E\u0E34\u0E21\u0E1E\u0E4C..."
2428
+ },
2429
+ messageList: {
2430
+ emptyState: "\u0E22\u0E31\u0E07\u0E44\u0E21\u0E48\u0E21\u0E35\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21 \u0E40\u0E23\u0E34\u0E48\u0E21\u0E01\u0E32\u0E23\u0E2A\u0E19\u0E17\u0E19\u0E32!"
2431
+ },
2432
+ attachmentList: {
2433
+ remove: "\u0E25\u0E1A",
2434
+ uploadFailed: "\u0E2D\u0E31\u0E1B\u0E42\u0E2B\u0E25\u0E14\u0E25\u0E49\u0E21\u0E40\u0E2B\u0E25\u0E27"
2435
+ },
2436
+ header: {
2437
+ enterFullscreen: "\u0E40\u0E15\u0E47\u0E21\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E2D",
2438
+ exitFullscreen: "\u0E2D\u0E2D\u0E01\u0E08\u0E32\u0E01\u0E40\u0E15\u0E47\u0E21\u0E2B\u0E19\u0E49\u0E32\u0E08\u0E2D",
2439
+ closeChat: "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17",
2440
+ lightMode: "\u0E42\u0E2B\u0E21\u0E14\u0E2A\u0E27\u0E48\u0E32\u0E07",
2441
+ darkMode: "\u0E42\u0E2B\u0E21\u0E14\u0E21\u0E37\u0E14",
2442
+ autoMode: "\u0E18\u0E35\u0E21\u0E23\u0E30\u0E1A\u0E1A"
2443
+ },
2444
+ floatingButton: {
2445
+ openChat: "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17",
2446
+ closeChat: "\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17"
2447
+ },
2448
+ push: {
2449
+ title: "\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19",
2450
+ description: "\u0E23\u0E31\u0E1A\u0E02\u0E49\u0E2D\u0E04\u0E27\u0E32\u0E21\u0E41\u0E21\u0E49\u0E43\u0E19\u0E02\u0E13\u0E30\u0E17\u0E35\u0E48\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17\u0E2D\u0E22\u0E39\u0E48",
2451
+ enable: "\u0E40\u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19",
2452
+ disable: "\u0E1B\u0E34\u0E14\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19",
2453
+ denied: "\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19\u0E16\u0E39\u0E01\u0E1A\u0E25\u0E47\u0E2D\u0E01",
2454
+ unsupported: "\u0E44\u0E21\u0E48\u0E23\u0E2D\u0E07\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19",
2455
+ subscribing: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E2A\u0E21\u0E31\u0E04\u0E23\u0E23\u0E31\u0E1A...",
2456
+ notifications: "\u0E01\u0E32\u0E23\u0E41\u0E08\u0E49\u0E07\u0E40\u0E15\u0E37\u0E2D\u0E19"
2457
+ },
2458
+ notification: {
2459
+ openChat: "\u0E40\u0E1B\u0E34\u0E14\u0E41\u0E0A\u0E17",
2460
+ dismiss: "\u0E1B\u0E34\u0E14"
2461
+ },
2462
+ common: {
2463
+ loading: "\u0E01\u0E33\u0E25\u0E31\u0E07\u0E42\u0E2B\u0E25\u0E14...",
2464
+ error: "\u0E02\u0E49\u0E2D\u0E1C\u0E34\u0E14\u0E1E\u0E25\u0E32\u0E14",
2465
+ retry: "\u0E25\u0E2D\u0E07\u0E2D\u0E35\u0E01\u0E04\u0E23\u0E31\u0E49\u0E07",
2466
+ cancel: "\u0E22\u0E01\u0E40\u0E25\u0E34\u0E01",
2467
+ download: "\u0E14\u0E32\u0E27\u0E19\u0E4C\u0E42\u0E2B\u0E25\u0E14"
2468
+ }
2469
+ };
2470
+
2471
+ // src/i18n/locales/id.json
2472
+ var id_default = {
2473
+ direction: "ltr",
2474
+ chatWidget: {
2475
+ title: "Obrolan",
2476
+ placeholder: "Ketik pesan...",
2477
+ openChat: "Buka obrolan",
2478
+ closeChat: "Tutup obrolan",
2479
+ connectionStatus: {
2480
+ connected: "Terhubung",
2481
+ disconnected: "Terputus"
2482
+ }
2483
+ },
2484
+ inputArea: {
2485
+ send: "Kirim",
2486
+ uploading: "Mengunggah...",
2487
+ dropzone: {
2488
+ dropFiles: "Letakkan file di sini",
2489
+ dropOrClick: "Letakkan atau klik untuk melampirkan"
2490
+ }
2491
+ },
2492
+ typingIndicator: {
2493
+ typing: "mengetik",
2494
+ isTyping: "sedang mengetik..."
2495
+ },
2496
+ messageList: {
2497
+ emptyState: "Belum ada pesan. Mulai percakapan!"
2498
+ },
2499
+ attachmentList: {
2500
+ remove: "Hapus",
2501
+ uploadFailed: "Unggahan gagal"
2502
+ },
2503
+ header: {
2504
+ enterFullscreen: "Layar penuh",
2505
+ exitFullscreen: "Keluar layar penuh",
2506
+ closeChat: "Tutup obrolan",
2507
+ lightMode: "Mode terang",
2508
+ darkMode: "Mode gelap",
2509
+ autoMode: "Tema sistem"
2510
+ },
2511
+ floatingButton: {
2512
+ openChat: "Buka obrolan",
2513
+ closeChat: "Tutup obrolan"
2514
+ },
2515
+ push: {
2516
+ title: "Notifikasi",
2517
+ description: "Terima pesan bahkan saat obrolan tertutup",
2518
+ enable: "Aktifkan notifikasi",
2519
+ disable: "Nonaktifkan notifikasi",
2520
+ denied: "Notifikasi diblokir",
2521
+ unsupported: "Notifikasi tidak didukung",
2522
+ subscribing: "Berlangganan...",
2523
+ notifications: "Notifikasi"
2524
+ },
2525
+ notification: {
2526
+ openChat: "Buka Obrolan",
2527
+ dismiss: "Tutup"
2528
+ },
2529
+ common: {
2530
+ loading: "Memuat...",
2531
+ error: "Kesalahan",
2532
+ retry: "Coba lagi",
2533
+ cancel: "Batal",
2534
+ download: "Unduh"
2535
+ }
2536
+ };
2537
+
2538
+ // src/i18n/locales/hi.json
2539
+ var hi_default = {
2540
+ direction: "ltr",
2541
+ chatWidget: {
2542
+ title: "\u091A\u0948\u091F",
2543
+ placeholder: "\u0938\u0902\u0926\u0947\u0936 \u0932\u093F\u0916\u0947\u0902...",
2544
+ openChat: "\u091A\u0948\u091F \u0916\u094B\u0932\u0947\u0902",
2545
+ closeChat: "\u091A\u0948\u091F \u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
2546
+ connectionStatus: {
2547
+ connected: "\u0915\u0928\u0947\u0915\u094D\u091F\u0947\u0921",
2548
+ disconnected: "\u0921\u093F\u0938\u094D\u0915\u0928\u0947\u0915\u094D\u091F\u0947\u0921"
2549
+ }
2550
+ },
2551
+ inputArea: {
2552
+ send: "\u092D\u0947\u091C\u0947\u0902",
2553
+ uploading: "\u0905\u092A\u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948...",
2554
+ dropzone: {
2555
+ dropFiles: "\u092B\u093C\u093E\u0907\u0932\u0947\u0902 \u092F\u0939\u093E\u0902 \u091B\u094B\u0921\u093C\u0947\u0902",
2556
+ dropOrClick: "\u0938\u0902\u0932\u0917\u094D\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093F\u090F \u091B\u094B\u0921\u093C\u0947\u0902 \u092F\u093E \u0915\u094D\u0932\u093F\u0915 \u0915\u0930\u0947\u0902"
2557
+ }
2558
+ },
2559
+ typingIndicator: {
2560
+ typing: "\u0932\u093F\u0916 \u0930\u0939\u093E \u0939\u0948",
2561
+ isTyping: "\u0932\u093F\u0916 \u0930\u0939\u093E \u0939\u0948..."
2562
+ },
2563
+ messageList: {
2564
+ emptyState: "\u0905\u092D\u0940 \u0924\u0915 \u0915\u094B\u0908 \u0938\u0902\u0926\u0947\u0936 \u0928\u0939\u0940\u0902\u0964 \u092C\u093E\u0924\u091A\u0940\u0924 \u0936\u0941\u0930\u0942 \u0915\u0930\u0947\u0902!"
2565
+ },
2566
+ attachmentList: {
2567
+ remove: "\u0939\u091F\u093E\u090F\u0902",
2568
+ uploadFailed: "\u0905\u092A\u0932\u094B\u0921 \u0935\u093F\u092B\u0932"
2569
+ },
2570
+ header: {
2571
+ enterFullscreen: "\u092A\u0942\u0930\u094D\u0923 \u0938\u094D\u0915\u094D\u0930\u0940\u0928",
2572
+ exitFullscreen: "\u092A\u0942\u0930\u094D\u0923 \u0938\u094D\u0915\u094D\u0930\u0940\u0928 \u0938\u0947 \u092C\u093E\u0939\u0930 \u0928\u093F\u0915\u0932\u0947\u0902",
2573
+ closeChat: "\u091A\u0948\u091F \u092C\u0902\u0926 \u0915\u0930\u0947\u0902",
2574
+ lightMode: "\u0932\u093E\u0907\u091F \u092E\u094B\u0921",
2575
+ darkMode: "\u0921\u093E\u0930\u094D\u0915 \u092E\u094B\u0921",
2576
+ autoMode: "\u0938\u093F\u0938\u094D\u091F\u092E \u0925\u0940\u092E"
2577
+ },
2578
+ floatingButton: {
2579
+ openChat: "\u091A\u0948\u091F \u0916\u094B\u0932\u0947\u0902",
2580
+ closeChat: "\u091A\u0948\u091F \u092C\u0902\u0926 \u0915\u0930\u0947\u0902"
2581
+ },
2582
+ push: {
2583
+ title: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902",
2584
+ description: "\u091A\u0948\u091F \u092C\u0902\u0926 \u0939\u094B\u0928\u0947 \u092A\u0930 \u092D\u0940 \u0938\u0902\u0926\u0947\u0936 \u092A\u094D\u0930\u093E\u092A\u094D\u0924 \u0915\u0930\u0947\u0902",
2585
+ enable: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902 \u0938\u0915\u094D\u0937\u092E \u0915\u0930\u0947\u0902",
2586
+ disable: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902 \u0905\u0915\u094D\u0937\u092E \u0915\u0930\u0947\u0902",
2587
+ denied: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902 \u0905\u0935\u0930\u0941\u0926\u094D\u0927",
2588
+ unsupported: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902 \u0938\u092E\u0930\u094D\u0925\u093F\u0924 \u0928\u0939\u0940\u0902",
2589
+ subscribing: "\u0938\u092C\u094D\u0938\u0915\u094D\u0930\u093E\u0907\u092C \u0939\u094B \u0930\u0939\u093E \u0939\u0948...",
2590
+ notifications: "\u0938\u0942\u091A\u0928\u093E\u090F\u0902"
2591
+ },
2592
+ notification: {
2593
+ openChat: "\u091A\u0948\u091F \u0916\u094B\u0932\u0947\u0902",
2594
+ dismiss: "\u0916\u093E\u0930\u093F\u091C \u0915\u0930\u0947\u0902"
2595
+ },
2596
+ common: {
2597
+ loading: "\u0932\u094B\u0921 \u0939\u094B \u0930\u0939\u093E \u0939\u0948...",
2598
+ error: "\u0924\u094D\u0930\u0941\u091F\u093F",
2599
+ retry: "\u092A\u0941\u0928\u0903 \u092A\u094D\u0930\u092F\u093E\u0938 \u0915\u0930\u0947\u0902",
2600
+ cancel: "\u0930\u0926\u094D\u0926 \u0915\u0930\u0947\u0902",
2601
+ download: "\u0921\u093E\u0909\u0928\u0932\u094B\u0921 \u0915\u0930\u0947\u0902"
2602
+ }
2603
+ };
2604
+
2605
+ // src/i18n/locales/ar.json
2606
+ var ar_default = {
2607
+ direction: "rtl",
2608
+ chatWidget: {
2609
+ title: "\u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2610
+ placeholder: "\u0627\u0643\u062A\u0628 \u0631\u0633\u0627\u0644\u0629...",
2611
+ openChat: "\u0641\u062A\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2612
+ closeChat: "\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2613
+ connectionStatus: {
2614
+ connected: "\u0645\u062A\u0635\u0644",
2615
+ disconnected: "\u063A\u064A\u0631 \u0645\u062A\u0635\u0644"
833
2616
  }
834
2617
  },
835
2618
  inputArea: {
836
- send: "Enviar",
837
- uploading: "Subiendo...",
2619
+ send: "\u0625\u0631\u0633\u0627\u0644",
2620
+ uploading: "\u062C\u0627\u0631\u064D \u0627\u0644\u0631\u0641\u0639...",
838
2621
  dropzone: {
839
- dropFiles: "Suelta archivos aqu\xED",
840
- dropOrClick: "Suelta o haz clic para adjuntar"
2622
+ dropFiles: "\u0623\u0633\u0642\u0637 \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0647\u0646\u0627",
2623
+ dropOrClick: "\u0623\u0633\u0642\u0637 \u0623\u0648 \u0627\u0646\u0642\u0631 \u0644\u0644\u0625\u0631\u0641\u0627\u0642"
841
2624
  }
842
2625
  },
843
2626
  typingIndicator: {
844
- typing: "escribiendo",
845
- isTyping: "est\xE1 escribiendo..."
2627
+ typing: "\u064A\u0643\u062A\u0628",
2628
+ isTyping: "\u064A\u0643\u062A\u0628..."
846
2629
  },
847
2630
  messageList: {
848
- emptyState: "No hay mensajes todav\xEDa. \xA1Inicia la conversaci\xF3n!"
2631
+ emptyState: "\u0644\u0627 \u062A\u0648\u062C\u062F \u0631\u0633\u0627\u0626\u0644 \u0628\u0639\u062F. \u0627\u0628\u062F\u0623 \u0627\u0644\u0645\u062D\u0627\u062F\u062B\u0629!"
849
2632
  },
850
2633
  attachmentList: {
851
- remove: "Eliminar",
852
- uploadFailed: "Error al subir"
2634
+ remove: "\u0625\u0632\u0627\u0644\u0629",
2635
+ uploadFailed: "\u0641\u0634\u0644 \u0627\u0644\u0631\u0641\u0639"
853
2636
  },
854
2637
  header: {
855
- enterFullscreen: "Pantalla completa",
856
- exitFullscreen: "Salir de pantalla completa",
857
- closeChat: "Cerrar chat"
2638
+ enterFullscreen: "\u062F\u062E\u0648\u0644 \u0648\u0636\u0639 \u0627\u0644\u0645\u0644\u0621",
2639
+ exitFullscreen: "\u062E\u0631\u0648\u062C \u0645\u0646 \u0648\u0636\u0639 \u0627\u0644\u0645\u0644\u0621",
2640
+ closeChat: "\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2641
+ lightMode: "\u0648\u0636\u0639 \u0641\u0627\u062A\u062D",
2642
+ darkMode: "\u0648\u0636\u0639 \u062F\u0627\u0643\u0646",
2643
+ autoMode: "\u062A\u0644\u0642\u0627\u0626\u064A"
858
2644
  },
859
2645
  floatingButton: {
860
- openChat: "Abrir chat",
861
- closeChat: "Cerrar chat"
2646
+ openChat: "\u0641\u062A\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2647
+ closeChat: "\u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062F\u0631\u062F\u0634\u0629"
2648
+ },
2649
+ push: {
2650
+ title: "\u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A",
2651
+ description: "\u0627\u0633\u062A\u0644\u0645 \u0627\u0644\u0631\u0633\u0627\u0626\u0644 \u062D\u062A\u0649 \u0639\u0646\u062F \u0625\u063A\u0644\u0627\u0642 \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2652
+ enable: "\u062A\u0641\u0639\u064A\u0644 \u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A",
2653
+ disable: "\u062A\u0639\u0637\u064A\u0644 \u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A",
2654
+ denied: "\u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A \u0645\u062D\u0638\u0648\u0631\u0629",
2655
+ unsupported: "\u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A \u063A\u064A\u0631 \u0645\u062F\u0639\u0648\u0645\u0629",
2656
+ subscribing: "\u062C\u0627\u0631\u064D \u0627\u0644\u0627\u0634\u062A\u0631\u0627\u0643...",
2657
+ notifications: "\u0627\u0644\u0625\u0634\u0639\u0627\u0631\u0627\u062A"
2658
+ },
2659
+ notification: {
2660
+ openChat: "\u0641\u062A\u062D \u0627\u0644\u062F\u0631\u062F\u0634\u0629",
2661
+ dismiss: "\u062A\u062C\u0627\u0647\u0644"
862
2662
  },
863
2663
  common: {
864
- loading: "Cargando...",
865
- error: "Error",
866
- retry: "Reintentar",
867
- cancel: "Cancelar",
868
- download: "Descargar"
2664
+ loading: "\u062C\u0627\u0631\u064D \u0627\u0644\u062A\u062D\u0645\u064A\u0644...",
2665
+ error: "\u062E\u0637\u0623",
2666
+ retry: "\u0625\u0639\u0627\u062F\u0629 \u0627\u0644\u0645\u062D\u0627\u0648\u0644\u0629",
2667
+ cancel: "\u0625\u0644\u063A\u0627\u0621",
2668
+ download: "\u062A\u0646\u0632\u064A\u0644"
869
2669
  }
870
2670
  };
871
2671
 
@@ -890,7 +2690,33 @@ var systemLocales = {
890
2690
  pt: pt_default,
891
2691
  "pt-BR": deepMerge(pt_default, pt_BR_default),
892
2692
  "pt-PT": deepMerge(pt_default, pt_PT_default),
893
- es: es_default
2693
+ es: es_default,
2694
+ da: da_default,
2695
+ sv: sv_default,
2696
+ nb: nb_default,
2697
+ fi: fi_default,
2698
+ fr: fr_default,
2699
+ de: de_default,
2700
+ it: it_default,
2701
+ nl: nl_default,
2702
+ pl: pl_default,
2703
+ cs: cs_default,
2704
+ ro: ro_default,
2705
+ hu: hu_default,
2706
+ uk: uk_default,
2707
+ ru: ru_default,
2708
+ el: el_default,
2709
+ tr: tr_default,
2710
+ et: et_default,
2711
+ ja: ja_default,
2712
+ "zh-CN": zh_CN_default,
2713
+ "zh-TW": zh_TW_default,
2714
+ ko: ko_default,
2715
+ vi: vi_default,
2716
+ th: th_default,
2717
+ id: id_default,
2718
+ hi: hi_default,
2719
+ ar: ar_default
894
2720
  };
895
2721
  function registerLocale(locale, strings) {
896
2722
  systemLocales[locale] = strings;
@@ -932,7 +2758,7 @@ function LocaleProvider({ children, locale }) {
932
2758
  }
933
2759
  return typeof current === "string" ? current : path;
934
2760
  };
935
- return { locale: config.locale, strings, t };
2761
+ return { locale: config.locale, dir: strings.direction, strings, t };
936
2762
  }, [config.locale, config.overrides]);
937
2763
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(LocaleContext.Provider, { value, children });
938
2764
  }
@@ -942,6 +2768,7 @@ function useLocale() {
942
2768
  const strings = mergeLocale("en");
943
2769
  return {
944
2770
  locale: "en",
2771
+ dir: strings.direction,
945
2772
  strings,
946
2773
  t: (path) => {
947
2774
  const parts = path.split(".");
@@ -1040,9 +2867,18 @@ function Header({
1040
2867
  isConnected = true,
1041
2868
  className,
1042
2869
  theme,
1043
- onThemeChange
2870
+ onThemeChange,
2871
+ pushStatus,
2872
+ onPushToggle
1044
2873
  }) {
1045
2874
  const { t } = useLocale();
2875
+ const pushLabel = (() => {
2876
+ if (!pushStatus) return "";
2877
+ if (pushStatus === "subscribed") return t("push.disable");
2878
+ if (pushStatus === "denied") return t("push.denied");
2879
+ if (pushStatus === "subscribing") return t("push.subscribing");
2880
+ return t("push.enable");
2881
+ })();
1046
2882
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
1047
2883
  "div",
1048
2884
  {
@@ -1062,6 +2898,66 @@ function Header({
1062
2898
  /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("h2", { className: "m-0 text-base font-semibold text-chat-text", children: title })
1063
2899
  ] }),
1064
2900
  /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)("div", { className: "flex items-center gap-1", children: [
2901
+ onPushToggle && pushStatus && pushStatus !== "unsupported" && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
2902
+ "button",
2903
+ {
2904
+ onClick: onPushToggle,
2905
+ className: "p-1 bg-transparent border-none cursor-pointer text-chat-text-secondary rounded hover:bg-chat-surface transition",
2906
+ "data-chat-push-toggle": "true",
2907
+ "aria-label": pushLabel,
2908
+ title: pushLabel,
2909
+ children: pushStatus === "subscribed" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
2910
+ "svg",
2911
+ {
2912
+ width: "18",
2913
+ height: "18",
2914
+ viewBox: "0 0 24 24",
2915
+ fill: "currentColor",
2916
+ stroke: "currentColor",
2917
+ strokeWidth: "1",
2918
+ strokeLinecap: "round",
2919
+ strokeLinejoin: "round",
2920
+ children: [
2921
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9" }),
2922
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M13.73 21a2 2 0 0 1-3.46 0" })
2923
+ ]
2924
+ }
2925
+ ) : pushStatus === "denied" ? /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
2926
+ "svg",
2927
+ {
2928
+ width: "18",
2929
+ height: "18",
2930
+ viewBox: "0 0 24 24",
2931
+ fill: "none",
2932
+ stroke: "currentColor",
2933
+ strokeWidth: "2",
2934
+ strokeLinecap: "round",
2935
+ strokeLinejoin: "round",
2936
+ children: [
2937
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9" }),
2938
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M13.73 21a2 2 0 0 1-3.46 0" }),
2939
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("line", { x1: "1", y1: "1", x2: "23", y2: "23" })
2940
+ ]
2941
+ }
2942
+ ) : /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
2943
+ "svg",
2944
+ {
2945
+ width: "18",
2946
+ height: "18",
2947
+ viewBox: "0 0 24 24",
2948
+ fill: "none",
2949
+ stroke: "currentColor",
2950
+ strokeWidth: "2",
2951
+ strokeLinecap: "round",
2952
+ strokeLinejoin: "round",
2953
+ children: [
2954
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9" }),
2955
+ /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("path", { d: "M13.73 21a2 2 0 0 1-3.46 0" })
2956
+ ]
2957
+ }
2958
+ )
2959
+ }
2960
+ ),
1065
2961
  onThemeChange && /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
1066
2962
  "button",
1067
2963
  {
@@ -1482,7 +3378,21 @@ function MessageContent({ message, onActionClick }) {
1482
3378
  className: "inline-flex items-center gap-2 px-3 py-2 bg-chat-surface rounded text-sm no-underline text-chat-text hover:bg-chat-background transition",
1483
3379
  "data-chat-attachment": attachment.id,
1484
3380
  children: [
1485
- "\u{1F4CE} ",
3381
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
3382
+ "svg",
3383
+ {
3384
+ width: "16",
3385
+ height: "16",
3386
+ viewBox: "0 0 24 24",
3387
+ fill: "none",
3388
+ stroke: "currentColor",
3389
+ strokeWidth: "2",
3390
+ strokeLinecap: "round",
3391
+ strokeLinejoin: "round",
3392
+ className: "shrink-0",
3393
+ children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48" })
3394
+ }
3395
+ ),
1486
3396
  attachment.name
1487
3397
  ]
1488
3398
  }
@@ -2025,10 +3935,83 @@ function TypingIndicator({ users = [] }) {
2025
3935
  );
2026
3936
  }
2027
3937
 
2028
- // src/components/ChatWidget.tsx
3938
+ // src/components/PushPermissionPrompt.tsx
3939
+ var import_react13 = require("react");
2029
3940
  var import_jsx_runtime16 = require("react/jsx-runtime");
3941
+ function PushPermissionPrompt({
3942
+ autoHide = true,
3943
+ title,
3944
+ description,
3945
+ onStatusChange,
3946
+ getVapidPublicKey,
3947
+ onSubscribe,
3948
+ onUnsubscribe
3949
+ }) {
3950
+ const { t } = useLocale();
3951
+ const { status, isSupported, isSubscribed, subscribe, unsubscribe } = usePushNotifications({
3952
+ enabled: true,
3953
+ getVapidPublicKey,
3954
+ onSubscribe,
3955
+ onUnsubscribe
3956
+ });
3957
+ const [dismissed, setDismissed] = (0, import_react13.useState)(false);
3958
+ if (!isSupported) return null;
3959
+ if (autoHide && (isSubscribed || status === "denied")) return null;
3960
+ if (dismissed) return null;
3961
+ const handleEnable = async () => {
3962
+ await subscribe();
3963
+ onStatusChange?.(true);
3964
+ };
3965
+ const handleDisable = async () => {
3966
+ await unsubscribe();
3967
+ onStatusChange?.(false);
3968
+ };
3969
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
3970
+ "div",
3971
+ {
3972
+ className: "p-3 bg-chat-surface rounded-lg flex items-start gap-3",
3973
+ "data-chat-push-prompt": "true",
3974
+ children: [
3975
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex-1", children: [
3976
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "font-semibold mb-1 text-chat-text", children: title || t("push.title") }),
3977
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { className: "text-sm text-chat-text-secondary", children: description || t("push.description") })
3978
+ ] }),
3979
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: "flex gap-2", children: [
3980
+ !isSubscribed && status !== "denied" && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3981
+ "button",
3982
+ {
3983
+ onClick: handleEnable,
3984
+ className: "px-3 py-1.5 bg-chat-primary text-white border-none rounded cursor-pointer text-sm hover:opacity-90",
3985
+ children: t("push.enable")
3986
+ }
3987
+ ),
3988
+ isSubscribed && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3989
+ "button",
3990
+ {
3991
+ onClick: handleDisable,
3992
+ className: "px-3 py-1.5 bg-transparent text-chat-text-secondary border border-chat-border rounded cursor-pointer text-sm hover:bg-chat-surface",
3993
+ children: t("push.disable")
3994
+ }
3995
+ ),
3996
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
3997
+ "button",
3998
+ {
3999
+ onClick: () => setDismissed(true),
4000
+ className: "px-1.5 bg-transparent border-none cursor-pointer text-chat-text-secondary hover:text-chat-text",
4001
+ children: "\u2715"
4002
+ }
4003
+ )
4004
+ ] })
4005
+ ]
4006
+ }
4007
+ );
4008
+ }
4009
+
4010
+ // src/components/ChatWidget.tsx
4011
+ var import_jsx_runtime17 = require("react/jsx-runtime");
2030
4012
  function ChatWidget({
2031
4013
  client,
4014
+ locale: localeProp,
2032
4015
  initialMode = "floating",
2033
4016
  theme: themeProp,
2034
4017
  onThemeChange,
@@ -2037,7 +4020,7 @@ function ChatWidget({
2037
4020
  showClose = true,
2038
4021
  showFullscreenToggle = true,
2039
4022
  title = "Chat",
2040
- placeholder = "Type a message...",
4023
+ placeholder,
2041
4024
  onOpen,
2042
4025
  onClose,
2043
4026
  embedded,
@@ -2046,7 +4029,10 @@ function ChatWidget({
2046
4029
  uploadConfig,
2047
4030
  accept,
2048
4031
  maxFileSize,
2049
- renderPushPrompt
4032
+ renderPushPrompt,
4033
+ preEntry,
4034
+ onChatStart,
4035
+ pushConfig
2050
4036
  }) {
2051
4037
  const {
2052
4038
  config: iframeConfig,
@@ -2055,10 +4041,16 @@ function ChatWidget({
2055
4041
  notifyViewportConfig,
2056
4042
  onNotificationClicked
2057
4043
  } = useBridge();
4044
+ const effectiveLocale = localeProp ?? (isInIframe ? iframeConfig?.locale : void 0) ?? useLocale().locale;
4045
+ const merged = mergeLocale(effectiveLocale);
4046
+ const dir = merged.direction;
4047
+ (0, import_react14.useEffect)(() => {
4048
+ client.setLocaleHeader(effectiveLocale);
4049
+ }, [client, effectiveLocale]);
2058
4050
  const autoEmbedded = isInIframe && embedded !== false;
2059
4051
  const effectiveEmbedded = embedded === true || autoEmbedded;
2060
4052
  const effectiveMode = effectiveEmbedded ? "embedded" : initialMode;
2061
- const [theme, setTheme] = (0, import_react13.useState)(() => {
4053
+ const [theme, setTheme] = (0, import_react14.useState)(() => {
2062
4054
  if (themeProp) return themeProp;
2063
4055
  try {
2064
4056
  const stored = localStorage.getItem("chat-theme");
@@ -2067,11 +4059,11 @@ function ChatWidget({
2067
4059
  }
2068
4060
  return "auto";
2069
4061
  });
2070
- const [systemDark, setSystemDark] = (0, import_react13.useState)(
4062
+ const [systemDark, setSystemDark] = (0, import_react14.useState)(
2071
4063
  () => typeof window !== "undefined" && window.matchMedia("(prefers-color-scheme: dark)").matches
2072
4064
  );
2073
4065
  const effectiveTheme = theme === "auto" ? systemDark ? "dark" : "light" : theme;
2074
- (0, import_react13.useEffect)(() => {
4066
+ (0, import_react14.useEffect)(() => {
2075
4067
  if (themeProp && themeProp !== theme) {
2076
4068
  setTheme(themeProp);
2077
4069
  try {
@@ -2080,7 +4072,7 @@ function ChatWidget({
2080
4072
  }
2081
4073
  }
2082
4074
  }, [themeProp]);
2083
- (0, import_react13.useEffect)(() => {
4075
+ (0, import_react14.useEffect)(() => {
2084
4076
  if (theme !== "auto") return;
2085
4077
  const mq = window.matchMedia("(prefers-color-scheme: dark)");
2086
4078
  const handler = (e) => setSystemDark(e.matches);
@@ -2095,13 +4087,22 @@ function ChatWidget({
2095
4087
  }
2096
4088
  onThemeChange?.(newTheme);
2097
4089
  };
2098
- const [isOpen, setIsOpen] = (0, import_react13.useState)(effectiveMode === "fullscreen");
2099
- const [displayMode, setDisplayMode] = (0, import_react13.useState)(effectiveMode);
2100
- const [isConnected] = (0, import_react13.useState)(true);
2101
- const [isSmallScreen, setIsSmallScreen] = (0, import_react13.useState)(
4090
+ const [isOpen, setIsOpen] = (0, import_react14.useState)(effectiveMode === "fullscreen");
4091
+ const [displayMode, setDisplayMode] = (0, import_react14.useState)(effectiveMode);
4092
+ const [isConnected] = (0, import_react14.useState)(true);
4093
+ const [isPreEntry, setIsPreEntry] = (0, import_react14.useState)(Boolean(preEntry));
4094
+ const handleStart = (0, import_react14.useCallback)(
4095
+ (config) => {
4096
+ if (config) client.reconfigure(config);
4097
+ onChatStart?.(config);
4098
+ setIsPreEntry(false);
4099
+ },
4100
+ [client, onChatStart]
4101
+ );
4102
+ const [isSmallScreen, setIsSmallScreen] = (0, import_react14.useState)(
2102
4103
  () => typeof window !== "undefined" && window.innerWidth < 800
2103
4104
  );
2104
- (0, import_react13.useEffect)(() => {
4105
+ (0, import_react14.useEffect)(() => {
2105
4106
  const mq = window.matchMedia("(max-width: 799px)");
2106
4107
  const handler = (e) => {
2107
4108
  setIsSmallScreen(e.matches);
@@ -2112,11 +4113,11 @@ function ChatWidget({
2112
4113
  mq.addEventListener("change", handler);
2113
4114
  return () => mq.removeEventListener("change", handler);
2114
4115
  }, []);
2115
- (0, import_react13.useEffect)(() => {
4116
+ (0, import_react14.useEffect)(() => {
2116
4117
  if (initialMode !== "fullscreen") return;
2117
4118
  if (!isSmallScreen) setIsOpen(true);
2118
4119
  }, [initialMode, isSmallScreen]);
2119
- (0, import_react13.useEffect)(() => {
4120
+ (0, import_react14.useEffect)(() => {
2120
4121
  if (isInIframe) {
2121
4122
  notifyViewportConfig("interactive-widget=resizes-content");
2122
4123
  return () => notifyViewportConfig("");
@@ -2137,10 +4138,26 @@ function ChatWidget({
2137
4138
  }, [isOpen, displayMode, isSmallScreen, isInIframe, notifyViewportConfig]);
2138
4139
  const { messages, sendMessage, loading, isLoadingHistory, reloadMessages } = useMessages(
2139
4140
  client,
2140
- isOpen || effectiveEmbedded
4141
+ (isOpen || effectiveEmbedded) && !isPreEntry
2141
4142
  );
2142
4143
  const { isSomeoneTyping } = useTyping(client);
2143
- (0, import_react13.useEffect)(() => {
4144
+ const push = usePushNotifications({
4145
+ enabled: !!pushConfig,
4146
+ getVapidPublicKey: pushConfig?.getVapidPublicKey ?? (() => Promise.resolve("")),
4147
+ onSubscribe: pushConfig?.onSubscribe ?? (async () => {
4148
+ }),
4149
+ onUnsubscribe: pushConfig?.onUnsubscribe ?? (async () => {
4150
+ }),
4151
+ serviceWorkerUrl: pushConfig?.serviceWorkerUrl,
4152
+ serviceWorkerScope: pushConfig?.serviceWorkerScope,
4153
+ serviceWorkerType: pushConfig?.serviceWorkerType,
4154
+ notificationOptions: pushConfig?.notificationOptions
4155
+ });
4156
+ const handlePushToggle = (0, import_react14.useCallback)(() => {
4157
+ if (push.isSubscribed) push.unsubscribe();
4158
+ else push.subscribe();
4159
+ }, [push.isSubscribed, push.subscribe, push.unsubscribe]);
4160
+ (0, import_react14.useEffect)(() => {
2144
4161
  if (!isInIframe || !iframeConfig) return;
2145
4162
  if (iframeConfig.theme?.cssVariables) {
2146
4163
  const root = document.documentElement;
@@ -2153,16 +4170,16 @@ function ChatWidget({
2153
4170
  setTheme(mode);
2154
4171
  }
2155
4172
  }, [isInIframe, iframeConfig]);
2156
- (0, import_react13.useEffect)(() => {
4173
+ (0, import_react14.useEffect)(() => {
2157
4174
  if (!isInIframe) return;
2158
4175
  onNotificationClicked(() => {
2159
4176
  reloadMessages();
2160
4177
  });
2161
4178
  }, [isInIframe, onNotificationClicked, reloadMessages]);
2162
4179
  const effectiveTitle = isInIframe && iframeConfig?.title || title;
2163
- const effectivePlaceholder = isInIframe && iframeConfig?.placeholder || placeholder;
4180
+ const effectivePlaceholder = isInIframe && iframeConfig?.placeholder || placeholder || merged.chatWidget.placeholder;
2164
4181
  const currentUserId = "getCurrentUserId" in client ? client.getCurrentUserId() : "";
2165
- const handleSend = (0, import_react13.useCallback)(
4182
+ const handleSend = (0, import_react14.useCallback)(
2166
4183
  async (text, attachments = []) => {
2167
4184
  await sendMessage(text, attachments);
2168
4185
  if (isInIframe) {
@@ -2171,7 +4188,7 @@ function ChatWidget({
2171
4188
  },
2172
4189
  [sendMessage, isInIframe, notifyMessage]
2173
4190
  );
2174
- const handleActionClick = (0, import_react13.useCallback)(
4191
+ const handleActionClick = (0, import_react14.useCallback)(
2175
4192
  (messageId, actionId, value) => {
2176
4193
  client.sendAction(messageId, actionId, value).catch((err) => {
2177
4194
  console.error("Action failed:", err);
@@ -2179,80 +4196,92 @@ function ChatWidget({
2179
4196
  },
2180
4197
  [client]
2181
4198
  );
2182
- const handleReactionClick = (0, import_react13.useCallback)((_messageId, _emoji) => {
4199
+ const handleReactionClick = (0, import_react14.useCallback)((_messageId, _emoji) => {
2183
4200
  }, []);
2184
- const toggleOpen = (0, import_react13.useCallback)(() => {
4201
+ const toggleOpen = (0, import_react14.useCallback)(() => {
2185
4202
  setIsOpen((prev) => {
2186
4203
  if (!prev) onOpen?.();
2187
4204
  else onClose?.();
2188
4205
  return !prev;
2189
4206
  });
2190
4207
  }, [onOpen, onClose]);
2191
- const toggleFullscreen = (0, import_react13.useCallback)(() => {
4208
+ const toggleFullscreen = (0, import_react14.useCallback)(() => {
2192
4209
  setDisplayMode((prev) => prev === "fullscreen" ? "floating" : "fullscreen");
2193
4210
  }, []);
2194
- const close = (0, import_react13.useCallback)(() => {
4211
+ const close = (0, import_react14.useCallback)(() => {
2195
4212
  setIsOpen(false);
2196
4213
  setDisplayMode("floating");
2197
4214
  onClose?.();
2198
4215
  }, [onClose]);
2199
- const embeddedClose = (0, import_react13.useCallback)(() => {
4216
+ const embeddedClose = (0, import_react14.useCallback)(() => {
2200
4217
  if (isInIframe) {
2201
4218
  window.parent.postMessage({ type: "chat-close" }, "*");
2202
4219
  }
2203
4220
  }, [isInIframe]);
2204
- if (effectiveEmbedded) {
2205
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
2206
- "div",
4221
+ const panelContent = /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
4222
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4223
+ Header,
2207
4224
  {
2208
- className: "flex flex-col h-full min-h-[300px] overflow-hidden bg-chat-background",
2209
- "data-chat-widget": "embedded",
2210
- "data-chat-theme": effectiveTheme,
2211
- children: [
2212
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2213
- Header,
2214
- {
2215
- title: effectiveTitle,
2216
- isFullscreen: false,
2217
- showConnectionStatus: true,
2218
- isConnected,
2219
- className: className?.header,
2220
- theme,
2221
- onThemeChange: handleThemeChange,
2222
- onClose: isInIframe ? embeddedClose : void 0
2223
- }
2224
- ),
2225
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2226
- MessageList,
2227
- {
2228
- messages,
2229
- currentUserId,
2230
- isLoading: isLoadingHistory || loading,
2231
- onActionClick: handleActionClick,
2232
- onReactionClick: handleReactionClick,
2233
- className: className?.messageList
2234
- }
2235
- ),
2236
- isSomeoneTyping && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TypingIndicator, {}),
2237
- renderPushPrompt?.(),
2238
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2239
- InputArea,
2240
- {
2241
- onSend: handleSend,
2242
- placeholder: effectivePlaceholder,
2243
- className: className?.inputArea,
2244
- enableAttachments,
2245
- uploadConfig,
2246
- accept,
2247
- maxFileSize
2248
- }
2249
- )
2250
- ]
4225
+ title: effectiveTitle,
4226
+ onClose: effectiveEmbedded ? isInIframe ? embeddedClose : void 0 : displayMode === "floating" ? close : showClose ? close : void 0,
4227
+ onToggleFullscreen: effectiveEmbedded ? void 0 : showFullscreenToggle && !isSmallScreen ? toggleFullscreen : void 0,
4228
+ isFullscreen: effectiveEmbedded ? false : displayMode === "fullscreen",
4229
+ showConnectionStatus: true,
4230
+ isConnected,
4231
+ className: className?.header,
4232
+ theme,
4233
+ onThemeChange: handleThemeChange,
4234
+ pushStatus: pushConfig ? push.status : void 0,
4235
+ onPushToggle: pushConfig ? handlePushToggle : void 0
2251
4236
  }
2252
- );
2253
- }
2254
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_jsx_runtime16.Fragment, { children: [
2255
- !effectiveEmbedded && !isOpen && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
4237
+ ),
4238
+ isPreEntry && preEntry ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "flex-1 overflow-y-auto p-4", children: preEntry.render({ start: handleStart }) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
4239
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4240
+ MessageList,
4241
+ {
4242
+ messages,
4243
+ currentUserId,
4244
+ isLoading: isLoadingHistory || loading,
4245
+ onActionClick: handleActionClick,
4246
+ onReactionClick: handleReactionClick,
4247
+ className: className?.messageList
4248
+ }
4249
+ ),
4250
+ isSomeoneTyping && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(TypingIndicator, {}),
4251
+ pushConfig ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4252
+ PushPermissionPrompt,
4253
+ {
4254
+ getVapidPublicKey: pushConfig.getVapidPublicKey,
4255
+ onSubscribe: pushConfig.onSubscribe,
4256
+ onUnsubscribe: pushConfig.onUnsubscribe
4257
+ }
4258
+ ) : renderPushPrompt?.(),
4259
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4260
+ InputArea,
4261
+ {
4262
+ onSend: handleSend,
4263
+ placeholder: effectivePlaceholder,
4264
+ disabled: !effectiveEmbedded && loading,
4265
+ className: className?.inputArea,
4266
+ enableAttachments,
4267
+ uploadConfig,
4268
+ accept,
4269
+ maxFileSize
4270
+ }
4271
+ )
4272
+ ] })
4273
+ ] });
4274
+ const widget = effectiveEmbedded ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
4275
+ "div",
4276
+ {
4277
+ dir,
4278
+ className: "flex flex-col h-full min-h-[300px] overflow-hidden bg-chat-background",
4279
+ "data-chat-widget": "embedded",
4280
+ "data-chat-theme": effectiveTheme,
4281
+ children: panelContent
4282
+ }
4283
+ ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_jsx_runtime17.Fragment, { children: [
4284
+ !isOpen && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2256
4285
  FloatingButton,
2257
4286
  {
2258
4287
  onClick: toggleOpen,
@@ -2267,73 +4296,34 @@ function ChatWidget({
2267
4296
  className: floatingButton?.className
2268
4297
  }
2269
4298
  ),
2270
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
4299
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
2271
4300
  "div",
2272
4301
  {
2273
- className: `flex flex-col overflow-hidden ${displayMode === "fullscreen" ? "fixed inset-0 z-50" : `absolute ${position === "bottom-right" ? "bottom-20 right-5" : position === "bottom-left" ? "bottom-20 left-5" : ""} w-[480px] max-w-[min(800px,calc(100dvw-40px))] h-dvh max-h-[min(600px,80dvh)] z-10 shadow-xl border border-chat-border rounded-2xl`} bg-chat-background`,
4302
+ dir,
4303
+ className: `flex flex-col overflow-hidden ${displayMode === "fullscreen" ? "fixed inset-0 z-50" : `absolute ${position === "bottom-right" ? "bottom-20 right-5" : position === "bottom-left" ? "bottom-20 left-5" : position === "top-right" ? "top-20 right-5" : position === "top-left" ? "top-20 left-5" : ""} w-[480px] max-w-[min(800px,calc(100dvw-40px))] h-dvh max-h-[min(600px,80dvh)] z-10 shadow-xl border border-chat-border rounded-2xl`} bg-chat-background`,
2274
4304
  "data-chat-widget": displayMode,
2275
4305
  "data-chat-position": position,
2276
4306
  "data-chat-theme": effectiveTheme,
2277
- children: [
2278
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2279
- Header,
2280
- {
2281
- title: effectiveTitle,
2282
- onClose: displayMode === "floating" ? close : showClose ? close : void 0,
2283
- onToggleFullscreen: showFullscreenToggle && !isSmallScreen ? toggleFullscreen : void 0,
2284
- isFullscreen: displayMode === "fullscreen",
2285
- showConnectionStatus: true,
2286
- isConnected,
2287
- className: className?.header,
2288
- theme,
2289
- onThemeChange: handleThemeChange
2290
- }
2291
- ),
2292
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2293
- MessageList,
2294
- {
2295
- messages,
2296
- currentUserId,
2297
- isLoading: isLoadingHistory || loading,
2298
- onActionClick: handleActionClick,
2299
- onReactionClick: handleReactionClick,
2300
- className: className?.messageList
2301
- }
2302
- ),
2303
- isSomeoneTyping && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(TypingIndicator, {}),
2304
- renderPushPrompt?.(),
2305
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
2306
- InputArea,
2307
- {
2308
- onSend: handleSend,
2309
- placeholder: effectivePlaceholder,
2310
- disabled: loading,
2311
- className: className?.inputArea,
2312
- enableAttachments,
2313
- uploadConfig,
2314
- accept,
2315
- maxFileSize
2316
- }
2317
- )
2318
- ]
4307
+ children: panelContent
2319
4308
  }
2320
4309
  )
2321
4310
  ] });
4311
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(LocaleProvider, { locale: effectiveLocale, children: widget });
2322
4312
  }
2323
4313
 
2324
4314
  // src/providers/ChatProvider.tsx
2325
- var import_react14 = require("react");
2326
- var import_jsx_runtime17 = require("react/jsx-runtime");
2327
- var ChatContext = (0, import_react14.createContext)(void 0);
4315
+ var import_react15 = require("react");
4316
+ var import_jsx_runtime18 = require("react/jsx-runtime");
4317
+ var ChatContext = (0, import_react15.createContext)(void 0);
2328
4318
  function ChatProvider({
2329
4319
  children,
2330
4320
  client,
2331
4321
  cardRenderers
2332
4322
  }) {
2333
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(CardProvider, { renderers: cardRenderers, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(ChatContext.Provider, { value: { client }, children }) });
4323
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(CardProvider, { renderers: cardRenderers, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(ChatContext.Provider, { value: { client }, children }) });
2334
4324
  }
2335
4325
  function useChatContext() {
2336
- const context = (0, import_react14.useContext)(ChatContext);
4326
+ const context = (0, import_react15.useContext)(ChatContext);
2337
4327
  if (!context) {
2338
4328
  throw new Error("useChatContext must be used within ChatProvider");
2339
4329
  }
@@ -2341,9 +4331,9 @@ function useChatContext() {
2341
4331
  }
2342
4332
 
2343
4333
  // src/components/ErrorBoundary.tsx
2344
- var import_react15 = require("react");
2345
- var import_jsx_runtime18 = require("react/jsx-runtime");
2346
- var ErrorBoundary = class extends import_react15.Component {
4334
+ var import_react16 = require("react");
4335
+ var import_jsx_runtime19 = require("react/jsx-runtime");
4336
+ var ErrorBoundary = class extends import_react16.Component {
2347
4337
  constructor(props) {
2348
4338
  super(props);
2349
4339
  this.state = { error: null };
@@ -2361,15 +4351,15 @@ var ErrorBoundary = class extends import_react15.Component {
2361
4351
  return fallback(this.state.error);
2362
4352
  }
2363
4353
  if (fallback) return fallback;
2364
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
4354
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2365
4355
  "div",
2366
4356
  {
2367
4357
  className: "flex flex-col items-center justify-center p-6 text-center",
2368
4358
  "data-chat-error-boundary": "true",
2369
4359
  children: [
2370
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-chat-error text-lg font-semibold mb-2", children: "Something went wrong" }),
2371
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "text-chat-text-secondary text-sm mb-4", children: this.state.error.message }),
2372
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
4360
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-chat-error text-lg font-semibold mb-2", children: "Something went wrong" }),
4361
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-chat-text-secondary text-sm mb-4", children: this.state.error.message }),
4362
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2373
4363
  "button",
2374
4364
  {
2375
4365
  onClick: () => this.setState({ error: null }),
@@ -2383,78 +4373,6 @@ var ErrorBoundary = class extends import_react15.Component {
2383
4373
  }
2384
4374
  };
2385
4375
 
2386
- // src/components/PushPermissionPrompt.tsx
2387
- var import_react16 = require("react");
2388
- var import_jsx_runtime19 = require("react/jsx-runtime");
2389
- function PushPermissionPrompt({
2390
- autoHide = true,
2391
- title,
2392
- description,
2393
- onStatusChange,
2394
- getVapidPublicKey,
2395
- onSubscribe,
2396
- onUnsubscribe
2397
- }) {
2398
- const { t } = useLocale();
2399
- const { status, isSupported, isSubscribed, subscribe, unsubscribe } = usePushNotifications({
2400
- enabled: true,
2401
- getVapidPublicKey,
2402
- onSubscribe,
2403
- onUnsubscribe
2404
- });
2405
- const [dismissed, setDismissed] = (0, import_react16.useState)(false);
2406
- if (!isSupported) return null;
2407
- if (autoHide && (isSubscribed || status === "denied")) return null;
2408
- if (dismissed) return null;
2409
- const handleEnable = async () => {
2410
- await subscribe();
2411
- onStatusChange?.(true);
2412
- };
2413
- const handleDisable = async () => {
2414
- await unsubscribe();
2415
- onStatusChange?.(false);
2416
- };
2417
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
2418
- "div",
2419
- {
2420
- className: "p-3 bg-chat-surface rounded-lg flex items-start gap-3",
2421
- "data-chat-push-prompt": "true",
2422
- children: [
2423
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex-1", children: [
2424
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "font-semibold mb-1 text-chat-text", children: title || t("push.title") }),
2425
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "text-sm text-chat-text-secondary", children: description || t("push.description") })
2426
- ] }),
2427
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { className: "flex gap-2", children: [
2428
- !isSubscribed && status !== "denied" && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2429
- "button",
2430
- {
2431
- onClick: handleEnable,
2432
- className: "px-3 py-1.5 bg-chat-primary text-white border-none rounded cursor-pointer text-sm hover:opacity-90",
2433
- children: t("push.enable")
2434
- }
2435
- ),
2436
- isSubscribed && /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2437
- "button",
2438
- {
2439
- onClick: handleDisable,
2440
- className: "px-3 py-1.5 bg-transparent text-chat-text-secondary border border-chat-border rounded cursor-pointer text-sm hover:bg-chat-surface",
2441
- children: t("push.disable")
2442
- }
2443
- ),
2444
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
2445
- "button",
2446
- {
2447
- onClick: () => setDismissed(true),
2448
- className: "px-1.5 bg-transparent border-none cursor-pointer text-chat-text-secondary hover:text-chat-text",
2449
- children: "\u2715"
2450
- }
2451
- )
2452
- ] })
2453
- ]
2454
- }
2455
- );
2456
- }
2457
-
2458
4376
  // src/components/PushToggle.tsx
2459
4377
  var import_jsx_runtime20 = require("react/jsx-runtime");
2460
4378
  function PushToggle({ getVapidPublicKey, onSubscribe, onUnsubscribe }) {