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