@bootdesk/js-web-adapter-react 0.3.3 → 0.3.5

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