diff --git a/README.md b/README.md index 15412dde..147a53e5 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ The app is currently available in the following languages: * Spanish * Thai * Ukrainian + * Vietnamese More translations are welcome. See [instructions](https://github.com/tinode/chat/blob/devel/docs/translations.md#webapp). diff --git a/css/base.css b/css/base.css index a51c9920..d85c7a4d 100644 --- a/css/base.css +++ b/css/base.css @@ -299,6 +299,8 @@ html, body { height: 100%; width: 100%; + height: 100dvh; + width: 100dvw; font-size: 10pt; /* 13.33 px/rem */ color: var(--clr-text-primary); overflow: hidden; @@ -790,6 +792,14 @@ div.trusted-badge { height: 0.015rem; } +/* Vertical divider line */ +.divider { + display: inline-block; + width: 1px; + margin: 0 0.25rem; + border-left: var(--clr-border-muted) 1.5px groove; +} + .ellipsized { overflow-x: hidden; white-space: nowrap; @@ -816,6 +826,15 @@ div.trusted-badge { text-decoration: none; } +.flat-button.disabled, +.flat-button.disabled:hover, +.flat-button.disabled:focus { + color: var(--clr-primary-accent); + cursor: default; + opacity: 0.75; + filter: grayscale(75%); +} + .flat-button.faux { display: inline-block; height: 1.4em; @@ -1427,6 +1446,9 @@ i.search { font-size: 2.4rem; line-height: 3rem; } +.contact-box .avatar-box > .checkmark.material-icons { + line-height: unset; +} .contact-box.small .avatar-box > .material-icons { font-size: 1.6rem; line-height: 2rem; @@ -1961,7 +1983,7 @@ img.channel { } -#image-preview-caption-panel { +#preview-caption-panel { display: flex; justify-content: space-between; background-color: var(--clr-background-blue-gray-50); @@ -1971,15 +1993,16 @@ img.channel { flex-grow: 0; height: var(--caption-panel-height); padding: 1rem 0.75rem 0 0.75rem; + font-size: 120%; z-index: 3; } -#image-preview-caption-panel a { +#preview-caption-panel a { color: var(--clr-text-secondary); text-decoration: none; } -#image-preview-caption-panel a:hover { +#preview-caption-panel a:hover { color: var(--clr-dark); } @@ -2016,6 +2039,17 @@ img.channel { background-color: var(--clr-std-ltgray); padding: 1rem; border-radius: 0.5rem; + max-width: 30rem; +} + +.doc-card .avatar-box { + width: 10rem; + height: 10rem; + font-size: 4.5rem; +} + +.doc-card .avatar-box .material-icons { + line-height: 10rem; } /* Video-call related styles */ @@ -3533,6 +3567,79 @@ ul.tabbar li.active > a { position: relative; right: 0; } +/* END of pinned messages */ + +/* Contact attachments */ +.contact-card { + position: relative; + background-color: var(--clr-background-off-white); + border-radius: 0.5rem; + display: flex; + flex-direction: column; + min-width: 14rem; +} + +.contact-card .avatar-box { + position: relative; + width: 1.8rem; + height: 1.8rem; + font-size: 1rem; + margin-right: 0.75rem; + margin-bottom: 0; +} + +.contact-card .contact-body { + align-items: center; + background-color: var(--clr-background-blue-gray-50); + display: flex; + padding: 0.75rem; + border-radius: 0.5rem 0.5rem 0 0; + border-bottom: none; +} + +.contact-card .contact-body .name-box { + display: flex; + flex-direction: column; + overflow: hidden; +} + +.contact-card .contact-body .name-box .name { + color: var(--clr-text-primary); + font-weight: 500; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.contact-card .contact-body .name-box .org { + color: var(--clr-text-secondary); + font-size: 90%; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + font-weight: 300; +} + +.contact-card .contact-actions { + display: flex; + justify-content: space-evenly; + align-items: center; + padding: 0 0.5rem; + border-radius: 0 0 0.5rem 0.5rem; + border-top: none; + background-color: var(--clr-bright); +} + +.contact-card .contact-actions a { + cursor: pointer; +} + +.contact-card .contact-actions .divider { + height: 1.8rem; + opacity: 0.5; +} + +/* END of contact attachments */ /* Drag-and-drop area. diff --git a/css/base.min.css b/css/base.min.css index 87ebf789..702b3934 100644 --- a/css/base.min.css +++ b/css/base.min.css @@ -1 +1 @@ -:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:grey;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#c4e0a3,#3e5c1f);--clr-bubble-left-bg-flash:light-dark(#94a97c,#2c4517);--clr-bubble-right-bg:var(--clr-background-off-white);--clr-bubble-right-bg-flash:var(--clr-border-light);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:light-dark(hsla(0,0%,100%,.8),rgba(40,40,40,.8));--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}*{box-sizing:border-box;font-family:Roboto,Arial,sans-serif;margin:0;padding:0;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track);scrollbar-width:thin;text-rendering:optimizeLegibility}body,html{background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg);color:var(--clr-text-primary);font-size:10pt;height:100%;overflow:hidden;width:100%}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{line-height:1.5;padding:.5rem .75rem}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{border-radius:50%;height:100%;width:100%}img.avatar.self{padding:7%}button{border:1px solid var(--clr-transparent);border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);cursor:pointer;display:inline-block;font-family:inherit;font-size:1.05rem;font-weight:400;height:2.2rem;line-height:2.2rem;margin:0 .35rem;min-width:5rem;padding-left:1.2rem;padding-right:1.2rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap}button[disabled],html input[disabled]{box-shadow:none;cursor:default;filter:grayscale(50%);opacity:.65}button.round{border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);height:3rem;line-height:3.5rem;margin:0;outline:none;padding:0;width:3rem;z-index:2}button.round.small{box-shadow:0 2px .35rem 0 var(--clr-shadow-button);height:2rem;line-height:2rem;width:2rem}button:active:not([disabled]),button:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);border:1px solid var(--clr-button-outline-border);box-shadow:none;color:var(--clr-button-outline-text)}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){background-color:var(--clr-button-outline-hover-bg);color:var(--clr-button-outline-text)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{background:var(--clr-transparent);border:none;color:var(--clr-input-text);font-family:inherit;font-size:1.1rem;margin:.25rem 0;outline:none;padding:0 .125rem}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],textarea{border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);height:2.5rem;transition:all .1s ease-in-out,height 0s}input[type=email],input[type=password],input[type=tel],input[type=text],textarea{width:100%}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{padding-top:.45rem;resize:none}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{background-color:var(--clr-scrollbar-track);-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{background-color:var(--clr-bright);border-radius:.2rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);list-style:none;padding-bottom:.35rem;padding-top:.35rem;position:absolute;width:12rem;z-index:4}ul.menu>li{cursor:pointer;padding:.75rem .75rem .75rem 1.25rem}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{height:1px;margin:2px;padding:0}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{opacity:.6;pointer-events:none}.menuTrigger{background-color:inherit;border-radius:.7rem;height:1.4rem;line-height:1.4rem;opacity:0;position:absolute;right:.25rem;text-align:center;user-select:none;width:1.4rem}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{align-items:center;background:var(--clr-alert-overlay-bg);display:flex;height:100%;justify-content:center;overflow:hidden;padding:1rem;position:absolute;width:100%;z-index:3}div.alert{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:min-content;margin:auto 2rem;max-height:40rem;max-width:24rem;min-width:16rem;overflow:hidden;padding:1rem;position:relative;width:fit-content}div.alert-container .title{color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;padding:0 0 .35rem;position:relative;width:100%}div.alert-container .title.with-control{align-items:center;display:flex;flex:none;justify-content:space-between;padding:.5rem .5rem 0;position:relative}div.alert-container .content{padding:.5rem 0;position:relative}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset);display:block;height:.45rem;min-height:.3rem;width:100%}.hr.thin{height:.015rem}.ellipsized{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.flat-button{align-items:center;background-color:var(--clr-bright);display:flex;font-weight:400;height:2em;line-height:2em;margin:.15rem .35rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap;z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.faux{background-color:var(--clr-background-extra-light-gray);border:1px solid var(--clr-text-tertiary);border-radius:3px;display:inline-block;height:1.4em;line-height:1.4em;margin:.15rem;padding:0 .35rem;text-transform:none}.action-button{background-color:var(--clr-background-off-white);border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);color:var(--clr-text-secondary);display:block;font-size:1.8rem;height:3.25rem;margin:0;min-height:unset;min-width:unset;outline:none;padding:0;position:absolute;transition:all .15s;width:3.25rem;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){background-color:var(--clr-primary-action-hover);color:var(--clr-text-tertiary-activated)}.action-button:active{background-color:var(--clr-primary-action);color:var(--clr-text-tertiary-activated)}.action-button.hidden{bottom:2.625rem;font-size:1px;height:1px;line-height:1px;opacity:0;right:2.625rem;width:1px}.group-focus{outline:none}#mountPoint{height:100%;padding-bottom:1rem;padding-top:1rem}#noscript-message{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;flex-direction:column;margin-left:auto;margin-right:auto;margin-top:5rem;max-width:30rem;overflow:hidden;position:relative}#noscript-title{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue);font-size:120%;font-weight:bolder;padding:1rem}#noscript-content{padding:1rem}#app-container{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;height:100%;margin-left:auto;margin-right:auto;max-width:84rem;overflow:hidden;position:relative}#sidepanel{flex-grow:0;flex-shrink:0.3;min-width:18rem;width:24rem}#sidepanel,#topic-view{display:flex;flex-direction:column;height:100%;position:relative}#topic-view{overflow-x:hidden;width:100%}#info-view{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;height:100%;min-width:18rem;position:relative;width:24rem}.center-medium-text{align-items:center;display:flex;font-size:1.4rem;height:100%;justify-content:center;text-align:center;width:100%}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{background-color:var(--clr-background-off-white);border-radius:.1rem;margin:.25rem;padding:.25rem;position:relative}div.in-place-edit,span.in-place-edit{border-bottom:1px dashed var(--clr-border-muted);cursor:pointer;display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;vertical-align:baseline;width:100%}.in-place-edit.short{align-items:center;display:inline-flex;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;color:var(--clr-text-disabled);cursor:default}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{font-size:unset;height:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{font-size:1.1rem;margin:.35rem 0;vertical-align:middle}table.permission-editor td.checkbox{color:var(--clr-text-tertiary);text-align:center}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{border-bottom:none;cursor:pointer}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{box-shadow:0 1px 2px var(--clr-shadow-gray-strong);flex:none;height:var(--caption-panel-height);overflow-x:hidden;white-space:nowrap;z-index:1}.caption-panel,.dialog-buttons{align-items:center;display:flex;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{flex-grow:0;flex-shrink:0;position:relative}.bot-form{display:flex;flex-direction:column;line-height:2rem;min-width:8rem;overflow:hidden}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);display:inline-block;font-size:inherit;height:2rem;line-height:2rem;margin:.15rem;text-transform:none}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{background-color:var(--clr-primary-wash);color:var(--clr-dk-fg-5);outline:0}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);line-height:1;padding-left:.5rem}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-left:.5rem;margin-right:auto}#self-avatar{border-radius:50%;flex:none;height:3rem;min-width:3rem;width:3rem}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{left:.6rem;position:absolute}.info-box{display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem;position:relative}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark);display:flex}.info-box.warning{background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark);display:flex}.info-box.info{background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark);display:flex}.info-box .cancel .material-icons{color:var(--clr-text-secondary);font-size:1rem}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{height:100%;margin-bottom:auto;margin-top:.25rem;overflow-x:hidden;overflow-y:auto;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);cursor:pointer;display:flex;flex-grow:0;flex-shrink:0;min-height:3.75rem;overflow-x:hidden;padding:.35rem .25rem .5rem .35rem;position:relative}.contact-box.small>li{min-height:2.5rem;padding:.25rem .25rem .35rem .35rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{background-color:var(--clr-background-blue-gray-75);border-right:1.5px solid var(--clr-secondary-accent)}.contact-box>li.action{border-bottom:none;min-height:2.5rem}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{color:light-dark(#777,#666);margin-bottom:.2rem}.contact-box .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-height:3rem;min-width:3rem;overflow:hidden;padding:0;position:relative;width:3rem}.contact-box .avatar{border-radius:50%;height:3rem;width:3rem}.contact-box.small .avatar-box{font-size:1.2rem;height:2rem;min-height:2rem;min-width:2rem;width:2rem}.contact-box.small .avatar{height:2rem;width:2rem}.avatar.deleted{filter:grayscale(1);opacity:.75}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;font-size:2.4rem;justify-content:space-around;line-height:3rem}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{align-items:center;display:flex;flex-direction:row}.contact-box .action-text{cursor:pointer;font-size:.95rem;line-height:2.5rem;margin:0 auto;text-align:center}img.channel{height:1.25rem;margin-left:.3rem;vertical-align:middle;width:1.25rem}.large img.channel{height:1.45rem;margin-bottom:.15rem;margin-left:.5rem;width:1.45rem}.avatar-box .online,.offline{border-radius:50%;bottom:.1rem;flex-shrink:0;height:.75rem;min-height:.75rem;min-width:.75rem;position:absolute;right:0;width:.75rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{border:0 solid var(--clr-transparent);color:var(--clr-secondary-accent);overflow:visible;padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{background-color:var(--clr-bright);bottom:0;font-size:1.5rem;height:1.5rem;position:absolute;right:0;width:1.5rem}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{bottom:1rem;position:absolute;right:1rem}.panel-form{display:flex;flex-direction:column;padding:0;position:relative}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;flex-grow:0;line-height:1.5;padding:.5rem .75rem;position:relative}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{flex-grow:1;padding:0!important}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-bottom:.25rem;margin-top:.25rem}.avatar-upload{display:flex;flex-direction:column;flex-shrink:0;font-size:4.5rem;height:10.5rem;margin:.25rem;padding:0;position:relative;width:10rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%);font-size:1rem;opacity:0;position:absolute;right:0;top:0}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{height:10rem;position:relative;width:10rem}.avatar-upload .avatar-box>.material-icons{font-size:4rem;line-height:10rem;position:relative;vertical-align:middle}.avatar-upload:after{clear:both;content:".";display:block;height:0;visibility:hidden}.avatar-upload .blank{border:1px dashed var(--clr-text-tertiary);color:var(--clr-text-tertiary);flex-shrink:0;font-size:1rem;line-height:10rem;text-align:center;vertical-align:middle}.avatar-upload .blank,.avatar-upload img.preview{border-radius:50%;height:10rem;overflow:hidden;width:10rem}.avatar-upload img.preview:before{background:50% no-repeat url(../img/broken_image.png);border-radius:50%;color:var(--clr-text-primary);content:" ";display:flex;font-size:.9rem;font-weight:lighter;height:10rem;justify-content:center;left:0;position:absolute;top:0;width:10rem}.avatar-upload .inputfile.hidden{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px}.avatar-upload .inputfile+label.round{align-items:center;background-color:var(--clr-background-off-white);border-radius:50%;bottom:0;box-shadow:0 1px 4px var(--clr-shadow-dialog);cursor:pointer;display:flex;height:3rem;justify-content:center;line-height:3rem;position:absolute;right:0;width:3rem;z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-width:3rem;position:relative;width:3rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;width:1.8rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{height:100%;overflow-y:hidden;position:relative}#messages-container:before{background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-position:var(--wallpaper-position);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);content:"";filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}#messages-panel{height:100%;overflow-y:scroll;padding:.75rem;position:relative}#write-only-background{background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem);height:100%;left:0;position:absolute;top:0;width:100%}#write-only-note{height:auto;top:50%;transform:translate(-50%,-50%);width:auto}#peer-messaging-disabled-note,#write-only-note{background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active);color:var(--clr-text-primary);left:50%;line-height:2rem;padding:.75rem 1.25rem;position:absolute;text-align:center}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#send-message-panel{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;flex:none;min-height:4rem;padding:.4rem .4rem .4rem .6rem;z-index:2}#send-message-panel #writing-disabled{font-size:1.2rem;text-align:center;width:100%}#send-message-wrapper{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{font-size:1.6rem;min-width:2rem}#send-message-panel .material-icons.secondary,.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{max-height:6rem;min-height:2.5rem;overflow:hidden auto}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);padding-bottom:.35rem;text-align:center;white-space:nowrap}.accept-invite-panel button{border:1px solid var(--clr-transparent);box-shadow:0 1px 2px 0 var(--clr-shadow-button);font-size:1rem;height:2em;line-height:2em;margin:.25rem}#dummy-view{align-items:center;background-color:var(--clr-cyan-50);display:flex;height:100%;justify-content:center;width:100%}#dummy-view a{display:block;text-align:center;text-decoration:none}#image-preview{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;left:0;position:absolute;top:0;width:100%;z-index:2}#image-preview-caption-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);display:flex;flex-grow:0;flex-shrink:0;height:var(--caption-panel-height);justify-content:space-between;line-height:2rem;padding:1rem .75rem 0;z-index:3}#image-preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#image-preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{align-items:center;background-color:var(--clr-gray-medium-bg);display:flex;height:100%;justify-content:space-around;overflow:hidden;width:100%}#image-preview-footer{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);display:flex;flex-grow:0;flex-shrink:0;height:3.2rem;justify-content:space-around;line-height:1.5rem;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{background-color:var(--clr-std-ltgray);border-radius:.5rem;display:flex;flex-direction:column;overflow-x:hidden;padding:1rem}#video-container{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;justify-content:space-between;left:0;position:absolute;top:0;width:100%;z-index:3}#video-container.minimized{background-color:unset;border-radius:.5rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab;height:18rem;left:auto;right:1rem;top:1rem;user-select:none;width:18rem}#controls{align-items:center;align-self:center;bottom:2.5rem;column-gap:1rem;display:flex;justify-content:center;position:absolute;z-index:1}#controls.minimized{bottom:1.75rem;column-gap:.5rem}.incoming-call #controls{bottom:1rem}#controls button{align-items:center;border-radius:50%;box-shadow:0 3px 6px 0 var(--clr-shadow-button);display:flex;height:4rem;justify-content:center;min-width:auto;position:relative;width:4rem}#controls.minimized button{box-shadow:0 2px 4px 0 var(--clr-shadow-button);height:2.75rem;width:2.75rem}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}button.full-screen{background-color:transparent;border-radius:.5rem;box-shadow:none;height:2.5rem;left:2rem;min-width:unset;padding:0;position:absolute;top:2rem;width:2.5rem;z-index:1}.minimized button.full-screen{height:2rem;left:1rem;top:1rem;width:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized button.full-screen .material-icons{font-size:large}#video-container-panel{height:100%;position:relative;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border:2px solid var(--clr-border-light);border-radius:.5rem;overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{bottom:1rem;left:1rem;position:absolute;right:1rem;top:1rem;z-index:1}.minimized .call-party.peer{bottom:0;left:0;right:0;top:0}.call-party.self{bottom:.5rem;height:10rem;position:absolute;right:.5rem;width:10rem;z-index:2}.call-party.self[disabled]{display:none}video{height:100%;object-fit:contain;width:100%}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.caller-card .avatar-box{font-size:6rem;height:10rem;width:10rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{font-size:3.6rem;height:6rem;width:6rem}.call-party .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;max-width:12rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-party.self .caller-name.inactive{bottom:.25rem;position:absolute;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.caller-card .trusted-badge{display:inline-block}.call-party.peer .caller-name.inactive{bottom:.5rem;font-size:larger;left:1rem;margin:0 auto;position:absolute}.minimized .caller-name{border-radius:.25rem;font-weight:lighter;padding:.1rem .35rem}.incoming-call{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);margin:auto 2rem;max-width:24rem;min-width:16rem;width:fit-content}.incoming-call,.incoming-call .caller-card{display:flex;flex-direction:column;position:relative}.incoming-call .caller-card{align-items:center;height:100%;justify-content:center;left:auto;padding:4rem 3.5rem 5.5rem;top:auto;width:100%}.incoming-call .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{bottom:1rem;right:1.5rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;margin:0 .5rem;padding:0 0 3.5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{align-items:flex-end;display:flex;margin:0;padding:0}.chat-box .right{justify-content:flex-end}.bubble{border-radius:.5rem;color:var(--clr-bubble-text);display:flex;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop));height:auto;margin:0;max-width:36rem;min-width:9rem;padding:.75rem .5rem;position:relative;text-align:left;transition:background-color .5s ease-out;transition-delay:.3s}.chat-box li.single{margin-bottom:.75rem;margin-top:.25rem}.chat-box li.first{margin-bottom:.15rem;margin-top:.25rem}.chat-box li.middle{margin-bottom:.15rem;margin-top:.15rem}.chat-box li.last{margin-bottom:.75rem;margin-top:.15rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-bottom:.5rem;margin-top:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{background-color:var(--clr-bubble-meta-date-bg);font-size:smaller;padding:.5rem;text-transform:uppercase;user-select:none}.left .bubble.tip:before{background-color:var(--clr-bubble-left-bg);border-bottom-left-radius:.3rem;bottom:0;clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);content:"";height:.85rem;left:-.8rem;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{background-color:var(--clr-bubble-right-bg);border-bottom-right-radius:.3rem;bottom:0;clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);content:"";height:.85rem;left:99.8%;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{font-size:.8rem;height:1.4rem;margin-bottom:.8rem;margin-right:.8rem;min-height:1.4rem;min-width:1.4rem;position:relative;width:1.4rem}.bubble div.content-meta{width:100%}.bubble div.message-content{font-size:var(--message-text-size);margin:0;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;position:relative;width:100%}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{clear:both;content:".";display:block;height:0;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;height:0;width:4rem}.chat-box .timestamp{color:var(--clr-bubble-timestamp-text);float:right;font-size:80%;position:relative;top:.35rem;user-select:none;white-space:nowrap}.chat-box .author{color:var(--clr-bubble-author-text);font-size:80%;max-width:12em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.image-preview,.inline-image{border-radius:.1rem;overflow:hidden;position:relative}.inline-image{max-height:24rem;max-width:36rem}.inline-image>.rounded-container{border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent);bottom:2rem;margin:.25rem auto;position:relative}img.image-preview:before,img.inline-image:before{background:center no-repeat var(--clr-border-light) url(../img/broken_image.png);color:var(--clr-text-primary);display:flex;font-size:.9rem;font-weight:lighter;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}img.inline-image:before{background-size:3rem 3rem;content:attr(alt)}img.image-preview:before{background-size:10rem 10rem;content:" "}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{align-items:center;display:flex;justify-content:center;position:relative}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{background-color:hsla(0,0%,100%,.5);border-radius:.3rem;bottom:.25rem;color:var(--clr-toast-bg);font-size:80%;left:.25rem;padding:.25rem .5rem;position:absolute}.inline-video .play-control{align-items:center;background-color:rgba(0,0,0,.4);border-radius:50%;cursor:pointer;display:flex;height:4rem;justify-content:center;pointer-events:none;position:absolute;width:4rem}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{display:flex;flex-direction:column;height:100%;overflow-y:hidden;position:relative}#group-manager-buttons{background-color:var(--clr-background-blue-gray-50);border-left:1px solid var(--clr-border-light);box-shadow:0 -1px var(--clr-shadow-panel-divider);display:flex;height:4rem;justify-content:space-around;padding:.4rem;z-index:2}ul.tabbar{background:var(--clr-tabbar-bg);display:flex;flex-grow:0;flex-shrink:0;list-style:none;margin:0;overflow:hidden;padding:0 0 0 1rem;width:100%}ul.tabbar>li{box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button);height:2.4rem;position:relative}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{background:var(--clr-tabbar-inactive-border);bottom:0;content:"";height:.1rem;left:0;position:absolute;width:100%}ul.tabbar li.active:after{animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards;background:var(--clr-tabbar-active-border);bottom:0;content:"";height:.15rem;left:0;position:absolute}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{color:var(--clr-tabbar-inactive-text);font-size:1.3rem;font-variant:small-caps;font-weight:400;line-height:2.4rem;overflow:hidden;padding-left:1rem;padding-right:1rem;position:relative;text-align:center;text-decoration:none}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{background-color:var(--clr-secondary-accent);border-radius:50%;color:var(--clr-bright);display:inline-block;font-size:.75rem;font-weight:bolder;height:1.35rem;line-height:1.45rem;margin-left:.5rem;text-align:center;vertical-align:middle;width:1.35rem}.material-icons.as-badge{color:var(--clr-chip-remove-icon-bg);font-size:1.15rem;padding-left:.2rem}.badge{align-self:flex-start;background-color:var(--clr-badge-default-bg);border:1px solid var(--clr-badge-default-border);border-radius:.2rem;color:var(--clr-badge-default-text);display:inline-block;font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;margin:.05rem .1rem;padding:.05rem .25rem}.badge.green{background-color:var(--clr-badge-green-bg);border-color:var(--clr-badge-green-border);color:var(--clr-badge-green-text)}.badge.yellow{background-color:var(--clr-badge-yellow-bg);border-color:var(--clr-badge-yellow-border);color:var(--clr-badge-yellow-text)}.badge.blue{background-color:var(--clr-badge-blue-bg);border-color:var(--clr-badge-blue-border);color:var(--clr-badge-blue-text)}.badge.red{background-color:var(--clr-badge-red-bg);border-color:var(--clr-badge-red-border);color:var(--clr-badge-red-text)}.badge.magenta{background-color:var(--clr-badge-magenta-bg);border-color:var(--clr-badge-magenta-border);color:var(--clr-badge-magenta-text)}.lettertile{border-radius:50%;padding-bottom:100%;user-select:none;width:100%}.lettertile>div{align-items:center;border-radius:50%;bottom:0;color:var(--clr-lettertile-default-text);display:flex;flex-grow:0;flex-shrink:0;justify-content:center;left:0;line-height:1;padding-top:.1em;position:absolute;right:0;text-align:center;text-transform:uppercase;top:0}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;text-align:center;user-select:none;vertical-align:middle}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{font-size:85%;font-weight:700;left:39%;position:absolute;top:7%}.composed-material .second-small{font-size:62%;font-weight:700;left:30%;position:absolute;top:14%}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{border-radius:50%;color:var(--clr-lettertile-default-text);height:inherit;width:inherit}.chip-input{align-items:center;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);color:var(--clr-input-text);cursor:text;display:flex;flex-grow:1;flex-wrap:wrap;font-size:1.1rem;font-weight:400;justify-content:flex-start;margin:.25rem 0;max-height:10rem;min-height:4rem;outline:none;overflow-y:scroll;text-align:center;transition:all .1s ease-in-out}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{border:none;box-shadow:none;display:inline-block;flex:1 0 auto;min-width:4rem;width:auto}.chip,.chip-input>input[type=text]{height:1.8rem;line-height:1.8;margin:.125rem}.chip{align-items:center;background-color:var(--clr-chip-bg);border-radius:.9rem;display:flex;flex:0 0 auto;font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{text-overflow:ellipsis;white-space:nowrap}.chip>span{overflow-x:hidden}.chip.invalid{background-color:var(--clr-chip-invalid-bg);color:var(--clr-chip-invalid-text)}.chip>a{background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;color:var(--clr-chip-remove-icon-text);display:inline-block;height:1.175rem;line-height:1.15;margin:.3rem;min-width:1.175rem;text-decoration:none;width:1.175rem}.chip>a:focus,.chip>a:hover{background-color:var(--clr-chip-remove-icon-hover-bg);color:var(--clr-chip-remove-icon-hover-text);text-decoration:none}.chip .avatar-box{font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;position:relative;width:1.8rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;height:1.175rem;margin:.3rem;width:.25rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;background-color:var(--clr-bright);border-radius:50%;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);height:var(--size-small);left:0;margin-left:auto;margin-right:auto;padding:.25rem;position:absolute;right:0;top:5rem;width:var(--size-small);z-index:2}.load-spinner-box.large{height:var(--size-large);width:var(--size-large)}.load-spinner-box.clear{background-color:hsla(0,0%,100%,.5);box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{animation:spin 1.5s linear infinite;border-radius:50%;border-top:.35rem solid var(--clr-spinner-track);border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);height:2rem;width:2rem}.load-spinner-box.large .loader-spinner{height:3.5rem;width:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{background-color:var(--clr-background-blue-gray-100);border-radius:.1rem;height:.6rem;line-height:0;margin:.35rem;padding:.15rem;position:relative;width:6rem}.uploader>div>span{background-color:var(--clr-primary-action);border-radius:.08rem;display:inline-block;height:.3rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{align-self:center;height:21rem;margin:1rem auto auto;transform:translateZ(0)}.cropper,.cropper .bounding-box{border-radius:.25rem;position:relative;width:18rem}.cropper .bounding-box{background-color:var(--clr-cropper-bounding-box-bg);border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);height:18rem;overflow:hidden;z-index:1}.cropper .preview{max-height:none;max-width:none;position:absolute;z-index:-1}.cropper .cutout{border:1px dashed var(--clr-cropper-cutout-border);bottom:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);height:17.8rem;left:0;margin:auto;position:absolute;right:0;top:0;width:17.8rem;z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{cursor:move;position:absolute;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;margin:1rem auto;text-align:center;width:80%}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{border-left:.25rem solid var(--clr-reply-quote-border);border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer;font-weight:lighter;line-height:1.5em;padding:.15rem .5rem .25rem;position:relative}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{margin-bottom:.1rem;vertical-align:middle}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{align-items:center;display:flex}#reply-quote-preview .reply-quote{background-color:var(--clr-reply-quote-preview-bg);cursor:auto;margin:.35rem .5rem 0 0;width:100%}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:80%;margin:auto 1rem;overflow:hidden;padding:.5rem;position:relative;width:24rem}.forward-dialog .scrollable-panel{height:80%}.audio{align-items:center;background-color:var(--clr-audio-bg);border-radius:1.5rem;display:flex;flex:none;height:3rem;margin-left:auto}.audio canvas{height:2.6rem;margin-right:2rem;width:14rem}.audio canvas.playback{margin-right:0}.audio .duration{font-size:large}.audio-player{align-items:center;display:flex}.audio-player .material-icons.large{color:var(--clr-audio-icon);font-size:2.4rem}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{height:2.6rem;width:14rem}.audio-player canvas.playback{display:block}.audio-player div.playback{align-items:center;color:var(--clr-audio-icon);display:flex;font-size:small;justify-content:center}.audio-player .timer{color:var(--clr-audio-timer-text);font-size:smaller}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{align-items:center;display:flex;height:100%;position:relative}.pinned{background-color:var(--clr-background-off-white);background-position:50%;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);cursor:pointer;font-weight:lighter;min-width:0;padding:.15rem .5rem .25rem;transition:background .4s;width:24rem}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{align-items:center;background-color:var(--clr-background-extra-light-gray);border-radius:.25rem 0 0 .25rem;display:flex;flex-direction:column;height:100%;justify-content:space-evenly;margin-left:.35rem;padding:.2rem;position:relative;user-select:none}.pinned-scroll .dot{background-color:var(--clr-text-tertiary);border-radius:50%;height:.3rem;user-select:none;width:.3rem}.pinned-scroll .adot{background-color:var(--clr-light-blue-accent);border-radius:50%;height:.45rem;user-select:none;width:.45rem}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;bottom:0;display:flex;flex-direction:column;justify-content:space-evenly;position:absolute;right:0;top:0}.pinned-menu .menuTrigger{position:relative;right:0}.drag-n-drop{align-items:center;background-color:var(--clr-drag-n-drop-bg);border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;bottom:1.5rem;color:var(--clr-drag-n-drop-text);display:flex;font-size:2rem;justify-content:center;left:1.5rem;outline:.5rem solid var(--clr-drag-n-drop-outline);position:absolute;right:1.5rem;top:1.5rem;z-index:3}.country-flag{display:inline-block;font-size:larger}.dial-code{cursor:pointer;display:inline-block;margin-bottom:.15rem;vertical-align:middle;white-space:nowrap}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{cursor:pointer;font-weight:lighter;padding:.25rem .5rem .15rem;position:relative;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{color:var(--clr-primary-action);font-weight:400;position:absolute;right:.5rem}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{overflow-x:hidden;text-overflow:ellipsis}.image-grid{display:grid;gap:.35rem;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));padding:.25rem;position:relative}.image-grid-cell{border:1.5px solid transparent;border-radius:.25rem;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset);cursor:pointer;height:7rem;margin:0;overflow:hidden;padding:0;width:100%}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{align-items:center;background-color:var(--clr-toast-bg);border-radius:.5rem;bottom:2rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);color:var(--clr-toast-text);display:flex;font-weight:lighter;height:3rem;justify-content:center;left:50%;min-width:10rem;padding:.5rem 1rem;position:absolute;translate:-50%;visibility:hidden;z-index:3}div.toast.show{animation:fadein .5s,fadeout .5s 2.5s;visibility:visible}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{border-radius:0;box-shadow:none;width:100%}#info-view,#sidepanel{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized{border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong);flex-direction:row;height:11rem;left:0;top:var(--caption-panel-height);width:100%}#controls.minimized{bottom:auto;column-gap:unset;flex-direction:column;right:1rem;row-gap:.5rem}.minimized .call-party{border-radius:unset;box-shadow:unset}.call-party.self{border-radius:unset;bottom:8.5rem}} \ No newline at end of file +:root{color-scheme:light dark;--message-text-size:10pt;--caption-panel-height:4rem;--wallpaper-url:url(../img/bkg/a00.png);--wallpaper-repeat:repeat;--wallpaper-blur:0px;--wallpaper-invert:0;--wallpaper-brightness:1;--wallpaper-size:contain;--wallpaper-position:center;--clr-bright:light-dark(#fff,#181818);--clr-dark:light-dark(#000,#fff);--clr-transparent:transparent;--clr-std-gray:grey;--clr-std-ltgray:light-dark(silver,#3f3f3f);--clr-std-teal:teal;--clr-std-grey:grey;--clr-std-orange:orange;--clr-primary-accent:light-dark(#2094f3,#0e6dba);--clr-primary-accent-hover:light-dark(#0a6ebd,#116ab4);--clr-primary-accent-focus-shadow:light-dark(rgba(33,150,243,.25),rgba(3,7,12,.25));--clr-primary-accent-transparent-medium:light-dark(rgba(33,150,243,.3),rgba(20,70,120,.3));--clr-primary-action:light-dark(#1e89e6,#1571c1);--clr-primary-action-hover:light-dark(#2962ff,#0037b8);--clr-secondary-accent:light-dark(#0097a8,#006570);--clr-primary-light-blue:light-dark(#bcdefb,#78a0be);--clr-light-blue-accent:light-dark(#0398e2,#0379b5);--clr-body-background:var(--clr-std-ltgray);--clr-text-primary:light-dark(#666,#999);--clr-text-secondary:light-dark(#757575,#8a8a8a);--clr-text-tertiary:light-dark(#999,#787878);--clr-text-tertiary-activated:#888;--clr-text-placeholder:light-dark(#bbb,#555);--clr-text-disabled:light-dark(#888,#777);--clr-border-light:light-dark(#ccc,#555);--clr-border-muted:light-dark(#ddd,#444);--clr-background-off-white:light-dark(#fafafa,#222);--clr-background-light-gray:light-dark(#f0f0f0,#0f0f0f);--clr-background-extra-light-gray:light-dark(#eee,#222);--clr-background-blue-gray-50:light-dark(#edf0f2,#202c33);--clr-background-blue-gray-75:light-dark(#e1e8eb,#182124);--clr-background-blue-gray-100:light-dark(#cfd8dc,#20272a);--clr-background-blue-gray-300:light-dark(#b0bec5,#354146);--clr-blue-wash-light:light-dark(#f0f0ff,#22222d);--clr-blue-wash-medium:light-dark(#d8e8ff,#123550);--clr-primary-wash:light-dark(#e3f2fd,#072f45);--clr-indigo-50:light-dark(#e8eaf6,#1a2c44);--clr-danger-text:light-dark(#d33131,#931f1f);--clr-danger-text-hover:light-dark(#f44034,#c10);--clr-error-text-muted:light-dark(#c66,#933);--clr-error-bg-light:light-dark(#ffccd1,#ff6675);--clr-error-border-light:light-dark(#ffbdc6,#ff334e);--clr-error-text-dark:light-dark(#b51c1c,#de2323);--clr-error-icon:light-dark(#ef5552,#d81b0e);--clr-warning-accent:light-dark(#ffc107,#808020);--clr-warning-bg-light:light-dark(#fff9c4,#00060c);--clr-warning-border-light:light-dark(#fff59d,#000a2b);--clr-warning-text-dark:light-dark(#6d4c41,#a08356);--clr-warning-icon:light-dark(#fbc02d,#b48204);--clr-info-bg-light:light-dark(#e1f5fe,#010a0e);--clr-info-border-light:light-dark(#b3e5fc,#001824);--clr-info-text-dark:light-dark(#0288d1,#00151f);--clr-header-stripe-bg:light-dark(#3949ab,#12152f);--clr-scrollbar-thumb:light-dark(rgba(0,0,0,.3),hsla(0,0%,100%,.3));--clr-scrollbar-track:light-dark(hsla(0,0%,100%,.1),rgba(0,0,0,.1));--clr-menu-item-hover-bg:light-dark(#f5f5f5,#0a0a0a);--clr-alert-overlay-bg:light-dark(hsla(0,0%,94%,.85),hsla(0,0%,6%,.85));--clr-verified-accent:light-dark(#02a6f2,#027db6);--clr-staff-accent:light-dark(#689f38,#598830);--clr-badge-inv:light-dark(#fffd,#cccd);--clr-cyan-50:light-dark(#e0f7fa,#2f3e43);--clr-overlay-white-strong:light-dark(hsla(0,0%,100%,.9),rgba(0,0,0,.9));--clr-gray-medium-bg:light-dark(#777,#444);--clr-toast-bg:#333;--clr-toast-text:light-dark(#eee,#aaa);--clr-online:#4caf50;--clr-offline:light-dark(#ccc,#999);--clr-shadow-input-underline:rgba(0,0,0,.1);--clr-shadow-hr-inset:rgba(0,0,0,.15);--clr-shadow-scrollbar-track-webkit:rgba(0,0,0,.2);--clr-shadow-button:rgba(0,0,0,.25);--clr-shadow-button-inset-active:rgba(0,0,0,.125);--clr-shadow-dialog:rgba(0,0,0,.45);--clr-shadow-panel-divider:rgba(0,0,0,.1);--clr-shadow-gray-strong:light-dark(var(--clr-std-gray),#333);--clr-shadow-silver-subtle:light-dark(var(--clr-std-ltgray),#333);--clr-shadow-bubble-drop:rgba(0,0,0,.3);--clr-button-primary-bg:var(--clr-primary-action);--clr-button-primary-text:var(--clr-bright);--clr-button-primary-hover-bg:var(--clr-primary-action-hover);--clr-button-secondary-bg:var(--clr-bright);--clr-button-secondary-text:var(--clr-primary-accent);--clr-button-secondary-hover-bg:var(--clr-primary-wash);--clr-button-outline-text:var(--clr-primary-accent);--clr-button-outline-border:var(--clr-std-ltgray);--clr-button-outline-hover-bg:var(--clr-indigo-50);--clr-button-danger-bg:light-dark(#ec645f,#d74742);--clr-button-danger-text:var(--clr-bright);--clr-button-danger-hover-bg:light-dark(#f77,#a55);--clr-button-positive-bg:light-dark(#71c46f,#3f983e);--clr-button-positive-text:var(--clr-bright);--clr-button-positive-hover-bg:light-dark(#7fed7f,#6ec26e);--clr-input-text:var(--clr-text-primary);--clr-input-border:var(--clr-border-light);--clr-input-border-focus:var(--clr-primary-accent);--clr-input-shadow:var(--clr-shadow-input-underline);--clr-input-shadow-focus:var(--clr-primary-accent-focus-shadow);--clr-input-invalid-border:light-dark(#e57171,#561010);--clr-input-invalid-shadow:light-dark(#e5737340,#1a0c0c40);--clr-input-placeholder-text:var(--clr-text-placeholder);--clr-bubble-left-bg:light-dark(#c4e0a3,#3e5c1f);--clr-bubble-left-bg-flash:light-dark(#94a97c,#2c4517);--clr-bubble-right-bg:var(--clr-background-off-white);--clr-bubble-right-bg-flash:var(--clr-border-light);--clr-bubble-text:light-dark(#212121,#bbc);--clr-bubble-meta-text:var(--clr-text-primary);--clr-bubble-meta-deleted-bg:var(--clr-primary-wash);--clr-bubble-meta-date-bg:light-dark(hsla(0,0%,100%,.8),rgba(40,40,40,.8));--clr-bubble-timestamp-text:light-dark(#777,#888);--clr-bubble-author-text:light-dark(#777,#666);--clr-reply-quote-border:var(--clr-light-blue-accent);--clr-reply-quote-text:var(--clr-text-primary);--clr-reply-quote-left-bg:light-dark(hsla(0,0%,100%,.4),rgba(0,0,0,.4));--clr-reply-quote-right-bg:light-dark(#8080801f,#c4c4c42e);--clr-reply-quote-preview-bg:var(--clr-background-off-white);--clr-badge-default-bg:light-dark(#e8e8e8,#171717);--clr-badge-default-text:var(--clr-text-primary);--clr-badge-default-border:var(--clr-std-ltgray);--clr-badge-green-bg:light-dark(#efe,#131);--clr-badge-green-text:light-dark(#383,#363);--clr-badge-green-border:light-dark(#aca,#242);--clr-badge-yellow-bg:light-dark(#ffe,#331);--clr-badge-yellow-text:light-dark(#660,#660);--clr-badge-yellow-border:light-dark(#cc9,#552);--clr-badge-blue-bg:light-dark(#f0f0ff,#224);--clr-badge-blue-text:light-dark(#339,#447);--clr-badge-blue-border:light-dark(#aad,#336);--clr-badge-red-bg:light-dark(#fee,#522);--clr-badge-red-text:light-dark(#933,#744);--clr-badge-red-border:light-dark(#c99,#633);--clr-badge-magenta-bg:light-dark(#fef,#535);--clr-badge-magenta-text:light-dark(#939,#747);--clr-badge-magenta-border:light-dark(#c9c,#636);--clr-chip-bg:var(--clr-background-extra-light-gray);--clr-chip-invalid-text:var(--clr-error-text-muted);--clr-chip-invalid-bg:var(--clr-badge-red-bg);--clr-chip-remove-icon-bg:light-dark(#aaa,#555);--clr-chip-remove-icon-text:var(--clr-background-extra-light-gray);--clr-chip-remove-icon-hover-bg:var(--clr-text-placeholder);--clr-chip-remove-icon-hover-text:var(--clr-bright);--clr-tabbar-bg:var(--clr-background-extra-light-gray);--clr-tabbar-inactive-text:light-dark(rgba(33,150,243,.6),#165aa0);--clr-tabbar-active-text:var(--clr-primary-accent);--clr-tabbar-inactive-border:var(--clr-border-light);--clr-tabbar-active-border:var(--clr-primary-accent);--clr-highlight-text:var(--clr-std-teal);--clr-highlight-preview-text:light-dark(#5f9ea0,#205e60);--clr-spinner-track:light-dark(#f3f3f3,#0c0c0c);--clr-spinner-active:var(--clr-primary-action);--clr-cropper-bounding-box-border:var(--clr-primary-action);--clr-cropper-bounding-box-bg:var(--clr-text-tertiary);--clr-cropper-cutout-border:var(--clr-text-tertiary);--clr-cropper-cutout-shadow:light-dark(rgba(230,246,255,.66),rgba(25,10,0,.66));--clr-audio-bg:var(--clr-background-extra-light-gray);--clr-audio-icon:light-dark(hsla(180,7%,43%,.8),hsla(0,7%,57%,.8));--clr-audio-icon-disabled:light-dark(hsla(0,0%,60%,.75),hsla(0,0%,40%,.75));--clr-audio-timer-text:light-dark(hsla(0,0%,40%,.75),hsla(0,0%,60%,.75));--clr-pinned-menu-bg:light-dark(#f8f8f8,#1a1a1a);--clr-drag-n-drop-border:var(--clr-std-grey);--clr-drag-n-drop-text:var(--clr-std-grey);--clr-drag-n-drop-bg:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-drag-n-drop-outline:light-dark(hsla(0,0%,100%,.95),rgba(0,0,0,.95));--clr-lettertile-default-text:light-dark(#fafafacc,#dcdcdccc);--clr-lettertile-hover-text:var(--clr-bright);--clr-lt-bg-0:#ef9a9a;--clr-lt-bg-1:#90caf9;--clr-lt-bg-2:#b0bec4;--clr-lt-bg-3:#b49edb;--clr-lt-bg-4:#ffa98f;--clr-lt-bg-5:#a4d5a6;--clr-lt-bg-6:#ededed;--clr-lt-bg-7:#e6ee9b;--clr-lt-bg-8:#c4e0a3;--clr-lt-bg-9:#f0e57f;--clr-lt-bg-10:#f490b1;--clr-lt-bg-11:#a0a8da;--clr-lt-bg-12:#ffdf80;--clr-lt-bg-13:#bcaaa4;--clr-lt-bg-14:#80deea;--clr-lt-bg-15:#cd92d8;--clr-dk-bg-0:#c72929;--clr-dk-bg-1:#ad1457;--clr-dk-bg-2:#681b98;--clr-dk-bg-3:#4527a0;--clr-dk-bg-4:#293594;--clr-dk-bg-5:#1565c1;--clr-dk-bg-6:#0277bb;--clr-dk-bg-7:#00838f;--clr-dk-bg-8:#006b5f;--clr-dk-bg-9:#2f7f33;--clr-dk-bg-10:#54892f;--clr-dk-bg-11:#9e9e24;--clr-dk-bg-12:#f9a824;--clr-dk-bg-13:#ff9100;--clr-dk-bg-14:#f06c00;--clr-dk-bg-15:#d54215;--clr-lt-fg-0:var(--clr-lt-bg-0);--clr-lt-fg-1:var(--clr-lt-bg-1);--clr-lt-fg-2:var(--clr-lt-bg-2);--clr-lt-fg-3:var(--clr-lt-bg-3);--clr-lt-fg-4:var(--clr-lt-bg-4);--clr-lt-fg-5:var(--clr-lt-bg-5);--clr-lt-fg-6:var(--clr-lt-bg-6);--clr-lt-fg-7:var(--clr-lt-bg-7);--clr-lt-fg-8:var(--clr-lt-bg-8);--clr-lt-fg-9:var(--clr-lt-bg-9);--clr-lt-fg-10:var(--clr-lt-bg-10);--clr-lt-fg-11:var(--clr-lt-bg-11);--clr-lt-fg-12:var(--clr-lt-bg-12);--clr-lt-fg-13:var(--clr-lt-bg-13);--clr-lt-fg-14:var(--clr-lt-bg-14);--clr-lt-fg-15:var(--clr-lt-bg-15);--clr-dk-fg-0:var(--clr-dk-bg-0);--clr-dk-fg-1:var(--clr-dk-bg-1);--clr-dk-fg-2:var(--clr-dk-bg-2);--clr-dk-fg-3:var(--clr-dk-bg-3);--clr-dk-fg-4:var(--clr-dk-bg-4);--clr-dk-fg-5:var(--clr-dk-bg-5);--clr-dk-fg-6:var(--clr-dk-bg-6);--clr-dk-fg-7:var(--clr-dk-bg-7);--clr-dk-fg-8:var(--clr-dk-bg-8);--clr-dk-fg-9:var(--clr-dk-bg-9);--clr-dk-fg-10:var(--clr-dk-bg-10);--clr-dk-fg-11:var(--clr-dk-bg-11);--clr-dk-fg-12:var(--clr-dk-bg-12);--clr-dk-fg-13:var(--clr-dk-bg-13);--clr-dk-fg-14:var(--clr-dk-bg-14);--clr-dk-fg-15:var(--clr-dk-bg-15)}*{box-sizing:border-box;font-family:Roboto,Arial,sans-serif;margin:0;padding:0;scrollbar-color:var(--clr-scrollbar-thumb) var(--clr-scrollbar-track);scrollbar-width:thin;text-rendering:optimizeLegibility}body,html{background-color:var(--clr-body-background);box-shadow:inset 0 10rem var(--clr-header-stripe-bg);color:var(--clr-text-primary);font-size:10pt;height:100%;height:100dvh;overflow:hidden;width:100%;width:100dvw}tt{font-family:Roboto Mono,Courier,monospace}a{color:var(--clr-primary-accent);text-decoration:none}a:focus,a:hover{color:var(--clr-primary-accent-hover);text-decoration:underline}a.danger{color:var(--clr-danger-text)}a.danger:focus,a.danger:hover{color:var(--clr-danger-text-hover)}a.gray:focus,a.gray:hover{color:var(--clr-text-tertiary)}form{line-height:1.5;padding:.5rem .75rem}form,label{font-size:1.1rem}label{margin-right:auto}label.small{font-size:.95rem}label.large,label.small{color:var(--clr-primary-action)}label.large{font-size:1.1rem}label.invalid{color:var(--clr-danger-text)}img.avatar{border-radius:50%;height:100%;width:100%}img.avatar.self{padding:7%}button{border:1px solid var(--clr-transparent);border-radius:4px;box-shadow:0 1px 3px 0 var(--clr-shadow-button);cursor:pointer;display:inline-block;font-family:inherit;font-size:1.05rem;font-weight:400;height:2.2rem;line-height:2.2rem;margin:0 .35rem;min-width:5rem;padding-left:1.2rem;padding-right:1.2rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap}button[disabled],html input[disabled]{box-shadow:none;cursor:default;filter:grayscale(50%);opacity:.65}button.round{border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);height:3rem;line-height:3.5rem;margin:0;outline:none;padding:0;width:3rem;z-index:2}button.round.small{box-shadow:0 2px .35rem 0 var(--clr-shadow-button);height:2rem;line-height:2rem;width:2rem}button:active:not([disabled]),button:hover:not([disabled]){color:var(--clr-bright)}button:active{box-shadow:inset 0 3px .5rem var(--clr-shadow-button-inset-active)}button:active.round.small{box-shadow:inset 0 2px .35rem var(--clr-shadow-button-inset-active)}button.primary{background-color:var(--clr-button-primary-bg);color:var(--clr-button-primary-text)}button.primary:active:not([disabled]),button.primary:hover:not([disabled]){background-color:var(--clr-button-primary-hover-bg)}button.secondary{background-color:var(--clr-button-secondary-bg);color:var(--clr-button-secondary-text)}button.secondary:active:not([disabled]),button.secondary:hover:not([disabled]){background-color:var(--clr-button-secondary-hover-bg)}button.outline{background-color:var(--clr-transparent);border:1px solid var(--clr-button-outline-border);box-shadow:none;color:var(--clr-button-outline-text)}button.outline:active:not([disabled]),button.outline:hover:not([disabled]){background-color:var(--clr-button-outline-hover-bg);color:var(--clr-button-outline-text)}button.danger{background-color:var(--clr-button-danger-bg);color:var(--clr-button-danger-text)}button.danger:active:not([disabled]),button.danger:hover:not([disabled]){background-color:var(--clr-button-danger-hover-bg)}button.positive{background-color:var(--clr-button-positive-bg);color:var(--clr-button-positive-text)}button.positive:active:not([disabled]),button.positive:hover:not([disabled]){background-color:var(--clr-button-positive-hover-bg)}input,textarea{background:var(--clr-transparent);border:none;color:var(--clr-input-text);font-family:inherit;font-size:1.1rem;margin:.25rem 0;outline:none;padding:0 .125rem}input[type=email],input[type=password],input[type=search],input[type=tel],input[type=text],textarea{border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);height:2.5rem;transition:all .1s ease-in-out,height 0s}input[type=email],input[type=password],input[type=tel],input[type=text],textarea{width:100%}input[type=email]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,textarea:focus{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}input[type=email].invalid,input[type=password].invalid,input[type=search].invalid,input[type=tel].invalid,input[type=text].invalid,textarea.invalid{border-bottom:1px solid var(--clr-input-invalid-border);box-shadow:0 1px 0 var(--clr-input-invalid-shadow)}input[type=email]::placeholder,input[type=password]::placeholder,input[type=search]::placeholder,input[type=tel]::placeholder,input[type=text]::placeholder,textarea::placeholder{color:var(--clr-input-placeholder-text);font-weight:lighter}input[type=password].with-icon-right,input[type=text].with-icon-right{margin-right:-2rem;padding-right:2rem}input[type=password].with-icon-left,input[type=text].with-icon-left{margin-left:-1.45rem;padding-left:1.75rem}textarea{padding-top:.45rem;resize:none}input[type=range]{width:90%}option{padding:0}datalist{display:flex;flex-direction:row;justify-content:space-between;width:100%}::-webkit-scrollbar{width:.6rem}::-webkit-scrollbar-track{background-color:var(--clr-scrollbar-track);-webkit-box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit);box-shadow:inset 0 0 6px var(--clr-shadow-scrollbar-track-webkit)}::-webkit-scrollbar-thumb{background-color:var(--clr-scrollbar-thumb)}ul.menu{background-color:var(--clr-bright);border-radius:.2rem;box-shadow:0 1px 6px var(--clr-shadow-dialog);list-style:none;padding-bottom:.35rem;padding-top:.35rem;position:absolute;width:12rem;z-index:4}ul.menu>li{cursor:pointer;padding:.75rem .75rem .75rem 1.25rem}ul.menu>li:hover{background-color:var(--clr-menu-item-hover-bg)}ul.menu>li.separator{height:1px;margin:2px;padding:0}ul.menu>li.separator,ul.menu>li.separator:hover{background-color:var(--clr-border-light)}ul.menu>li.disabled{opacity:.6;pointer-events:none}.menuTrigger{background-color:inherit;border-radius:.7rem;height:1.4rem;line-height:1.4rem;opacity:0;position:absolute;right:.25rem;text-align:center;user-select:none;width:1.4rem}.menuTrigger a{color:var(--clr-text-secondary)}li .menuTrigger{top:.25rem}li:hover .menuTrigger{opacity:.9}li:hover .menuTrigger a{color:var(--clr-text-secondary)}div.alert-container{align-items:center;background:var(--clr-alert-overlay-bg);display:flex;height:100%;justify-content:center;overflow:hidden;padding:1rem;position:absolute;width:100%;z-index:3}div.alert{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:min-content;margin:auto 2rem;max-height:40rem;max-width:24rem;min-width:16rem;overflow:hidden;padding:1rem;position:relative;width:fit-content}div.alert-container .title{color:var(--clr-primary-accent);font-size:1.2rem;font-weight:500;padding:0 0 .35rem;position:relative;width:100%}div.alert-container .title.with-control{align-items:center;display:flex;flex:none;justify-content:space-between;padding:.5rem .5rem 0;position:relative}div.alert-container .content{padding:.5rem 0;position:relative}div.trusted-badge{margin:.25rem 0}.blue{color:var(--clr-primary-accent)!important}.lt-blue{color:var(--clr-lt-fg-1)!important}.orange{color:var(--clr-std-orange)!important}.verified-color{color:var(--clr-verified-accent)!important}.staff-color{color:var(--clr-staff-accent)!important}.danger-color{color:var(--clr-warning-accent)!important}.green{color:light-dark(#388e3c,#1a9a1d)}.white{color:var(--clr-bright)!important}.red{color:var(--clr-danger-text)!important}.badge-inv{color:var(--clr-badge-inv)!important}.gray{color:var(--clr-text-secondary)!important}.light-gray{color:var(--clr-text-placeholder)!important}.large{font-size:120%}.small{font-size:90%}.float-right{position:absolute;right:.5rem}.hr{background-color:var(--clr-background-light-gray);box-shadow:inset 0 .25rem .25rem -.25rem var(--clr-shadow-hr-inset),inset 0 -.25rem .25rem -.25rem var(--clr-shadow-hr-inset);display:block;height:.45rem;min-height:.3rem;width:100%}.hr.thin{height:.015rem}.divider{border-left:1.5px groove var(--clr-border-muted);display:inline-block;margin:0 .25rem;width:1px}.ellipsized{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.flat-button{align-items:center;background-color:var(--clr-bright);display:flex;font-weight:400;height:2em;line-height:2em;margin:.15rem .35rem;text-align:center;text-transform:uppercase;touch-action:manipulation;vertical-align:middle;white-space:nowrap;z-index:1}.flat-button:focus,.flat-button:hover{text-decoration:none}.flat-button.disabled,.flat-button.disabled:focus,.flat-button.disabled:hover{color:var(--clr-primary-accent);cursor:default;filter:grayscale(75%);opacity:.75}.flat-button.faux{background-color:var(--clr-background-extra-light-gray);border:1px solid var(--clr-text-tertiary);border-radius:3px;display:inline-block;height:1.4em;line-height:1.4em;margin:.15rem;padding:0 .35rem;text-transform:none}.action-button{background-color:var(--clr-background-off-white);border-radius:50%;box-shadow:0 2px .5rem 0 var(--clr-shadow-button);color:var(--clr-text-secondary);display:block;font-size:1.8rem;height:3.25rem;margin:0;min-height:unset;min-width:unset;outline:none;padding:0;position:absolute;transition:all .15s;width:3.25rem;z-index:2}.action-button:active:not([disabled]),.action-button:focus,.action-button:hover,.action-button:hover:not([disabled]){background-color:var(--clr-primary-action-hover);color:var(--clr-text-tertiary-activated)}.action-button:active{background-color:var(--clr-primary-action);color:var(--clr-text-tertiary-activated)}.action-button.hidden{bottom:2.625rem;font-size:1px;height:1px;line-height:1px;opacity:0;right:2.625rem;width:1px}.group-focus{outline:none}#mountPoint{height:100%;padding-bottom:1rem;padding-top:1rem}#noscript-message{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;flex-direction:column;margin-left:auto;margin-right:auto;margin-top:5rem;max-width:30rem;overflow:hidden;position:relative}#noscript-title{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue);font-size:120%;font-weight:bolder;padding:1rem}#noscript-content{padding:1rem}#app-container{background-color:var(--clr-bright);border-radius:.25rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);display:flex;height:100%;margin-left:auto;margin-right:auto;max-width:84rem;overflow:hidden;position:relative}#sidepanel{flex-grow:0;flex-shrink:0.3;min-width:18rem;width:24rem}#sidepanel,#topic-view{display:flex;flex-direction:column;height:100%;position:relative}#topic-view{overflow-x:hidden;width:100%}#info-view{display:flex;flex-direction:column;flex-grow:0;flex-shrink:0.3;height:100%;min-width:18rem;position:relative;width:24rem}.center-medium-text{align-items:center;display:flex;font-size:1.4rem;height:100%;justify-content:center;text-align:center;width:100%}.nodisplay{display:none!important}.quoted{margin-left:1rem}.space-right{margin-right:.25rem}.rounded-container{background-color:var(--clr-background-off-white);border-radius:.1rem;margin:.25rem;padding:.25rem;position:relative}div.in-place-edit,span.in-place-edit{border-bottom:1px dashed var(--clr-border-muted);cursor:pointer;display:inline-block;font-family:inherit;font-size:1rem;margin:.25rem .125rem 0;vertical-align:baseline;width:100%}.in-place-edit.short{align-items:center;display:inline-flex;font-size:1.1rem;height:2.5rem;line-height:2.25;white-space:nowrap}.in-place-edit.disabled{border-bottom:none;color:var(--clr-text-disabled);cursor:default}.in-place-edit.placeholder{color:var(--clr-text-placeholder)}.in-place-edit span{display:inline-block}.in-place-edit.short span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.in-place-edit .material-icons{display:inline-block}.material-icons.invalid{color:var(--clr-error-text-muted)}textarea.in-place-edit{font-size:unset;height:unset}input.in-place-edit.invalid{color:var(--clr-error-text-muted)}table.permission-editor{width:100%}table.permission-editor td{font-size:1.1rem;margin:.35rem 0;vertical-align:middle}table.permission-editor td.checkbox{color:var(--clr-text-tertiary);text-align:center}.permission-editor .material-icons{font-size:1.3rem;line-height:1.3rem}.material-icons.clickable{border-bottom:none;cursor:pointer}.clickable{border-bottom:1px dashed var(--clr-border-muted)}.clean-clickable,.clickable,.image-clickable{cursor:pointer}.panel-title{font-size:1.4rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title.deleted{text-decoration:line-through}.caption-panel{box-shadow:0 1px 2px var(--clr-shadow-gray-strong);flex:none;height:var(--caption-panel-height);overflow-x:hidden;white-space:nowrap;z-index:1}.caption-panel,.dialog-buttons{align-items:center;display:flex;padding:.5rem}.dialog-buttons{justify-content:flex-end}.dialog-buttons button{margin:0 .5rem}.avatar-box{flex-grow:0;flex-shrink:0;position:relative}.bot-form{display:flex;flex-direction:column;line-height:2rem;min-width:8rem;overflow:hidden}.bot-form div{min-height:2rem;vertical-align:middle}.bot-form button{background-color:var(--clr-blue-wash-light);color:var(--clr-primary-accent);display:inline-block;font-size:inherit;height:2rem;line-height:2rem;margin:.15rem;text-transform:none}.bot-form>div>button{width:auto}.bot-form button:active,.bot-form button:focus,.bot-form button:hover{background-color:var(--clr-primary-wash);color:var(--clr-dk-fg-5);outline:0}#side-caption-panel{background-color:var(--clr-primary-accent);color:var(--clr-primary-light-blue)}#side-caption-panel a{color:var(--clr-primary-light-blue);line-height:1;padding-left:.5rem}#side-caption-panel :hover{color:var(--clr-bright)}#sidepanel-title{margin-left:.5rem;margin-right:auto}#self-avatar{border-radius:50%;flex:none;height:3rem;min-width:3rem;width:3rem}#self-avatar.avatar-box{font-size:1.8rem}#settings-form ul{list-style:none}#settings-form li{vertical-align:middle}#settings-form label{display:inline-block;padding-left:.5rem}input#host-name{width:100%}input.search{text-indent:1.4rem}i.search{left:.6rem;position:absolute}.info-box{display:none;overflow:hidden;padding:1rem 1.5rem .75rem .5rem;position:relative}.info-box>span{line-height:1.35rem}.info-box .cancel{position:absolute;right:.25rem;top:.5rem}.info-box.error{background-color:var(--clr-error-bg-light);border-bottom:1px solid var(--clr-error-border-light);color:var(--clr-error-text-dark);display:flex}.info-box.warning{background-color:var(--clr-warning-bg-light);border-bottom:1px solid var(--clr-warning-border-light);color:var(--clr-warning-text-dark);display:flex}.info-box.info{background-color:var(--clr-info-bg-light);border-bottom:1px solid var(--clr-info-border-light);color:var(--clr-info-text-dark);display:flex}.info-box .cancel .material-icons{color:var(--clr-text-secondary);font-size:1rem}.info-box.error .cancel .material-icons{color:var(--clr-error-text-dark)}.info-box .icon{display:block;margin-right:.5rem}.info-box .icon .material-icons{font-size:1.5rem}.info-box.warning .icon .material-icons{color:var(--clr-warning-icon)}.info-box.error .icon .material-icons{color:var(--clr-error-icon)}.info-box.info .icon .material-icons{color:var(--clr-info-text-dark)}.flex-column{display:flex;flex-direction:column;height:100%;overflow-x:hidden}.flex-column.narrow{height:auto}.scrollable-panel{height:100%;margin-bottom:auto;margin-top:.25rem;overflow-x:hidden;overflow-y:auto;scroll-behavior:smooth}.contact-box{list-style:none;overflow-x:hidden}.contact-box>li{background:linear-gradient(to right,var(--clr-transparent) 3.5rem,var(--clr-background-extra-light-gray) 1px,var(--clr-background-extra-light-gray) 100%) 0 100% /100% 1px no-repeat,var(--clr-bright);cursor:pointer;display:flex;flex-grow:0;flex-shrink:0;min-height:3.75rem;overflow-x:hidden;padding:.35rem .25rem .5rem .35rem;position:relative}.contact-box.small>li{min-height:2.5rem;padding:.25rem .25rem .35rem .35rem}.contact-box>li:last-child{background:var(--clr-bright)}.contact-box>li:hover{background-color:var(--clr-background-blue-gray-50)}.contact-box>li.selected{background-color:var(--clr-background-blue-gray-100)}.contact-box>li.tpinned{background-color:var(--clr-background-blue-gray-75);border-right:1.5px solid var(--clr-secondary-accent)}.contact-box>li.action{border-bottom:none;min-height:2.5rem}.contact-box .text-box{overflow-x:hidden}.contact-box .contact-title{font-size:1.05rem;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-title.deleted{opacity:.66;text-decoration:line-through;text-decoration-thickness:.5px}.contact-box .contact-comment{font-weight:lighter}.contact-box .contact-comment,.contact-box .contact-comment>span{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-box .contact-comment b{font-weight:bolder}.contact-box .contact-comment .material-icons{color:light-dark(#777,#666);margin-bottom:.2rem}.contact-box .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-height:3rem;min-width:3rem;overflow:hidden;padding:0;position:relative;width:3rem}.contact-box .avatar{border-radius:50%;height:3rem;width:3rem}.contact-box.small .avatar-box{font-size:1.2rem;height:2rem;min-height:2rem;min-width:2rem;width:2rem}.contact-box.small .avatar{height:2rem;width:2rem}.avatar.deleted{filter:grayscale(1);opacity:.75}.contact-box .avatar-box>.material-icons{display:flex;flex-direction:column;font-size:2.4rem;justify-content:space-around;line-height:3rem}.contact-box .avatar-box>.checkmark.material-icons{line-height:unset}.contact-box.small .avatar-box>.material-icons{font-size:1.6rem;line-height:2rem}.contact-box .text-box{display:flex;flex-direction:column;justify-content:space-around}.contact-box .text-box>div{align-items:center;display:flex;flex-direction:row}.contact-box .action-text{cursor:pointer;font-size:.95rem;line-height:2.5rem;margin:0 auto;text-align:center}img.channel{height:1.25rem;margin-left:.3rem;vertical-align:middle;width:1.25rem}.large img.channel{height:1.45rem;margin-bottom:.15rem;margin-left:.5rem;width:1.45rem}.avatar-box .online,.offline{border-radius:50%;bottom:.1rem;flex-shrink:0;height:.75rem;min-height:.75rem;min-width:.75rem;position:absolute;right:0;width:.75rem}.avatar-box .online{background-color:var(--clr-online)}.avatar-box .offline{background-color:var(--clr-offline)}.online.typing{animation:typing .5s infinite}@keyframes typing{0%,to{transform:translateX(0)}50%{transform:translateX(-.3rem)}}.contact-box .checkmark.material-icons{border:0 solid var(--clr-transparent);color:var(--clr-secondary-accent);overflow:visible;padding-left:.5px}.contact-box .checkmark.material-icons,.contact-box .deleted.material-icons{background-color:var(--clr-bright);bottom:0;font-size:1.5rem;height:1.5rem;position:absolute;right:0;width:1.5rem}.contact-box .deleted.material-icons{color:var(--clr-text-tertiary)}#add-topic{bottom:1rem;position:absolute;right:1rem}.panel-form{display:flex;flex-direction:column;padding:0;position:relative}.panel-form-row{align-items:center;flex-shrink:0}.panel-form-column,.panel-form-row{display:flex;flex-grow:0;line-height:1.5;padding:.5rem .75rem;position:relative}.panel-form-column{flex-direction:column;overflow-x:clip}.panel-form-column>.panel-form-column,.panel-form-row>.panel-form-column{flex-grow:1;padding:0!important}.panel-form-column>.panel-form-row,.panel-form-row>.panel-form-row{padding:0!important}.panel-form-column>.group{margin-bottom:.25rem;margin-top:.25rem}.avatar-upload{display:flex;flex-direction:column;flex-shrink:0;font-size:4.5rem;height:10.5rem;margin:.25rem;padding:0;position:relative;width:10rem}.avatar-upload.read-only{height:auto}.avatar-upload .clear-avatar{background-image:radial-gradient(var(--clr-bright) 40%,var(--clr-transparent) 75%);font-size:1rem;opacity:0;position:absolute;right:0;top:0}.avatar-upload:hover .clear-avatar{opacity:1}.avatar-upload .avatar-box{height:10rem;position:relative;width:10rem}.avatar-upload .avatar-box>.material-icons{font-size:4rem;line-height:10rem;position:relative;vertical-align:middle}.avatar-upload:after{clear:both;content:".";display:block;height:0;visibility:hidden}.avatar-upload .blank{border:1px dashed var(--clr-text-tertiary);color:var(--clr-text-tertiary);flex-shrink:0;font-size:1rem;line-height:10rem;text-align:center;vertical-align:middle}.avatar-upload .blank,.avatar-upload img.preview{border-radius:50%;height:10rem;overflow:hidden;width:10rem}.avatar-upload img.preview:before{background:50% no-repeat url(../img/broken_image.png);border-radius:50%;color:var(--clr-text-primary);content:" ";display:flex;font-size:.9rem;font-weight:lighter;height:10rem;justify-content:center;left:0;position:absolute;top:0;width:10rem}.avatar-upload .inputfile.hidden{height:.1px;opacity:0;overflow:hidden;position:absolute;width:.1px}.avatar-upload .inputfile+label.round{align-items:center;background-color:var(--clr-background-off-white);border-radius:50%;bottom:0;box-shadow:0 1px 4px var(--clr-shadow-dialog);cursor:pointer;display:flex;height:3rem;justify-content:center;line-height:3rem;position:absolute;right:0;width:3rem;z-index:1}.avatar-upload .inputfile:focus+label.round{outline:none}.avatar-upload .inputfile+label:hover,.avatar-upload .inputfile:focus+label{background-color:var(--clr-primary-wash);color:var(--clr-primary-accent)}#topic-caption-panel{background-color:var(--clr-background-blue-gray-300)}#topic-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#topic-caption-panel :hover{color:var(--clr-dark)}#topic-caption-panel .avatar-box{font-size:1.8rem;height:3rem;margin-right:.35rem;min-width:3rem;position:relative;width:3rem}#topic-caption-panel .avatar-box>.material-icons{font-size:2.4rem;line-height:3rem}#topic-title-group{overflow-x:hidden}#hide-message-view{display:block;margin-right:.35rem}#topic-users{margin-left:auto;margin-right:1rem;width:min-content}#topic-users .avatar-box{display:inline-block;font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;width:1.8rem}#topic-users .avatar-box>.material-icons{font-size:1.4rem;line-height:1.8rem}#topic-users>span{line-height:2rem;vertical-align:top}.qr-code{align-self:center}#messages-container{height:100%;overflow-y:hidden;position:relative}#messages-container:before{background-color:var(--clr-background-blue-gray-50);background-image:var(--wallpaper-url);background-position:var(--wallpaper-position);background-repeat:var(--wallpaper-repeat);background-size:var(--wallpaper-size);content:"";filter:blur(var(--wallpaper-blur)) invert(var(--wallpaper-invert)) brightness(var(--wallpaper-brightness));height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%;z-index:0}#messages-panel{height:100%;overflow-y:scroll;padding:.75rem;position:relative}#write-only-background{background-image:repeating-linear-gradient(45deg,hsla(0,0%,100%,.5),hsla(0,0%,100%,.5) .5rem,hsla(0,0%,100%,.8) 0,hsla(0,0%,100%,.8) 1rem);height:100%;left:0;position:absolute;top:0;width:100%}#write-only-note{height:auto;top:50%;transform:translate(-50%,-50%);width:auto}#peer-messaging-disabled-note,#write-only-note{background-color:var(--clr-bright);border-radius:.5rem;box-shadow:0 1px .5px var(--clr-shadow-button-inset-active);color:var(--clr-text-primary);left:50%;line-height:2rem;padding:.75rem 1.25rem;position:absolute;text-align:center}#peer-messaging-disabled-note{bottom:4.3rem;transform:translate(-50%);width:fit-content}#send-message-panel{align-items:center;background-color:var(--clr-background-blue-gray-50);display:flex;flex:none;min-height:4rem;padding:.4rem .4rem .4rem .6rem;z-index:2}#send-message-panel #writing-disabled{font-size:1.2rem;text-align:center;width:100%}#send-message-wrapper{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);z-index:2}#sendMessage{overflow:hidden;overflow-wrap:break-word}#send-message-panel .material-icons{font-size:1.6rem;min-width:2rem}#send-message-panel .material-icons.secondary,.material-icons.disabled{color:var(--clr-text-tertiary)!important}#send-message-panel .material-icons.secondary:hover{color:var(--clr-primary-accent)!important}#send-message-input{max-height:6rem;min-height:2.5rem;overflow:hidden auto}.accept-invite-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);width:100%;z-index:1}.accept-invite-panel .title{font-size:1.2rem;padding:.75rem}.accept-invite-panel .footer{background-color:var(--clr-background-off-white);padding-bottom:.35rem;text-align:center;white-space:nowrap}.accept-invite-panel button{border:1px solid var(--clr-transparent);box-shadow:0 1px 2px 0 var(--clr-shadow-button);font-size:1rem;height:2em;line-height:2em;margin:.25rem}#dummy-view{align-items:center;background-color:var(--clr-cyan-50);display:flex;height:100%;justify-content:center;width:100%}#dummy-view a{display:block;text-align:center;text-decoration:none}#image-preview{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;left:0;position:absolute;top:0;width:100%;z-index:2}#preview-caption-panel{background-color:var(--clr-background-blue-gray-50);box-shadow:0 1px 2px var(--clr-shadow-silver-subtle);display:flex;flex-grow:0;flex-shrink:0;font-size:120%;height:var(--caption-panel-height);justify-content:space-between;line-height:2rem;padding:1rem .75rem 0;z-index:3}#preview-caption-panel a{color:var(--clr-text-secondary);text-decoration:none}#preview-caption-panel a:hover{color:var(--clr-dark)}#image-preview-container{align-items:center;background-color:var(--clr-gray-medium-bg);display:flex;height:100%;justify-content:space-around;overflow:hidden;width:100%}#image-preview-footer{background-color:var(--clr-background-blue-gray-50);box-shadow:0 -2px 3px -1px var(--clr-shadow-panel-divider);display:flex;flex-grow:0;flex-shrink:0;height:3.2rem;justify-content:space-around;line-height:1.5rem;z-index:1}#image-preview-container .material-icons{font-size:6rem}#image-preview-container .doc-card{background-color:var(--clr-std-ltgray);border-radius:.5rem;display:flex;flex-direction:column;max-width:30rem;overflow-x:hidden;padding:1rem}.doc-card .avatar-box{font-size:4.5rem;height:10rem;width:10rem}.doc-card .avatar-box .material-icons{line-height:10rem}#video-container{background-color:var(--clr-overlay-white-strong);display:flex;flex-direction:column;height:100%;justify-content:space-between;left:0;position:absolute;top:0;width:100%;z-index:3}#video-container.minimized{background-color:unset;border-radius:.5rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);cursor:grab;height:18rem;left:auto;right:1rem;top:1rem;user-select:none;width:18rem}#controls{align-items:center;align-self:center;bottom:2.5rem;column-gap:1rem;display:flex;justify-content:center;position:absolute;z-index:1}#controls.minimized{bottom:1.75rem;column-gap:.5rem}.incoming-call #controls{bottom:1rem}#controls button{align-items:center;border-radius:50%;box-shadow:0 3px 6px 0 var(--clr-shadow-button);display:flex;height:4rem;justify-content:center;min-width:auto;position:relative;width:4rem}#controls.minimized button{box-shadow:0 2px 4px 0 var(--clr-shadow-button);height:2.75rem;width:2.75rem}#controls button .material-icons{font-size:1.8rem}#controls.minimized button .material-icons{font-size:1.4rem}button.full-screen{background-color:transparent;border-radius:.5rem;box-shadow:none;height:2.5rem;left:2rem;min-width:unset;padding:0;position:absolute;top:2rem;width:2.5rem;z-index:1}.minimized button.full-screen{height:2rem;left:1rem;top:1rem;width:2rem}button.full-screen:hover:not([disabled]),button:active:not([disabled]){color:var(--clr-text-secondary)}button.full-screen .material-icons{font-size:x-large}.minimized button.full-screen .material-icons{font-size:large}#video-container-panel{height:100%;position:relative;width:100%}.call-party{background-color:var(--clr-background-extra-light-gray);border:2px solid var(--clr-border-light);border-radius:.5rem;overflow:hidden}.call-party:hover{border-color:var(--clr-primary-accent)}.minimized .call-party{border-width:1px}.call-party.peer{bottom:1rem;left:1rem;position:absolute;right:1rem;top:1rem;z-index:1}.minimized .call-party.peer{bottom:0;left:0;right:0;top:0}.call-party.self{bottom:.5rem;height:10rem;position:absolute;right:.5rem;width:10rem;z-index:2}.call-party.self[disabled]{display:none}video{height:100%;object-fit:contain;width:100%}.call-party.self video{transform:scaleX(-1)}.call-party[disabled] video{display:none}.caller-card{align-items:center;display:flex;flex-direction:column;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}.caller-card .avatar-box{font-size:6rem;height:10rem;width:10rem}.caller-card.pulse .lettertile,.caller-card.pulse img.avatar{animation:active-call 1.5s linear infinite}.caller-card .avatar-box .material-icons{font-size:6rem;line-height:1.6}.minimized .caller-card .avatar-box{font-size:3.6rem;height:6rem;width:6rem}.call-party .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;max-width:12rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-party.self .caller-name.inactive{bottom:.25rem;position:absolute;right:.25rem}.caller-card .caller-name{font-size:larger;margin-top:.5rem}.caller-card .trusted-badge{display:inline-block}.call-party.peer .caller-name.inactive{bottom:.5rem;font-size:larger;left:1rem;margin:0 auto;position:absolute}.minimized .caller-name{border-radius:.25rem;font-weight:lighter;padding:.1rem .35rem}.incoming-call{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);margin:auto 2rem;max-width:24rem;min-width:16rem;width:fit-content}.incoming-call,.incoming-call .caller-card{display:flex;flex-direction:column;position:relative}.incoming-call .caller-card{align-items:center;height:100%;justify-content:center;left:auto;padding:4rem 3.5rem 5.5rem;top:auto;width:100%}.incoming-call .caller-name{background-color:var(--clr-background-off-white);border-radius:.35rem;overflow-x:hidden;padding:.15rem .5rem;text-overflow:ellipsis;text-shadow:0 0 1px var(--clr-bright);white-space:nowrap;z-index:1}.call-message{display:flex;flex-direction:row}.call-message .duration{font-weight:lighter}#go-to-latest{bottom:1rem;right:1.5rem}@keyframes active-call{0%{box-shadow:0 0 0 .1rem var(--clr-primary-accent-transparent-medium),0 0 0 .3rem var(--clr-primary-accent-transparent-medium),0 0 0 .5rem var(--clr-primary-accent-transparent-medium)}to{box-shadow:0 0 0 .4rem var(--clr-primary-accent-transparent-medium),0 0 0 2rem rgba(33,150,243,0),0 0 0 3rem rgba(33,150,243,0)}}.chat-box{list-style:none;margin:0 .5rem;padding:0 0 3.5rem;scroll-behavior:smooth}.chat-box.group{margin-left:-.4rem}.chat-box li{align-items:flex-end;display:flex;margin:0;padding:0}.chat-box .right{justify-content:flex-end}.bubble{border-radius:.5rem;color:var(--clr-bubble-text);display:flex;filter:drop-shadow(.5px .5px .7px var(--clr-shadow-bubble-drop));height:auto;margin:0;max-width:36rem;min-width:9rem;padding:.75rem .5rem;position:relative;text-align:left;transition:background-color .5s ease-out;transition-delay:.3s}.chat-box li.single{margin-bottom:.75rem;margin-top:.25rem}.chat-box li.first{margin-bottom:.15rem;margin-top:.25rem}.chat-box li.middle{margin-bottom:.15rem;margin-top:.15rem}.chat-box li.last{margin-bottom:.75rem;margin-top:.15rem}.left .bubble{background-color:var(--clr-bubble-left-bg);margin-right:.5rem}.left.flash .bubble{background-color:var(--clr-bubble-left-bg-flash)}.left .bubble.tip{border-bottom-left-radius:0}.right .bubble{background-color:var(--clr-bubble-right-bg);margin-left:1.75rem}.right.flash .bubble{background-color:var(--clr-bubble-right-bg-flash)}.right .bubble.tip{border-bottom-right-radius:0}.chat-box .meta{justify-content:center;margin-bottom:.5rem;margin-top:.5rem}.chat-box .meta .bubble{color:var(--clr-bubble-meta-text);min-width:unset}.meta .bubble.deleted{background-color:var(--clr-bubble-meta-deleted-bg);padding:.75rem .75rem .5rem}.meta .bubble.date{background-color:var(--clr-bubble-meta-date-bg);font-size:smaller;padding:.5rem;text-transform:uppercase;user-select:none}.left .bubble.tip:before{background-color:var(--clr-bubble-left-bg);border-bottom-left-radius:.3rem;bottom:0;clip-path:polygon(100% 0,0 110%,100% 110%);-webkit-clip-path:polygon(100% 0,0 110%,100% 110%);content:"";height:.85rem;left:-.8rem;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.left.flash .bubble.tip:before{background-color:var(--clr-bubble-left-bg-flash)}.right .bubble.tip:before{background-color:var(--clr-bubble-right-bg);border-bottom-right-radius:.3rem;bottom:0;clip-path:polygon(0 0,100% 110%,0 110%);-webkit-clip-path:polygon(0 0,100% 110%,0 110%);content:"";height:.85rem;left:99.8%;position:absolute;transition:background-color .5s ease-out;transition-delay:.3s;width:.85rem}.right.flash .bubble.tip:before{background-color:var(--clr-bubble-right-bg-flash)}.chat-box .avatar-box{font-size:.8rem;height:1.4rem;margin-bottom:.8rem;margin-right:.8rem;min-height:1.4rem;min-width:1.4rem;position:relative;width:1.4rem}.bubble div.content-meta{width:100%}.bubble div.message-content{font-size:var(--message-text-size);margin:0;max-width:36rem;overflow-wrap:anywhere;padding:0 .75rem;position:relative;width:100%}.bubble div.message-content.emoji-1{font-size:300%}.bubble div.message-content.emoji-2{font-size:241%}.bubble div.message-content.emoji-3{font-size:193%}.bubble div.message-content.emoji-4{font-size:155%}.bubble div.message-content.emoji-5{font-size:125%}.bubble div.message-content:after{clear:both;content:".";display:block;height:0;visibility:hidden}.chat-box .timestamp-padding{display:inline-block;height:0;width:4rem}.chat-box .timestamp{color:var(--clr-bubble-timestamp-text);float:right;font-size:80%;position:relative;top:.35rem;user-select:none;white-space:nowrap}.chat-box .author{color:var(--clr-bubble-author-text);font-size:80%;max-width:12em;overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.image-preview,.inline-image{border-radius:.1rem;overflow:hidden;position:relative}.inline-image{max-height:24rem;max-width:36rem}.inline-image>.rounded-container{border-left:.25rem solid var(--clr-transparent);border-right:.25rem solid var(--clr-transparent);bottom:2rem;margin:.25rem auto;position:relative}img.image-preview:before,img.inline-image:before{background:center no-repeat var(--clr-border-light) url(../img/broken_image.png);color:var(--clr-text-primary);display:flex;font-size:.9rem;font-weight:lighter;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}img.inline-image:before{background-size:3rem 3rem;content:attr(alt)}img.image-preview:before{background-size:10rem 10rem;content:" "}.inline-image.video>img.inline-image:before,img.image-preview.video:before{background:center no-repeat var(--clr-border-light) url(../img/broken_video.png)}.inline-image.video>img.inline-image:before{background-size:3rem 3rem}.inline-video{align-items:center;display:flex;justify-content:center;position:relative}.inline-video>img.inline-image:before{background:var(--clr-border-light)}.inline-video .duration{background-color:hsla(0,0%,100%,.5);border-radius:.3rem;bottom:.25rem;color:var(--clr-toast-bg);font-size:80%;left:.25rem;padding:.25rem .5rem;position:absolute}.inline-video .play-control{align-items:center;background-color:rgba(0,0,0,.4);border-radius:50%;cursor:pointer;display:flex;height:4rem;justify-content:center;pointer-events:none;position:absolute;width:4rem}.attachment{display:flex}.attachment:last-of-type{margin-bottom:-.45rem}#info-caption-panel{background-color:var(--clr-background-blue-gray-300)}#info-caption-panel a{color:var(--clr-text-secondary);line-height:1;text-decoration:none}#info-caption-panel :hover{color:var(--clr-dark)}#info-title{margin-right:auto}#group-manager{display:flex;flex-direction:column;height:100%;overflow-y:hidden;position:relative}#group-manager-buttons{background-color:var(--clr-background-blue-gray-50);border-left:1px solid var(--clr-border-light);box-shadow:0 -1px var(--clr-shadow-panel-divider);display:flex;height:4rem;justify-content:space-around;padding:.4rem;z-index:2}ul.tabbar{background:var(--clr-tabbar-bg);display:flex;flex-grow:0;flex-shrink:0;list-style:none;margin:0;overflow:hidden;padding:0 0 0 1rem;width:100%}ul.tabbar>li{box-shadow:inset 0 -2px 2.5px -1px var(--clr-shadow-button);height:2.4rem;position:relative}ul.tabbar li.active{background:var(--clr-bright)}ul.tabbar li:after{background:var(--clr-tabbar-inactive-border);bottom:0;content:"";height:.1rem;left:0;position:absolute;width:100%}ul.tabbar li.active:after{animation:tabbar-border-expand .2s cubic-bezier(.4,0,.4,1) 0s alternate forwards;background:var(--clr-tabbar-active-border);bottom:0;content:"";height:.15rem;left:0;position:absolute}@keyframes tabbar-border-expand{0%{opacity:0;width:0}to{opacity:1;width:100%}}ul.tabbar>li>a{color:var(--clr-tabbar-inactive-text);font-size:1.3rem;font-variant:small-caps;font-weight:400;line-height:2.4rem;overflow:hidden;padding-left:1rem;padding-right:1rem;position:relative;text-align:center;text-decoration:none}ul.tabbar li.active>a{color:var(--clr-tabbar-active-text)}.unread{background-color:var(--clr-secondary-accent);border-radius:50%;color:var(--clr-bright);display:inline-block;font-size:.75rem;font-weight:bolder;height:1.35rem;line-height:1.45rem;margin-left:.5rem;text-align:center;vertical-align:middle;width:1.35rem}.material-icons.as-badge{color:var(--clr-chip-remove-icon-bg);font-size:1.15rem;padding-left:.2rem}.badge{align-self:flex-start;background-color:var(--clr-badge-default-bg);border:1px solid var(--clr-badge-default-border);border-radius:.2rem;color:var(--clr-badge-default-text);display:inline-block;font-family:Roboto Mono,Courier,monospace,sans-serif;font-size:.8rem;margin:.05rem .1rem;padding:.05rem .25rem}.badge.green{background-color:var(--clr-badge-green-bg);border-color:var(--clr-badge-green-border);color:var(--clr-badge-green-text)}.badge.yellow{background-color:var(--clr-badge-yellow-bg);border-color:var(--clr-badge-yellow-border);color:var(--clr-badge-yellow-text)}.badge.blue{background-color:var(--clr-badge-blue-bg);border-color:var(--clr-badge-blue-border);color:var(--clr-badge-blue-text)}.badge.red{background-color:var(--clr-badge-red-bg);border-color:var(--clr-badge-red-border);color:var(--clr-badge-red-text)}.badge.magenta{background-color:var(--clr-badge-magenta-bg);border-color:var(--clr-badge-magenta-border);color:var(--clr-badge-magenta-text)}.lettertile{border-radius:50%;padding-bottom:100%;user-select:none;width:100%}.lettertile>div{align-items:center;border-radius:50%;bottom:0;color:var(--clr-lettertile-default-text);display:flex;flex-grow:0;flex-shrink:0;justify-content:center;left:0;line-height:1;padding-top:.1em;position:absolute;right:0;text-align:center;text-transform:uppercase;top:0}.lettertile:hover{color:var(--clr-lettertile-hover-text)}.lettertile.disabled{opacity:.5}.lt-bg-0{background-color:var(--clr-lt-bg-0)}.lt-bg-1{background-color:var(--clr-lt-bg-1)}.lt-bg-2{background-color:var(--clr-lt-bg-2)}.lt-bg-3{background-color:var(--clr-lt-bg-3)}.lt-bg-4{background-color:var(--clr-lt-bg-4)}.lt-bg-5{background-color:var(--clr-lt-bg-5)}.lt-bg-6{background-color:var(--clr-lt-bg-6)}.lt-bg-7{background-color:var(--clr-lt-bg-7)}.lt-bg-8{background-color:var(--clr-lt-bg-8)}.lt-bg-9{background-color:var(--clr-lt-bg-9)}.lt-bg-10{background-color:var(--clr-lt-bg-10)}.lt-bg-11{background-color:var(--clr-lt-bg-11)}.lt-bg-12{background-color:var(--clr-lt-bg-12)}.lt-bg-13{background-color:var(--clr-lt-bg-13)}.lt-bg-14{background-color:var(--clr-lt-bg-14)}.lt-bg-15{background-color:var(--clr-lt-bg-15)}.dk-bg-0{background-color:var(--clr-dk-bg-0)}.dk-bg-1{background-color:var(--clr-dk-bg-1)}.dk-bg-2{background-color:var(--clr-dk-bg-2)}.dk-bg-3{background-color:var(--clr-dk-bg-3)}.dk-bg-4{background-color:var(--clr-dk-bg-4)}.dk-bg-5{background-color:var(--clr-dk-bg-5)}.dk-bg-6{background-color:var(--clr-dk-bg-6)}.dk-bg-7{background-color:var(--clr-dk-bg-7)}.dk-bg-8{background-color:var(--clr-dk-bg-8)}.dk-bg-9{background-color:var(--clr-dk-bg-9)}.dk-bg-10{background-color:var(--clr-dk-bg-10)}.dk-bg-11{background-color:var(--clr-dk-bg-11)}.dk-bg-12{background-color:var(--clr-dk-bg-12)}.dk-bg-13{background-color:var(--clr-dk-bg-13)}.dk-bg-14{background-color:var(--clr-dk-bg-14)}.dk-bg-15{background-color:var(--clr-dk-bg-15)}.lt-fg-0{color:var(--clr-lt-fg-0)!important}.lt-fg-1{color:var(--clr-lt-fg-1)!important}.lt-fg-2{color:var(--clr-lt-fg-2)!important}.lt-fg-3{color:var(--clr-lt-fg-3)!important}.lt-fg-4{color:var(--clr-lt-fg-4)!important}.lt-fg-5{color:var(--clr-lt-fg-5)!important}.lt-fg-6{color:var(--clr-lt-fg-6)!important}.lt-fg-7{color:var(--clr-lt-fg-7)!important}.lt-fg-8{color:var(--clr-lt-fg-8)!important}.lt-fg-9{color:var(--clr-lt-fg-9)!important}.lt-fg-10{color:var(--clr-lt-fg-10)!important}.lt-fg-11{color:var(--clr-lt-fg-11)!important}.lt-fg-12{color:var(--clr-lt-fg-12)!important}.lt-fg-13{color:var(--clr-lt-fg-13)!important}.lt-fg-14{color:var(--clr-lt-fg-14)!important}.lt-fg-15{color:var(--clr-lt-fg-15)!important}.dk-fg-0{color:var(--clr-dk-fg-0)!important}.dk-fg-1{color:var(--clr-dk-fg-1)!important}.dk-fg-2{color:var(--clr-dk-fg-2)!important}.dk-fg-3{color:var(--clr-dk-fg-3)!important}.dk-fg-4{color:var(--clr-dk-fg-4)!important}.dk-fg-5{color:var(--clr-dk-fg-5)!important}.dk-fg-6{color:var(--clr-dk-fg-6)!important}.dk-fg-7{color:var(--clr-dk-fg-7)!important}.dk-fg-8{color:var(--clr-dk-fg-8)!important}.dk-fg-9{color:var(--clr-dk-fg-9)!important}.dk-fg-10{color:var(--clr-dk-fg-10)!important}.dk-fg-11{color:var(--clr-dk-fg-11)!important}.dk-fg-12{color:var(--clr-dk-fg-12)!important}.dk-fg-13{color:var(--clr-dk-fg-13)!important}.dk-fg-14{color:var(--clr-dk-fg-14)!important}.dk-fg-15{color:var(--clr-dk-fg-15)!important}.material-icons{font-size:1.4rem;line-height:1;text-align:center;user-select:none;vertical-align:middle}.material-icons.small{font-size:1rem}.material-icons.medium{font-size:1.2rem}.material-icons.large{font-size:1.6rem}.material-icons.big{font-size:2.2rem}.material-icons.x-big{font-size:3rem}.material-icons.huge{font-size:4rem}.composed-material{display:inline-block;position:relative}.composed-material .second{font-size:85%;font-weight:700;left:39%;position:absolute;top:7%}.composed-material .second-small{font-size:62%;font-weight:700;left:30%;position:absolute;top:14%}.material-icons.outline{position:relative;text-shadow:-1px 1px var(--clr-bright),1px 1px var(--clr-bright),1px -1px var(--clr-bright),-1px -1px var(--clr-bright)}#self-avatar .material-icons{font-size:2.4rem;line-height:3rem}.avatar-box .material-icons{border-radius:50%;color:var(--clr-lettertile-default-text);height:inherit;width:inherit}.chip-input{align-items:center;background:var(--clr-transparent);border-bottom:1px solid var(--clr-input-border);box-shadow:0 1px 0 var(--clr-input-shadow);color:var(--clr-input-text);cursor:text;display:flex;flex-grow:1;flex-wrap:wrap;font-size:1.1rem;font-weight:400;justify-content:flex-start;margin:.25rem 0;max-height:10rem;min-height:4rem;outline:none;overflow-y:scroll;text-align:center;transition:all .1s ease-in-out}.chip-input.focused{border-bottom:1px solid var(--clr-input-border-focus);box-shadow:0 1px 0 var(--clr-input-shadow-focus)}.chip-input>input[type=text]{border:none;box-shadow:none;display:inline-block;flex:1 0 auto;min-width:4rem;width:auto}.chip,.chip-input>input[type=text]{height:1.8rem;line-height:1.8;margin:.125rem}.chip{align-items:center;background-color:var(--clr-chip-bg);border-radius:.9rem;display:flex;flex:0 0 auto;font-size:90%;max-width:12rem;overflow:hidden}.chip,.chip>span{text-overflow:ellipsis;white-space:nowrap}.chip>span{overflow-x:hidden}.chip.invalid{background-color:var(--clr-chip-invalid-bg);color:var(--clr-chip-invalid-text)}.chip>a{background-color:var(--clr-chip-remove-icon-bg);border-radius:50%;color:var(--clr-chip-remove-icon-text);display:inline-block;height:1.175rem;line-height:1.15;margin:.3rem;min-width:1.175rem;text-decoration:none;width:1.175rem}.chip>a:focus,.chip>a:hover{background-color:var(--clr-chip-remove-icon-hover-bg);color:var(--clr-chip-remove-icon-hover-text);text-decoration:none}.chip .avatar-box{font-size:1rem;height:1.8rem;margin-right:.2rem;min-height:1.8rem;min-width:1.8rem;position:relative;width:1.8rem}.chip .avatar-box .material-icons{font-size:1.4rem;line-height:1.8rem}.chip .spacer{display:inline-block;height:1.175rem;margin:.3rem;width:.25rem}.load-spinner-box{--size-small:2.5rem;--size-large:4rem;background-color:var(--clr-bright);border-radius:50%;box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button);height:var(--size-small);left:0;margin-left:auto;margin-right:auto;padding:.25rem;position:absolute;right:0;top:5rem;width:var(--size-small);z-index:2}.load-spinner-box.large{height:var(--size-large);width:var(--size-large)}.load-spinner-box.clear{background-color:hsla(0,0%,100%,.5);box-shadow:.1rem .1rem .15rem 1px var(--clr-shadow-button-inset-active)}.load-spinner-box.centered{top:calc(var(--size-small)/2 - .25rem)}.load-spinner-box.large.centered{top:calc(var(--size-large)/2 - .25rem)}.loader-spinner{animation:spin 1.5s linear infinite;border-radius:50%;border-top:.35rem solid var(--clr-spinner-track);border:.35rem solid var(--clr-spinner-track);border-top-color:var(--clr-spinner-active);height:2rem;width:2rem}.load-spinner-box.large .loader-spinner{height:3.5rem;width:3.5rem}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.uploader{display:flex}.uploader>div{background-color:var(--clr-background-blue-gray-100);border-radius:.1rem;height:.6rem;line-height:0;margin:.35rem;padding:.15rem;position:relative;width:6rem}.uploader>div>span{background-color:var(--clr-primary-action);border-radius:.08rem;display:inline-block;height:.3rem}.highlight{color:var(--clr-highlight-text);font-weight:bolder}.highlight .preview{color:var(--clr-highlight-preview-text);font-weight:inherit}.cropper{align-self:center;height:21rem;margin:1rem auto auto;transform:translateZ(0)}.cropper,.cropper .bounding-box{border-radius:.25rem;position:relative;width:18rem}.cropper .bounding-box{background-color:var(--clr-cropper-bounding-box-bg);border:2px solid var(--clr-cropper-bounding-box-border);box-shadow:1px 1px 3px var(--clr-shadow-cropper-gray);height:18rem;overflow:hidden;z-index:1}.cropper .preview{max-height:none;max-width:none;position:absolute;z-index:-1}.cropper .cutout{border:1px dashed var(--clr-cropper-cutout-border);bottom:0;box-shadow:0 0 150rem 150rem var(--clr-cropper-cutout-shadow);height:17.8rem;left:0;margin:auto;position:absolute;right:0;top:0;width:17.8rem;z-index:0}.cropper .cutout.circle{border-radius:50%}.cropper .overlay{cursor:move;position:absolute;touch-action:none;z-index:1}.cropper .zoom-wrapper{height:2rem;margin:1rem auto;text-align:center;width:80%}.cropper .zoom{box-shadow:none;pointer-events:none;z-index:2}.cropper .zoom:focus{outline:none}.reply-quote{border-left:.25rem solid var(--clr-reply-quote-border);border-radius:.25rem;color:var(--clr-reply-quote-text);cursor:pointer;font-weight:lighter;line-height:1.5em;padding:.15rem .5rem .25rem;position:relative}.chat-box .bubble .reply-quote{margin:.15rem -.75rem .3rem}.chat-box .bubble .reply-quote:first-child{margin-top:-.25rem}.chat-box .left .reply-quote{background-color:var(--clr-reply-quote-left-bg)}.chat-box .right .reply-quote{background-color:var(--clr-reply-quote-right-bg)}.reply-quote .inline-image{margin-bottom:.1rem;vertical-align:middle}.reply-quote img.inline-image:before{content:""}#reply-quote-preview{align-items:center;display:flex}#reply-quote-preview .reply-quote{background-color:var(--clr-reply-quote-preview-bg);cursor:auto;margin:.35rem .5rem 0 0;width:100%}#reply-quote-preview .cancel{min-width:2.4rem;text-align:center}#reply-quote-preview .inline-image{background-color:var(--clr-border-light)}#reply-quote-preview img.inline-image:before{content:""}#send-message-panel #reply-quote-preview{width:100%}#send-message-panel #reply-quote-preview .reply-quote{margin-bottom:.35rem}.forwarding-quote{font-size:200%;line-height:200%}.mention{font-weight:500}.forward-dialog{background-color:var(--clr-bright);border-radius:.3rem;box-shadow:.15rem .15rem 1.5rem var(--clr-shadow-dialog);height:80%;margin:auto 1rem;overflow:hidden;padding:.5rem;position:relative;width:24rem}.forward-dialog .scrollable-panel{height:80%}.audio{align-items:center;background-color:var(--clr-audio-bg);border-radius:1.5rem;display:flex;flex:none;height:3rem;margin-left:auto}.audio canvas{height:2.6rem;margin-right:2rem;width:14rem}.audio canvas.playback{margin-right:0}.audio .duration{font-size:large}.audio-player{align-items:center;display:flex}.audio-player .material-icons.large{color:var(--clr-audio-icon);font-size:2.4rem}.audio-player .material-icons.disabled{color:var(--clr-audio-icon-disabled);cursor:default}.audio-player .playback{height:2.6rem;width:14rem}.audio-player canvas.playback{display:block}.audio-player div.playback{align-items:center;color:var(--clr-audio-icon);display:flex;font-size:small;justify-content:center}.audio-player .timer{color:var(--clr-audio-timer-text);font-size:smaller}#pinned-wrapper{margin-right:.5rem}#pinned-wrapper,.pinned{align-items:center;display:flex;height:100%;position:relative}.pinned{background-color:var(--clr-background-off-white);background-position:50%;border-radius:0 .25rem .25rem 0;color:var(--clr-text-primary);cursor:pointer;font-weight:lighter;min-width:0;padding:.15rem .5rem .25rem;transition:background .4s;width:24rem}.pinned>p{overflow-x:hidden;text-overflow:ellipsis;white-space:nowrap}.pinned:hover{background-color:var(--clr-bright)}.pinned:active{background-color:var(--clr-blue-wash-medium);transition:background 0s}.pinned-scroll{align-items:center;background-color:var(--clr-background-extra-light-gray);border-radius:.25rem 0 0 .25rem;display:flex;flex-direction:column;height:100%;justify-content:space-evenly;margin-left:.35rem;padding:.2rem;position:relative;user-select:none}.pinned-scroll .dot{background-color:var(--clr-text-tertiary);border-radius:50%;height:.3rem;user-select:none;width:.3rem}.pinned-scroll .adot{background-color:var(--clr-light-blue-accent);border-radius:50%;height:.45rem;user-select:none;width:.45rem}#pinned-wrapper:hover .menuTrigger{opacity:.9}#pinned-wrapper:hover .menuTrigger a{color:var(--clr-text-secondary)}.pinned-menu{background-color:var(--clr-pinned-menu-bg);border-radius:0 .25rem .25rem 0;bottom:0;display:flex;flex-direction:column;justify-content:space-evenly;position:absolute;right:0;top:0}.pinned-menu .menuTrigger{position:relative;right:0}.contact-card{background-color:var(--clr-background-off-white);border-radius:.5rem;display:flex;flex-direction:column;min-width:14rem;position:relative}.contact-card .avatar-box{font-size:1rem;height:1.8rem;margin-bottom:0;margin-right:.75rem;position:relative;width:1.8rem}.contact-card .contact-body{align-items:center;background-color:var(--clr-background-blue-gray-50);border-bottom:none;border-radius:.5rem .5rem 0 0;display:flex;padding:.75rem}.contact-card .contact-body .name-box{display:flex;flex-direction:column;overflow:hidden}.contact-card .contact-body .name-box .name{color:var(--clr-text-primary);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-body .name-box .org{color:var(--clr-text-secondary);font-size:90%;font-weight:300;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.contact-card .contact-actions{align-items:center;background-color:var(--clr-bright);border-radius:0 0 .5rem .5rem;border-top:none;display:flex;justify-content:space-evenly;padding:0 .5rem}.contact-card .contact-actions a{cursor:pointer}.contact-card .contact-actions .divider{height:1.8rem;opacity:.5}.drag-n-drop{align-items:center;background-color:var(--clr-drag-n-drop-bg);border:.15rem dashed var(--clr-drag-n-drop-border);border-radius:1rem;bottom:1.5rem;color:var(--clr-drag-n-drop-text);display:flex;font-size:2rem;justify-content:center;left:1.5rem;outline:.5rem solid var(--clr-drag-n-drop-outline);position:absolute;right:1.5rem;top:1.5rem;z-index:3}.country-flag{display:inline-block;font-size:larger}.dial-code{cursor:pointer;display:inline-block;margin-bottom:.15rem;vertical-align:middle;white-space:nowrap}ul.phone-country-selector{list-style:none;overflow-x:hidden}ul.phone-country-selector>li{cursor:pointer;font-weight:lighter;padding:.25rem .5rem .15rem;position:relative;width:100%}ul.phone-country-selector>li:hover{background-color:var(--clr-background-blue-gray-50)}ul.phone-country-selector>li.selected{background-color:var(--clr-background-blue-gray-100)}ul.phone-country-selector .dial-code{color:var(--clr-primary-action);font-weight:400;position:absolute;right:.5rem}ul.phone-country-selector span{display:inline-block}ul.phone-country-selector span.country{overflow-x:hidden;text-overflow:ellipsis}.image-grid{display:grid;gap:.35rem;grid-template-columns:repeat(auto-fill,minmax(7rem,1fr));padding:.25rem;position:relative}.image-grid-cell{border:1.5px solid transparent;border-radius:.25rem;box-shadow:0 0 .2rem var( --clr-shadow-hr-inset);cursor:pointer;height:7rem;margin:0;overflow:hidden;padding:0;width:100%}.image-grid-cell img{object-fit:cover}.image-grid-cell.selected{border:1.5px solid var(--clr-secondary-accent)}img.inverted{filter:invert(1)}div.toast{align-items:center;background-color:var(--clr-toast-bg);border-radius:.5rem;bottom:2rem;box-shadow:1px 2px .3rem var(--clr-shadow-gray-strong);color:var(--clr-toast-text);display:flex;font-weight:lighter;height:3rem;justify-content:center;left:50%;min-width:10rem;padding:.5rem 1rem;position:absolute;translate:-50%;visibility:hidden;z-index:3}div.toast.show{animation:fadein .5s,fadeout .5s 2.5s;visibility:visible}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:2rem;opacity:1}}@keyframes fadeout{0%{bottom:2rem;opacity:1}to{bottom:0;opacity:0}}@media (min-width:1440px){#app-container{max-width:114rem}}@media (max-width:960px){#mountPoint{padding:0}.pinned{width:16rem}}@media (max-width:640px){#app-container{border-radius:0;box-shadow:none;width:100%}#info-view,#sidepanel{width:100%}.forward-dialog{border-radius:.3rem .3rem 0 0;margin:auto 0 0;width:100%}.menuTrigger{opacity:.3}#send-message-input{transition-property:-tinode-mobile}#pinned-wrapper{height:3.5rem;margin:.25rem}.pinned{width:unset}#video-container.minimized{border-radius:unset;box-shadow:0 0 .5rem var(--clr-shadow-gray-strong);flex-direction:row;height:11rem;left:0;top:var(--caption-panel-height);width:100%}#controls.minimized{bottom:auto;column-gap:unset;flex-direction:column;right:1rem;row-gap:.5rem}.minimized .call-party{border-radius:unset;box-shadow:unset}.call-party.self{border-radius:unset;bottom:8.5rem}} \ No newline at end of file diff --git a/package.json b/package.json index 575bf9c1..6197fdf5 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tinode-webapp", "description": "Tinode messenger for the web", - "version": "0.25.1", + "version": "0.25.2", "repository": { "type": "git", "url": "git+https://github.com/tinode/webapp.git" @@ -62,6 +62,7 @@ "ru", "th", "uk", + "vi", "zh", "zh-TW" ], @@ -80,7 +81,7 @@ "react": "^18.3.0", "react-dom": "^18.3.0", "react-intl": "^7.0.0", - "tinode-sdk": "^0.25.1", + "tinode-sdk": "^0.25.2", "webm-duration-fix": "^1.0.4" }, "devDependencies": { diff --git a/scripts/gen-version.js b/scripts/gen-version.js index f2b6228a..45eb47e2 100644 --- a/scripts/gen-version.js +++ b/scripts/gen-version.js @@ -8,7 +8,7 @@ function writeVersion(fileName, useExport) { { flag: 'w' }, (err) => { if (err) { - return console.log(err); + return console.error(err); } } ); diff --git a/service-worker.js b/service-worker.js index 006fa1fe..ef39cb75 100644 --- a/service-worker.js +++ b/service-worker.js @@ -10,6 +10,10 @@ const webAppChannel = (typeof BroadcastChannel == 'function') ? // Basic internationalization. const i18n = { + 'ar': { + 'new_message': "رسالة جديدة", + 'new_chat': "محادثة جديدة", + }, 'de': { 'new_message': "Neue Nachricht", 'new_chat': "Neuer Chat", @@ -50,6 +54,10 @@ const i18n = { 'new_message': "Нове повідомлення", 'new_chat': "Новий чат", }, + 'vi': { + 'new_message': "Tin nhắn mới", + 'new_chat': "Cuộc trò chuyện mới", + }, 'zh': { 'new_message': "新讯息", 'new_chat': "新聊天", @@ -57,10 +65,6 @@ const i18n = { 'zh-TW': { 'new_message': "新訊息", 'new_chat': "新聊天", - }, - 'ar': { - 'new_message': "رسالة جديدة", - 'new_chat': "محادثة جديدة", } }; diff --git a/src/i18n.min/ar.json b/src/i18n.min/ar.json index 07c34089..538625f6 100644 --- a/src/i18n.min/ar.json +++ b/src/i18n.min/ar.json @@ -1 +1 @@ -{"action_block_contact":"حظر جهة الاتصال","action_cancel":"إلغاء","action_clear_messages":"مسح الرسائل","action_delete_messages":"مسح الرسائل للجميع","action_leave_chat":"مغادرة المحادثة","action_report_chat":"الإبلاغ عن المحادثة","archived_contacts":"جهات الاتصال المؤرشفة ({count})","badge_danger":"غير موثوق به","badge_owner":"مالك","badge_staff":"إدارة الموقع","badge_verified":"موثق/رسمي","badge_you":"أنت","block_contact_warning":"هل أنت متأكد من أنك تريد حظر جهة الاتصال هذه؟","blocked_contacts_link":"جهات الاتصال المحظورة ({count})","button_add_members":"إضافة أعضاء","button_cancel":"إلغاء","button_confirm":"تأكيد","button_create":"إنشاء","button_delete_account":"حذف الحساب","button_edit":"تعديل","button_logout":"تسجيل الخروج","button_ok":"موافق","button_reset":"إعادة تعيين","button_send_request":"إرسال طلب","button_sign_in":"تسجيل الدخول","button_sign_up":"إنشاء حساب","button_subscribe":"اشتراك","button_update":"تحديث","cannot_initiate_file_upload":"لا يمكن بدء تحميل الملف","channel":"قناة","channel_prompt":"هذه قناة","chat_invitation":"أنت مدعو لبدء محادثة جديدة. ماذا تريد أن تفعل؟","chat_invitation_accept":"قبول","chat_invitation_block":"حظر","chat_invitation_ignore":"تجاهل","clear_messages_warning":"هل أنت متأكد من أنك تريد مسح جميع الرسائل؟ لا يمكن التراجع عن هذا الإجراء.","code_doesnot_match":"الرمز غير متطابق","contacts_not_found":"ليس لديك محادثات
¯∖_(ツ)_/¯","contacts_not_found_short":"لا توجد جهات اتصال تطابق ''{query}''","credential_email_prompt":"البريد الإلكتروني للتسجيل","delete_account":"حذف الحساب","delete_account_warning":"هل أنت متأكد من أنك تريد حذف حسابك؟ لا يمكن التراجع عن هذا الإجراء.","delete_messages_warning":"هل أنت متأكد من أنك تريد حذف جميع الرسائل للجميع؟ لا يمكن التراجع عن هذا الإجراء.","download_action":"تحميل","drafty_attachment":"مرفق","drafty_form":"نموذج:","drafty_image":"صورة","email_dative":"البريد الإلكتروني","email_prompt":"البريد الإلكتروني، مثال: jdoe@example.com","enable_peers_messaging":"تفعيل","enter_confirmation_code_prompt":"رمز التأكيد","error_invalid_id":"معرف غير صالح","file_attachment_too_large":"حجم الملف {size} يتجاوز الحد {limit}.","forgot_password_link":"نسيت كلمة المرور؟","full_name_prompt":"الاسم الكامل، مثال: جون دو","granted_permissions":"ممنوح","group_has_no_members":"لا يوجد أعضاء","group_user_id_prompt":"معرف المجموعة أو المستخدم","image_caption_prompt":"وصف الصورة","invalid_content":"محتوى غير صالح","invalid_security_token":"رمز الأمان غير صالح","label_client":"العميل:","label_content_type":"نوع المحتوى:","label_default_access_mode":"وضع الوصول الافتراضي:","label_file_name":"اسم الملف:","label_group_members":"أعضاء المجموعة:","label_incognito_mode":"وضع التخفي:","label_message_sound":"صوت الرسالة:","label_muting_topic":"صامت:","label_other_user":"آخر","label_password":"كلمة المرور","label_permissions":"الصلاحيات:","label_private":"تعليق خاص","label_push_notifications":"تنبيهات الإشعارات:","label_push_notifications_disabled":"تنبيهات الإشعارات (يتطلب HTTPS):","label_reset_password":"إرسال بريد إلكتروني لإعادة تعيين كلمة المرور:","label_sdk":"SDK:","label_server":"الخادم:","label_server_address":"عنوان الخادم:","label_server_to_use":"الخادم المراد استخدامه:","label_size":"الحجم:","label_topic_name":"الاسم","label_user_contacts":"جهات الاتصال","label_user_id":"المعرف:","label_wire_transport":"نقل البيانات:","label_you":"أنت:","label_your_name":"اسمك","label_your_permissions":"صلاحياتك:","last_seen_timestamp":"آخر ظهور","leave_chat_warning":"هل أنت متأكد من أنك تريد مغادرة هذه المحادثة؟","link_contact_us":"اتصل بنا","link_privacy_policy":"سياسة الخصوصية","link_terms_of_service":"شروط الخدمة","login_prompt":"تسجيل الدخول","menu_item_archive_topic":"أرشفة","menu_item_block":"حظر","menu_item_clear_messages":"مسح الرسائل","menu_item_clear_messages_for_all":"مسح للجميع","menu_item_delete":"حذف","menu_item_delete_for_all":"حذف للجميع","menu_item_delete_topic":"حذف","menu_item_edit_permissions":"تعديل الصلاحيات","menu_item_info":"معلومات","menu_item_member_delete":"إزالة","menu_item_mute":"كتم","menu_item_reply":"رد","menu_item_restore_topic":"استعادة","menu_item_send_retry":"إعادة المحاولة","menu_item_unblock":"إلغاء الحظر","menu_item_unmute":"إلغاء الكتم","message_sending":"جاري الإرسال...","message_sending_failed":"فشل","messages_not_readable":"لا يمكن الوصول إلى الرسائل","messaging_disabled_prompt":"المراسلة معطلة","more_online_members":"+{overflow} آخرون","new_message_prompt":"رسالة جديدة","new_password_placeholder":"أدخل كلمة المرور الجديدة","no_connection":"لا يوجد اتصال","no_contacts":"ليس لديك جهات اتصال :-(","numeric_confirmation_code_prompt":"أرقام فقط","online_now":"متصل الآن","password_prompt":"كلمة المرور","password_unchanged_prompt":"لم يتغير","peers_messaging_disabled":"المراسلة معطلة للطرف الآخر","permission_admin":"الموافقة ({val})","permission_delete":"حذف ({val})","permission_join":"انضمام ({val})","permission_owner":"مالك ({val})","permission_pres":"تلقي الإشعارات ({val})","permission_read":"قراءة ({val})","permission_share":"مشاركة ({val})","permission_write":"كتابة ({val})","phone_dative":"هاتف","private_editing_placeholder":"مرئي لك فقط","push_init_failed":"فشل في تهيئة الإشعارات","reconnect_countdown":"تم قطع الاتصال. إعادة الاتصال خلال {seconds}...","reconnect_now":"حاول الآن","reload_update":"إعادة تحميل","report_chat_warning":"هل أنت متأكد من أنك تريد حظر والإبلاغ عن هذه المحادثة؟","requested_permissions":"مطلوب","save_attachment":"حفظ","search_for_contacts":"استخدم البحث للعثور على جهات الاتصال","search_no_results":"لم يسفر البحث عن أي نتائج","search_placeholder":"قائمة مثل alice@example.com، +17025550003...","sidepanel_title_acc_notifications":"الإشعارات","sidepanel_title_acc_support":"الدعم","sidepanel_title_account_settings":"إعدادات الحساب","sidepanel_title_archive":"المحادثات المؤرشفة","sidepanel_title_blocked":"المحادثات المحظورة","sidepanel_title_cred":"تأكيد بيانات الاعتماد","sidepanel_title_login":"تسجيل الدخول","sidepanel_title_newtpk":"بدء محادثة جديدة","sidepanel_title_register":"إنشاء حساب","sidepanel_title_reset":"إعادة تعيين كلمة المرور","sidepanel_title_settings":"الإعدادات","stay_logged_in":"البقاء متصلاً","tabtitle_find_user":"بحث","tabtitle_group_by_id":"بواسطة المعرف","tabtitle_new_group":"مجموعة جديدة","tags_editor_no_tags":"أضف بعض الوسوم","tags_not_found":"لا توجد وسوم محددة. أضف بعضها.","title_all_contacts":"جميع جهات الاتصال","title_group_members":"أعضاء المجموعة","title_manage_tags":"إدارة","title_not_found":"غير موجود","title_permissions":"الصلاحيات","title_tag_manager":"الوسوم (البحث والاكتشاف)","topic_block_warning":"هل أنت متأكد من أنك تريد حظر هذه المحادثة؟","topic_delete_warning":"هل أنت متأكد من أنك تريد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.","topic_name_editing_placeholder":"اسم حر للمجموعة","unnamed_topic":"بدون اسم","update_available":"يتوفر تحديث.","upload_finishing":"جاري الإنهاء...","user_not_found":"غير موجود","description_editing_placeholder":"وصف اختياري","label_description":"الوصف","button_security":"الأمان","panel_title_crop":"اسحب للتعديل","panel_title_general":"عام","panel_title_members":"الأعضاء","panel_title_security":"الأمان","panel_title_info":"معلومات","permissions_anonymous":"مجهول","permissions_authenticated":"مصادق عليه","topic_delete":"حذف المحادثة","permissions_user":"صلاحيات المستخدم","password_reset_email_sent":"تم إرسال بريد إلكتروني يحتوي على رمز الأمان.","label_unarchive_topic":"مؤرشف:","menu_item_forward":"إعادة توجيه","forward_to":"إعادة توجيه إلى","forward_to_search_placeholder":"البحث عن جهات الاتصال","label_new_password":"كلمة المرور الجديدة","drafty_unknown":"غير مدعوم","calls_incoming":"مكالمة واردة","calls_outgoing":"مكالمة صادرة","calls_you_label":"أنت","menu_item_video_call":"مكالمة فيديو","already_in_call":"أنت بالفعل في مكالمة جارية!","call_cancelled":"تم الإلغاء","call_missed":"فائتة","call_declined":"تم الرفض","call_disconnected":"تم قطع الاتصال","label_use_secure_connection":"استخدام اتصال آمن","cred_confirmed_successfully":"تم التأكيد بنجاح","menu_item_edit":"تعديل","editing_message":"جاري التعديل","message_edited_marker":"، تم التعديل","icon_title_add_image":"إضافة صورة","icon_title_attach_file":"إرفاق ملف","icon_title_delete":"حذف التسجيل","icon_title_pause":"إيقاف مؤقت","icon_title_play":"تشغيل","icon_title_record_voice":"تسجيل رسالة صوتية","icon_title_resume":"استئناف","icon_title_send":"إرسال رسالة","drag_file":"اسحب الملف هنا","drafty_video":"تسجيل فيديو","call_in_progress":"جارية","menu_item_audio_call":"مكالمة","unrecognized_video_format":"تنسيق هذا الفيديو غير معروف","loading_note":"جاري التحميل...","password_i_have_code":"لدي رمز","label_reset_password_tel":"إرسال رسالة نصية لإعادة تعيين كلمة المرور:","mobile_phone_number":"رقم الهاتف المحمول","password_reset_sms_sent":"تم إرسال رسالة نصية تحتوي على رمز الأمان.","mobile_number_required":"رقم الهاتف المحمول مطلوب","current_email":"البريد الإلكتروني الحالي","current_phone":"رقم الهاتف الحالي","new_email":"بريد إلكتروني جديد","new_phone_number":"رقم هاتف جديد","change_email":"تغيير البريد الإلكتروني","change_phone":"تغيير رقم الهاتف","call_busy":"مشغول","failed_to_init_audio":"فشل في تهيئة تسجيل الصوت","password_reset_success":"تم إعادة تعيين كلمة المرور بنجاح","scan_qr_code":"مسح رمز QR","alias_already_taken":"(مُستخدم بالفعل)","alias_editing_placeholder":"الاسم المستعار (اختياري)","alias_invalid":"(غير صالح)","label_alias":"الاسم المستعار:","label_alias_edit":"الاسم المستعار","message_deleted":"تم حذف الرسالة","message_not_found":"لم يتم العثور على الرسالة","pin_message":"تثبيت","select_country":"اختر الدولة","self_topic_comment":"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل","self_topic_name":"الرسائل المحفوظة","text_copied":"تم النسخ إلى الحافظة","unpin_message":"إلغاء التثبيت","color_schema_dark":"داكن","color_schema_light":"فاتح","color_schema_system":"افتراضي النظام","label_color_schema":"‏المظهر:","label_text_size":"‏حجم النص:","incognito_mode_description":"إخفاء حالة اتصالك ومؤشرات الكتابة.","send_command":"إرسال بـ {key}","send_command_explained":"اضغط Enter لسطر جديد","send_plain":"إرسال بـ Enter","send_plain_explained":"اضغط Shift + Enter لسطر جديد","sidepanel_title_acc_general":"عام","label_keyboard":"لوحة المفاتيح:","pin_chat":"تثبيت","unpin_chat":"إلغاء التثبيت","subscriber_count":"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}","label_member_count":"الأعضاء:","label_subscriber_count":"المشتركون:","member_count":"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}","tabtitle_image":"صورة","tabtitle_pattern":"نمط","button_restore":"استعادة الافتراضي","wallpapers":"الخلفيات","label_blur_wallpaper":"ضبابية:","label_scan_id":"مسح معرفي:"} \ No newline at end of file +{"action_block_contact":"حظر جهة الاتصال","action_cancel":"إلغاء","action_clear_messages":"مسح الرسائل","action_delete_messages":"مسح الرسائل للجميع","action_leave_chat":"مغادرة المحادثة","action_report_chat":"الإبلاغ عن المحادثة","archived_contacts":"جهات الاتصال المؤرشفة ({count})","badge_danger":"غير موثوق به","badge_owner":"مالك","badge_staff":"إدارة الموقع","badge_verified":"موثق/رسمي","badge_you":"أنت","block_contact_warning":"هل أنت متأكد من أنك تريد حظر جهة الاتصال هذه؟","blocked_contacts_link":"جهات الاتصال المحظورة ({count})","button_add_members":"إضافة أعضاء","button_cancel":"إلغاء","button_confirm":"تأكيد","button_create":"إنشاء","button_delete_account":"حذف الحساب","button_edit":"تعديل","button_logout":"تسجيل الخروج","button_ok":"موافق","button_reset":"إعادة تعيين","button_send_request":"إرسال طلب","button_sign_in":"تسجيل الدخول","button_sign_up":"إنشاء حساب","button_subscribe":"اشتراك","button_update":"تحديث","cannot_initiate_file_upload":"لا يمكن بدء تحميل الملف","channel":"قناة","channel_prompt":"هذه قناة","chat_invitation":"أنت مدعو لبدء محادثة جديدة. ماذا تريد أن تفعل؟","chat_invitation_accept":"قبول","chat_invitation_block":"حظر","chat_invitation_ignore":"تجاهل","clear_messages_warning":"هل أنت متأكد من أنك تريد مسح جميع الرسائل؟ لا يمكن التراجع عن هذا الإجراء.","code_doesnot_match":"الرمز غير متطابق","contacts_not_found":"ليس لديك محادثات\n¯∖_(ツ)_/¯","contacts_not_found_short":"لا توجد جهات اتصال تطابق ''{query}''","credential_email_prompt":"البريد الإلكتروني للتسجيل","delete_account":"حذف الحساب","delete_account_warning":"هل أنت متأكد من أنك تريد حذف حسابك؟ لا يمكن التراجع عن هذا الإجراء.","delete_messages_warning":"هل أنت متأكد من أنك تريد حذف جميع الرسائل للجميع؟ لا يمكن التراجع عن هذا الإجراء.","download_action":"تحميل","drafty_attachment":"مرفق","drafty_form":"نموذج:","drafty_image":"صورة","email_dative":"البريد الإلكتروني","email_prompt":"البريد الإلكتروني، مثال: jdoe@example.com","enable_peers_messaging":"تفعيل","enter_confirmation_code_prompt":"رمز التأكيد","error_invalid_id":"معرف غير صالح","file_attachment_too_large":"حجم الملف {size} يتجاوز الحد {limit}.","forgot_password_link":"نسيت كلمة المرور؟","full_name_prompt":"الاسم الكامل، مثال: جون دو","granted_permissions":"ممنوح","group_has_no_members":"لا يوجد أعضاء","group_user_id_prompt":"معرف المجموعة أو المستخدم","image_caption_prompt":"وصف الصورة","invalid_content":"محتوى غير صالح","invalid_security_token":"رمز الأمان غير صالح","label_client":"العميل:","label_content_type":"نوع المحتوى:","label_default_access_mode":"وضع الوصول الافتراضي:","label_file_name":"اسم الملف:","label_group_members":"أعضاء المجموعة:","label_incognito_mode":"وضع التخفي:","label_message_sound":"صوت الرسالة:","label_muting_topic":"صامت:","label_other_user":"آخر","label_password":"كلمة المرور","label_permissions":"الصلاحيات:","label_private":"تعليق خاص","label_push_notifications":"تنبيهات الإشعارات:","label_push_notifications_disabled":"تنبيهات الإشعارات (يتطلب HTTPS):","label_reset_password":"إرسال بريد إلكتروني لإعادة تعيين كلمة المرور:","label_sdk":"SDK:","label_server":"الخادم:","label_server_address":"عنوان الخادم:","label_server_to_use":"الخادم المراد استخدامه:","label_size":"الحجم:","label_topic_name":"الاسم","label_user_contacts":"جهات الاتصال","label_user_id":"المعرف:","label_wire_transport":"نقل البيانات:","label_you":"أنت:","label_your_name":"اسمك","label_your_permissions":"صلاحياتك:","last_seen_timestamp":"آخر ظهور","leave_chat_warning":"هل أنت متأكد من أنك تريد مغادرة هذه المحادثة؟","link_contact_us":"اتصل بنا","link_privacy_policy":"سياسة الخصوصية","link_terms_of_service":"شروط الخدمة","login_prompt":"تسجيل الدخول","menu_item_archive_topic":"أرشفة","menu_item_block":"حظر","menu_item_clear_messages":"مسح الرسائل","menu_item_clear_messages_for_all":"مسح للجميع","menu_item_delete":"حذف","menu_item_delete_for_all":"حذف للجميع","menu_item_delete_topic":"حذف","menu_item_edit_permissions":"تعديل الصلاحيات","menu_item_info":"معلومات","menu_item_member_delete":"إزالة","menu_item_mute":"كتم","menu_item_reply":"رد","menu_item_restore_topic":"استعادة","menu_item_send_retry":"إعادة المحاولة","menu_item_unblock":"إلغاء الحظر","menu_item_unmute":"إلغاء الكتم","message_sending":"جاري الإرسال...","message_sending_failed":"فشل","messages_not_readable":"لا يمكن الوصول إلى الرسائل","messaging_disabled_prompt":"المراسلة معطلة","more_online_members":"+{overflow} آخرون","new_message_prompt":"رسالة جديدة","new_password_placeholder":"أدخل كلمة المرور الجديدة","no_connection":"لا يوجد اتصال","no_contacts":"ليس لديك جهات اتصال :-(","numeric_confirmation_code_prompt":"أرقام فقط","online_now":"متصل الآن","password_prompt":"كلمة المرور","password_unchanged_prompt":"لم يتغير","peers_messaging_disabled":"المراسلة معطلة للطرف الآخر","permission_admin":"الموافقة ({val})","permission_delete":"حذف ({val})","permission_join":"انضمام ({val})","permission_owner":"مالك ({val})","permission_pres":"تلقي الإشعارات ({val})","permission_read":"قراءة ({val})","permission_share":"مشاركة ({val})","permission_write":"كتابة ({val})","phone_dative":"هاتف","private_editing_placeholder":"مرئي لك فقط","push_init_failed":"فشل في تهيئة الإشعارات","reconnect_countdown":"تم قطع الاتصال. إعادة الاتصال خلال {seconds}...","reconnect_now":"حاول الآن","reload_update":"إعادة تحميل","report_chat_warning":"هل أنت متأكد من أنك تريد حظر والإبلاغ عن هذه المحادثة؟","requested_permissions":"مطلوب","save_attachment":"حفظ","search_for_contacts":"استخدم البحث للعثور على جهات الاتصال","search_no_results":"لم يسفر البحث عن أي نتائج","search_placeholder":"قائمة مثل alice@example.com، +17025550003...","sidepanel_title_acc_notifications":"الإشعارات","sidepanel_title_acc_support":"الدعم","sidepanel_title_account_settings":"إعدادات الحساب","sidepanel_title_archive":"المحادثات المؤرشفة","sidepanel_title_blocked":"المحادثات المحظورة","sidepanel_title_cred":"تأكيد بيانات الاعتماد","sidepanel_title_login":"تسجيل الدخول","sidepanel_title_newtpk":"بدء محادثة جديدة","sidepanel_title_register":"إنشاء حساب","sidepanel_title_reset":"إعادة تعيين كلمة المرور","sidepanel_title_settings":"الإعدادات","stay_logged_in":"البقاء متصلاً","tabtitle_find_user":"بحث","tabtitle_group_by_id":"بواسطة المعرف","tabtitle_new_group":"مجموعة جديدة","tags_editor_no_tags":"أضف بعض الوسوم","tags_not_found":"لا توجد وسوم محددة. أضف بعضها.","title_all_contacts":"جميع جهات الاتصال","title_group_members":"أعضاء المجموعة","title_manage_tags":"إدارة","title_not_found":"غير موجود","title_permissions":"الصلاحيات","title_tag_manager":"الوسوم (البحث والاكتشاف)","topic_block_warning":"هل أنت متأكد من أنك تريد حظر هذه المحادثة؟","topic_delete_warning":"هل أنت متأكد من أنك تريد حذف هذه المحادثة؟ لا يمكن التراجع عن هذا الإجراء.","topic_name_editing_placeholder":"اسم حر للمجموعة","unnamed_topic":"بدون اسم","update_available":"يتوفر تحديث.","upload_finishing":"جاري الإنهاء...","user_not_found":"غير موجود","description_editing_placeholder":"وصف اختياري","label_description":"الوصف","button_security":"الأمان","panel_title_crop":"اسحب للتعديل","panel_title_general":"عام","panel_title_members":"الأعضاء","panel_title_security":"الأمان","panel_title_info":"معلومات","permissions_anonymous":"مجهول","permissions_authenticated":"مصادق عليه","topic_delete":"حذف المحادثة","permissions_user":"صلاحيات المستخدم","password_reset_email_sent":"تم إرسال بريد إلكتروني يحتوي على رمز الأمان.","label_unarchive_topic":"مؤرشف:","menu_item_forward":"إعادة توجيه","forward_to":"إعادة توجيه إلى","forward_to_search_placeholder":"البحث عن جهات الاتصال","label_new_password":"كلمة المرور الجديدة","drafty_unknown":"غير مدعوم","calls_incoming":"مكالمة واردة","calls_outgoing":"مكالمة صادرة","calls_you_label":"أنت","menu_item_video_call":"مكالمة فيديو","already_in_call":"أنت بالفعل في مكالمة جارية!","call_cancelled":"تم الإلغاء","call_missed":"فائتة","call_declined":"تم الرفض","call_disconnected":"تم قطع الاتصال","label_use_secure_connection":"استخدام اتصال آمن","cred_confirmed_successfully":"تم التأكيد بنجاح","menu_item_edit":"تعديل","editing_message":"جاري التعديل","message_edited_marker":"، تم التعديل","icon_title_add_image":"إضافة صورة","icon_title_attach_file":"إرفاق ملف","icon_title_delete":"حذف التسجيل","icon_title_pause":"إيقاف مؤقت","icon_title_play":"تشغيل","icon_title_record_voice":"تسجيل رسالة صوتية","icon_title_resume":"استئناف","icon_title_send":"إرسال رسالة","drag_file":"اسحب الملف هنا","drafty_video":"تسجيل فيديو","call_in_progress":"جارية","menu_item_audio_call":"مكالمة","unrecognized_video_format":"تنسيق هذا الفيديو غير معروف","loading_note":"جاري التحميل...","password_i_have_code":"لدي رمز","label_reset_password_tel":"إرسال رسالة نصية لإعادة تعيين كلمة المرور:","mobile_phone_number":"رقم الهاتف المحمول","password_reset_sms_sent":"تم إرسال رسالة نصية تحتوي على رمز الأمان.","mobile_number_required":"رقم الهاتف المحمول مطلوب","current_email":"البريد الإلكتروني الحالي","current_phone":"رقم الهاتف الحالي","new_email":"بريد إلكتروني جديد","new_phone_number":"رقم هاتف جديد","change_email":"تغيير البريد الإلكتروني","change_phone":"تغيير رقم الهاتف","call_busy":"مشغول","failed_to_init_audio":"فشل في تهيئة تسجيل الصوت","password_reset_success":"تم إعادة تعيين كلمة المرور بنجاح","scan_qr_code":"مسح رمز QR","alias_already_taken":"(مُستخدم بالفعل)","alias_editing_placeholder":"الاسم المستعار (اختياري)","alias_invalid":"(غير صالح)","label_alias":"الاسم المستعار:","label_alias_edit":"الاسم المستعار","message_deleted":"تم حذف الرسالة","message_not_found":"لم يتم العثور على الرسالة","pin_message":"تثبيت","select_country":"اختر الدولة","self_topic_comment":"ملاحظات ورسائل وروابط وملفات محفوظة للمستقبل","self_topic_name":"الرسائل المحفوظة","text_copied":"تم النسخ إلى الحافظة","unpin_message":"إلغاء التثبيت","color_schema_dark":"داكن","color_schema_light":"فاتح","color_schema_system":"افتراضي النظام","label_color_schema":"‏المظهر:","label_text_size":"‏حجم النص:","incognito_mode_description":"إخفاء حالة اتصالك ومؤشرات الكتابة.","send_command":"إرسال بـ {key}","send_command_explained":"اضغط Enter لسطر جديد","send_plain":"إرسال بـ Enter","send_plain_explained":"اضغط Shift + Enter لسطر جديد","sidepanel_title_acc_general":"عام","label_keyboard":"لوحة المفاتيح:","pin_chat":"تثبيت","unpin_chat":"إلغاء التثبيت","subscriber_count":"{count, plural, zero {{count, number} مشترك} one {{count, number} مشترك} two {{count, number} مشتركان} few {{count, number} مشتركين} many {{count, number} مشتركًا} other {{count, number} مشترك}}","label_member_count":"الأعضاء:","label_subscriber_count":"المشتركون:","member_count":"{count, plural, zero {{count, number} عضو} one {{count, number} عضو} two {{count, number} عضوان} few {{count, number} أعضاء} many {{count, number} عضوًا} other {{count, number} عضو}}","tabtitle_image":"صورة","tabtitle_pattern":"نمط","button_restore":"استعادة الافتراضي","wallpapers":"الخلفيات","label_blur_wallpaper":"ضبابية:","label_scan_id":"مسح معرفي:","unknown_name":"غير معروف","save_action":"حفظ","cannot_parse_vcard":"تعذّر تحليل ملف vCard.","chat_now":"محادثة","find_user":"بحث","label_contact_card":"بطاقة الاتصال","label_contacts":"جهات الاتصال","add_members_prompt":"إضافة أعضاء"} \ No newline at end of file diff --git a/src/i18n.min/de.json b/src/i18n.min/de.json index 79517ad3..10677fa8 100644 --- a/src/i18n.min/de.json +++ b/src/i18n.min/de.json @@ -1 +1 @@ -{"action_block_contact":"Kontakt blockieren","action_cancel":"Abbrechen","action_clear_messages":"Nachrichten leeren","action_delete_messages":"Nachrichten für alle löschen","action_leave_chat":"Unterhaltung verlassen","action_report_chat":"Unterhaltung melden","archived_contacts":"Archivierte Kontakte ({count})","badge_danger":"Verdächtig","badge_owner":"Besitzer","badge_staff":"Verwaltung","badge_verified":"Verifiziert","badge_you":"Sie","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","blocked_contacts_link":"Blockierte Kontakte ({count})","button_add_members":"Mitglieder hinzufügen","button_cancel":"Abbrechen","button_confirm":"Bestätigen","button_create":"Erstellen","button_delete_account":"Konto löschen","button_edit":"Bearbeiten","button_logout":"Abmelden","button_ok":"OK","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","button_sign_in":"Anmelden","button_sign_up":"Anmelden","button_subscribe":"Abbonieren","button_update":"Aktualisieren","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","channel":"Sender","channel_prompt":"Dies ist ein Sender","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_block":"Blockieren","chat_invitation_ignore":"Ignorieren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","code_doesnot_match":"Code stimmt nicht überein","contacts_not_found":"Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯","contacts_not_found_short":"Keine Kontakte für ''{query}''","credential_email_prompt":"E-Mail Adresse für Registrierung","delete_account":"Konto löschen","delete_account_warning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","download_action":"herunterladen","drafty_attachment":"Dateianhang","drafty_form":"Formular:","drafty_image":"Bild","email_dative":"E-Mail","email_prompt":"E-Mail, z.B. lisam@beispiel.de","enable_peers_messaging":"Aktivieren","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","error_invalid_id":"ungültige ID","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","forgot_password_link":"Passwort vergessen?","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","granted_permissions":"Erteilt","group_has_no_members":"Keine Mitglieder","group_user_id_prompt":"Gruppe oder Benutzer ID","image_caption_prompt":"Bildunterschrift","invalid_content":"ungültiger Inhalt","invalid_security_token":"Ungültiger Sicherheitsschlüssel","label_client":"Client:","label_content_type":"Inhaltsart:","label_default_access_mode":"Standard Zugriffsmodus:","label_file_name":"Dateiname:","label_group_members":"Gruppenmitglieder:","label_incognito_mode":"inkognito-Modus:","label_message_sound":"Benachrichtigungston:","label_muting_topic":"Stumm geschaltet:","label_other_user":"Andere","label_password":"Passwort","label_permissions":"Berechtigungen:","label_private":"Privater Kommentar","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_reset_password":"Passwort per E-Mail wiederherstellen:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server Adresse:","label_server_to_use":"Server verwenden:","label_size":"Größe:","label_topic_name":"Name","label_user_contacts":"Kontakte","label_user_id":"ID:","label_wire_transport":"Übertragung per Kabel:","label_you":"Sie:","label_your_name":"Ihr Name","label_your_permissions":"Ihre Berechtigungen:","last_seen_timestamp":"Zuletzt gesehen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","link_contact_us":"Kontakt","link_privacy_policy":"Datenschutzerklärung","link_terms_of_service":"Nutzungsbedingungen","login_prompt":"Anmelden","menu_item_archive_topic":"Archivieren","menu_item_block":"Blockieren","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_delete_topic":"Entfernen","menu_item_edit_permissions":"Berechtigungen ändern","menu_item_info":"Info","menu_item_member_delete":"Entfernen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_restore_topic":"Wiederherstellen","menu_item_send_retry":"Wiederholen","menu_item_unblock":"Blockierung aufheben","menu_item_unmute":"Stumm schalten beenden","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","more_online_members":"+{overflow} mehr","new_message_prompt":"Neue Nachricht","new_password_placeholder":"Geben Sie ein neues Passwort ein","no_connection":"Keine Verbindung","no_contacts":"Sie haben keine Kontakte :-(","numeric_confirmation_code_prompt":"Nur zahlen","online_now":"jetzt online","password_prompt":"Passwort","password_unchanged_prompt":"unverändert","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","permission_admin":"Bestätigen ({val})","permission_delete":"Entfernen ({val})","permission_join":"Beitreten ({val})","permission_owner":"Besitzer ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_read":"Lesen ({val})","permission_share":"Teilen ({val})","permission_write":"Schreiben ({val})","phone_dative":"Telefon","private_editing_placeholder":"Nur für Sie sichtbar","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","reload_update":"Neu laden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","requested_permissions":"Angefordert","save_attachment":"Speichern","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_login":"Anmelden","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_register":"Konto erstellen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_settings":"Einstellungen","stay_logged_in":"Angemeldet bleiben","tabtitle_find_user":"Suchen","tabtitle_group_by_id":"nach ID","tabtitle_new_group":"Neue Gruppe","tags_editor_no_tags":"Schlagworte hinzufügen","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","title_all_contacts":"Alle Kontakte","title_group_members":"Gruppenmitglieder","panel_title_info":"Info","title_manage_tags":"Verwalten","title_not_found":"Nicht gefunden","title_permissions":"Berechtigungen","title_tag_manager":"Schlagworte (Nutzer entdecken)","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","topic_name_editing_placeholder":"Freiform Name der Gruppe","unnamed_topic":"Unbenannt","update_available":"Aktualisierung verfügbar.","upload_finishing":"wird abgeschlossen...","user_not_found":"Nicht gefunden","description_editing_placeholder":"Beschreibung (optional)","label_description":"Beschreibung","button_security":"Sicherheit","panel_title_general":"Allgemein","panel_title_security":"Sicherheit","panel_title_crop":"Zum Anpassen ziehen","panel_title_members":"Mitglieder","permissions_anonymous":"Anonym","permissions_authenticated":"Authentifiziert","topic_delete":"Chat löschen","permissions_user":"Benutzerberechtigungen","password_reset_email_sent":"Eine E-Mail mit Sicherheitscode wurde gesendet.","label_unarchive_topic":"Archiviert:","menu_item_reply":"Antwort","menu_item_forward":"Nach vorne","forward_to":"Weiterleiten","forward_to_search_placeholder":"Kontakte durchsuchen","label_new_password":"Neues Kennwort","drafty_unknown":"Nicht unterstützt","calls_incoming":"Eingehender Anruf","calls_outgoing":"Ausgehender Anruf","calls_you_label":"Du","menu_item_video_call":"Videoanruf","already_in_call":"Du redest schon!","call_cancelled":"abgebrochen","call_missed":"verpasster","call_declined":"abgelehnt","call_disconnected":"getrennt","label_use_secure_connection":"Verwenden Sie eine sichere Verbindung","cred_confirmed_successfully":"Erfolgreich bestätigt","menu_item_edit":"Bearbeiten","editing_message":"Bearbeitung","message_edited_marker":", bearbeitet","icon_title_add_image":"Bild hinzufügen","icon_title_attach_file":"Datei anhängen","icon_title_delete":"Aufnahme löschen","icon_title_pause":"Wiedergabe pausieren","icon_title_play":"Aufnahme abspielen","icon_title_record_voice":"Sprachnachricht aufnehmen","icon_title_resume":"Wiedergabe fortsetzen","icon_title_send":"Nachricht senden","drag_file":"Datei hierher ziehen","drafty_video":"Videoaufnahme","call_in_progress":"in Arbeit","menu_item_audio_call":"Anruf","unrecognized_video_format":"Das Format dieses Videos wird nicht erkannt","loading_note":"Laden...","password_i_have_code":"Ich habe Code","label_reset_password_tel":"SMS zum Zurücksetzen des Passworts senden","mobile_phone_number":"Mobiltelefonnummer","password_reset_sms_sent":"Eine SMS mit einem Sicherheitscode wurde gesendet.","mobile_number_required":"Handynummer erforderlich","current_email":"Aktuelle E-Mail","current_phone":"Aktuelle Telefonnummer","new_email":"Neue E-Mail","new_phone_number":"Neue Telefonnummer","change_email":"E-Mail ändern","change_phone":"Telefonnummer ändern","call_busy":"besetzt","failed_to_init_audio":"Audioaufnahme konnte nicht initialisiert werden","pin_message":"Anpinnen","unpin_message":"Lösen","password_reset_success":"Passwort erfolgreich zurückgesetzt","scan_qr_code":"QR-Code scannen","self_topic_comment":"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert","self_topic_name":"Gespeicherte Nachrichten","message_not_found":"Nachricht nicht gefunden","message_deleted":"Nachricht gelöscht","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(bereits vergeben)","alias_invalid":"(ungültig)","label_alias_edit":"Alias","select_country":"Land auswählen","text_copied":"In die Zwischenablage kopiert","color_schema_dark":"Dunkel","color_schema_light":"Hell","color_schema_system":"Systemstandard","label_color_schema":"Thema:","label_text_size":"Textgröße:","incognito_mode_description":"Online-Status und Tipp-Indikatoren verbergen.","send_command":"Senden mit {key}","send_command_explained":"Drücken Sie Enter für eine neue Zeile","send_plain":"Senden mit Enter","send_plain_explained":"Drücken Sie Shift + Enter für eine neue Zeile","sidepanel_title_acc_general":"Allgemein","label_keyboard":"Tastatur:","pin_chat":"Anheften","unpin_chat":"Loslösen","subscriber_count":"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}","label_member_count":"Mitglieder:","label_subscriber_count":"Abonnenten:","member_count":"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}","tabtitle_image":"Bild","tabtitle_pattern":"Muster","button_restore":"Standard wiederherstellen","wallpapers":"Hintergrundbilder","label_blur_wallpaper":"Unschärfe:","label_scan_id":"Meine ID scannen:"} \ No newline at end of file +{"action_block_contact":"Kontakt blockieren","action_cancel":"Abbrechen","action_clear_messages":"Nachrichten leeren","action_delete_messages":"Nachrichten für alle löschen","action_leave_chat":"Unterhaltung verlassen","action_report_chat":"Unterhaltung melden","archived_contacts":"Archivierte Kontakte ({count})","badge_danger":"Verdächtig","badge_owner":"Besitzer","badge_staff":"Verwaltung","badge_verified":"Verifiziert","badge_you":"Sie","block_contact_warning":"Möchten Sie diesen Kontakt wirklich blockieren?","blocked_contacts_link":"Blockierte Kontakte ({count})","button_add_members":"Mitglieder hinzufügen","button_cancel":"Abbrechen","button_confirm":"Bestätigen","button_create":"Erstellen","button_delete_account":"Konto löschen","button_edit":"Bearbeiten","button_logout":"Abmelden","button_ok":"OK","button_reset":"Zurücksetzen","button_send_request":"Anfrage senden","button_sign_in":"Anmelden","button_sign_up":"Anmelden","button_subscribe":"Abbonieren","button_update":"Aktualisieren","cannot_initiate_file_upload":"Datei kann nicht hochgeladen werden.","channel":"Sender","channel_prompt":"Dies ist ein Sender","chat_invitation":"Sie sind eingeladen, an einem neuen Chat teilzunehmen. Was möchten Sie tun?","chat_invitation_accept":"Akzeptieren","chat_invitation_block":"Blockieren","chat_invitation_ignore":"Ignorieren","clear_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle leeren wollen? Das kann nicht rückgängig gemacht werden.","code_doesnot_match":"Code stimmt nicht überein","contacts_not_found":"Sie haben keine Unterhaltungen\n¯∖_(ツ)_/¯","contacts_not_found_short":"Keine Kontakte für ''{query}''","credential_email_prompt":"E-Mail Adresse für Registrierung","delete_account":"Konto löschen","delete_account_warning":"Möchten Sie das Konto wirklich löschen? Das kann nicht rückgängig gemacht werden","delete_messages_warning":"Sind Sie sicher, dass Sie diese Unterhaltung für alle löschen wollen? Das kann nicht rückgängig gemacht werden.","download_action":"herunterladen","drafty_attachment":"Dateianhang","drafty_form":"Formular:","drafty_image":"Bild","email_dative":"E-Mail","email_prompt":"E-Mail, z.B. lisam@beispiel.de","enable_peers_messaging":"Aktivieren","enter_confirmation_code_prompt":"Geben Sie den Bestätigungscode ein, der per {method} geschickt wurde:","error_invalid_id":"ungültige ID","file_attachment_too_large":"Die Dateigröße {size} überschreitet das Limit von {limit}.","forgot_password_link":"Passwort vergessen?","full_name_prompt":"Vollständiger Name, z.B. Lisa Musterfrau","granted_permissions":"Erteilt","group_has_no_members":"Keine Mitglieder","group_user_id_prompt":"Gruppe oder Benutzer ID","image_caption_prompt":"Bildunterschrift","invalid_content":"ungültiger Inhalt","invalid_security_token":"Ungültiger Sicherheitsschlüssel","label_client":"Client:","label_content_type":"Inhaltsart:","label_default_access_mode":"Standard Zugriffsmodus:","label_file_name":"Dateiname:","label_group_members":"Gruppenmitglieder:","label_incognito_mode":"inkognito-Modus:","label_message_sound":"Benachrichtigungston:","label_muting_topic":"Stumm geschaltet:","label_other_user":"Andere","label_password":"Passwort","label_permissions":"Berechtigungen:","label_private":"Privater Kommentar","label_push_notifications":"Benachrichtigungsmeldungen:","label_push_notifications_disabled":"Benachrichtigungsmeldungen (erfordert HTTPS):","label_reset_password":"Passwort per E-Mail wiederherstellen:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server Adresse:","label_server_to_use":"Server verwenden:","label_size":"Größe:","label_topic_name":"Name","label_user_contacts":"Kontakte","label_user_id":"ID:","label_wire_transport":"Übertragung per Kabel:","label_you":"Sie:","label_your_name":"Ihr Name","label_your_permissions":"Ihre Berechtigungen:","last_seen_timestamp":"Zuletzt gesehen","leave_chat_warning":"Möchten Sie diese Unterhaltung wirklich verlassen?","link_contact_us":"Kontakt","link_privacy_policy":"Datenschutzerklärung","link_terms_of_service":"Nutzungsbedingungen","login_prompt":"Anmelden","menu_item_archive_topic":"Archivieren","menu_item_block":"Blockieren","menu_item_clear_messages":"Nachrichten leeren","menu_item_clear_messages_for_all":"Für alle leeren","menu_item_delete":"Löschen","menu_item_delete_for_all":"Für alle löschen","menu_item_delete_topic":"Entfernen","menu_item_edit_permissions":"Berechtigungen ändern","menu_item_info":"Info","menu_item_member_delete":"Entfernen","menu_item_mute":"Unterhaltung stumm schalten","menu_item_restore_topic":"Wiederherstellen","menu_item_send_retry":"Wiederholen","menu_item_unblock":"Blockierung aufheben","menu_item_unmute":"Stumm schalten beenden","message_sending":"wird gesendet...","message_sending_failed":"fehlgeschlagen","messages_not_readable":"Neue Nachrichten können nicht gelesen werden","messaging_disabled_prompt":"Nachrichtenübermittlung deaktiviert","more_online_members":"+{overflow} mehr","new_message_prompt":"Neue Nachricht","new_password_placeholder":"Geben Sie ein neues Passwort ein","no_connection":"Keine Verbindung","no_contacts":"Sie haben keine Kontakte :-(","numeric_confirmation_code_prompt":"Nur zahlen","online_now":"jetzt online","password_prompt":"Passwort","password_unchanged_prompt":"unverändert","peers_messaging_disabled":"Gruppennachrichten sind deaktiviert","permission_admin":"Bestätigen ({val})","permission_delete":"Entfernen ({val})","permission_join":"Beitreten ({val})","permission_owner":"Besitzer ({val})","permission_pres":"Benachrichtigt werden ({val})","permission_read":"Lesen ({val})","permission_share":"Teilen ({val})","permission_write":"Schreiben ({val})","phone_dative":"Telefon","private_editing_placeholder":"Nur für Sie sichtbar","push_init_failed":"Initialisierung von Push-Benachrichtigungen fehlgeschlagen","reconnect_countdown":"Getrennt. Wiederverbinden in {seconds}…","reconnect_now":"Jetzt probieren","reload_update":"Neu laden","report_chat_warning":"Möchten Sie diese Unterhaltung wirklich blockieren und melden?","requested_permissions":"Angefordert","save_attachment":"Speichern","search_for_contacts":"Nutzen Sie die Suche um Kontakte zu finden","search_no_results":"Die Suche hatte keine Ergebnisse","search_placeholder":"Liste: email:lisa@beispiel.de, tel:17025550003...","sidepanel_title_acc_notifications":"Benachrichtigungen","sidepanel_title_acc_support":"Unterstützung","sidepanel_title_account_settings":"Konto-Einstellungen","sidepanel_title_archive":"Archivierte Unterhaltungen","sidepanel_title_blocked":"Blockierte Unterhaltungen","sidepanel_title_cred":"Anmeldeinformationen bestätigen","sidepanel_title_login":"Anmelden","sidepanel_title_newtpk":"Neue Unterhaltung starten","sidepanel_title_register":"Konto erstellen","sidepanel_title_reset":"Passwort zurücksetzen","sidepanel_title_settings":"Einstellungen","stay_logged_in":"Angemeldet bleiben","tabtitle_find_user":"Suchen","tabtitle_group_by_id":"nach ID","tabtitle_new_group":"Neue Gruppe","tags_editor_no_tags":"Schlagworte hinzufügen","tags_not_found":"Keine Schlagworte definiert. Erstellen Sie welche.","title_all_contacts":"Alle Kontakte","title_group_members":"Gruppenmitglieder","panel_title_info":"Info","title_manage_tags":"Verwalten","title_not_found":"Nicht gefunden","title_permissions":"Berechtigungen","title_tag_manager":"Schlagworte (Nutzer entdecken)","topic_block_warning":"Möchten Sie diese Unterhaltung wirklich blockieren?","topic_delete_warning":"Möchten Sie diese Unterhaltung wirklich löschen?","topic_name_editing_placeholder":"Freiform Name der Gruppe","unnamed_topic":"Unbenannt","update_available":"Aktualisierung verfügbar.","upload_finishing":"wird abgeschlossen...","user_not_found":"Nicht gefunden","description_editing_placeholder":"Beschreibung (optional)","label_description":"Beschreibung","button_security":"Sicherheit","panel_title_general":"Allgemein","panel_title_security":"Sicherheit","panel_title_crop":"Zum Anpassen ziehen","panel_title_members":"Mitglieder","permissions_anonymous":"Anonym","permissions_authenticated":"Authentifiziert","topic_delete":"Chat löschen","permissions_user":"Benutzerberechtigungen","password_reset_email_sent":"Eine E-Mail mit Sicherheitscode wurde gesendet.","label_unarchive_topic":"Archiviert:","menu_item_reply":"Antwort","menu_item_forward":"Nach vorne","forward_to":"Weiterleiten","forward_to_search_placeholder":"Kontakte durchsuchen","label_new_password":"Neues Kennwort","drafty_unknown":"Nicht unterstützt","calls_incoming":"Eingehender Anruf","calls_outgoing":"Ausgehender Anruf","calls_you_label":"Du","menu_item_video_call":"Videoanruf","already_in_call":"Du redest schon!","call_cancelled":"abgebrochen","call_missed":"verpasster","call_declined":"abgelehnt","call_disconnected":"getrennt","label_use_secure_connection":"Verwenden Sie eine sichere Verbindung","cred_confirmed_successfully":"Erfolgreich bestätigt","menu_item_edit":"Bearbeiten","editing_message":"Bearbeitung","message_edited_marker":", bearbeitet","icon_title_add_image":"Bild hinzufügen","icon_title_attach_file":"Datei anhängen","icon_title_delete":"Aufnahme löschen","icon_title_pause":"Wiedergabe pausieren","icon_title_play":"Aufnahme abspielen","icon_title_record_voice":"Sprachnachricht aufnehmen","icon_title_resume":"Wiedergabe fortsetzen","icon_title_send":"Nachricht senden","drag_file":"Datei hierher ziehen","drafty_video":"Videoaufnahme","call_in_progress":"in Arbeit","menu_item_audio_call":"Anruf","unrecognized_video_format":"Das Format dieses Videos wird nicht erkannt","loading_note":"Laden...","password_i_have_code":"Ich habe Code","label_reset_password_tel":"SMS zum Zurücksetzen des Passworts senden","mobile_phone_number":"Mobiltelefonnummer","password_reset_sms_sent":"Eine SMS mit einem Sicherheitscode wurde gesendet.","mobile_number_required":"Handynummer erforderlich","current_email":"Aktuelle E-Mail","current_phone":"Aktuelle Telefonnummer","new_email":"Neue E-Mail","new_phone_number":"Neue Telefonnummer","change_email":"E-Mail ändern","change_phone":"Telefonnummer ändern","call_busy":"besetzt","failed_to_init_audio":"Audioaufnahme konnte nicht initialisiert werden","pin_message":"Anpinnen","unpin_message":"Lösen","password_reset_success":"Passwort erfolgreich zurückgesetzt","scan_qr_code":"QR-Code scannen","self_topic_comment":"Notizen, Nachrichten, Links, Dateien für die Nachwelt gespeichert","self_topic_name":"Gespeicherte Nachrichten","message_not_found":"Nachricht nicht gefunden","message_deleted":"Nachricht gelöscht","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(bereits vergeben)","alias_invalid":"(ungültig)","label_alias_edit":"Alias","select_country":"Land auswählen","text_copied":"In die Zwischenablage kopiert","color_schema_dark":"Dunkel","color_schema_light":"Hell","color_schema_system":"Systemstandard","label_color_schema":"Thema:","label_text_size":"Textgröße:","incognito_mode_description":"Online-Status und Tipp-Indikatoren verbergen.","send_command":"Senden mit {key}","send_command_explained":"Drücken Sie Enter für eine neue Zeile","send_plain":"Senden mit Enter","send_plain_explained":"Drücken Sie Shift + Enter für eine neue Zeile","sidepanel_title_acc_general":"Allgemein","label_keyboard":"Tastatur:","pin_chat":"Anheften","unpin_chat":"Loslösen","subscriber_count":"{count, plural, one {{count, number} Abonnent} other {{count, number} Abonnenten}}","label_member_count":"Mitglieder:","label_subscriber_count":"Abonnenten:","member_count":"{count, plural, one {{count, number} Mitglied} other {{count, number} Mitglieder}}","tabtitle_image":"Bild","tabtitle_pattern":"Muster","button_restore":"Standard wiederherstellen","wallpapers":"Hintergrundbilder","label_blur_wallpaper":"Unschärfe:","label_scan_id":"Meine ID scannen:","unknown_name":"Unbekannt","save_action":"Speichern","cannot_parse_vcard":"vCard-Datei konnte nicht verarbeitet werden.","chat_now":"Chatten","find_user":"Suchen","label_contact_card":"Kontaktkarte","label_contacts":"Kontakte","add_members_prompt":"Mitglieder hinzufügen"} \ No newline at end of file diff --git a/src/i18n.min/en.json b/src/i18n.min/en.json index 7c0ea0c7..1e8183dd 100644 --- a/src/i18n.min/en.json +++ b/src/i18n.min/en.json @@ -1 +1 @@ -{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats
¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match ''{query}''","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer's messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User's Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","password_reset_success":"Password reset successfully","scan_qr_code":"Scan QR Code","self_topic_comment":"Notes, messages, links, files saved for posterity","self_topic_name":"Saved messages","message_not_found":"message not found","message_deleted":"message deleted","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(already taken)","alias_invalid":"(invalid)","label_alias_edit":"Alias","select_country":"Select country","text_copied":"Copied to clipboard","color_schema_dark":"Dark","color_schema_light":"Light","color_schema_system":"System default","label_color_schema":"Theme:","label_text_size":"Text size:","incognito_mode_description":"Hide your online status and typing indicators.","send_command":"Send on {key}","send_command_explained":"Press Enter for new line","send_plain":"Send on Enter","send_plain_explained":"Press Shift + Enter for new line","sidepanel_title_acc_general":"General","label_keyboard":"Keyboard:","pin_chat":"Pin","unpin_chat":"Unpin","subscriber_count":"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}","label_member_count":"Members:","label_subscriber_count":"Subscribers:","member_count":"{count, plural, one {{count, number} member} other {{count, number} members}}","tabtitle_image":"image","tabtitle_pattern":"pattern","button_restore":"Restore default","wallpapers":"Wallpapers","label_blur_wallpaper":"Blur:","label_scan_id":"Scan my ID:"} \ No newline at end of file +{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats\n¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match ''{query}''","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer's messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User's Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","password_reset_success":"Password reset successfully","scan_qr_code":"Scan QR Code","self_topic_comment":"Notes, messages, links, files saved for posterity","self_topic_name":"Saved messages","message_not_found":"message not found","message_deleted":"message deleted","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(already taken)","alias_invalid":"(invalid)","label_alias_edit":"Alias","select_country":"Select country","text_copied":"Copied to clipboard","color_schema_dark":"Dark","color_schema_light":"Light","color_schema_system":"System default","label_color_schema":"Theme:","label_text_size":"Text size:","incognito_mode_description":"Hide your online status and typing indicators.","send_command":"Send on {key}","send_command_explained":"Press Enter for new line","send_plain":"Send on Enter","send_plain_explained":"Press Shift + Enter for new line","sidepanel_title_acc_general":"General","label_keyboard":"Keyboard:","pin_chat":"Pin","unpin_chat":"Unpin","subscriber_count":"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}","label_member_count":"Members:","label_subscriber_count":"Subscribers:","member_count":"{count, plural, one {{count, number} member} other {{count, number} members}}","tabtitle_image":"image","tabtitle_pattern":"pattern","button_restore":"Restore default","wallpapers":"Wallpapers","label_blur_wallpaper":"Blur:","label_scan_id":"Scan my ID:","unknown_name":"Unknown","save_action":"Save","cannot_parse_vcard":"Cannot parse vCard file.","chat_now":"Chat","find_user":"Find","label_contact_card":"Contact Card","label_contacts":"Contacts","add_members_prompt":"add members"} \ No newline at end of file diff --git a/src/i18n.min/es.json b/src/i18n.min/es.json index 497310d3..da5743de 100644 --- a/src/i18n.min/es.json +++ b/src/i18n.min/es.json @@ -1 +1 @@ -{"action_block_contact":"Bloquear contacto","action_cancel":"cancelar","action_clear_messages":"Borrar mensajes","action_delete_messages":"Borrar mensajes para todos","action_leave_chat":"Dejar conversación","action_report_chat":"Reportar conversación","archived_contacts":"Contactos archivados ({count})","badge_danger":"Suspicaz","badge_owner":"propietario","badge_staff":"Administración","badge_verified":"Verificado","badge_you":"tú","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","blocked_contacts_link":"Contactos bloqueados ({count})","button_add_members":"Añadir miembros","button_cancel":"Cancelar","button_confirm":"Confirmar","button_create":"Crear","button_delete_account":"Eliminar cuenta","button_edit":"Editar","button_logout":"Cerrar sesión","button_ok":"OK","button_reset":"Restablecer","button_send_request":"Enviar petición","button_sign_in":"Entrar","button_sign_up":"Regístrate","button_subscribe":"Suscribirse","button_update":"Actualizar","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","channel":"canal","channel_prompt":"Este es un canal","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_block":"Bloquear","chat_invitation_ignore":"Ignorar","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","code_doesnot_match":"El código no coincide","contacts_not_found":"No tienes chats
¯∖_(ツ)_/¯","contacts_not_found_short":"Ningún contacto coincide con ''{query}''","credential_email_prompt":"Tu correo electrónico de registro","delete_account":"Eliminar cuenta","delete_account_warning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","download_action":"descargar","drafty_attachment":"Archivo","drafty_form":"Formulario:","drafty_image":"Imagen","email_dative":"correo electrónico","email_prompt":"Correo electrónico, p.ej. juan@example.com","enable_peers_messaging":"Habilitar","enter_confirmation_code_prompt":"Introduzca el código de confirmación enviado a tu {method}:","error_invalid_id":"ID inválido","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","forgot_password_link":"¿Olvidaste tu contraseña?","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","granted_permissions":"Otorgados","group_has_no_members":"No hay miembros","group_user_id_prompt":"ID del grupo o usuario","image_caption_prompt":"Añade un comentario","invalid_content":"contenido inválido","invalid_security_token":"Token de seguridad inválido","label_client":"Cliente:","label_content_type":"Tipo de contenido:","label_default_access_mode":"Modo de acceso predeterminado:","label_file_name":"Nombre del archivo:","label_group_members":"Miembros del grupo:","label_incognito_mode":"Modo incógnito:","label_message_sound":"Sonido de mensaje:","label_muting_topic":"Silenciado:","label_other_user":"Otros","label_password":"Contraseña","label_permissions":"Permisos:","label_private":"Comentario privado","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","label_sdk":"SDK:","label_server":"Servidor:","label_server_address":"Dirección del servidor:","label_server_to_use":"Servidor para usar:","label_size":"Tamaño:","label_topic_name":"Nombre del tema","label_user_contacts":"Contactos","label_user_id":"ID:","label_wire_transport":"Transporte de alambre:","label_you":"Tú:","label_your_name":"Tu nombre","label_your_permissions":"Tus permisos:","last_seen_timestamp":"Últ. vez","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","link_contact_us":"Contáctanos","link_privacy_policy":"Política de privacidad","link_terms_of_service":"Términos de uso","login_prompt":"Nombre de usuario","menu_item_archive_topic":"Archivar","menu_item_block":"Bloquear","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_delete_topic":"Eliminar","menu_item_edit_permissions":"Editar permisos","menu_item_info":"Información","menu_item_member_delete":"Eliminar","menu_item_mute":"Silenciar","menu_item_restore_topic":"Restaurar","menu_item_send_retry":"Inténtalo de nuevo","menu_item_unblock":"Desbloquear","menu_item_unmute":"Anular el silencio","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","messages_not_readable":"sin acceso a mensajes","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","more_online_members":"+{overflow} más","new_message_prompt":"Nuevo mensaje","new_password_placeholder":"Introduzca una nueva contraseña","no_connection":"Sin conexión","no_contacts":"No tienes contactos :-(","numeric_confirmation_code_prompt":"Sólo números","online_now":"en línea","password_prompt":"Contraseña","password_unchanged_prompt":"Sin cambios","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","permission_admin":"Approbar ({val})","permission_delete":"Eliminar ({val})","permission_join":"Unirse ({val})","permission_owner":"Propietario ({val})","permission_pres":"Ser notificado ({val})","permission_read":"Leer ({val})","permission_share":"Compartir ({val})","permission_write":"Escribir ({val})","phone_dative":"teléfono","private_editing_placeholder":"Sólo visible para tí","push_init_failed":"Error al inicializar las notificaciones push","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","reload_update":"Recargar","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","requested_permissions":"Solicitados","save_attachment":"guardar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_login":"Iniciar sesión","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_register":"Crear cuenta","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_settings":"Ajustes","stay_logged_in":"Permanecer conectado","tabtitle_find_user":"encontrar","tabtitle_group_by_id":"por ID","tabtitle_new_group":"nuevo grupo","tags_editor_no_tags":"Añadir etiquetas","tags_not_found":"No hay etiquetas definidas. Añade unas.","title_all_contacts":"Todos los contactos","title_group_members":"Miembros del grupo","title_manage_tags":"Gestionar","title_not_found":"No encontrado","title_permissions":"Permisos","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","topic_name_editing_placeholder":"Nombre del grupo","unnamed_topic":"Sin nombre","update_available":"Actualización disponible.","upload_finishing":"terminando...","user_not_found":"Usuario no encontrado","description_editing_placeholder":"Descripción (opcional)","label_description":"Descripción","button_security":"Seguridad","panel_title_crop":"Arrastra para ajustar","panel_title_general":"General","panel_title_members":"Miembros","panel_title_security":"Seguridad","panel_title_info":"Información","permissions_anonymous":"Anónimo","permissions_authenticated":"Autenticado","topic_delete":"Eliminar chat","permissions_user":"Permisos del usuario","password_reset_email_sent":"Se ha enviado un correo electrónico con el código de seguridad.","label_unarchive_topic":"Archivado:","menu_item_reply":"Respuesta","menu_item_forward":"Reenviar","forward_to":"Reenviar a","forward_to_search_placeholder":"Buscar contactos","label_new_password":"Nueva contraseña","drafty_unknown":"No soportado","calls_incoming":"Llamada entrante","calls_outgoing":"Llamada saliente","calls_you_label":"Tú","menu_item_video_call":"Videollamada","already_in_call":"¡Ya estás hablando!","call_cancelled":"cancelada","call_missed":"perdida","call_declined":"rechazada","call_disconnected":"desconectada","label_use_secure_connection":"Usar conexión segura","cred_confirmed_successfully":"Confirmado con éxito","menu_item_edit":"Editar","editing_message":"Edición","message_edited_marker":", editado","icon_title_add_image":"Añadir imagen","icon_title_attach_file":"Adjuntar archivo","icon_title_delete":"Eliminar grabación","icon_title_pause":"Pausar reproducción","icon_title_play":"Reproducir grabación","icon_title_record_voice":"Grabar mensaje de voz","icon_title_resume":"Reanudar la reproducción","icon_title_send":"Enviar mensaje","drag_file":"Arrastra el archivo aquí","drafty_video":"Grabación de vídeo","call_in_progress":"en progreso","menu_item_audio_call":"Llamada","unrecognized_video_format":"No se reconoce el formato de este video","loading_note":"Cargando...","password_i_have_code":"Tengo código","label_reset_password_tel":"Enviar SMS para restablecer la contraseña","mobile_phone_number":"Número de teléfono móvil","password_reset_sms_sent":"Se ha enviado un mensaje de texto con un código de seguridad.","mobile_number_required":"Número de teléfono móvil requerido","current_email":"Correo electrónico actual","current_phone":"Número de teléfono actual","new_email":"Nuevo correo electrónico","new_phone_number":"Nuevo número de teléfono","change_email":"Cambiar correo electrónico","change_phone":"Cambiar número de teléfono","call_busy":"ocupado","pin_message":"Fijar","unpin_message":"Desanclar","failed_to_init_audio":"Error al inicializar la grabación de audio","password_reset_success":"Restablecimiento de contraseña con éxito","scan_qr_code":"Escanear código QR","self_topic_comment":"Notas, mensajes, enlaces, archivos guardados para la posteridad","self_topic_name":"Mensajes guardados","message_not_found":"Mensaje no encontrado","message_deleted":"Mensaje eliminado","alias_editing_placeholder":"Alias (opcional)","label_alias":"Alias:","alias_already_taken":"(ya tomado)","alias_invalid":"(inválido)","label_alias_edit":"Alias","select_country":"Seleccionar país","text_copied":"Copiado al portapapeles","color_schema_dark":"Oscuro","color_schema_light":"Claro","color_schema_system":"Predeterminado del sistema","label_color_schema":"Tema:","label_text_size":"Tamaño del texto:","incognito_mode_description":"Ocultar tu estado en línea e indicadores de escritura.","send_command":"Enviar con {key}","send_command_explained":"Presiona Enter para nueva línea","send_plain":"Enviar con Enter","send_plain_explained":"Presiona Shift + Enter para nueva línea","sidepanel_title_acc_general":"General","label_keyboard":"Teclado:","pin_chat":"Fijar","unpin_chat":"Desfijar","subscriber_count":"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}","label_member_count":"Miembros:","label_subscriber_count":"Suscriptores:","member_count":"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}","tabtitle_image":"imagen","tabtitle_pattern":"patrón","button_restore":"Restaurar predeterminado","wallpapers":"Fondos de pantalla","label_blur_wallpaper":"Desenfoque:","label_scan_id":"Escanear mi ID:"} \ No newline at end of file +{"action_block_contact":"Bloquear contacto","action_cancel":"cancelar","action_clear_messages":"Borrar mensajes","action_delete_messages":"Borrar mensajes para todos","action_leave_chat":"Dejar conversación","action_report_chat":"Reportar conversación","archived_contacts":"Contactos archivados ({count})","badge_danger":"Suspicaz","badge_owner":"propietario","badge_staff":"Administración","badge_verified":"Verificado","badge_you":"tú","block_contact_warning":"¿Estás seguro de que quieres bloquear a este contacto?","blocked_contacts_link":"Contactos bloqueados ({count})","button_add_members":"Añadir miembros","button_cancel":"Cancelar","button_confirm":"Confirmar","button_create":"Crear","button_delete_account":"Eliminar cuenta","button_edit":"Editar","button_logout":"Cerrar sesión","button_ok":"OK","button_reset":"Restablecer","button_send_request":"Enviar petición","button_sign_in":"Entrar","button_sign_up":"Regístrate","button_subscribe":"Suscribirse","button_update":"Actualizar","cannot_initiate_file_upload":"No se pudo iniciar la carga del archivo.","channel":"canal","channel_prompt":"Este es un canal","chat_invitation":"Estás invitado a participar en un nuevo chat. ¿Qué te gustaría hacer?","chat_invitation_accept":"Aceptar","chat_invitation_block":"Bloquear","chat_invitation_ignore":"Ignorar","clear_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes? Esta acción es irreversible.","code_doesnot_match":"El código no coincide","contacts_not_found":"No tienes chats\n¯∖_(ツ)_/¯","contacts_not_found_short":"Ningún contacto coincide con ''{query}''","credential_email_prompt":"Tu correo electrónico de registro","delete_account":"Eliminar cuenta","delete_account_warning":"¿Estás seguro de que deseas eliminar permanentemente tu cuenta? Esta acción es irreversible.","delete_messages_warning":"¿Estás seguro de que quieres eliminar todos los mensajes para todos? Esta acción es irreversible.","download_action":"descargar","drafty_attachment":"Archivo","drafty_form":"Formulario:","drafty_image":"Imagen","email_dative":"correo electrónico","email_prompt":"Correo electrónico, p.ej. juan@example.com","enable_peers_messaging":"Habilitar","enter_confirmation_code_prompt":"Introduzca el código de confirmación enviado a tu {method}:","error_invalid_id":"ID inválido","file_attachment_too_large":"El tamaño del archivo {size} excede el límite de {limit}.","forgot_password_link":"¿Olvidaste tu contraseña?","full_name_prompt":"Nombre completo, p.ej. Juan González Hernández","granted_permissions":"Otorgados","group_has_no_members":"No hay miembros","group_user_id_prompt":"ID del grupo o usuario","image_caption_prompt":"Añade un comentario","invalid_content":"contenido inválido","invalid_security_token":"Token de seguridad inválido","label_client":"Cliente:","label_content_type":"Tipo de contenido:","label_default_access_mode":"Modo de acceso predeterminado:","label_file_name":"Nombre del archivo:","label_group_members":"Miembros del grupo:","label_incognito_mode":"Modo incógnito:","label_message_sound":"Sonido de mensaje:","label_muting_topic":"Silenciado:","label_other_user":"Otros","label_password":"Contraseña","label_permissions":"Permisos:","label_private":"Comentario privado","label_push_notifications":"Alertas de notificaciones:","label_push_notifications_disabled":"Alertas de notificaciones (requiere HTTPS):","label_reset_password":"Enviar un correo electrónico de restablecimiento de contraseña:","label_sdk":"SDK:","label_server":"Servidor:","label_server_address":"Dirección del servidor:","label_server_to_use":"Servidor para usar:","label_size":"Tamaño:","label_topic_name":"Nombre del tema","label_user_contacts":"Contactos","label_user_id":"ID:","label_wire_transport":"Transporte de alambre:","label_you":"Tú:","label_your_name":"Tu nombre","label_your_permissions":"Tus permisos:","last_seen_timestamp":"Últ. vez","leave_chat_warning":"¿Estás seguro de que quieres dejar esta conversación?","link_contact_us":"Contáctanos","link_privacy_policy":"Política de privacidad","link_terms_of_service":"Términos de uso","login_prompt":"Nombre de usuario","menu_item_archive_topic":"Archivar","menu_item_block":"Bloquear","menu_item_clear_messages":"Borrar mensajes","menu_item_clear_messages_for_all":"Borrar para todos","menu_item_delete":"Eliminar","menu_item_delete_for_all":"Eliminar para todos","menu_item_delete_topic":"Eliminar","menu_item_edit_permissions":"Editar permisos","menu_item_info":"Información","menu_item_member_delete":"Eliminar","menu_item_mute":"Silenciar","menu_item_restore_topic":"Restaurar","menu_item_send_retry":"Inténtalo de nuevo","menu_item_unblock":"Desbloquear","menu_item_unmute":"Anular el silencio","message_sending":"enviando...","message_sending_failed":"no se pudo enviar el mensaje","messages_not_readable":"sin acceso a mensajes","messaging_disabled_prompt":"El envío de mensajes está deshabilitado","more_online_members":"+{overflow} más","new_message_prompt":"Nuevo mensaje","new_password_placeholder":"Introduzca una nueva contraseña","no_connection":"Sin conexión","no_contacts":"No tienes contactos :-(","numeric_confirmation_code_prompt":"Sólo números","online_now":"en línea","password_prompt":"Contraseña","password_unchanged_prompt":"Sin cambios","peers_messaging_disabled":"La mensajería Peer está deshabilitada.","permission_admin":"Approbar ({val})","permission_delete":"Eliminar ({val})","permission_join":"Unirse ({val})","permission_owner":"Propietario ({val})","permission_pres":"Ser notificado ({val})","permission_read":"Leer ({val})","permission_share":"Compartir ({val})","permission_write":"Escribir ({val})","phone_dative":"teléfono","private_editing_placeholder":"Sólo visible para tí","push_init_failed":"Error al inicializar las notificaciones push","reconnect_countdown":"Desconectado. Reconectando en {seconds}…","reconnect_now":"Reintentar","reload_update":"Recargar","report_chat_warning":"¿Estás seguro de que quieres bloquear y reportar a esta conversación?","requested_permissions":"Solicitados","save_attachment":"guardar","search_for_contacts":"Usa la búsqueda para encontrar contactos","search_no_results":"La búsqueda no arrojó resultados","search_placeholder":"Ej. email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notificaciones","sidepanel_title_acc_support":"Soporte","sidepanel_title_account_settings":"Ajustes de la cuenta","sidepanel_title_archive":"Chats archivados","sidepanel_title_blocked":"Chats bloqueados","sidepanel_title_cred":"Confirmar credenciales","sidepanel_title_login":"Iniciar sesión","sidepanel_title_newtpk":"Iniciar un nuevo chat","sidepanel_title_register":"Crear cuenta","sidepanel_title_reset":"Restablecer contraseña","sidepanel_title_settings":"Ajustes","stay_logged_in":"Permanecer conectado","tabtitle_find_user":"encontrar","tabtitle_group_by_id":"por ID","tabtitle_new_group":"nuevo grupo","tags_editor_no_tags":"Añadir etiquetas","tags_not_found":"No hay etiquetas definidas. Añade unas.","title_all_contacts":"Todos los contactos","title_group_members":"Miembros del grupo","title_manage_tags":"Gestionar","title_not_found":"No encontrado","title_permissions":"Permisos","title_tag_manager":"Etiquetas (descubrimiento de usuarios)","topic_block_warning":"¿Estás seguro de que quieres bloquear esta conversación","topic_delete_warning":"¿Estás seguro de que quieres eliminar esta conversación?","topic_name_editing_placeholder":"Nombre del grupo","unnamed_topic":"Sin nombre","update_available":"Actualización disponible.","upload_finishing":"terminando...","user_not_found":"Usuario no encontrado","description_editing_placeholder":"Descripción (opcional)","label_description":"Descripción","button_security":"Seguridad","panel_title_crop":"Arrastra para ajustar","panel_title_general":"General","panel_title_members":"Miembros","panel_title_security":"Seguridad","panel_title_info":"Información","permissions_anonymous":"Anónimo","permissions_authenticated":"Autenticado","topic_delete":"Eliminar chat","permissions_user":"Permisos del usuario","password_reset_email_sent":"Se ha enviado un correo electrónico con el código de seguridad.","label_unarchive_topic":"Archivado:","menu_item_reply":"Respuesta","menu_item_forward":"Reenviar","forward_to":"Reenviar a","forward_to_search_placeholder":"Buscar contactos","label_new_password":"Nueva contraseña","drafty_unknown":"No soportado","calls_incoming":"Llamada entrante","calls_outgoing":"Llamada saliente","calls_you_label":"Tú","menu_item_video_call":"Videollamada","already_in_call":"¡Ya estás hablando!","call_cancelled":"cancelada","call_missed":"perdida","call_declined":"rechazada","call_disconnected":"desconectada","label_use_secure_connection":"Usar conexión segura","cred_confirmed_successfully":"Confirmado con éxito","menu_item_edit":"Editar","editing_message":"Edición","message_edited_marker":", editado","icon_title_add_image":"Añadir imagen","icon_title_attach_file":"Adjuntar archivo","icon_title_delete":"Eliminar grabación","icon_title_pause":"Pausar reproducción","icon_title_play":"Reproducir grabación","icon_title_record_voice":"Grabar mensaje de voz","icon_title_resume":"Reanudar la reproducción","icon_title_send":"Enviar mensaje","drag_file":"Arrastra el archivo aquí","drafty_video":"Grabación de vídeo","call_in_progress":"en progreso","menu_item_audio_call":"Llamada","unrecognized_video_format":"No se reconoce el formato de este video","loading_note":"Cargando...","password_i_have_code":"Tengo código","label_reset_password_tel":"Enviar SMS para restablecer la contraseña","mobile_phone_number":"Número de teléfono móvil","password_reset_sms_sent":"Se ha enviado un mensaje de texto con un código de seguridad.","mobile_number_required":"Número de teléfono móvil requerido","current_email":"Correo electrónico actual","current_phone":"Número de teléfono actual","new_email":"Nuevo correo electrónico","new_phone_number":"Nuevo número de teléfono","change_email":"Cambiar correo electrónico","change_phone":"Cambiar número de teléfono","call_busy":"ocupado","pin_message":"Fijar","unpin_message":"Desanclar","failed_to_init_audio":"Error al inicializar la grabación de audio","password_reset_success":"Restablecimiento de contraseña con éxito","scan_qr_code":"Escanear código QR","self_topic_comment":"Notas, mensajes, enlaces, archivos guardados para la posteridad","self_topic_name":"Mensajes guardados","message_not_found":"Mensaje no encontrado","message_deleted":"Mensaje eliminado","alias_editing_placeholder":"Alias (opcional)","label_alias":"Alias:","alias_already_taken":"(ya tomado)","alias_invalid":"(inválido)","label_alias_edit":"Alias","select_country":"Seleccionar país","text_copied":"Copiado al portapapeles","color_schema_dark":"Oscuro","color_schema_light":"Claro","color_schema_system":"Predeterminado del sistema","label_color_schema":"Tema:","label_text_size":"Tamaño del texto:","incognito_mode_description":"Ocultar tu estado en línea e indicadores de escritura.","send_command":"Enviar con {key}","send_command_explained":"Presiona Enter para nueva línea","send_plain":"Enviar con Enter","send_plain_explained":"Presiona Shift + Enter para nueva línea","sidepanel_title_acc_general":"General","label_keyboard":"Teclado:","pin_chat":"Fijar","unpin_chat":"Desfijar","subscriber_count":"{count, plural, one {{count, number} suscriptor} other {{count, number} suscriptores}}","label_member_count":"Miembros:","label_subscriber_count":"Suscriptores:","member_count":"{count, plural, one {{count, number} miembro} other {{count, number} miembros}}","tabtitle_image":"imagen","tabtitle_pattern":"patrón","button_restore":"Restaurar predeterminado","wallpapers":"Fondos de pantalla","label_blur_wallpaper":"Desenfoque:","label_scan_id":"Escanear mi ID:","unknown_name":"Desconocido","save_action":"Guardar","cannot_parse_vcard":"No se puede analizar el archivo vCard.","chat_now":"Chatear","find_user":"Buscar","label_contact_card":"Tarjeta de contacto","label_contacts":"Contactos","add_members_prompt":"añadir miembros"} \ No newline at end of file diff --git a/src/i18n.min/fr.json b/src/i18n.min/fr.json index b46eceec..42977fb6 100644 --- a/src/i18n.min/fr.json +++ b/src/i18n.min/fr.json @@ -1 +1 @@ -{"action_block_contact":"Bloquer le Contact","action_cancel":"annuler","action_clear_messages":"Effacer les Messages","action_delete_messages":"Effacer les Messages pour Tous","action_leave_chat":"Quitter la Conversation","action_report_chat":"Signaler la Conversation","archived_contacts":"Contacts archivés ({count})","badge_danger":"Non fiable","badge_owner":"propriétaire","badge_staff":"Géré par le Staff","badge_verified":"Vérifié / Officiel","badge_you":"vous","block_contact_warning":"Êtes-vous sûr de bloquer le contact ?","blocked_contacts_link":"Contacts bloqués ({count})","button_add_members":"Ajouter des membres","button_cancel":"Annuler","button_confirm":"Confirmer","button_create":"Créer","button_delete_account":"Supprimer le compte","button_edit":"Modifier","button_logout":"Déconnexion","button_ok":"OK","button_reset":"Remettre à Zéro","button_send_request":"Envoyer une demande","button_sign_in":"Connexion","button_sign_up":"Créer un compte","button_subscribe":"S'abonner","button_update":"Mettre à jour","cannot_initiate_file_upload":"Impossible de démarrer l'envoi.","channel":"canal","channel_prompt":"C'est un canal","chat_invitation":"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?","chat_invitation_accept":"Accepter","chat_invitation_block":"Bloquer","chat_invitation_ignore":"Ignorer","clear_messages_warning":"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.","code_doesnot_match":"Le code ne correspond pas","contacts_not_found":"Vous n'avez aucune conversation
¯∖_(ツ)_/¯","contacts_not_found_short":"Aucun contact ne correspond à ''{query}''","credential_email_prompt":"Votre email d'enregistrement","delete_account":"Supprimer le compte","delete_account_warning":"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.","delete_messages_warning":"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.","download_action":"télécharger","drafty_attachment":"Pièce(s) jointe(s)","drafty_form":"Formulaire:","drafty_image":"Image","email_dative":"email","email_prompt":"Email, par exemple jdoe@exemple.com","enable_peers_messaging":"Activer","enter_confirmation_code_prompt":"Entrez le code de confirmation envoyé par {method}:","error_invalid_id":"Identifiant invalide","file_attachment_too_large":"Le fichier de taille {size} dépasse la limite de {limit}.","forgot_password_link":"Mot de passe oublié ?","full_name_prompt":"Nom complet, par exemple John Doe","granted_permissions":"Accordé","group_has_no_members":"Aucun membre","group_user_id_prompt":"Identifiant d'utilisateur ou de groupe","image_caption_prompt":"Description de l'image","invalid_content":"contenu invalide","invalid_security_token":"Token de sécurité invalide","label_client":"Client :","label_content_type":"Type de contenu :","label_default_access_mode":"Mode d'accès par défaut :","label_file_name":"Nom du fichier :","label_group_members":"Membres du groupe :","label_incognito_mode":"Mode incognito :","label_message_sound":"Son du message :","label_muting_topic":"Mué :","label_other_user":"Autre","label_password":"Mot de passe","label_permissions":"Permissions :","label_private":"Commentaire privé","label_push_notifications":"Notifications :","label_push_notifications_disabled":"Notifications (requière HTTPS):","label_reset_password":"Envoyer un mail de remise à zéro de mot de passe :","label_sdk":"SDK :","label_server":"Serveur :","label_server_address":"Adresse du serveur :","label_server_to_use":"Serveur à utiliser :","label_size":"Taille :","label_topic_name":"Nom","label_user_contacts":"Contacts","label_user_id":"ID :","label_wire_transport":"Transport par cable :","label_you":"Vous :","label_your_name":"Votre nom","label_your_permissions":"Vos permissions :","last_seen_timestamp":"Vu pour la dernière fois","leave_chat_warning":"Êtes-vous sûr de vouloir quitter cette conversation ?","link_contact_us":"Contactez Nous","link_privacy_policy":"Politique de confidentialité","link_terms_of_service":"Conditions d'utilisation","login_prompt":"Connexion","menu_item_archive_topic":"Archiver","menu_item_block":"Bloquer","menu_item_clear_messages":"Effacer les messages","menu_item_clear_messages_for_all":"Effacer pour Tous","menu_item_delete":"Supprimer","menu_item_delete_for_all":"Supprimer pour Tous","menu_item_delete_topic":"Supprimer","menu_item_edit_permissions":"Modifier les permissions","menu_item_info":"Informations","menu_item_member_delete":"Supprimer","menu_item_mute":"Rendre muer","menu_item_reply":"Répondre","menu_item_restore_topic":"Restorer","menu_item_send_retry":"Réessayer","menu_item_unblock":"Débloquer","menu_item_unmute":"Recevoir à nouveau","message_sending":"envoi en cours...","message_sending_failed":"échoué","messages_not_readable":"aucun accès aux messages","messaging_disabled_prompt":"Discussion désactivée","more_online_members":"+{overflow} de plus","new_message_prompt":"Nouveau message","new_password_placeholder":"Entrez un nouveau mot de passe","no_connection":"Aucune connexion","no_contacts":"Vous n'avez pas de contacts :-(","numeric_confirmation_code_prompt":"Nombres seulement","online_now":"en ligne","password_prompt":"Mot de passe","password_unchanged_prompt":"Non changé","peers_messaging_disabled":"La messagerie point à point est désactivée.","permission_admin":"Approver ({val})","permission_delete":"Supprimer ({val})","permission_join":"Rejoindre ({val})","permission_owner":"Propriétaire ({val})","permission_pres":"Recevoir une notification ({val})","permission_read":"Lire ({val})","permission_share":"Partager ({val})","permission_write":"Ecrire ({val})","phone_dative":"téléphone","private_editing_placeholder":"Visible par vous seulement","push_init_failed":"Impossible d'initialiser les notifications push","reconnect_countdown":"Déconnecté. Reconnexion dans {seconds}…","reconnect_now":"Essayer maintenant","reload_update":"Recharger","report_chat_warning":"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?","requested_permissions":"Demandé","save_attachment":"sauvegarder","search_for_contacts":"Utilisez la recherche pour trouver des contacts","search_no_results":"La recherche n'a donné aucun résultat","search_placeholder":"Liste comme email:alice@exemple.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Paramètres du compte","sidepanel_title_archive":"Conversations Archivées","sidepanel_title_blocked":"Conversations Bloquées","sidepanel_title_cred":"Confirmer les identifiants","sidepanel_title_login":"Se Connecter","sidepanel_title_newtpk":"Démarrer une nouvelle Conversation","sidepanel_title_register":"Créer un compte","sidepanel_title_reset":"Remettre à Zéro le Mot de Passe","sidepanel_title_settings":"Paramètres","stay_logged_in":"Rester connecté","tabtitle_find_user":"trouver","tabtitle_group_by_id":"par identifiant","tabtitle_new_group":"nouveau groupe","tags_editor_no_tags":"Ajouter des étiquettes","tags_not_found":"Aucune étiquette définie. Ajoutez en.","title_all_contacts":"Tous les Contacts","title_group_members":"Membres du Groupe","title_manage_tags":"Gérer","title_not_found":"Pas trouvé","title_permissions":"Permissions","title_tag_manager":"Etiquettes (recherche & découverte)","topic_block_warning":"Êtes-vous sûr de vouloir bloquer cette conversation ?","topic_delete_warning":"Êtes-vous sûr de vouloir supprimer cette conversation ?","topic_name_editing_placeholder":"Nom libre du groupe","unnamed_topic":"Non nommé","update_available":"Mise à jour disponible.","upload_finishing":"fin...","user_not_found":"Pas trouvé","description_editing_placeholder":"Description facultative","label_description":"Description","button_security":"Sécurité","panel_title_crop":"Déplacez pour ajuster","panel_title_general":"Général","panel_title_members":"Membres","panel_title_security":"Sécurité","panel_title_info":"Informations","permissions_anonymous":"Anonyme","permissions_authenticated":"Authentifié","topic_delete":"Supprimer la Conversation","permissions_user":"Permissions d'Utilisateur","password_reset_email_sent":"Un e-mail avec code de sécurité a été envoyé.","label_unarchive_topic":"Archivé:","menu_item_forward":"Transférer","forward_to":"Transférer à","forward_to_search_placeholder":"Rechercher des contacts","label_new_password":"Nouveau mot de passe","drafty_unknown":"Non supporté","already_in_call":"Vous êtes déjà dans un appel en cours!","call_cancelled":"annulé","call_declined":"refusé","call_missed":"manqué","calls_incoming":"Appel entrant","calls_outgoing":"Appel sortant","calls_you_label":"Tu","menu_item_video_call":"Appel vidéo","call_disconnected":"débranché","label_use_secure_connection":"Utiliser une connexion sécurisée","cred_confirmed_successfully":"Confirmé avec succès","menu_item_edit":"Modifier","editing_message":"Édition","message_edited_marker":", édité","icon_title_add_image":"Ajouter une image","icon_title_attach_file":"Pièce jointe","icon_title_delete":"Supprimer l'enregistrement","icon_title_pause":"Interrompre la lecture","icon_title_play":"Lire l'enregistrement","icon_title_record_voice":"Enregistrer un message vocal","icon_title_resume":"Reprendre la lecture","icon_title_send":"Envoyer le message","drag_file":"Faites glisser le fichier ici","drafty_video":"Enregistrement video","call_in_progress":"en cours","menu_item_audio_call":"Appel","unrecognized_video_format":"Le format de cette vidéo n'est pas reconnu","loading_note":"Chargement...","password_i_have_code":"J'ai du code","label_reset_password_tel":"Envoyer un SMS pour réinitialiser le mot de passe","mobile_phone_number":"Numéro de téléphone mobile","password_reset_sms_sent":"Un message texte avec un code de sécurité a été envoyé.","mobile_number_required":"Numéro de téléphone portable requis","current_email":"Courriel actuel","current_phone":"Numéro de téléphone actuel","new_email":"Nouvel e-mail","new_phone_number":"Nouveau numéro de téléphone","change_email":"Modifier l'e-mail","change_phone":"Modifier le numéro de téléphone","call_busy":"occupé","pin_message":"Épingler","unpin_message":"Détacher","failed_to_init_audio":"Échec de l'initialisation de l'enregistrement audio","password_reset_success":"Mot de passe réinitialisé avec succès","scan_qr_code":"Scanner le code QR","self_topic_comment":"Notes, messages, liens, fichiers sauvegardés","self_topic_name":"Messages sauvegardés","message_not_found":"message introuvable","message_deleted":"message supprimé","alias_editing_placeholder":"Alias (facultatif)","label_alias":"Alias:","alias_already_taken":"(déjà utilisé)","alias_invalid":"(invalide)","label_alias_edit":"Alias","select_country":"Sélectionner un pays","text_copied":"Copié dans le presse-papiers","color_schema_dark":"Sombre","color_schema_light":"Clair","color_schema_system":"Thème du système","label_color_schema":"Thème :","label_text_size":"Taille du texte :","incognito_mode_description":"Masquer votre statut en ligne et les indicateurs de frappe.","send_command":"Envoyer avec {key}","send_command_explained":"Appuyez sur Entrée pour une nouvelle ligne","send_plain":"Envoyer avec Entrée","send_plain_explained":"Appuyez sur Shift + Entrée pour une nouvelle ligne","sidepanel_title_acc_general":"Général","label_keyboard":"Clavier :","pin_chat":"Épingler","unpin_chat":"Désépingler","subscriber_count":"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}","label_member_count":"Membres :","label_subscriber_count":"Abonnés :","member_count":"{count, plural, one {{count, number} membre} other {{count, number} membres}}","tabtitle_image":"image","tabtitle_pattern":"motif","button_restore":"Restaurer par défaut","wallpapers":"Fonds d'écran","label_blur_wallpaper":"Flou :","label_scan_id":"Scanner mon ID :"} \ No newline at end of file +{"action_block_contact":"Bloquer le Contact","action_cancel":"annuler","action_clear_messages":"Effacer les Messages","action_delete_messages":"Effacer les Messages pour Tous","action_leave_chat":"Quitter la Conversation","action_report_chat":"Signaler la Conversation","archived_contacts":"Contacts archivés ({count})","badge_danger":"Non fiable","badge_owner":"propriétaire","badge_staff":"Géré par le Staff","badge_verified":"Vérifié / Officiel","badge_you":"vous","block_contact_warning":"Êtes-vous sûr de bloquer le contact ?","blocked_contacts_link":"Contacts bloqués ({count})","button_add_members":"Ajouter des membres","button_cancel":"Annuler","button_confirm":"Confirmer","button_create":"Créer","button_delete_account":"Supprimer le compte","button_edit":"Modifier","button_logout":"Déconnexion","button_ok":"OK","button_reset":"Remettre à Zéro","button_send_request":"Envoyer une demande","button_sign_in":"Connexion","button_sign_up":"Créer un compte","button_subscribe":"S'abonner","button_update":"Mettre à jour","cannot_initiate_file_upload":"Impossible de démarrer l'envoi.","channel":"canal","channel_prompt":"C'est un canal","chat_invitation":"Vous êtes invité à démarrer une conversation. Que voulez vous faire ?","chat_invitation_accept":"Accepter","chat_invitation_block":"Bloquer","chat_invitation_ignore":"Ignorer","clear_messages_warning":"Êtes-vous sûr de vouloir effacer tous les messages ? Aucun retour possible.","code_doesnot_match":"Le code ne correspond pas","contacts_not_found":"Vous n'avez aucune conversation\n¯∖_(ツ)_/¯","contacts_not_found_short":"Aucun contact ne correspond à ''{query}''","credential_email_prompt":"Votre email d'enregistrement","delete_account":"Supprimer le compte","delete_account_warning":"Êtes-vous sûr de vouloir supprimer votre compte ? Aucun retour possible.","delete_messages_warning":"Êtes-vous sûr de vouloir supprimer tous les messages pour tous ? Aucun retour possible.","download_action":"télécharger","drafty_attachment":"Pièce(s) jointe(s)","drafty_form":"Formulaire:","drafty_image":"Image","email_dative":"email","email_prompt":"Email, par exemple jdoe@exemple.com","enable_peers_messaging":"Activer","enter_confirmation_code_prompt":"Entrez le code de confirmation envoyé par {method}:","error_invalid_id":"Identifiant invalide","file_attachment_too_large":"Le fichier de taille {size} dépasse la limite de {limit}.","forgot_password_link":"Mot de passe oublié ?","full_name_prompt":"Nom complet, par exemple John Doe","granted_permissions":"Accordé","group_has_no_members":"Aucun membre","group_user_id_prompt":"Identifiant d'utilisateur ou de groupe","image_caption_prompt":"Description de l'image","invalid_content":"contenu invalide","invalid_security_token":"Token de sécurité invalide","label_client":"Client :","label_content_type":"Type de contenu :","label_default_access_mode":"Mode d'accès par défaut :","label_file_name":"Nom du fichier :","label_group_members":"Membres du groupe :","label_incognito_mode":"Mode incognito :","label_message_sound":"Son du message :","label_muting_topic":"Mué :","label_other_user":"Autre","label_password":"Mot de passe","label_permissions":"Permissions :","label_private":"Commentaire privé","label_push_notifications":"Notifications :","label_push_notifications_disabled":"Notifications (requière HTTPS):","label_reset_password":"Envoyer un mail de remise à zéro de mot de passe :","label_sdk":"SDK :","label_server":"Serveur :","label_server_address":"Adresse du serveur :","label_server_to_use":"Serveur à utiliser :","label_size":"Taille :","label_topic_name":"Nom","label_user_contacts":"Contacts","label_user_id":"ID :","label_wire_transport":"Transport par cable :","label_you":"Vous :","label_your_name":"Votre nom","label_your_permissions":"Vos permissions :","last_seen_timestamp":"Vu pour la dernière fois","leave_chat_warning":"Êtes-vous sûr de vouloir quitter cette conversation ?","link_contact_us":"Contactez Nous","link_privacy_policy":"Politique de confidentialité","link_terms_of_service":"Conditions d'utilisation","login_prompt":"Connexion","menu_item_archive_topic":"Archiver","menu_item_block":"Bloquer","menu_item_clear_messages":"Effacer les messages","menu_item_clear_messages_for_all":"Effacer pour Tous","menu_item_delete":"Supprimer","menu_item_delete_for_all":"Supprimer pour Tous","menu_item_delete_topic":"Supprimer","menu_item_edit_permissions":"Modifier les permissions","menu_item_info":"Informations","menu_item_member_delete":"Supprimer","menu_item_mute":"Rendre muer","menu_item_reply":"Répondre","menu_item_restore_topic":"Restorer","menu_item_send_retry":"Réessayer","menu_item_unblock":"Débloquer","menu_item_unmute":"Recevoir à nouveau","message_sending":"envoi en cours...","message_sending_failed":"échoué","messages_not_readable":"aucun accès aux messages","messaging_disabled_prompt":"Discussion désactivée","more_online_members":"+{overflow} de plus","new_message_prompt":"Nouveau message","new_password_placeholder":"Entrez un nouveau mot de passe","no_connection":"Aucune connexion","no_contacts":"Vous n'avez pas de contacts :-(","numeric_confirmation_code_prompt":"Nombres seulement","online_now":"en ligne","password_prompt":"Mot de passe","password_unchanged_prompt":"Non changé","peers_messaging_disabled":"La messagerie point à point est désactivée.","permission_admin":"Approver ({val})","permission_delete":"Supprimer ({val})","permission_join":"Rejoindre ({val})","permission_owner":"Propriétaire ({val})","permission_pres":"Recevoir une notification ({val})","permission_read":"Lire ({val})","permission_share":"Partager ({val})","permission_write":"Ecrire ({val})","phone_dative":"téléphone","private_editing_placeholder":"Visible par vous seulement","push_init_failed":"Impossible d'initialiser les notifications push","reconnect_countdown":"Déconnecté. Reconnexion dans {seconds}…","reconnect_now":"Essayer maintenant","reload_update":"Recharger","report_chat_warning":"Êtes-vous sûr de vouloir bloquer et signaler cette conversation ?","requested_permissions":"Demandé","save_attachment":"sauvegarder","search_for_contacts":"Utilisez la recherche pour trouver des contacts","search_no_results":"La recherche n'a donné aucun résultat","search_placeholder":"Liste comme email:alice@exemple.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Paramètres du compte","sidepanel_title_archive":"Conversations Archivées","sidepanel_title_blocked":"Conversations Bloquées","sidepanel_title_cred":"Confirmer les identifiants","sidepanel_title_login":"Se Connecter","sidepanel_title_newtpk":"Démarrer une nouvelle Conversation","sidepanel_title_register":"Créer un compte","sidepanel_title_reset":"Remettre à Zéro le Mot de Passe","sidepanel_title_settings":"Paramètres","stay_logged_in":"Rester connecté","tabtitle_find_user":"trouver","tabtitle_group_by_id":"par identifiant","tabtitle_new_group":"nouveau groupe","tags_editor_no_tags":"Ajouter des étiquettes","tags_not_found":"Aucune étiquette définie. Ajoutez en.","title_all_contacts":"Tous les Contacts","title_group_members":"Membres du Groupe","title_manage_tags":"Gérer","title_not_found":"Pas trouvé","title_permissions":"Permissions","title_tag_manager":"Etiquettes (recherche & découverte)","topic_block_warning":"Êtes-vous sûr de vouloir bloquer cette conversation ?","topic_delete_warning":"Êtes-vous sûr de vouloir supprimer cette conversation ?","topic_name_editing_placeholder":"Nom libre du groupe","unnamed_topic":"Non nommé","update_available":"Mise à jour disponible.","upload_finishing":"fin...","user_not_found":"Pas trouvé","description_editing_placeholder":"Description facultative","label_description":"Description","button_security":"Sécurité","panel_title_crop":"Déplacez pour ajuster","panel_title_general":"Général","panel_title_members":"Membres","panel_title_security":"Sécurité","panel_title_info":"Informations","permissions_anonymous":"Anonyme","permissions_authenticated":"Authentifié","topic_delete":"Supprimer la Conversation","permissions_user":"Permissions d'Utilisateur","password_reset_email_sent":"Un e-mail avec code de sécurité a été envoyé.","label_unarchive_topic":"Archivé:","menu_item_forward":"Transférer","forward_to":"Transférer à","forward_to_search_placeholder":"Rechercher des contacts","label_new_password":"Nouveau mot de passe","drafty_unknown":"Non supporté","already_in_call":"Vous êtes déjà dans un appel en cours!","call_cancelled":"annulé","call_declined":"refusé","call_missed":"manqué","calls_incoming":"Appel entrant","calls_outgoing":"Appel sortant","calls_you_label":"Tu","menu_item_video_call":"Appel vidéo","call_disconnected":"débranché","label_use_secure_connection":"Utiliser une connexion sécurisée","cred_confirmed_successfully":"Confirmé avec succès","menu_item_edit":"Modifier","editing_message":"Édition","message_edited_marker":", édité","icon_title_add_image":"Ajouter une image","icon_title_attach_file":"Pièce jointe","icon_title_delete":"Supprimer l'enregistrement","icon_title_pause":"Interrompre la lecture","icon_title_play":"Lire l'enregistrement","icon_title_record_voice":"Enregistrer un message vocal","icon_title_resume":"Reprendre la lecture","icon_title_send":"Envoyer le message","drag_file":"Faites glisser le fichier ici","drafty_video":"Enregistrement video","call_in_progress":"en cours","menu_item_audio_call":"Appel","unrecognized_video_format":"Le format de cette vidéo n'est pas reconnu","loading_note":"Chargement...","password_i_have_code":"J'ai du code","label_reset_password_tel":"Envoyer un SMS pour réinitialiser le mot de passe","mobile_phone_number":"Numéro de téléphone mobile","password_reset_sms_sent":"Un message texte avec un code de sécurité a été envoyé.","mobile_number_required":"Numéro de téléphone portable requis","current_email":"Courriel actuel","current_phone":"Numéro de téléphone actuel","new_email":"Nouvel e-mail","new_phone_number":"Nouveau numéro de téléphone","change_email":"Modifier l'e-mail","change_phone":"Modifier le numéro de téléphone","call_busy":"occupé","pin_message":"Épingler","unpin_message":"Détacher","failed_to_init_audio":"Échec de l'initialisation de l'enregistrement audio","password_reset_success":"Mot de passe réinitialisé avec succès","scan_qr_code":"Scanner le code QR","self_topic_comment":"Notes, messages, liens, fichiers sauvegardés","self_topic_name":"Messages sauvegardés","message_not_found":"message introuvable","message_deleted":"message supprimé","alias_editing_placeholder":"Alias (facultatif)","label_alias":"Alias:","alias_already_taken":"(déjà utilisé)","alias_invalid":"(invalide)","label_alias_edit":"Alias","select_country":"Sélectionner un pays","text_copied":"Copié dans le presse-papiers","color_schema_dark":"Sombre","color_schema_light":"Clair","color_schema_system":"Thème du système","label_color_schema":"Thème :","label_text_size":"Taille du texte :","incognito_mode_description":"Masquer votre statut en ligne et les indicateurs de frappe.","send_command":"Envoyer avec {key}","send_command_explained":"Appuyez sur Entrée pour une nouvelle ligne","send_plain":"Envoyer avec Entrée","send_plain_explained":"Appuyez sur Shift + Entrée pour une nouvelle ligne","sidepanel_title_acc_general":"Général","label_keyboard":"Clavier :","pin_chat":"Épingler","unpin_chat":"Désépingler","subscriber_count":"{count, plural, one {{count, number} abonné} other {{count, number} abonnés}}","label_member_count":"Membres :","label_subscriber_count":"Abonnés :","member_count":"{count, plural, one {{count, number} membre} other {{count, number} membres}}","tabtitle_image":"image","tabtitle_pattern":"motif","button_restore":"Restaurer par défaut","wallpapers":"Fonds d'écran","label_blur_wallpaper":"Flou :","label_scan_id":"Scanner mon ID :","unknown_name":"Inconnu","save_action":"Enregistrer","cannot_parse_vcard":"Impossible d'analyser le fichier vCard.","chat_now":"Discuter","find_user":"Rechercher","label_contact_card":"Carte de contact","label_contacts":"Contacts","add_members_prompt":"ajouter des membres"} \ No newline at end of file diff --git a/src/i18n.min/it.json b/src/i18n.min/it.json index ed4740f8..3a4d818f 100644 --- a/src/i18n.min/it.json +++ b/src/i18n.min/it.json @@ -1 +1 @@ -{"action_block_contact":"Bloccare contatto","action_cancel":"cancella","action_clear_messages":"Cancella messaggi","action_delete_messages":"Cancella messaggi per tutti","action_leave_chat":"Lascia la conversazione","action_report_chat":"Report conversazione","archived_contacts":"Contatti archiviati ({count})","badge_danger":"Sospetto","badge_owner":"propietario","badge_staff":"Amministrazione","badge_verified":"Verificato","badge_you":"tu","block_contact_warning":"Sei sicuro di bloccare questo contatto?","blocked_contacts_link":"Contatti bloccati ({count})","button_add_members":"Aggiungi membri","button_cancel":"Cancella","button_confirm":"Conferma","button_create":"Crea","button_delete_account":"Elimina account","button_edit":"Editare","button_logout":"Fine sessione","button_ok":"OK","button_reset":"Reset","button_send_request":"Invia richiesta","button_sign_in":"Entrare","button_sign_up":"Registrazione","button_subscribe":"Sottoscrivi","button_update":"Aggiorna","cannot_initiate_file_upload":"Non è possibile iniziare il caricamento dell'archivio.","channel":"canale","channel_prompt":"Questo è un canale","chat_invitation":"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?","chat_invitation_accept":"Accettare","chat_invitation_block":"Bloccare","chat_invitation_ignore":"Ignorare","clear_messages_warning":"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.","code_doesnot_match":"Il codice non conicide","contacts_not_found":"Non hai chats
¯∖_(ツ)_/¯","contacts_not_found_short":"Nessun contatto coincide con ''{query}''","credential_email_prompt":"La tua mail di registrazione","delete_account":"Elimina l'account","delete_account_warning":"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.","delete_messages_warning":"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.","download_action":"Scarica","drafty_attachment":"Allegato","drafty_form":"Form:","drafty_image":"Immagine","email_dative":"posta elettronica","email_prompt":"Posta elettronica, per es. mario@example.com","enable_peers_messaging":"Abilitare","enter_confirmation_code_prompt":"Inserire il codice di conferma {method}:","error_invalid_id":"ID non valido","file_attachment_too_large":"La grandezza del file {size} eccede il limite di {limit}.","forgot_password_link":"Hai dimenticato la password?","full_name_prompt":"Nome completo, per es. Mario Rossi","granted_permissions":"Garantito","group_has_no_members":"Non hai membri","group_user_id_prompt":"ID del gruppo o dell'utente","image_caption_prompt":"Aggiungi un'immagine","invalid_content":"contenuto non valido","invalid_security_token":"Token di sicurezza invalido","label_client":"Cliente:","label_content_type":"Tipo di contenuto:","label_default_access_mode":"Modalità di accesso predefinito:","label_file_name":"Nome del file:","label_group_members":"Membri del gruppo:","label_incognito_mode":"Modalità incognito:","label_message_sound":"Suono del messaggio:","label_muting_topic":"Silenziato:","label_other_user":"Altri","label_password":"Password","label_permissions":"Permessi:","label_private":"Commento privato","label_push_notifications":"Allarmi di notifica:","label_push_notifications_disabled":"Allarmi di notifica (richiede HTTPS):","label_reset_password":"Invia una mail per il reset della password:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Indirizzo del server:","label_server_to_use":"Server da usare:","label_size":"Grandezza:","label_topic_name":"Nome dell'argomento","label_user_contacts":"Contatti","label_user_id":"ID:","label_wire_transport":"Tipo di Trasporto:","label_you":"Tu:","label_your_name":"Il tuo nome","label_your_permissions":"I tuoi permessi:","last_seen_timestamp":"Ultimo visto","leave_chat_warning":"Sei sicuro di voler lasciare questa conversazione?","link_contact_us":"Contattaci","link_privacy_policy":"Política della privacy","link_terms_of_service":"Termini d'uso del servizio","login_prompt":"Nome dell'utente","menu_item_archive_topic":"Archivia","menu_item_block":"Bloccare","menu_item_clear_messages":"Cancella i messaggi","menu_item_clear_messages_for_all":"Cancella per tutti","menu_item_delete":"Elimina","menu_item_delete_for_all":"Elimina per tutti","menu_item_delete_topic":"Eliminare","menu_item_edit_permissions":"Modifica permessi","menu_item_info":"Informazioni","menu_item_member_delete":"Eliminare","menu_item_mute":"Silenziare","menu_item_restore_topic":"Ripristinare","menu_item_send_retry":"Riprova","menu_item_unblock":"Sblocca","menu_item_unmute":"Riattiva le notifiche","message_sending":"invio...","message_sending_failed":"non è possibile inviare il messaggio","messages_not_readable":"nessun accesso ai messaggi","messaging_disabled_prompt":"L'invio dei messaggi è disabilitato","more_online_members":"+{overflow} e oltre","new_message_prompt":"Nuovo messaggio","new_password_placeholder":"Inserire nuova password","no_connection":"Nessuna connessione","no_contacts":"Non ci sono contatti :-(","numeric_confirmation_code_prompt":"Solo numeri","online_now":"in linea","password_prompt":"Password","password_unchanged_prompt":"Non è cambiata","peers_messaging_disabled":"I messaggi punto punto sono disabilitati.","permission_admin":"Approvare ({val})","permission_delete":"Eliminare ({val})","permission_join":"Unisci ({val})","permission_owner":"Propietario ({val})","permission_pres":"Notifica arrivata ({val})","permission_read":"Leggi ({val})","permission_share":"Condividi ({val})","permission_write":"Scrivi ({val})","phone_dative":"telefono","private_editing_placeholder":"Visibile solo a te","push_init_failed":"Non è possibile inizializzare le notifiche push","reconnect_countdown":"Disconnesso. Riconnessione in {seconds}…","reconnect_now":"Riprovare","reload_update":"Ricaricare","report_chat_warning":"Sei sicuro di bloccare e denunciare questa conversazione?","requested_permissions":"Sollecito","save_attachment":"salva","search_for_contacts":"Usa la ricerca per trovare i contatti","search_no_results":"La ricerca non ha trovato nessun risultato","search_placeholder":"Elenca come: email:mario@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifiche","sidepanel_title_acc_support":"Supporto","sidepanel_title_account_settings":"Impostazioni dell'account","sidepanel_title_archive":"Chats archiviate","sidepanel_title_blocked":"Chats bloccate","sidepanel_title_cred":"Conferma le credenziali","sidepanel_title_login":"Entra","sidepanel_title_newtpk":"Comincia una Nuova Chat","sidepanel_title_register":"Creare Account","sidepanel_title_reset":"Resetta la Password","sidepanel_title_settings":"Impostazioni","stay_logged_in":"Rimani loggato","tabtitle_find_user":"cerca","tabtitle_group_by_id":"per ID","tabtitle_new_group":"nuovo gruppo","tags_editor_no_tags":"Aggiungi alcune etichette","tags_not_found":"Non ci sono etichette definite. Aggiungine alcune.","title_all_contacts":"Tutti i contatti","title_group_members":"Membri del gruppo","title_manage_tags":"Gestisci","title_not_found":"Non trovato","title_permissions":"Permessi","title_tag_manager":"Etichette (trova e scopri)","topic_block_warning":"Sei sicuro di voler bloccare questa conversazione?","topic_delete_warning":"Sei sicuro di voler eliminare questa conversazione?","topic_name_editing_placeholder":"Nome del gruppo","unnamed_topic":"Senza nome","update_available":"Aggiornamento disponibile.","upload_finishing":"sto terminando...","user_not_found":"Non trovato","description_editing_placeholder":"Descrizione (opzionale)","label_description":"Descrizione","button_security":"Sicurezza","panel_title_crop":"Trascina per aggiustare","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Sicurezza","panel_title_info":"Informazione","permissions_anonymous":"Anonimo","permissions_authenticated":"Autenticato","topic_delete":"Elimina la conversazione","permissions_user":"Permessi dell'utente","password_reset_email_sent":"Una mail con il codice di sicurezza è stata inviata.","label_unarchive_topic":"Archiviato:","menu_item_reply":"Replica","menu_item_forward":"Reinvia","forward_to":"Reinvia a","forward_to_search_placeholder":"Cerca i contatti","label_new_password":"Nuova password","drafty_unknown":"Non supportato","calls_incoming":"Chiamata in arrivo","calls_outgoing":"Chiamata in uscita","calls_you_label":"Tu","menu_item_video_call":"Videochiamata","already_in_call":"Sei già in una chiamata in uscita!","call_cancelled":"cancellata","call_missed":"persa","call_declined":"rifiutata","call_disconnected":"disconnessa","label_use_secure_connection":"Usa una connessione sicura","cred_confirmed_successfully":"Confermato con successo","menu_item_edit":"Modifica","editing_message":"Edita","message_edited_marker":", editando","icon_title_add_image":"Aggiungi immagine","icon_title_attach_file":"Allega un file","icon_title_delete":"Eliminare la registrazione","icon_title_pause":"Riproduzione in pausa","icon_title_play":"Riproduci la registrazione","icon_title_record_voice":"Registra un messaggio vocale","icon_title_resume":"Riprendi la riproduzione","icon_title_send":"Inviare il messaggio","drag_file":"Trascina il file qui","drafty_video":"Registrazione video","call_in_progress":"avanzamento","menu_item_audio_call":"Chiamata","unrecognized_video_format":"Il formato di questo video non è riconosciuto","loading_note":"Caricando...","password_i_have_code":"Ho un codice","label_reset_password_tel":"Invia un SMS per resettare la password","mobile_phone_number":"Numero di telefono cellulare","password_reset_sms_sent":"Un SMS con il codice di sicurezza è stato inviato.","mobile_number_required":"E' richiesto il numero di telefono cellulare","current_email":"Email attuale","current_phone":"Numero di telefono attuale","new_email":"Nuova email","new_phone_number":"Nuovo numero di telefono","change_email":"Cambiare l'indirizzo di posta elettronica","change_phone":"Cambiare numero di telefono","call_busy":"occupato","pin_message":"Fissare","unpin_message":"Rimuovere","failed_to_init_audio":"Non è possibile cominciare la registrazione audio","password_reset_success":"Il reset della password è avvenuto con successo","scan_qr_code":"Scansionare il codice QR","self_topic_comment":"Note, messaggi, links e archivi, sono salvati per i posteri","self_topic_name":"Messaggi salvati","message_not_found":"Messaggi non trovati","message_deleted":"Messaggi eliminati","alias_editing_placeholder":"Alias (opzionale)","label_alias":"Alias:","alias_already_taken":"(già utilizzato)","alias_invalid":"(invalido)","label_alias_edit":"Alias","select_country":"Seleziona la nazione","text_copied":"Copia nella clipboard","incognito_mode_description":"Nascondi il tuo stato online e gli indicatori di digitazione.","send_command":"Invia con {key}","send_command_explained":"Premi Invio per una nuova riga","send_plain":"Invia con Invio","send_plain_explained":"Premi Shift + Invio per una nuova riga","sidepanel_title_acc_general":"Generale","label_keyboard":"Tastiera:","color_schema_dark":"Scuro","color_schema_light":"Chiaro","color_schema_system":"Predefinito del sistema","label_color_schema":"Tema:","label_text_size":"Dimensione testo:","pin_chat":"Fissa","unpin_chat":"Sblocca","subscriber_count":"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}","label_member_count":"Membri:","label_subscriber_count":"Iscritti:","member_count":"{count, plural, one {{count, number} membro} other {{count, number} membri}}","tabtitle_image":"immagine","tabtitle_pattern":"motivo","button_restore":"Ripristina predefinito","wallpapers":"Sfondi","label_blur_wallpaper":"Sfocatura:","label_scan_id":"Scansiona il mio ID:"} \ No newline at end of file +{"action_block_contact":"Bloccare contatto","action_cancel":"cancella","action_clear_messages":"Cancella messaggi","action_delete_messages":"Cancella messaggi per tutti","action_leave_chat":"Lascia la conversazione","action_report_chat":"Report conversazione","archived_contacts":"Contatti archiviati ({count})","badge_danger":"Sospetto","badge_owner":"propietario","badge_staff":"Amministrazione","badge_verified":"Verificato","badge_you":"tu","block_contact_warning":"Sei sicuro di bloccare questo contatto?","blocked_contacts_link":"Contatti bloccati ({count})","button_add_members":"Aggiungi membri","button_cancel":"Cancella","button_confirm":"Conferma","button_create":"Crea","button_delete_account":"Elimina account","button_edit":"Editare","button_logout":"Fine sessione","button_ok":"OK","button_reset":"Reset","button_send_request":"Invia richiesta","button_sign_in":"Entrare","button_sign_up":"Registrazione","button_subscribe":"Sottoscrivi","button_update":"Aggiorna","cannot_initiate_file_upload":"Non è possibile iniziare il caricamento dell'archivio.","channel":"canale","channel_prompt":"Questo è un canale","chat_invitation":"Sei invitato a partecipare ad una nuova chat. Vuoi farlo?","chat_invitation_accept":"Accettare","chat_invitation_block":"Bloccare","chat_invitation_ignore":"Ignorare","clear_messages_warning":"Sei sicuro di voler cancellare tutti i messaggi? Questa azione è irreversibile.","code_doesnot_match":"Il codice non conicide","contacts_not_found":"Non hai chats\n¯∖_(ツ)_/¯","contacts_not_found_short":"Nessun contatto coincide con ''{query}''","credential_email_prompt":"La tua mail di registrazione","delete_account":"Elimina l'account","delete_account_warning":"Sei sicuro di voler cancellare il tuo account? Questa azione è irreversibile.","delete_messages_warning":"Sei sicuro di voler cancellare tutti i messaggi per tutti? Questa azione è irreversibile.","download_action":"Scarica","drafty_attachment":"Allegato","drafty_form":"Form:","drafty_image":"Immagine","email_dative":"posta elettronica","email_prompt":"Posta elettronica, per es. mario@example.com","enable_peers_messaging":"Abilitare","enter_confirmation_code_prompt":"Inserire il codice di conferma {method}:","error_invalid_id":"ID non valido","file_attachment_too_large":"La grandezza del file {size} eccede il limite di {limit}.","forgot_password_link":"Hai dimenticato la password?","full_name_prompt":"Nome completo, per es. Mario Rossi","granted_permissions":"Garantito","group_has_no_members":"Non hai membri","group_user_id_prompt":"ID del gruppo o dell'utente","image_caption_prompt":"Aggiungi un'immagine","invalid_content":"contenuto non valido","invalid_security_token":"Token di sicurezza invalido","label_client":"Cliente:","label_content_type":"Tipo di contenuto:","label_default_access_mode":"Modalità di accesso predefinito:","label_file_name":"Nome del file:","label_group_members":"Membri del gruppo:","label_incognito_mode":"Modalità incognito:","label_message_sound":"Suono del messaggio:","label_muting_topic":"Silenziato:","label_other_user":"Altri","label_password":"Password","label_permissions":"Permessi:","label_private":"Commento privato","label_push_notifications":"Allarmi di notifica:","label_push_notifications_disabled":"Allarmi di notifica (richiede HTTPS):","label_reset_password":"Invia una mail per il reset della password:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Indirizzo del server:","label_server_to_use":"Server da usare:","label_size":"Grandezza:","label_topic_name":"Nome dell'argomento","label_user_contacts":"Contatti","label_user_id":"ID:","label_wire_transport":"Tipo di Trasporto:","label_you":"Tu:","label_your_name":"Il tuo nome","label_your_permissions":"I tuoi permessi:","last_seen_timestamp":"Ultimo visto","leave_chat_warning":"Sei sicuro di voler lasciare questa conversazione?","link_contact_us":"Contattaci","link_privacy_policy":"Política della privacy","link_terms_of_service":"Termini d'uso del servizio","login_prompt":"Nome dell'utente","menu_item_archive_topic":"Archivia","menu_item_block":"Bloccare","menu_item_clear_messages":"Cancella i messaggi","menu_item_clear_messages_for_all":"Cancella per tutti","menu_item_delete":"Elimina","menu_item_delete_for_all":"Elimina per tutti","menu_item_delete_topic":"Eliminare","menu_item_edit_permissions":"Modifica permessi","menu_item_info":"Informazioni","menu_item_member_delete":"Eliminare","menu_item_mute":"Silenziare","menu_item_restore_topic":"Ripristinare","menu_item_send_retry":"Riprova","menu_item_unblock":"Sblocca","menu_item_unmute":"Riattiva le notifiche","message_sending":"invio...","message_sending_failed":"non è possibile inviare il messaggio","messages_not_readable":"nessun accesso ai messaggi","messaging_disabled_prompt":"L'invio dei messaggi è disabilitato","more_online_members":"+{overflow} e oltre","new_message_prompt":"Nuovo messaggio","new_password_placeholder":"Inserire nuova password","no_connection":"Nessuna connessione","no_contacts":"Non ci sono contatti :-(","numeric_confirmation_code_prompt":"Solo numeri","online_now":"in linea","password_prompt":"Password","password_unchanged_prompt":"Non è cambiata","peers_messaging_disabled":"I messaggi punto punto sono disabilitati.","permission_admin":"Approvare ({val})","permission_delete":"Eliminare ({val})","permission_join":"Unisci ({val})","permission_owner":"Propietario ({val})","permission_pres":"Notifica arrivata ({val})","permission_read":"Leggi ({val})","permission_share":"Condividi ({val})","permission_write":"Scrivi ({val})","phone_dative":"telefono","private_editing_placeholder":"Visibile solo a te","push_init_failed":"Non è possibile inizializzare le notifiche push","reconnect_countdown":"Disconnesso. Riconnessione in {seconds}…","reconnect_now":"Riprovare","reload_update":"Ricaricare","report_chat_warning":"Sei sicuro di bloccare e denunciare questa conversazione?","requested_permissions":"Sollecito","save_attachment":"salva","search_for_contacts":"Usa la ricerca per trovare i contatti","search_no_results":"La ricerca non ha trovato nessun risultato","search_placeholder":"Elenca come: email:mario@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifiche","sidepanel_title_acc_support":"Supporto","sidepanel_title_account_settings":"Impostazioni dell'account","sidepanel_title_archive":"Chats archiviate","sidepanel_title_blocked":"Chats bloccate","sidepanel_title_cred":"Conferma le credenziali","sidepanel_title_login":"Entra","sidepanel_title_newtpk":"Comincia una Nuova Chat","sidepanel_title_register":"Creare Account","sidepanel_title_reset":"Resetta la Password","sidepanel_title_settings":"Impostazioni","stay_logged_in":"Rimani loggato","tabtitle_find_user":"cerca","tabtitle_group_by_id":"per ID","tabtitle_new_group":"nuovo gruppo","tags_editor_no_tags":"Aggiungi alcune etichette","tags_not_found":"Non ci sono etichette definite. Aggiungine alcune.","title_all_contacts":"Tutti i contatti","title_group_members":"Membri del gruppo","title_manage_tags":"Gestisci","title_not_found":"Non trovato","title_permissions":"Permessi","title_tag_manager":"Etichette (trova e scopri)","topic_block_warning":"Sei sicuro di voler bloccare questa conversazione?","topic_delete_warning":"Sei sicuro di voler eliminare questa conversazione?","topic_name_editing_placeholder":"Nome del gruppo","unnamed_topic":"Senza nome","update_available":"Aggiornamento disponibile.","upload_finishing":"sto terminando...","user_not_found":"Non trovato","description_editing_placeholder":"Descrizione (opzionale)","label_description":"Descrizione","button_security":"Sicurezza","panel_title_crop":"Trascina per aggiustare","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Sicurezza","panel_title_info":"Informazione","permissions_anonymous":"Anonimo","permissions_authenticated":"Autenticato","topic_delete":"Elimina la conversazione","permissions_user":"Permessi dell'utente","password_reset_email_sent":"Una mail con il codice di sicurezza è stata inviata.","label_unarchive_topic":"Archiviato:","menu_item_reply":"Replica","menu_item_forward":"Reinvia","forward_to":"Reinvia a","forward_to_search_placeholder":"Cerca i contatti","label_new_password":"Nuova password","drafty_unknown":"Non supportato","calls_incoming":"Chiamata in arrivo","calls_outgoing":"Chiamata in uscita","calls_you_label":"Tu","menu_item_video_call":"Videochiamata","already_in_call":"Sei già in una chiamata in uscita!","call_cancelled":"cancellata","call_missed":"persa","call_declined":"rifiutata","call_disconnected":"disconnessa","label_use_secure_connection":"Usa una connessione sicura","cred_confirmed_successfully":"Confermato con successo","menu_item_edit":"Modifica","editing_message":"Edita","message_edited_marker":", editando","icon_title_add_image":"Aggiungi immagine","icon_title_attach_file":"Allega un file","icon_title_delete":"Eliminare la registrazione","icon_title_pause":"Riproduzione in pausa","icon_title_play":"Riproduci la registrazione","icon_title_record_voice":"Registra un messaggio vocale","icon_title_resume":"Riprendi la riproduzione","icon_title_send":"Inviare il messaggio","drag_file":"Trascina il file qui","drafty_video":"Registrazione video","call_in_progress":"avanzamento","menu_item_audio_call":"Chiamata","unrecognized_video_format":"Il formato di questo video non è riconosciuto","loading_note":"Caricando...","password_i_have_code":"Ho un codice","label_reset_password_tel":"Invia un SMS per resettare la password","mobile_phone_number":"Numero di telefono cellulare","password_reset_sms_sent":"Un SMS con il codice di sicurezza è stato inviato.","mobile_number_required":"E' richiesto il numero di telefono cellulare","current_email":"Email attuale","current_phone":"Numero di telefono attuale","new_email":"Nuova email","new_phone_number":"Nuovo numero di telefono","change_email":"Cambiare l'indirizzo di posta elettronica","change_phone":"Cambiare numero di telefono","call_busy":"occupato","pin_message":"Fissare","unpin_message":"Rimuovere","failed_to_init_audio":"Non è possibile cominciare la registrazione audio","password_reset_success":"Il reset della password è avvenuto con successo","scan_qr_code":"Scansionare il codice QR","self_topic_comment":"Note, messaggi, links e archivi, sono salvati per i posteri","self_topic_name":"Messaggi salvati","message_not_found":"Messaggi non trovati","message_deleted":"Messaggi eliminati","alias_editing_placeholder":"Alias (opzionale)","label_alias":"Alias:","alias_already_taken":"(già utilizzato)","alias_invalid":"(invalido)","label_alias_edit":"Alias","select_country":"Seleziona la nazione","text_copied":"Copia nella clipboard","incognito_mode_description":"Nascondi il tuo stato online e gli indicatori di digitazione.","send_command":"Invia con {key}","send_command_explained":"Premi Invio per una nuova riga","send_plain":"Invia con Invio","send_plain_explained":"Premi Shift + Invio per una nuova riga","sidepanel_title_acc_general":"Generale","label_keyboard":"Tastiera:","color_schema_dark":"Scuro","color_schema_light":"Chiaro","color_schema_system":"Predefinito del sistema","label_color_schema":"Tema:","label_text_size":"Dimensione testo:","pin_chat":"Fissa","unpin_chat":"Sblocca","subscriber_count":"{count, plural, one {{count, number} iscritto} other {{count, number} iscritti}}","label_member_count":"Membri:","label_subscriber_count":"Iscritti:","member_count":"{count, plural, one {{count, number} membro} other {{count, number} membri}}","tabtitle_image":"immagine","tabtitle_pattern":"motivo","button_restore":"Ripristina predefinito","wallpapers":"Sfondi","label_blur_wallpaper":"Sfocatura:","label_scan_id":"Scansiona il mio ID:","unknown_name":"Sconosciuto","save_action":"Salva","cannot_parse_vcard":"Impossibile analizzare il file vCard.","chat_now":"Chatta","find_user":"Cerca","label_contact_card":"Scheda contatto","label_contacts":"Contatti","add_members_prompt":"aggiungi membri"} \ No newline at end of file diff --git a/src/i18n.min/ko.json b/src/i18n.min/ko.json index 4b617bfc..47b44073 100644 --- a/src/i18n.min/ko.json +++ b/src/i18n.min/ko.json @@ -1 +1 @@ -{"action_block_contact":"연락차단","action_cancel":"취소","action_clear_messages":"메시지지우기","action_delete_messages":"모든메시지지우기","action_leave_chat":"대화나누기","action_report_chat":"대화기록","archived_contacts":"보관된연락처({수})","badge_danger":"의심 많은","badge_owner":"소유자","badge_staff":"직원 관리하에","badge_verified":"확인 됨","badge_you":"당신","block_contact_warning":"이연락처를차단하시겠습니까?","blocked_contacts_link":"차단된연락처({수})","button_add_members":"회원추가","button_cancel":"취소","button_confirm":"확인","button_create":"작성","button_delete_account":"계정삭제","button_edit":"편집","button_logout":"로그아웃","button_ok":"OK","button_reset":"재설정","button_send_request":"요청보내기","button_sign_in":"로그인","button_sign_up":"가입","button_subscribe":"구독","button_update":"업데이트","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","channel":"채널","channel_prompt":"이 채널입니다","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_block":"차단","chat_invitation_ignore":"무시","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","code_doesnot_match":"코드가일치하지않습니다","contacts_not_found":"채팅이없습니다
¯∖_(ツ)_/¯","contacts_not_found_short":"'{문의}'와일치하는연락처가없습니다.","credential_email_prompt":"등록이메일","delete_account":"계정삭제","delete_account_warning":"계정을삭제하시겠습니까?실행취소할수없습니다.","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","download_action":"다운로드","drafty_attachment":"부착","drafty_form":"형태:","drafty_image":"이미지","email_dative":"이메일","email_prompt":"이메일(예:hong@example.com)","enable_peers_messaging":"활성화","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","error_invalid_id":"잘못된ID","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","forgot_password_link":"비밀번호를잊으셨습니까?","full_name_prompt":"전체이름(예:홍길동)","granted_permissions":"승낙하다","group_has_no_members":"회원없음","group_user_id_prompt":"그룹또는사용자ID","image_caption_prompt":"이미지설명","invalid_content":"잘못된내용","invalid_security_token":"유효하지않은보안토큰","label_client":"클라이언트: ","label_content_type":"컨텐츠유형: ","label_default_access_mode":"기본액세스모드: ","label_file_name":"파일이름: ","label_group_members":"그룹회원: ","label_incognito_mode":"시크릿모드: ","label_message_sound":"메시지소리: ","label_muting_topic":"음소거: ","label_other_user":"기타","label_password":"비밀번호","label_permissions":"권한: ","label_private":"개인코멘트","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_reset_password":"비밀번호재설정이메일보내기: ","label_sdk":"SDK:","label_server":"서버: ","label_server_address":"서버주소: ","label_server_to_use":"사용할서버:","label_size":"크기: ","label_topic_name":"이름","label_user_contacts":"연락처","label_user_id":"ID:","label_wire_transport":"와이어수송:","label_you":"당신: ","label_your_name":"이름","label_your_permissions":"권한: ","last_seen_timestamp":"마지막으로본","leave_chat_warning":"이대화를나가시겠습니까?","link_contact_us":"문의처","link_privacy_policy":"개인정보보호정책","link_terms_of_service":"서비스약관","login_prompt":"로그인","menu_item_archive_topic":"보관","menu_item_block":"차단","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_delete_topic":"삭제","menu_item_edit_permissions":"편집권한","menu_item_info":"정보","menu_item_member_delete":"제거","menu_item_mute":"음소거","menu_item_restore_topic":"복원","menu_item_send_retry":"다시시도","menu_item_unblock":"차단해제","menu_item_unmute":"음소거해제","message_sending":"보내기...","message_sending_failed":"실패","messages_not_readable":"메시지에 액세스 할 수 없습니다","messaging_disabled_prompt":"메시지비활성화","more_online_members":"+{넘침}더보기","new_message_prompt":"새메시지","new_password_placeholder":"새비밀번호입력","no_connection":"연결없음","no_contacts":"연락처가없습니다 (._.)","numeric_confirmation_code_prompt":"숫자만","online_now":"현재접속중","password_prompt":"비밀번호","password_unchanged_prompt":"변경되지않음","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","permission_admin":"승인({val})","permission_delete":"삭제({val})","permission_join":"참여({val})","permission_owner":"소유자({val})","permission_pres":"알림받기({val})","permission_read":"읽기({val})","permission_share":"공유({val})","permission_write":"쓰기({val})","phone_dative":"전화","private_editing_placeholder":"나만볼수있습니다","push_init_failed":"푸시알림을초기화하지못했습니다","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","reload_update":"재로드","report_chat_warning":"이대화를차단하고기록하시겠습니까?","requested_permissions":"요청","save_attachment":"저장","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_account_settings":"계정설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","sidepanel_title_cred":"자격증명확인","sidepanel_title_login":"로그인","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_register":"계정만들기","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_settings":"설정","stay_logged_in":"로그인상태유지","tabtitle_find_user":"찾기","tabtitle_group_by_id":"id로","tabtitle_new_group":"새그룹","tags_editor_no_tags":"일부태그추가","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","title_all_contacts":"모든연락처","title_group_members":"그룹구성원","title_manage_tags":"관리","title_not_found":"찾을수없음","title_permissions":"권한","title_tag_manager":"태그(사용자검색)","topic_block_warning":"이대화를차단하시겠습니까?","topic_delete_warning":"이대화를삭제하시겠습니까?","topic_name_editing_placeholder":"그룹의자유형이름","unnamed_topic":"이름없는","update_available":"업데이트가능.","upload_finishing":"마무리...","user_not_found":"찾을수없음","description_editing_placeholder":"설명(선택 사항)","label_description":"설명","button_security":"보안","panel_title_crop":"드래그하여 조정","panel_title_general":"일반","panel_title_members":"구성원","panel_title_security":"보안","panel_title_info":"정보","permissions_anonymous":"익명","permissions_authenticated":"인증됨","topic_delete":"채팅 삭제","permissions_user":"사용자 권한","password_reset_email_sent":"보안 코드가 포함된 이메일이 전송되었습니다.","label_unarchive_topic":"보관됨:","menu_item_reply":"회신하다","menu_item_forward":"리디렉션","forward_to":"메시지를 리디렉션","forward_to_search_placeholder":"연락처 검색","label_new_password":"새 비밀번호","drafty_unknown":"지원되지 않음","calls_incoming":"수신 전화","calls_outgoing":"발신 전화","calls_you_label":"너","menu_item_video_call":"영상 통화","already_in_call":"당신은 이미 말하고 있습니다!","call_cancelled":"취소 된","call_missed":"부재중","call_declined":"통화 거부","call_disconnected":"연결 끊김","label_use_secure_connection":"보안 연결 사용","cred_confirmed_successfully":"성공적으로 확인됨","menu_item_edit":"편집","editing_message":"교정하다","message_edited_marker":" 수정됨","icon_title_add_image":"이미지 추가","icon_title_attach_file":"파일을 첨부","icon_title_delete":"녹음 삭제","icon_title_pause":"재생 일시 중지","icon_title_play":"녹음 재생","icon_title_record_voice":"음성 메시지 녹음","icon_title_resume":"재생 재개","icon_title_send":"문자 보내","drag_file":"여기로 파일 드래그","drafty_video":"녹화","call_in_progress":"통화 중","menu_item_audio_call":"전화","unrecognized_video_format":"이 동영상의 형식을 인식할 수 없습니다.","loading_note":"로드 중...","password_i_have_code":"코드가 있습니다","label_reset_password_tel":"비밀번호 재설정을 위해 SMS 보내기","mobile_phone_number":"휴대전화 번호","password_reset_sms_sent":"보안 코드가 포함된 문자 메시지가 전송되었습니다.","mobile_number_required":"휴대전화 번호 필요","current_email":"현재 이메일","current_phone":"현재 전화번호","new_email":"새 이메일 주소","new_phone_number":"새 전화번호","change_email":"이메일 변경","change_phone":"전화번호 변경","call_busy":"바쁘다","pin_message":"고정","unpin_message":"고정 해제","failed_to_init_audio":"오디오 녹음 초기화 실패","password_reset_success":"비밀번호 재설정 성공","scan_qr_code":"QR 코드 스캔","self_topic_comment":"후세를 위해 저장된 메모, 메시지, 링크, 파일","self_topic_name":"저장된 메시지","message_not_found":"메시지를 찾을 수 없음","message_deleted":"메시지 삭제됨","alias_editing_placeholder":"별칭(선택 사항)","label_alias":"별칭:","alias_already_taken":"(이미 취함)","alias_invalid":"(잘못된)","label_alias_edit":"별칭","select_country":"국가 선택","text_copied":"클립보드에 복사됨","color_schema_dark":"어둡게","color_schema_light":"밝게","color_schema_system":"시스템 기본값","label_color_schema":"테마:","label_text_size":"텍스트 크기:","incognito_mode_description":"온라인 상태와 입력 표시기를 숨깁니다.","send_command":"{key}로 전송","send_command_explained":"새 줄로 이동하려면 Enter를 누르세요","send_plain":"Enter로 전송","send_plain_explained":"새 줄로 이동하려면 Shift + Enter를 누르세요","sidepanel_title_acc_general":"일반","label_keyboard":"키보드:","pin_chat":"고정","unpin_chat":"고정 해제","subscriber_count":"{count, plural, other {구독자 {count, number}명}}","label_member_count":"멤버:","label_subscriber_count":"구독자:","member_count":"{count, plural, other {멤버 {count, number}명}}","tabtitle_image":"이미지","tabtitle_pattern":"패턴","button_restore":"기본값 복원","wallpapers":"배경화면","label_blur_wallpaper":"흐림:","label_scan_id":"내 ID 스캔:"} \ No newline at end of file +{"action_block_contact":"연락차단","action_cancel":"취소","action_clear_messages":"메시지지우기","action_delete_messages":"모든메시지지우기","action_leave_chat":"대화나누기","action_report_chat":"대화기록","archived_contacts":"보관된연락처({수})","badge_danger":"의심 많은","badge_owner":"소유자","badge_staff":"직원 관리하에","badge_verified":"확인 됨","badge_you":"당신","block_contact_warning":"이연락처를차단하시겠습니까?","blocked_contacts_link":"차단된연락처({수})","button_add_members":"회원추가","button_cancel":"취소","button_confirm":"확인","button_create":"작성","button_delete_account":"계정삭제","button_edit":"편집","button_logout":"로그아웃","button_ok":"OK","button_reset":"재설정","button_send_request":"요청보내기","button_sign_in":"로그인","button_sign_up":"가입","button_subscribe":"구독","button_update":"업데이트","cannot_initiate_file_upload":"파일업로드를시작할수없습니다.","channel":"채널","channel_prompt":"이 채널입니다","chat_invitation":"새로운대화를시작하도록초대되었습니다.무엇을하시겠습니까?","chat_invitation_accept":"수락","chat_invitation_block":"차단","chat_invitation_ignore":"무시","clear_messages_warning":"모든메시지를지우시겠습니까?실행취소할수없습니다.","code_doesnot_match":"코드가일치하지않습니다","contacts_not_found":"채팅이없습니다\n¯∖_(ツ)_/¯","contacts_not_found_short":"'{문의}'와일치하는연락처가없습니다.","credential_email_prompt":"등록이메일","delete_account":"계정삭제","delete_account_warning":"계정을삭제하시겠습니까?실행취소할수없습니다.","delete_messages_warning":"모든사람의모든메시지를삭제하시겠습니까?실행취소할수없습니다.","download_action":"다운로드","drafty_attachment":"부착","drafty_form":"형태:","drafty_image":"이미지","email_dative":"이메일","email_prompt":"이메일(예:hong@example.com)","enable_peers_messaging":"활성화","enter_confirmation_code_prompt":"{방법}으로보낸확인코드를입력하십시오:","error_invalid_id":"잘못된ID","file_attachment_too_large":"파일크기{크기}이(가){제한}제한을초과합니다.","forgot_password_link":"비밀번호를잊으셨습니까?","full_name_prompt":"전체이름(예:홍길동)","granted_permissions":"승낙하다","group_has_no_members":"회원없음","group_user_id_prompt":"그룹또는사용자ID","image_caption_prompt":"이미지설명","invalid_content":"잘못된내용","invalid_security_token":"유효하지않은보안토큰","label_client":"클라이언트: ","label_content_type":"컨텐츠유형: ","label_default_access_mode":"기본액세스모드: ","label_file_name":"파일이름: ","label_group_members":"그룹회원: ","label_incognito_mode":"시크릿모드: ","label_message_sound":"메시지소리: ","label_muting_topic":"음소거: ","label_other_user":"기타","label_password":"비밀번호","label_permissions":"권한: ","label_private":"개인코멘트","label_push_notifications":"통지경보: ","label_push_notifications_disabled":"통지경보(HTTPS필요): ","label_reset_password":"비밀번호재설정이메일보내기: ","label_sdk":"SDK:","label_server":"서버: ","label_server_address":"서버주소: ","label_server_to_use":"사용할서버:","label_size":"크기: ","label_topic_name":"이름","label_user_contacts":"연락처","label_user_id":"ID:","label_wire_transport":"와이어수송:","label_you":"당신: ","label_your_name":"이름","label_your_permissions":"권한: ","last_seen_timestamp":"마지막으로본","leave_chat_warning":"이대화를나가시겠습니까?","link_contact_us":"문의처","link_privacy_policy":"개인정보보호정책","link_terms_of_service":"서비스약관","login_prompt":"로그인","menu_item_archive_topic":"보관","menu_item_block":"차단","menu_item_clear_messages":"메시지지우기","menu_item_clear_messages_for_all":"모두지우기","menu_item_delete":"삭제","menu_item_delete_for_all":"모두삭제","menu_item_delete_topic":"삭제","menu_item_edit_permissions":"편집권한","menu_item_info":"정보","menu_item_member_delete":"제거","menu_item_mute":"음소거","menu_item_restore_topic":"복원","menu_item_send_retry":"다시시도","menu_item_unblock":"차단해제","menu_item_unmute":"음소거해제","message_sending":"보내기...","message_sending_failed":"실패","messages_not_readable":"메시지에 액세스 할 수 없습니다","messaging_disabled_prompt":"메시지비활성화","more_online_members":"+{넘침}더보기","new_message_prompt":"새메시지","new_password_placeholder":"새비밀번호입력","no_connection":"연결없음","no_contacts":"연락처가없습니다 (._.)","numeric_confirmation_code_prompt":"숫자만","online_now":"현재접속중","password_prompt":"비밀번호","password_unchanged_prompt":"변경되지않음","peers_messaging_disabled":"동료의메시지가비활성화되었습니다.","permission_admin":"승인({val})","permission_delete":"삭제({val})","permission_join":"참여({val})","permission_owner":"소유자({val})","permission_pres":"알림받기({val})","permission_read":"읽기({val})","permission_share":"공유({val})","permission_write":"쓰기({val})","phone_dative":"전화","private_editing_placeholder":"나만볼수있습니다","push_init_failed":"푸시알림을초기화하지못했습니다","reconnect_countdown":"연결이끊어졌습니다.다시연결하는중{초}…","reconnect_now":"지금시도","reload_update":"재로드","report_chat_warning":"이대화를차단하고기록하시겠습니까?","requested_permissions":"요청","save_attachment":"저장","search_for_contacts":"검색을사용하여연락처찾기","search_no_results":"검색결과가없습니다","search_placeholder":"email:alice@example.com,tel:17025550003...와같은목록","sidepanel_title_acc_notifications":"알림","sidepanel_title_acc_support":"지원","sidepanel_title_account_settings":"계정설정","sidepanel_title_archive":"보관된채팅","sidepanel_title_blocked":"차단된채팅","sidepanel_title_cred":"자격증명확인","sidepanel_title_login":"로그인","sidepanel_title_newtpk":"새채팅시작","sidepanel_title_register":"계정만들기","sidepanel_title_reset":"비밀번호재설정","sidepanel_title_settings":"설정","stay_logged_in":"로그인상태유지","tabtitle_find_user":"찾기","tabtitle_group_by_id":"id로","tabtitle_new_group":"새그룹","tags_editor_no_tags":"일부태그추가","tags_not_found":"태그가정의되지않았습니다.일부를추가하십시오.","title_all_contacts":"모든연락처","title_group_members":"그룹구성원","title_manage_tags":"관리","title_not_found":"찾을수없음","title_permissions":"권한","title_tag_manager":"태그(사용자검색)","topic_block_warning":"이대화를차단하시겠습니까?","topic_delete_warning":"이대화를삭제하시겠습니까?","topic_name_editing_placeholder":"그룹의자유형이름","unnamed_topic":"이름없는","update_available":"업데이트가능.","upload_finishing":"마무리...","user_not_found":"찾을수없음","description_editing_placeholder":"설명(선택 사항)","label_description":"설명","button_security":"보안","panel_title_crop":"드래그하여 조정","panel_title_general":"일반","panel_title_members":"구성원","panel_title_security":"보안","panel_title_info":"정보","permissions_anonymous":"익명","permissions_authenticated":"인증됨","topic_delete":"채팅 삭제","permissions_user":"사용자 권한","password_reset_email_sent":"보안 코드가 포함된 이메일이 전송되었습니다.","label_unarchive_topic":"보관됨:","menu_item_reply":"회신하다","menu_item_forward":"리디렉션","forward_to":"메시지를 리디렉션","forward_to_search_placeholder":"연락처 검색","label_new_password":"새 비밀번호","drafty_unknown":"지원되지 않음","calls_incoming":"수신 전화","calls_outgoing":"발신 전화","calls_you_label":"너","menu_item_video_call":"영상 통화","already_in_call":"당신은 이미 말하고 있습니다!","call_cancelled":"취소 된","call_missed":"부재중","call_declined":"통화 거부","call_disconnected":"연결 끊김","label_use_secure_connection":"보안 연결 사용","cred_confirmed_successfully":"성공적으로 확인됨","menu_item_edit":"편집","editing_message":"교정하다","message_edited_marker":" 수정됨","icon_title_add_image":"이미지 추가","icon_title_attach_file":"파일을 첨부","icon_title_delete":"녹음 삭제","icon_title_pause":"재생 일시 중지","icon_title_play":"녹음 재생","icon_title_record_voice":"음성 메시지 녹음","icon_title_resume":"재생 재개","icon_title_send":"문자 보내","drag_file":"여기로 파일 드래그","drafty_video":"녹화","call_in_progress":"통화 중","menu_item_audio_call":"전화","unrecognized_video_format":"이 동영상의 형식을 인식할 수 없습니다.","loading_note":"로드 중...","password_i_have_code":"코드가 있습니다","label_reset_password_tel":"비밀번호 재설정을 위해 SMS 보내기","mobile_phone_number":"휴대전화 번호","password_reset_sms_sent":"보안 코드가 포함된 문자 메시지가 전송되었습니다.","mobile_number_required":"휴대전화 번호 필요","current_email":"현재 이메일","current_phone":"현재 전화번호","new_email":"새 이메일 주소","new_phone_number":"새 전화번호","change_email":"이메일 변경","change_phone":"전화번호 변경","call_busy":"바쁘다","pin_message":"고정","unpin_message":"고정 해제","failed_to_init_audio":"오디오 녹음 초기화 실패","password_reset_success":"비밀번호 재설정 성공","scan_qr_code":"QR 코드 스캔","self_topic_comment":"후세를 위해 저장된 메모, 메시지, 링크, 파일","self_topic_name":"저장된 메시지","message_not_found":"메시지를 찾을 수 없음","message_deleted":"메시지 삭제됨","alias_editing_placeholder":"별칭(선택 사항)","label_alias":"별칭:","alias_already_taken":"(이미 취함)","alias_invalid":"(잘못된)","label_alias_edit":"별칭","select_country":"국가 선택","text_copied":"클립보드에 복사됨","color_schema_dark":"어둡게","color_schema_light":"밝게","color_schema_system":"시스템 기본값","label_color_schema":"테마:","label_text_size":"텍스트 크기:","incognito_mode_description":"온라인 상태와 입력 표시기를 숨깁니다.","send_command":"{key}로 전송","send_command_explained":"새 줄로 이동하려면 Enter를 누르세요","send_plain":"Enter로 전송","send_plain_explained":"새 줄로 이동하려면 Shift + Enter를 누르세요","sidepanel_title_acc_general":"일반","label_keyboard":"키보드:","pin_chat":"고정","unpin_chat":"고정 해제","subscriber_count":"{count, plural, other {구독자 {count, number}명}}","label_member_count":"멤버:","label_subscriber_count":"구독자:","member_count":"{count, plural, other {멤버 {count, number}명}}","tabtitle_image":"이미지","tabtitle_pattern":"패턴","button_restore":"기본값 복원","wallpapers":"배경화면","label_blur_wallpaper":"흐림:","label_scan_id":"내 ID 스캔:","unknown_name":"알 수 없음","save_action":"저장","cannot_parse_vcard":"vCard 파일을 파싱할 수 없습니다.","chat_now":"채팅","find_user":"찾기","label_contact_card":"연락처 카드","label_contacts":"연락처","add_members_prompt":"멤버 추가"} \ No newline at end of file diff --git a/src/i18n.min/ro.json b/src/i18n.min/ro.json index aeea28fb..dd8886c6 100644 --- a/src/i18n.min/ro.json +++ b/src/i18n.min/ro.json @@ -1 +1 @@ -{"action_block_contact":"Blochează contact","action_cancel":"anulează","action_clear_messages":"Șterge mesajele","action_delete_messages":"Șterge toate mesajele","action_leave_chat":"Ieși din conversație","action_report_chat":"Raportează conversația","archived_contacts":"Contacte arhivate ({count})","badge_danger":"Suspicios","badge_owner":"owner","badge_staff":"Administrare","badge_verified":"Verificat","badge_you":"tu","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","blocked_contacts_link":"Contact blocate ({count})","button_add_members":"Adaugă persoane","button_cancel":"Anulează","button_confirm":"Confirmă","button_create":"Creează","button_delete_account":"Șterge cont","button_edit":"Editează","button_logout":"Deconectare","button_ok":"OK","button_reset":"Resetează","button_send_request":"Trimite cerere","button_sign_in":"Conectează-te","button_sign_up":"Creează cont","button_subscribe":"Subscribe","button_update":"Actualizează","cannot_initiate_file_upload":"Nu se poate face încărcarea.","channel":"canal","channel_prompt":"Acesta este un canal","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_block":"Blochează","chat_invitation_ignore":"Ignoră","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","code_doesnot_match":"Codul furnizat nu este valid","contacts_not_found":"Nu ai contacte salvate
¯∖_(ツ)_/¯","contacts_not_found_short":"Niciun contact găsit după criteriile ''{query}''","credential_email_prompt":"Adresa de e-mail","delete_account":"Șterge contul","delete_account_warning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","download_action":"download","drafty_attachment":"Atasament","drafty_form":"Formă:","drafty_image":"Imagine","email_dative":"email","email_prompt":"Adresa de e-mail","enable_peers_messaging":"Activează","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","error_invalid_id":"ID Invalid","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","forgot_password_link":"Ți-ai uitat parola?","full_name_prompt":"Numele tău","granted_permissions":"Oferite","group_has_no_members":"În acest grup nu se află persoane","group_user_id_prompt":"Grup sau user ID","image_caption_prompt":"Titlul imaginii","invalid_content":"conținut invalid","invalid_security_token":"Codul de securitate este invalid","label_client":"Client:","label_content_type":"Tip conținut:","label_default_access_mode":"Default access mode:","label_file_name":"Nume fișier:","label_group_members":"Membrii grupului:","label_incognito_mode":"Mod incognito:","label_message_sound":"Sunet de mesaj:","label_muting_topic":"Mod silențios (muted):","label_other_user":"Altele","label_password":"Parola","label_permissions":"Permisiuni:","label_private":"Comentariu privat","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_reset_password":"Resetează parola:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Adresa serverului:","label_server_to_use":"Server de utilizat:","label_size":"Size:","label_topic_name":"Nume","label_user_contacts":"Contacte","label_user_id":"ID:","label_wire_transport":"Transportul legat:","label_you":"Tu:","label_your_name":"Numele tău","label_your_permissions":"Permisiuniile tale:","last_seen_timestamp":"Văzut ultima dată","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","link_contact_us":"Contactează-ne","link_privacy_policy":"Politica de Confidențialitate","link_terms_of_service":"Termenii Serviciului","login_prompt":"Conectează-te","menu_item_archive_topic":"Arhivează","menu_item_block":"Blochează","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_delete_topic":"Șterge","menu_item_edit_permissions":"Editează permisiuni","menu_item_info":"Info","menu_item_member_delete":"Șterge persoană","menu_item_mute":"Mute","menu_item_restore_topic":"Restabili","menu_item_send_retry":"Reîncearcă","menu_item_unblock":"Deblochează","menu_item_unmute":"Unmute","message_sending":"se trimite...","message_sending_failed":"eroare","messages_not_readable":"Mesajele nu pot fi citite","messaging_disabled_prompt":"Mesageria este dezactivată","more_online_members":"+{overflow} mai mult","new_message_prompt":"Mesaj nou","new_password_placeholder":"Introdu parolă","no_connection":"Nu există conexiune","no_contacts":"Nu ai contacte adăugate :-(","numeric_confirmation_code_prompt":"Doar cifre","online_now":"online acum","password_prompt":"Parola","password_unchanged_prompt":"Neschimbată","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","permission_admin":"Aprobare ({val})","permission_delete":"Ștergere ({val})","permission_join":"Participare ({val})","permission_owner":"Deținător ({val})","permission_pres":"Notificare ({val})","permission_read":"Citire ({val})","permission_share":"Distribuire ({val})","permission_write":"Scriere ({val})","phone_dative":"telefon","private_editing_placeholder":"Vizibil doar ție","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","reload_update":"Reîncarcă","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","requested_permissions":"Necesare","save_attachment":"salvează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","search_placeholder":"Caută după e-mail sau număr telefon...","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_login":"Conectează-te","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_register":"Creează Cont","sidepanel_title_reset":"Resetează Parola","sidepanel_title_settings":"Setări","stay_logged_in":"Rămâi conectat","tabtitle_find_user":"caută","tabtitle_group_by_id":"după id","tabtitle_new_group":"grup nou","tags_editor_no_tags":"Adaugă tag-uri","tags_not_found":"Niciun tag definit. Adaugă.","title_all_contacts":"Toate Contactele","title_group_members":"Persoanele din grup","title_manage_tags":"Administrează","title_not_found":"Nu a fost găsit","title_permissions":"Permisiuni","title_tag_manager":"Tag-uri (user discovery)","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","topic_name_editing_placeholder":"Numele grupului","unnamed_topic":"Nedenumit","update_available":"Actualizare disponibilă.","upload_finishing":"se încarcă...","user_not_found":"Utilizatorul nu a fost găsit","description_editing_placeholder":"Descriere (opțional)","label_description":"Descriere","button_security":"Securitate","panel_title_crop":"Trageți pentru a ajusta","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Securitate","panel_title_info":"Info","permissions_anonymous":"Anonim","permissions_authenticated":"Autentificat","topic_delete":"Ștergeți Chat","permissions_user":"Permisiunile utilizatorului","password_reset_email_sent":"A fost trimis un e-mail cu cod de securitate.","label_unarchive_topic":"Arhivat:","menu_item_reply":"A raspunde","menu_item_forward":"Redirecţiona","forward_to":"Redirecționați către","forward_to_search_placeholder":"Căutați contacte","label_new_password":"Parolă Nouă","drafty_unknown":"Neacceptat","calls_incoming":"Apel primit","calls_outgoing":"Apel efectuat","calls_you_label":"Tu","menu_item_video_call":"Apel video","already_in_call":"Deja vorbesti!","call_cancelled":"anulat","call_missed":"pierdut","call_declined":"refuzat","call_disconnected":"deconectat","label_use_secure_connection":"Utilizați conexiune securizată","cred_confirmed_successfully":"Confirmat cu succes","menu_item_edit":"Editează","editing_message":"Editare","message_edited_marker":", editat","icon_title_add_image":"Adauga imagine","icon_title_attach_file":"Ataseaza fisier","icon_title_delete":"Ștergeți înregistrarea","icon_title_pause":"Întrerupeți redarea","icon_title_play":"Redați înregistrarea","icon_title_record_voice":"Înregistrați mesajul vocal","icon_title_resume":"Reluați redarea","icon_title_send":"Trimite mesaj","drag_file":"Trageți fișierul aici","drafty_video":"Înregistrare video","call_in_progress":"în curs","menu_item_audio_call":"Apel","unrecognized_video_format":"Formatul acestui videoclip nu este recunoscut","loading_note":"Se încarcă...","password_i_have_code":"Am cod","label_reset_password_tel":"Trimite SMS pentru a reseta parola","mobile_phone_number":"Număr de telefon mobil","password_reset_sms_sent":"A fost trimis un mesaj text cu cod de securitate.","mobile_number_required":"Este necesar un număr de telefon mobil","current_email":"E-mail curent","current_phone":"Număr de telefon actual","new_email":"E-mail nou","new_phone_number":"Număr de telefon nou","change_email":"Schimbați adresa de e-mail","change_phone":"Schimbați numărul de telefon","call_busy":"ocupat","pin_message":"Fixați","unpin_message":"Anulați fixarea","failed_to_init_audio":"Inițializarea înregistrării audio a eșuat","password_reset_success":"Resetarea parolei cu succes","scan_qr_code":"Scanați codul QR","self_topic_comment":"Note, mesaje, linkuri, fișiere salvate pentru posteritate","self_topic_name":"Mesaje salvate","message_not_found":"mesajul nu a fost găsit","message_deleted":"mesaj șters","alias_editing_placeholder":"Alias (opțional)","label_alias":"Alias:","alias_already_taken":"(deja luat)","alias_invalid":"(nevalid)","label_alias_edit":"Alias","select_country":"Selectați țara","text_copied":"Copiat în clipboard","color_schema_dark":"Întunecat","color_schema_light":"Luminos","color_schema_system":"Implicit sistem","label_color_schema":"Temă:","label_text_size":"Dimensiune text:","incognito_mode_description":"Ascunde statusul tău online și indicatorii de tastare.","send_command":"Trimite cu {key}","send_command_explained":"Apasă Enter pentru linie nouă","send_plain":"Trimite cu Enter","send_plain_explained":"Apasă Shift + Enter pentru linie nouă","sidepanel_title_acc_general":"General","label_keyboard":"Tastatură:","pin_chat":"Fixează","unpin_chat":"Anulează fixarea","subscriber_count":"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}","label_member_count":"Membri:","label_subscriber_count":"Abonați:","member_count":"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}","tabtitle_image":"imagine","tabtitle_pattern":"model","button_restore":"Restabilește implicit","wallpapers":"Imagini de fundal","label_blur_wallpaper":"Estompare:","label_scan_id":"Scanează ID-ul meu:"} \ No newline at end of file +{"action_block_contact":"Blochează contact","action_cancel":"anulează","action_clear_messages":"Șterge mesajele","action_delete_messages":"Șterge toate mesajele","action_leave_chat":"Ieși din conversație","action_report_chat":"Raportează conversația","archived_contacts":"Contacte arhivate ({count})","badge_danger":"Suspicios","badge_owner":"owner","badge_staff":"Administrare","badge_verified":"Verificat","badge_you":"tu","block_contact_warning":"Ești sigur că dorești să blochezi acest contact?","blocked_contacts_link":"Contact blocate ({count})","button_add_members":"Adaugă persoane","button_cancel":"Anulează","button_confirm":"Confirmă","button_create":"Creează","button_delete_account":"Șterge cont","button_edit":"Editează","button_logout":"Deconectare","button_ok":"OK","button_reset":"Resetează","button_send_request":"Trimite cerere","button_sign_in":"Conectează-te","button_sign_up":"Creează cont","button_subscribe":"Subscribe","button_update":"Actualizează","cannot_initiate_file_upload":"Nu se poate face încărcarea.","channel":"canal","channel_prompt":"Acesta este un canal","chat_invitation":"Ai primit invitație într-o conversație. Accepți?","chat_invitation_accept":"Da, accept","chat_invitation_block":"Blochează","chat_invitation_ignore":"Ignoră","clear_messages_warning":"Ești sigur că dorești să ștergi mesajele? Acestea nu pot fi recuperate.","code_doesnot_match":"Codul furnizat nu este valid","contacts_not_found":"Nu ai contacte salvate\n¯∖_(ツ)_/¯","contacts_not_found_short":"Niciun contact găsit după criteriile ''{query}''","credential_email_prompt":"Adresa de e-mail","delete_account":"Șterge contul","delete_account_warning":"Ești sigur că dorești să ștergi contul? Acesta nu va putea fi recuperat.","delete_messages_warning":"Ești sigur că dorești să șterge mesajele din toate conversațiile? Acestea nu pot fi recuperate.","download_action":"download","drafty_attachment":"Atasament","drafty_form":"Formă:","drafty_image":"Imagine","email_dative":"email","email_prompt":"Adresa de e-mail","enable_peers_messaging":"Activează","enter_confirmation_code_prompt":"Introu codul de confirmare trimis pe {method}:","error_invalid_id":"ID Invalid","file_attachment_too_large":"Dimensiunea fișiterului {size} depășește limita de {limit}.","forgot_password_link":"Ți-ai uitat parola?","full_name_prompt":"Numele tău","granted_permissions":"Oferite","group_has_no_members":"În acest grup nu se află persoane","group_user_id_prompt":"Grup sau user ID","image_caption_prompt":"Titlul imaginii","invalid_content":"conținut invalid","invalid_security_token":"Codul de securitate este invalid","label_client":"Client:","label_content_type":"Tip conținut:","label_default_access_mode":"Default access mode:","label_file_name":"Nume fișier:","label_group_members":"Membrii grupului:","label_incognito_mode":"Mod incognito:","label_message_sound":"Sunet de mesaj:","label_muting_topic":"Mod silențios (muted):","label_other_user":"Altele","label_password":"Parola","label_permissions":"Permisiuni:","label_private":"Comentariu privat","label_push_notifications":"Alerte de notificare:","label_push_notifications_disabled":"Alerte de notificare (necesită HTTPS):","label_reset_password":"Resetează parola:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Adresa serverului:","label_server_to_use":"Server de utilizat:","label_size":"Size:","label_topic_name":"Nume","label_user_contacts":"Contacte","label_user_id":"ID:","label_wire_transport":"Transportul legat:","label_you":"Tu:","label_your_name":"Numele tău","label_your_permissions":"Permisiuniile tale:","last_seen_timestamp":"Văzut ultima dată","leave_chat_warning":"Ești sigur că dorești să ieși din conersație?","link_contact_us":"Contactează-ne","link_privacy_policy":"Politica de Confidențialitate","link_terms_of_service":"Termenii Serviciului","login_prompt":"Conectează-te","menu_item_archive_topic":"Arhivează","menu_item_block":"Blochează","menu_item_clear_messages":"Șterge mesajele","menu_item_clear_messages_for_all":"Ștergele pe toate","menu_item_delete":"Șterge","menu_item_delete_for_all":"Ștergele pe toate","menu_item_delete_topic":"Șterge","menu_item_edit_permissions":"Editează permisiuni","menu_item_info":"Info","menu_item_member_delete":"Șterge persoană","menu_item_mute":"Mute","menu_item_restore_topic":"Restabili","menu_item_send_retry":"Reîncearcă","menu_item_unblock":"Deblochează","menu_item_unmute":"Unmute","message_sending":"se trimite...","message_sending_failed":"eroare","messages_not_readable":"Mesajele nu pot fi citite","messaging_disabled_prompt":"Mesageria este dezactivată","more_online_members":"+{overflow} mai mult","new_message_prompt":"Mesaj nou","new_password_placeholder":"Introdu parolă","no_connection":"Nu există conexiune","no_contacts":"Nu ai contacte adăugate :-(","numeric_confirmation_code_prompt":"Doar cifre","online_now":"online acum","password_prompt":"Parola","password_unchanged_prompt":"Neschimbată","peers_messaging_disabled":"Mesageria de tip Peer este dezactivată.","permission_admin":"Aprobare ({val})","permission_delete":"Ștergere ({val})","permission_join":"Participare ({val})","permission_owner":"Deținător ({val})","permission_pres":"Notificare ({val})","permission_read":"Citire ({val})","permission_share":"Distribuire ({val})","permission_write":"Scriere ({val})","phone_dative":"telefon","private_editing_placeholder":"Vizibil doar ție","push_init_failed":"Nu s-a reușit inițializarea tip push notifications","reconnect_countdown":"Deconectat. Se încearcă conectarea în {seconds}…","reconnect_now":"Încearcă din nou","reload_update":"Reîncarcă","report_chat_warning":"Ești sigur că dorești să blochezi și să raportezi această conversație?","requested_permissions":"Necesare","save_attachment":"salvează","search_for_contacts":"Caută în contacte","search_no_results":"Nu s-au găsit rezultate","search_placeholder":"Caută după e-mail sau număr telefon...","sidepanel_title_acc_notifications":"Notificări","sidepanel_title_acc_support":"Ajutor","sidepanel_title_account_settings":"Setările Contului","sidepanel_title_archive":"Conversații Arhivate","sidepanel_title_blocked":"Conversații Blocate","sidepanel_title_cred":"Confirmă credențiale","sidepanel_title_login":"Conectează-te","sidepanel_title_newtpk":"Creeză un nou Chat","sidepanel_title_register":"Creează Cont","sidepanel_title_reset":"Resetează Parola","sidepanel_title_settings":"Setări","stay_logged_in":"Rămâi conectat","tabtitle_find_user":"caută","tabtitle_group_by_id":"după id","tabtitle_new_group":"grup nou","tags_editor_no_tags":"Adaugă tag-uri","tags_not_found":"Niciun tag definit. Adaugă.","title_all_contacts":"Toate Contactele","title_group_members":"Persoanele din grup","title_manage_tags":"Administrează","title_not_found":"Nu a fost găsit","title_permissions":"Permisiuni","title_tag_manager":"Tag-uri (user discovery)","topic_block_warning":"Ești sigur că dorești să blochezi această conversație?","topic_delete_warning":"Ești sigur că dorești să șterge această conversație?","topic_name_editing_placeholder":"Numele grupului","unnamed_topic":"Nedenumit","update_available":"Actualizare disponibilă.","upload_finishing":"se încarcă...","user_not_found":"Utilizatorul nu a fost găsit","description_editing_placeholder":"Descriere (opțional)","label_description":"Descriere","button_security":"Securitate","panel_title_crop":"Trageți pentru a ajusta","panel_title_general":"Generale","panel_title_members":"Membri","panel_title_security":"Securitate","panel_title_info":"Info","permissions_anonymous":"Anonim","permissions_authenticated":"Autentificat","topic_delete":"Ștergeți Chat","permissions_user":"Permisiunile utilizatorului","password_reset_email_sent":"A fost trimis un e-mail cu cod de securitate.","label_unarchive_topic":"Arhivat:","menu_item_reply":"A raspunde","menu_item_forward":"Redirecţiona","forward_to":"Redirecționați către","forward_to_search_placeholder":"Căutați contacte","label_new_password":"Parolă Nouă","drafty_unknown":"Neacceptat","calls_incoming":"Apel primit","calls_outgoing":"Apel efectuat","calls_you_label":"Tu","menu_item_video_call":"Apel video","already_in_call":"Deja vorbesti!","call_cancelled":"anulat","call_missed":"pierdut","call_declined":"refuzat","call_disconnected":"deconectat","label_use_secure_connection":"Utilizați conexiune securizată","cred_confirmed_successfully":"Confirmat cu succes","menu_item_edit":"Editează","editing_message":"Editare","message_edited_marker":", editat","icon_title_add_image":"Adauga imagine","icon_title_attach_file":"Ataseaza fisier","icon_title_delete":"Ștergeți înregistrarea","icon_title_pause":"Întrerupeți redarea","icon_title_play":"Redați înregistrarea","icon_title_record_voice":"Înregistrați mesajul vocal","icon_title_resume":"Reluați redarea","icon_title_send":"Trimite mesaj","drag_file":"Trageți fișierul aici","drafty_video":"Înregistrare video","call_in_progress":"în curs","menu_item_audio_call":"Apel","unrecognized_video_format":"Formatul acestui videoclip nu este recunoscut","loading_note":"Se încarcă...","password_i_have_code":"Am cod","label_reset_password_tel":"Trimite SMS pentru a reseta parola","mobile_phone_number":"Număr de telefon mobil","password_reset_sms_sent":"A fost trimis un mesaj text cu cod de securitate.","mobile_number_required":"Este necesar un număr de telefon mobil","current_email":"E-mail curent","current_phone":"Număr de telefon actual","new_email":"E-mail nou","new_phone_number":"Număr de telefon nou","change_email":"Schimbați adresa de e-mail","change_phone":"Schimbați numărul de telefon","call_busy":"ocupat","pin_message":"Fixați","unpin_message":"Anulați fixarea","failed_to_init_audio":"Inițializarea înregistrării audio a eșuat","password_reset_success":"Resetarea parolei cu succes","scan_qr_code":"Scanați codul QR","self_topic_comment":"Note, mesaje, linkuri, fișiere salvate pentru posteritate","self_topic_name":"Mesaje salvate","message_not_found":"mesajul nu a fost găsit","message_deleted":"mesaj șters","alias_editing_placeholder":"Alias (opțional)","label_alias":"Alias:","alias_already_taken":"(deja luat)","alias_invalid":"(nevalid)","label_alias_edit":"Alias","select_country":"Selectați țara","text_copied":"Copiat în clipboard","color_schema_dark":"Întunecat","color_schema_light":"Luminos","color_schema_system":"Implicit sistem","label_color_schema":"Temă:","label_text_size":"Dimensiune text:","incognito_mode_description":"Ascunde statusul tău online și indicatorii de tastare.","send_command":"Trimite cu {key}","send_command_explained":"Apasă Enter pentru linie nouă","send_plain":"Trimite cu Enter","send_plain_explained":"Apasă Shift + Enter pentru linie nouă","sidepanel_title_acc_general":"General","label_keyboard":"Tastatură:","pin_chat":"Fixează","unpin_chat":"Anulează fixarea","subscriber_count":"{count, plural, one {{count, number} abonat} few {{count, number} abonați} other {{count, number} de abonați}}","label_member_count":"Membri:","label_subscriber_count":"Abonați:","member_count":"{count, plural, one {{count, number} membru} few {{count, number} membri} other {{count, number} de membri}}","tabtitle_image":"imagine","tabtitle_pattern":"model","button_restore":"Restabilește implicit","wallpapers":"Imagini de fundal","label_blur_wallpaper":"Estompare:","label_scan_id":"Scanează ID-ul meu:","unknown_name":"Necunoscut","save_action":"Salvează","cannot_parse_vcard":"Nu se poate procesa fișierul vCard.","chat_now":"Conversație","find_user":"Caută","label_contact_card":"Card de contact","label_contacts":"Contacte","add_members_prompt":"adaugă membri"} \ No newline at end of file diff --git a/src/i18n.min/ru.json b/src/i18n.min/ru.json index 989afea4..1dafd027 100644 --- a/src/i18n.min/ru.json +++ b/src/i18n.min/ru.json @@ -1 +1 @@ -{"action_block_contact":"Заблокировать контакт","action_cancel":"отменить","action_clear_messages":"Удалить сообщения","action_delete_messages":"Удалить сообщения","action_leave_chat":"Уйти из чата","action_report_chat":"Сообщить о нарушении","archived_contacts":"Чаты в архиве ({count})","badge_danger":"Подозрительный","badge_owner":"влад.","badge_staff":"Администрация","badge_verified":"Верифицированный","badge_you":"вы","block_contact_warning":"Вы действительно заблокировать этот контакт?","blocked_contacts_link":"Заблокированные ({count})","button_add_members":"Добавить","button_cancel":"Отменить","button_confirm":"Подтвердить","button_create":"Создать","button_delete_account":"Удалить аккаунт","button_edit":"Изменить","button_logout":"Выйти","button_ok":"OK","button_reset":"Изменить","button_send_request":"Отправить","button_sign_in":"Войти","button_sign_up":"Создать аккаунт","button_subscribe":"Подписаться","button_update":"Применить","cannot_initiate_file_upload":"Ошибка загрузки файла.","channel":"канал","channel_prompt":"Создать канал","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_block":"Заблокировать","chat_invitation_ignore":"Игнорировать","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","code_doesnot_match":"Код не совпадает","contacts_not_found":"Чатов нет
¯∖_(ツ)_/¯","contacts_not_found_short":"Нет контактов для запроса ''{query}''","credential_email_prompt":"Регистрационный емейл","delete_account":"Удалить аккаунт","delete_account_warning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","download_action":"скачать","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Email, напр. ivan@example.com","enable_peers_messaging":"Разблокировать.","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","error_invalid_id":"Неверный ID","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","forgot_password_link":"Напомнить пароль","full_name_prompt":"Полное имя, напр. Иван Петров","granted_permissions":"Получены","group_has_no_members":"Нет участников","group_user_id_prompt":"ID чата или пользователя","image_caption_prompt":"Подпись к фото","invalid_content":"сообщение не читается","invalid_security_token":"Токен некорректен","label_client":"Клиент:","label_content_type":"Тип:","label_default_access_mode":"Доступ по умолчанию:","label_file_name":"Имя файла:","label_group_members":"Участники чата:","label_incognito_mode":"Режим инкогнито:","label_message_sound":"Звук нового сообщения:","label_muting_topic":"Без уведомлений","label_other_user":"Второй","label_password":"Пароль","label_permissions":"Права доступа:","label_private":"Комментарий","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","label_reset_password":"Отправить емейл для смены пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адрес сервера:","label_server_to_use":"Использовать сервер:","label_size":"Размер:","label_topic_name":"Название","label_user_contacts":"Конакты","label_user_id":"ID:","label_wire_transport":"Соединение:","label_you":"Вы:","label_your_name":"Ваше имя","label_your_permissions":"Ваши права доступа:","last_seen_timestamp":"Был активен","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","link_contact_us":"Связаться с нами","link_privacy_policy":"Политика конфиденциальности","link_terms_of_service":"Условия сервиса","login_prompt":"Логин","menu_item_archive_topic":"В архив","menu_item_block":"Заблокировать","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_delete_topic":"Удалить чат","menu_item_edit_permissions":"Права доступа","menu_item_info":"Информация","menu_item_member_delete":"Отписать","menu_item_mute":"Не уведомлять","menu_item_restore_topic":"Разархивировать","menu_item_send_retry":"Отправить заново","menu_item_unblock":"Разблокировать","menu_item_unmute":"Уведомлять","message_sending":"в пути...","message_sending_failed":"ошибка","messages_not_readable":"нет доступа к сообщениям","messaging_disabled_prompt":"Отправка недоступна","more_online_members":"+еще {overflow}","new_message_prompt":"Новое сообщение","new_password_placeholder":"Введите новый пароль","no_connection":"Нет связи","no_contacts":"Ничего нет :-(","numeric_confirmation_code_prompt":"Только цифры","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не изменен","peers_messaging_disabled":"Чат заблокирован у корреспондента.","permission_admin":"Подтверждать ({val})","permission_delete":"Удалять ({val})","permission_join":"Подписываться ({val})","permission_owner":"Владелец ({val})","permission_pres":"Уведомлять ({val})","permission_read":"Читать ({val})","permission_share":"Приглашать ({val})","permission_write":"Писать ({val})","phone_dative":"телефону","private_editing_placeholder":"Виден только вам","push_init_failed":"Ошибка инициализации пуш уведомлений","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","reload_update":"Обновить","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","requested_permissions":"Требуются","save_attachment":"сохранить","search_for_contacts":"Поиск контактов","search_no_results":"Ничего не найдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_archive":"Архив чатов","sidepanel_title_blocked":"Заблокированные чаты","sidepanel_title_cred":"Подтвердить","sidepanel_title_login":"Авторизация","sidepanel_title_newtpk":"Новый чат","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_reset":"Сменить пароль","sidepanel_title_settings":"Настройки","stay_logged_in":"Запомнить","tabtitle_find_user":"найти","tabtitle_group_by_id":"по id","tabtitle_new_group":"создать","tags_editor_no_tags":"Добавьте теги","tags_not_found":"Тегов нет. Добавьте.","title_all_contacts":"Все контакты","title_group_members":"Участники","title_manage_tags":"Редактировать","title_not_found":"Не найден","title_permissions":"Права доступа","title_tag_manager":"Теги для поиска","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_name_editing_placeholder":"Название чата","unnamed_topic":"Без названия","update_available":"Есть новая версия приложения.","upload_finishing":"завершение...","user_not_found":"Не найден","description_editing_placeholder":"Описание (не обязательно)","label_description":"Описание","button_security":"Безопасность","panel_title_crop":"Обрезать картинку","panel_title_general":"Общие настройки","panel_title_members":"Участники","panel_title_security":"Безопасность","panel_title_info":"Подробности","permissions_anonymous":"Анонимный","permissions_authenticated":"Авторизованный","topic_delete":"Удалить чат","permissions_user":"Права доступа","password_reset_email_sent":"Сообщение было отправлено на указанный email.","label_unarchive_topic":"Архивирован:","menu_item_reply":"Ответить","menu_item_forward":"Переслать","forward_to":"Переслать","forward_to_search_placeholder":"Поиск контактов","label_new_password":"Новый пароль","drafty_unknown":"Не поддерживается","calls_incoming":"Входящий звонок","calls_outgoing":"Исходящий звонок","calls_you_label":"Вы","menu_item_video_call":"Видеозвонок","already_in_call":"Вы уже звоните кому-то!","call_cancelled":"отменен","call_missed":"пропущен","call_declined":"отклонен","call_disconnected":"разъединен","label_use_secure_connection":"Безопасное соединение","cred_confirmed_successfully":"Подтверждено успешно","menu_item_edit":"Изменить","editing_message":"Редактирование","message_edited_marker":", изменено","icon_title_add_image":"Добавить изображение","icon_title_attach_file":"Прикрепить файл","icon_title_delete":"Удалить запись","icon_title_pause":"Пауза воспроизведения","icon_title_play":"Воспроизвести запись","icon_title_record_voice":"Записать голосовое сообщение","icon_title_resume":"Продолжить","icon_title_send":"Отправить сообщение","drag_file":"Перетащите файл сюда","drafty_video":"Видеозапись","call_in_progress":"в процессе","menu_item_audio_call":"Позвонить","unrecognized_video_format":"Неизвестный формат видео файла","loading_note":"Загружается...","password_i_have_code":"У меня есть код","label_reset_password_tel":"Отправить SMS для сброса пароля","mobile_phone_number":"Номер мобильного телефона","password_reset_sms_sent":"SMS с защитным кодом отправлен.","mobile_number_required":"Номер мобильного телефона","current_email":"Текущий e-mail","current_phone":"Текущий номер телефона","new_email":"Новый e-mail","new_phone_number":"Новый номер телефона","change_email":"Изменить e-mail","change_phone":"Изменить номер телефона","call_busy":"занято","pin_message":"Закрепить","unpin_message":"Открепить","failed_to_init_audio":"Не удалось инициализировать аудиозапись","password_reset_success":"Пароль успешно изменен","scan_qr_code":"Отсканируйте QR код","self_topic_comment":"Заметки, сообщения, ссылки, файлы, сохраненные для потомков","self_topic_name":"Сохраненные сообщения","message_not_found":"сообщение не найдено","message_deleted":"сообщение удалено","alias_editing_placeholder":"Псевдоним (необязательно)","label_alias":"Псевдоним:","alias_already_taken":"(уже занято)","alias_invalid":"(некорректно)","label_alias_edit":"Псевдоним","select_country":"Выберите страну","text_copied":"Скопировано в буфер обмена","color_schema_dark":"Тёмная","color_schema_light":"Светлая","color_schema_system":"Системная","label_color_schema":"Тема:","label_text_size":"Размер текста:","incognito_mode_description":"Скрывать онлайн статус и индикаторы набора текста.","send_command":"Отправлять на {key}","send_command_explained":"Нажмать Enter для новой строки","send_plain":"Отправлять на Enter","send_plain_explained":"Нажимать Shift + Enter для новой строки","sidepanel_title_acc_general":"Основные","label_keyboard":"Клавиатура:","pin_chat":"Закрепить","unpin_chat":"Открепить","subscriber_count":"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}","label_member_count":"Участники:","label_subscriber_count":"Подписчики:","member_count":"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}","tabtitle_image":"картинка","tabtitle_pattern":"узор","button_restore":"Восстановить по умолчанию","wallpapers":"Обои","label_blur_wallpaper":"Размытие:","label_scan_id":"Отсканируйте мой ID:"} \ No newline at end of file +{"action_block_contact":"Заблокировать контакт","action_cancel":"отменить","action_clear_messages":"Удалить сообщения","action_delete_messages":"Удалить сообщения","action_leave_chat":"Уйти из чата","action_report_chat":"Сообщить о нарушении","archived_contacts":"Чаты в архиве ({count})","badge_danger":"Подозрительный","badge_owner":"влад.","badge_staff":"Администрация","badge_verified":"Верифицированный","badge_you":"вы","block_contact_warning":"Вы действительно заблокировать этот контакт?","blocked_contacts_link":"Заблокированные ({count})","button_add_members":"Добавить","button_cancel":"Отменить","button_confirm":"Подтвердить","button_create":"Создать","button_delete_account":"Удалить аккаунт","button_edit":"Изменить","button_logout":"Выйти","button_ok":"OK","button_reset":"Изменить","button_send_request":"Отправить","button_sign_in":"Войти","button_sign_up":"Создать аккаунт","button_subscribe":"Подписаться","button_update":"Применить","cannot_initiate_file_upload":"Ошибка загрузки файла.","channel":"канал","channel_prompt":"Создать канал","chat_invitation":"Вас пригласили начать новый чат. Как вы хотите поступить?","chat_invitation_accept":"Принять","chat_invitation_block":"Заблокировать","chat_invitation_ignore":"Игнорировать","clear_messages_warning":"Вы действительно хотите удалить все сообщения в чате? Их будет невозможно восстановить.","code_doesnot_match":"Код не совпадает","contacts_not_found":"Чатов нет\n¯∖_(ツ)_/¯","contacts_not_found_short":"Нет контактов для запроса ''{query}''","credential_email_prompt":"Регистрационный емейл","delete_account":"Удалить аккаунт","delete_account_warning":"Вы уверены, что ходите удалить свой аккаунт? Его невозможно будет восстановить.","delete_messages_warning":"Вы действительно хотите удалить все сообщения?","download_action":"скачать","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Email, напр. ivan@example.com","enable_peers_messaging":"Разблокировать.","enter_confirmation_code_prompt":"Код подтверждения, полученный по {method}:","error_invalid_id":"Неверный ID","file_attachment_too_large":"Размер файла {size} превышает {limit} лимит.","forgot_password_link":"Напомнить пароль","full_name_prompt":"Полное имя, напр. Иван Петров","granted_permissions":"Получены","group_has_no_members":"Нет участников","group_user_id_prompt":"ID чата или пользователя","image_caption_prompt":"Подпись к фото","invalid_content":"сообщение не читается","invalid_security_token":"Токен некорректен","label_client":"Клиент:","label_content_type":"Тип:","label_default_access_mode":"Доступ по умолчанию:","label_file_name":"Имя файла:","label_group_members":"Участники чата:","label_incognito_mode":"Режим инкогнито:","label_message_sound":"Звук нового сообщения:","label_muting_topic":"Без уведомлений","label_other_user":"Второй","label_password":"Пароль","label_permissions":"Права доступа:","label_private":"Комментарий","label_push_notifications":"Уведомления:","label_push_notifications_disabled":"Уведомления (требуют HTTPS):","label_reset_password":"Отправить емейл для смены пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адрес сервера:","label_server_to_use":"Использовать сервер:","label_size":"Размер:","label_topic_name":"Название","label_user_contacts":"Конакты","label_user_id":"ID:","label_wire_transport":"Соединение:","label_you":"Вы:","label_your_name":"Ваше имя","label_your_permissions":"Ваши права доступа:","last_seen_timestamp":"Был активен","leave_chat_warning":"Вы действительно хотите покинуть этот чат?","link_contact_us":"Связаться с нами","link_privacy_policy":"Политика конфиденциальности","link_terms_of_service":"Условия сервиса","login_prompt":"Логин","menu_item_archive_topic":"В архив","menu_item_block":"Заблокировать","menu_item_clear_messages":"Удалить сообщения","menu_item_clear_messages_for_all":"Удалить для всех","menu_item_delete":"Удалить","menu_item_delete_for_all":"Удалить для всех","menu_item_delete_topic":"Удалить чат","menu_item_edit_permissions":"Права доступа","menu_item_info":"Информация","menu_item_member_delete":"Отписать","menu_item_mute":"Не уведомлять","menu_item_restore_topic":"Разархивировать","menu_item_send_retry":"Отправить заново","menu_item_unblock":"Разблокировать","menu_item_unmute":"Уведомлять","message_sending":"в пути...","message_sending_failed":"ошибка","messages_not_readable":"нет доступа к сообщениям","messaging_disabled_prompt":"Отправка недоступна","more_online_members":"+еще {overflow}","new_message_prompt":"Новое сообщение","new_password_placeholder":"Введите новый пароль","no_connection":"Нет связи","no_contacts":"Ничего нет :-(","numeric_confirmation_code_prompt":"Только цифры","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не изменен","peers_messaging_disabled":"Чат заблокирован у корреспондента.","permission_admin":"Подтверждать ({val})","permission_delete":"Удалять ({val})","permission_join":"Подписываться ({val})","permission_owner":"Владелец ({val})","permission_pres":"Уведомлять ({val})","permission_read":"Читать ({val})","permission_share":"Приглашать ({val})","permission_write":"Писать ({val})","phone_dative":"телефону","private_editing_placeholder":"Виден только вам","push_init_failed":"Ошибка инициализации пуш уведомлений","reconnect_countdown":"Нет связи. Подключение через {seconds}…","reconnect_now":"Подключить сейчас.","reload_update":"Обновить","report_chat_warning":"Вы действительно хотите сообщить о нарушении и заблокировать этот чат?","requested_permissions":"Требуются","save_attachment":"сохранить","search_for_contacts":"Поиск контактов","search_no_results":"Ничего не найдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Уведомления","sidepanel_title_acc_support":"Поддержка","sidepanel_title_account_settings":"Настройки аккаунта","sidepanel_title_archive":"Архив чатов","sidepanel_title_blocked":"Заблокированные чаты","sidepanel_title_cred":"Подтвердить","sidepanel_title_login":"Авторизация","sidepanel_title_newtpk":"Новый чат","sidepanel_title_register":"Зарегистрироваться","sidepanel_title_reset":"Сменить пароль","sidepanel_title_settings":"Настройки","stay_logged_in":"Запомнить","tabtitle_find_user":"найти","tabtitle_group_by_id":"по id","tabtitle_new_group":"создать","tags_editor_no_tags":"Добавьте теги","tags_not_found":"Тегов нет. Добавьте.","title_all_contacts":"Все контакты","title_group_members":"Участники","title_manage_tags":"Редактировать","title_not_found":"Не найден","title_permissions":"Права доступа","title_tag_manager":"Теги для поиска","topic_block_warning":"Вы действительно хотите заблокировать этот чат?","topic_delete_warning":"Вы действительно хотите удалить этот чат?","topic_name_editing_placeholder":"Название чата","unnamed_topic":"Без названия","update_available":"Есть новая версия приложения.","upload_finishing":"завершение...","user_not_found":"Не найден","description_editing_placeholder":"Описание (не обязательно)","label_description":"Описание","button_security":"Безопасность","panel_title_crop":"Обрезать картинку","panel_title_general":"Общие настройки","panel_title_members":"Участники","panel_title_security":"Безопасность","panel_title_info":"Подробности","permissions_anonymous":"Анонимный","permissions_authenticated":"Авторизованный","topic_delete":"Удалить чат","permissions_user":"Права доступа","password_reset_email_sent":"Сообщение было отправлено на указанный email.","label_unarchive_topic":"Архивирован:","menu_item_reply":"Ответить","menu_item_forward":"Переслать","forward_to":"Переслать","forward_to_search_placeholder":"Поиск контактов","label_new_password":"Новый пароль","drafty_unknown":"Не поддерживается","calls_incoming":"Входящий звонок","calls_outgoing":"Исходящий звонок","calls_you_label":"Вы","menu_item_video_call":"Видеозвонок","already_in_call":"Вы уже звоните кому-то!","call_cancelled":"отменен","call_missed":"пропущен","call_declined":"отклонен","call_disconnected":"разъединен","label_use_secure_connection":"Безопасное соединение","cred_confirmed_successfully":"Подтверждено успешно","menu_item_edit":"Изменить","editing_message":"Редактирование","message_edited_marker":", изменено","icon_title_add_image":"Добавить изображение","icon_title_attach_file":"Прикрепить файл","icon_title_delete":"Удалить запись","icon_title_pause":"Пауза воспроизведения","icon_title_play":"Воспроизвести запись","icon_title_record_voice":"Записать голосовое сообщение","icon_title_resume":"Продолжить","icon_title_send":"Отправить сообщение","drag_file":"Перетащите файл сюда","drafty_video":"Видеозапись","call_in_progress":"в процессе","menu_item_audio_call":"Позвонить","unrecognized_video_format":"Неизвестный формат видео файла","loading_note":"Загружается...","password_i_have_code":"У меня есть код","label_reset_password_tel":"Отправить SMS для сброса пароля","mobile_phone_number":"Номер мобильного телефона","password_reset_sms_sent":"SMS с защитным кодом отправлен.","mobile_number_required":"Номер мобильного телефона","current_email":"Текущий e-mail","current_phone":"Текущий номер телефона","new_email":"Новый e-mail","new_phone_number":"Новый номер телефона","change_email":"Изменить e-mail","change_phone":"Изменить номер телефона","call_busy":"занято","pin_message":"Закрепить","unpin_message":"Открепить","failed_to_init_audio":"Не удалось инициализировать аудиозапись","password_reset_success":"Пароль успешно изменен","scan_qr_code":"Отсканируйте QR код","self_topic_comment":"Заметки, сообщения, ссылки, файлы, сохраненные для потомков","self_topic_name":"Сохраненные сообщения","message_not_found":"сообщение не найдено","message_deleted":"сообщение удалено","alias_editing_placeholder":"Псевдоним (необязательно)","label_alias":"Псевдоним:","alias_already_taken":"(уже занято)","alias_invalid":"(некорректно)","label_alias_edit":"Псевдоним","select_country":"Выберите страну","text_copied":"Скопировано в буфер обмена","color_schema_dark":"Тёмная","color_schema_light":"Светлая","color_schema_system":"Системная","label_color_schema":"Тема:","label_text_size":"Размер текста:","incognito_mode_description":"Скрывать онлайн статус и индикаторы набора текста.","send_command":"Отправлять на {key}","send_command_explained":"Нажмать Enter для новой строки","send_plain":"Отправлять на Enter","send_plain_explained":"Нажимать Shift + Enter для новой строки","sidepanel_title_acc_general":"Основные","label_keyboard":"Клавиатура:","pin_chat":"Закрепить","unpin_chat":"Открепить","subscriber_count":"{count, plural, one {{count, number} подписчик} few {{count, number} подписчика} many {{count, number} подписчиков} other {{count, number} подписчиков}}","label_member_count":"Участники:","label_subscriber_count":"Подписчики:","member_count":"{count, plural, one {{count, number} участник} few {{count, number} участника} many {{count, number} участников} other {{count, number} участников}}","tabtitle_image":"картинка","tabtitle_pattern":"узор","button_restore":"Восстановить по умолчанию","wallpapers":"Обои","label_blur_wallpaper":"Размытие:","label_scan_id":"Отсканируйте мой ID:","unknown_name":"Неизвестный","save_action":"Сохранить","cannot_parse_vcard":"Не удалось обработать файл vCard.","chat_now":"Написать","find_user":"Найти","label_contact_card":"Карточка контакта","label_contacts":"Контакты","add_members_prompt":"добавить участников"} \ No newline at end of file diff --git a/src/i18n.min/th.json b/src/i18n.min/th.json index 9366da2a..e2da1dc6 100644 --- a/src/i18n.min/th.json +++ b/src/i18n.min/th.json @@ -1 +1 @@ -{"action_block_contact":"บล็อครายชื่อ","action_cancel":"ยกเลิก","action_clear_messages":"ล้างข้อความ","action_delete_messages":"ล้างข้อความทั้งหมด","action_leave_chat":"ออกจากการสนทนา","action_report_chat":"รายงานการสนทนา","archived_contacts":"รายชื่อที่สำเร็จ ({count})","badge_danger":"ไม่น่าไว้วางใจ","badge_owner":"เจ้าของ","badge_staff":"ผู้ดูแล","badge_verified":"ยืนยันแล้ว/ทางการ","badge_you":"คุณ","block_contact_warning":"คุณแน่ใจหรือไม่? คุณต้องการบล็อครายชื่อนี้","blocked_contacts_link":"รายชื่อที่ถูกบล็อก ({count})","button_add_members":"เพิ่มสมาชิก","button_cancel":"ยกเลิก","button_confirm":"ยืนยัน","button_create":"สร้าง","button_delete_account":"ลบบัญชี","button_edit":"แก้ไข","button_logout":"ลงชื่อออก","button_ok":"ตกลง","button_reset":"รีเซ็ต","button_send_request":"ส่งคำขอ","button_sign_in":"ลงชื่อเข้าใช้","button_sign_up":"สร้างบัญชี","button_subscribe":"ติดตาม","button_update":"อัพเดต","cannot_initiate_file_upload":"ไม่สามารถอัพโหลดไฟล์","channel":"ช่อง","channel_prompt":"นี่คือช่อง","chat_invitation":"คุณถูกเชิญให้เข้าร่วมแชทใหม่ คุณต้องการทำอะไร?","chat_invitation_accept":"ยอมรับ","chat_invitation_block":"บล็อค","chat_invitation_ignore":"ไม่สนใจ","clear_messages_warning":"คุณแน่ใจหรือไม่ที่จะล้างข้อความทั้งหมด? ส่ิงนี้ไม่สามารถเลิกทำได้","code_doesnot_match":"โค้ด ไม่ถูกต้อง","contacts_not_found":"ไม่พบแชท
¯∖_(ツ)_/¯","contacts_not_found_short":"ไม่พบรายชื่อ ''{query}''","credential_email_prompt":"อีเมลที่ลงทะเบียนของคุณ","delete_account":"ลบบัญชี","delete_account_warning":"คุณแน่ใจหรือไม่ที่จะลบบัญชีผู้ใช้ของคุณ? สิ่งนี้ไม่สามารถเลิกทำได้.","delete_messages_warning":"คุณแน่ใจหรือไม่ที่จะลบข้อความทั้งหมดสำหรับทุกคน? ส่ิงนี้ไม่สามารถเลิกทำได้","download_action":"ดาวน์โหลด","drafty_attachment":"สิ่งที่แนบมา","drafty_form":"ฟอร์ม:","drafty_image":"รูปภาพ","email_dative":"อีเมล์","email_prompt":"อีเมล, เช่น jdoe@example.com","enable_peers_messaging":"เปิดใช้งาน","enter_confirmation_code_prompt":"รหัสยืนยัน","error_invalid_id":"ID ไม่ถูกต้อง","file_attachment_too_large":"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.","forgot_password_link":"ลืมรหัสผ่าน?","full_name_prompt":"ชื่อเต็ม, เช่น John Doe","granted_permissions":"ยินยอม","group_has_no_members":"ไม่มีสมาชิก","group_user_id_prompt":"กลุ่ม หรือ ID ผู้ใช้","image_caption_prompt":"คำอธิบายภาพ","invalid_content":"เนื้อหาไม่ถูกต้อง","invalid_security_token":"security token ไม่ถูกต้อง","label_client":"Client:","label_content_type":"ชนิดของเนื้อหา:","label_default_access_mode":"โหมดการเข้าถึงเริ่มต้น:","label_file_name":"ชื่อไฟล์:","label_group_members":"สมาชิกกลุ่ม:","label_incognito_mode":"โหมดไม่ระบุตัวตน:","label_message_sound":"เสียงข้อความ:","label_muting_topic":"ไม่สนใจ:","label_other_user":"อื่นๆ","label_password":"รหัสผ่าน","label_permissions":"สิทธิ์:","label_private":"ความคิดเห็นส่วนตัว","label_push_notifications":"การแจ้งเตือน:","label_push_notifications_disabled":"การแจ้งเตือน (requires HTTPS):","label_reset_password":"ส่งรหัสรีเซ็ตอีเมล:","label_sdk":"SDK:","label_server":"เซิร์ฟเวอร์:","label_server_address":"ที่อยู่เซิร์ฟเวอร์:","label_server_to_use":"เลือกเซิร์ฟเวอร์:","label_size":"ขนาด:","label_topic_name":"ชื่อ","label_user_contacts":"รายชื่อ","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"คุณ:","label_your_name":"ชื่อของคุณ","label_your_permissions":"สิทธิของคุณ:","last_seen_timestamp":"ล่าสุดเมื่อ","leave_chat_warning":"คุณแน่ใจหรือไม่ที่จะออกจากการสนทนานี้?","link_contact_us":"ติดต่อเรา","link_privacy_policy":"ข้อกำหนดความเป็นส่วนตัว","link_terms_of_service":"ข้อกำหนดการใช้งาน","login_prompt":"ล็อกอิน","menu_item_archive_topic":"สำเร็จ","menu_item_block":"บล็อค","menu_item_clear_messages":"ล้างข้อความ","menu_item_clear_messages_for_all":"ล้างทั้งหมด","menu_item_delete":"ลบ","menu_item_delete_for_all":"ลบทั้งหมด","menu_item_delete_topic":"ลบ","menu_item_edit_permissions":"แก้ไขสิทธิ","menu_item_info":"ข้อมูล","menu_item_member_delete":"ลบ","menu_item_mute":"ปิดการแจ้งเตือน","menu_item_reply":"ตอบกลับ","menu_item_restore_topic":"เรื่มใหม่","menu_item_send_retry":"ลองอีกครั้ง","menu_item_unblock":"ปลดบล็อค","menu_item_unmute":"เปิดการแจ้งเตือน","message_sending":"กำลังส่ง...","message_sending_failed":"ล้มเหลว","messages_not_readable":"ไม่มีสิทธิเข้าถึงข้อความ","messaging_disabled_prompt":"ปิดการส่งข้อความ","more_online_members":"+{overflow} เพิ่มเติม","new_message_prompt":"ข้อความใหม่","new_password_placeholder":"ใส่รหัสใหม่","no_connection":"ไม่มีการเชื่อมต่อ","no_contacts":"คุณไม่มีรายชื่อ :-(","numeric_confirmation_code_prompt":"ตัวเลขเท่านั้น","online_now":"ออนไลน์อยู่","password_prompt":"รหัสผ่าน","password_unchanged_prompt":"ไม่เปลี่ยนแปลง","peers_messaging_disabled":"ปิดใช้งาน การส่งข้อความ Peer's","permission_admin":"ยอมรับ ({val})","permission_delete":"ลบ ({val})","permission_join":"เข้าร่วม ({val})","permission_owner":"เจ้าของ ({val})","permission_pres":"รับการแจ้งเตือน ({val})","permission_read":"อ่าน ({val})","permission_share":"แชร์ ({val})","permission_write":"เขียน ({val})","phone_dative":"มือถือ","private_editing_placeholder":"แค่คุณที่เห็นสิ่งนี้","push_init_failed":"การแจ้งเตือนล้มเหลว","reconnect_countdown":"ถูกตัดการเชื่อมต่อ. จะเชื่อมต่อใหม่ใน {seconds}…","reconnect_now":"ลองเลย","reload_update":"โหลดใหม่","report_chat_warning":"คุณแน่ใจหรือไม่ที่จะบล็อคและรายงานการสนทนานี้","requested_permissions":"ต้องการ","save_attachment":"บันทึก","search_for_contacts":"ใช้ค้นหารายชื่อ","search_no_results":"ไม่พบผลลัพธ์","search_placeholder":"เช่น email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"การแจ้งเตือน","sidepanel_title_acc_support":"สนับสนุน","sidepanel_title_account_settings":"การตั้งค่าบัญชี","sidepanel_title_archive":"แชทที่สำเร็จ","sidepanel_title_blocked":"แชทที่ถูกบล็อค","sidepanel_title_cred":"ยืนยันตัวตน","sidepanel_title_login":"ลงชื่อเข้าใช้","sidepanel_title_newtpk":"เริ่มแชทใหม่","sidepanel_title_register":"สร้างบัญชี","sidepanel_title_reset":"รีเซ็ตรหัสผ่าน","sidepanel_title_settings":"ตั้งค่า","stay_logged_in":"คงอยู่ในระบบ","tabtitle_find_user":"หา","tabtitle_group_by_id":"ด้วย ID","tabtitle_new_group":"กลุ่มใหม่","tags_editor_no_tags":"เพิ่มแท็ก","tags_not_found":"ไม่มีการกำหนดแท็ก เพิ่มแท็กเลย","title_all_contacts":"รายชื่อทั้งหมด","title_group_members":"สมาชิกกลุ่ม","title_manage_tags":"จัดการ","title_not_found":"ไม่พบ","title_permissions":"การอนุญาต","title_tag_manager":"แท็ก (ค้นหา & ค้นพบ)","topic_block_warning":"คุณแน่ใจหรือไม่ที่ต้องการบล็อกการสนทนานี้?","topic_delete_warning":"คุณแน่ใจหรือไม่ที่ต้องการลบการสนทนานี้? สิ่งนี้ไม่สามารถเลิกทำได้","topic_name_editing_placeholder":"ชื่อกลุ่มอิสระ","unnamed_topic":"ไม่มีชื่อ","update_available":"มีการอัพเดตพร้อมใช้งาน","upload_finishing":"กำลังจบ...","user_not_found":"ไม่พบ","description_editing_placeholder":"คำอธิบาย (ไม่บังคับ)","label_description":"คำอธิบาย","button_security":"ความปลอดภัย","panel_title_crop":"ลากเพื่อปรับ","panel_title_general":"ทั่วไป","panel_title_members":"สมาชิก","panel_title_security":"ความปลอดภัย","panel_title_info":"ข้อมูล","permissions_anonymous":"ไม่ระบุตัวตน","permissions_authenticated":"รับรองความถูกต้องแล้ว","topic_delete":"ลบการสนทนา","permissions_user":"การอนุญาตของผู้ใช้","password_reset_email_sent":"รหัสความปลอดภัยถูกส่งไปยังอีเมลแล้ว","label_unarchive_topic":"สำเร็จ:","menu_item_forward":"ส่งต่อ","forward_to":"ส่งต่อไปยัง","forward_to_search_placeholder":"ค้นหารายชื่อ","label_new_password":"รหัสผ่านใหม่","drafty_unknown":"ไม่รองรับ","calls_incoming":"สายโทรเข้า","calls_outgoing":"สายโทรออก","calls_you_label":"คุณ","menu_item_video_call":"วีดีโอคอล","already_in_call":"คุณกำลังอยู่ในการสนทนา!","call_cancelled":"ยกเลิกแล้ว","call_missed":"ไม่ได้รับสาย","call_declined":"ไม่รับสาย","call_disconnected":"ตัดการเชื่อมต่อแล้ว","label_use_secure_connection":"ใช้การเชื่อมต่อที่ปลอดภัย","cred_confirmed_successfully":"การยืนยันสำเร็จ","menu_item_edit":"แก้ไข","editing_message":"กำลังแก้ไข","message_edited_marker":", ถูกแก้ไข","icon_title_add_image":"เพิ่มรูปภาพ","icon_title_attach_file":"แนบไฟล์","icon_title_delete":"ลบ","icon_title_pause":"หยุด","icon_title_play":"เล่น","icon_title_record_voice":"บันทึกข้อความเสียง","icon_title_resume":"ต่อ","icon_title_send":"ส่งข้อความ","drag_file":"ลากไฟล์มาที่นี่","drafty_video":"กำลังบันทึกวิดีโอ","call_in_progress":"กำลังดำเนินการ","menu_item_audio_call":"โทร","unrecognized_video_format":"ไม่รู้จักรูปแบบของวิดีโอนี้","loading_note":"กำลังโหลด...","password_i_have_code":"ฉันมีรหัส","label_reset_password_tel":"ส่ง SMS เพื่อรีเซ็ตรหัสผ่าน:","mobile_phone_number":"หมายเลขโทรศัพท์มือถือ","password_reset_sms_sent":"ส่งข้อความพร้อมรหัสความปลอดภัยแล้ว","mobile_number_required":"จำเป็นต้องระบุหมายเลขโทรศัพท์มือถือ","current_email":"อีเมลปัจจุบัน","current_phone":"หมายเลขโทรศัพท์ปัจจุบัน","new_email":"อีเมลใหม่","new_phone_number":"หมายเลขโทรศัพท์ใหม่","change_email":"เปลี่ยนอีเมล","change_phone":"เปลี่ยนหมายเลขโทรศัพท์","call_busy":"ยุ่งอยู่","failed_to_init_audio":"ไม่สามารถเริ่มต้นการบันทึกเสียงได้","password_reset_success":"รีเซ็ตรหัสผ่านสำเร็จ","scan_qr_code":"สแกนรหัส QR","pin_message":"พิน","unpin_message":"ปลดหมุด","self_topic_comment":"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต","self_topic_name":"ข้อความที่บันทึกไว้","message_not_found":"ไม่พบข้อความ","message_deleted":"ข้อความถูกลบ","alias_editing_placeholder":"นามแฝง (ไม่บังคับ)","label_alias":"นามแฝง:","alias_already_taken":"(ใช้ไปแล้ว)","alias_invalid":"(ไม่ถูกต้อง)","label_alias_edit":"นามแฝง","select_country":"เลือกประเทศ","text_copied":"คัดลอกไปยังคลิปบอร์ดแล้ว","color_schema_dark":"มืด","color_schema_light":"สว่าง","color_schema_system":"ค่าเริ่มต้นของระบบ","label_color_schema":"ธีม:","label_text_size":"ขนาดตัวอักษร:","incognito_mode_description":"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ","send_command":"ส่งด้วย {key}","send_command_explained":"กด Enter เพื่อขึ้นบรรทัดใหม่","send_plain":"ส่งด้วย Enter","send_plain_explained":"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่","sidepanel_title_acc_general":"ทั่วไป","label_keyboard":"แป้นพิมพ์:","pin_chat":"ปักหมุด","unpin_chat":"เลิกปักหมุด","subscriber_count":"{count, plural, other {{count, number} ผู้ติดตาม}}","label_member_count":"สมาชิก:","label_subscriber_count":"ผู้ติดตาม:","member_count":"{count, plural, other {{count, number} สมาชิก}}","tabtitle_image":"รูปภาพ","tabtitle_pattern":"ลายลวดลาย","button_restore":"คืนค่าเริ่มต้น","wallpapers":"วอลเปเปอร์","label_blur_wallpaper":"เบลอ:","label_scan_id":"สแกน ID ของฉัน:"} \ No newline at end of file +{"action_block_contact":"บล็อครายชื่อ","action_cancel":"ยกเลิก","action_clear_messages":"ล้างข้อความ","action_delete_messages":"ล้างข้อความทั้งหมด","action_leave_chat":"ออกจากการสนทนา","action_report_chat":"รายงานการสนทนา","archived_contacts":"รายชื่อที่สำเร็จ ({count})","badge_danger":"ไม่น่าไว้วางใจ","badge_owner":"เจ้าของ","badge_staff":"ผู้ดูแล","badge_verified":"ยืนยันแล้ว/ทางการ","badge_you":"คุณ","block_contact_warning":"คุณแน่ใจหรือไม่? คุณต้องการบล็อครายชื่อนี้","blocked_contacts_link":"รายชื่อที่ถูกบล็อก ({count})","button_add_members":"เพิ่มสมาชิก","button_cancel":"ยกเลิก","button_confirm":"ยืนยัน","button_create":"สร้าง","button_delete_account":"ลบบัญชี","button_edit":"แก้ไข","button_logout":"ลงชื่อออก","button_ok":"ตกลง","button_reset":"รีเซ็ต","button_send_request":"ส่งคำขอ","button_sign_in":"ลงชื่อเข้าใช้","button_sign_up":"สร้างบัญชี","button_subscribe":"ติดตาม","button_update":"อัพเดต","cannot_initiate_file_upload":"ไม่สามารถอัพโหลดไฟล์","channel":"ช่อง","channel_prompt":"นี่คือช่อง","chat_invitation":"คุณถูกเชิญให้เข้าร่วมแชทใหม่ คุณต้องการทำอะไร?","chat_invitation_accept":"ยอมรับ","chat_invitation_block":"บล็อค","chat_invitation_ignore":"ไม่สนใจ","clear_messages_warning":"คุณแน่ใจหรือไม่ที่จะล้างข้อความทั้งหมด? ส่ิงนี้ไม่สามารถเลิกทำได้","code_doesnot_match":"โค้ด ไม่ถูกต้อง","contacts_not_found":"ไม่พบแชท \n¯∖_(ツ)_/¯","contacts_not_found_short":"ไม่พบรายชื่อ ''{query}''","credential_email_prompt":"อีเมลที่ลงทะเบียนของคุณ","delete_account":"ลบบัญชี","delete_account_warning":"คุณแน่ใจหรือไม่ที่จะลบบัญชีผู้ใช้ของคุณ? สิ่งนี้ไม่สามารถเลิกทำได้.","delete_messages_warning":"คุณแน่ใจหรือไม่ที่จะลบข้อความทั้งหมดสำหรับทุกคน? ส่ิงนี้ไม่สามารถเลิกทำได้","download_action":"ดาวน์โหลด","drafty_attachment":"สิ่งที่แนบมา","drafty_form":"ฟอร์ม:","drafty_image":"รูปภาพ","email_dative":"อีเมล์","email_prompt":"อีเมล, เช่น jdoe@example.com","enable_peers_messaging":"เปิดใช้งาน","enter_confirmation_code_prompt":"รหัสยืนยัน","error_invalid_id":"ID ไม่ถูกต้อง","file_attachment_too_large":"ขนาดไฟล์ {size} เกิน {limit} ที่กำหนด.","forgot_password_link":"ลืมรหัสผ่าน?","full_name_prompt":"ชื่อเต็ม, เช่น John Doe","granted_permissions":"ยินยอม","group_has_no_members":"ไม่มีสมาชิก","group_user_id_prompt":"กลุ่ม หรือ ID ผู้ใช้","image_caption_prompt":"คำอธิบายภาพ","invalid_content":"เนื้อหาไม่ถูกต้อง","invalid_security_token":"security token ไม่ถูกต้อง","label_client":"Client:","label_content_type":"ชนิดของเนื้อหา:","label_default_access_mode":"โหมดการเข้าถึงเริ่มต้น:","label_file_name":"ชื่อไฟล์:","label_group_members":"สมาชิกกลุ่ม:","label_incognito_mode":"โหมดไม่ระบุตัวตน:","label_message_sound":"เสียงข้อความ:","label_muting_topic":"ไม่สนใจ:","label_other_user":"อื่นๆ","label_password":"รหัสผ่าน","label_permissions":"สิทธิ์:","label_private":"ความคิดเห็นส่วนตัว","label_push_notifications":"การแจ้งเตือน:","label_push_notifications_disabled":"การแจ้งเตือน (requires HTTPS):","label_reset_password":"ส่งรหัสรีเซ็ตอีเมล:","label_sdk":"SDK:","label_server":"เซิร์ฟเวอร์:","label_server_address":"ที่อยู่เซิร์ฟเวอร์:","label_server_to_use":"เลือกเซิร์ฟเวอร์:","label_size":"ขนาด:","label_topic_name":"ชื่อ","label_user_contacts":"รายชื่อ","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"คุณ:","label_your_name":"ชื่อของคุณ","label_your_permissions":"สิทธิของคุณ:","last_seen_timestamp":"ล่าสุดเมื่อ","leave_chat_warning":"คุณแน่ใจหรือไม่ที่จะออกจากการสนทนานี้?","link_contact_us":"ติดต่อเรา","link_privacy_policy":"ข้อกำหนดความเป็นส่วนตัว","link_terms_of_service":"ข้อกำหนดการใช้งาน","login_prompt":"ล็อกอิน","menu_item_archive_topic":"สำเร็จ","menu_item_block":"บล็อค","menu_item_clear_messages":"ล้างข้อความ","menu_item_clear_messages_for_all":"ล้างทั้งหมด","menu_item_delete":"ลบ","menu_item_delete_for_all":"ลบทั้งหมด","menu_item_delete_topic":"ลบ","menu_item_edit_permissions":"แก้ไขสิทธิ","menu_item_info":"ข้อมูล","menu_item_member_delete":"ลบ","menu_item_mute":"ปิดการแจ้งเตือน","menu_item_reply":"ตอบกลับ","menu_item_restore_topic":"เรื่มใหม่","menu_item_send_retry":"ลองอีกครั้ง","menu_item_unblock":"ปลดบล็อค","menu_item_unmute":"เปิดการแจ้งเตือน","message_sending":"กำลังส่ง...","message_sending_failed":"ล้มเหลว","messages_not_readable":"ไม่มีสิทธิเข้าถึงข้อความ","messaging_disabled_prompt":"ปิดการส่งข้อความ","more_online_members":"+{overflow} เพิ่มเติม","new_message_prompt":"ข้อความใหม่","new_password_placeholder":"ใส่รหัสใหม่","no_connection":"ไม่มีการเชื่อมต่อ","no_contacts":"คุณไม่มีรายชื่อ :-(","numeric_confirmation_code_prompt":"ตัวเลขเท่านั้น","online_now":"ออนไลน์อยู่","password_prompt":"รหัสผ่าน","password_unchanged_prompt":"ไม่เปลี่ยนแปลง","peers_messaging_disabled":"ปิดใช้งาน การส่งข้อความ Peer's","permission_admin":"ยอมรับ ({val})","permission_delete":"ลบ ({val})","permission_join":"เข้าร่วม ({val})","permission_owner":"เจ้าของ ({val})","permission_pres":"รับการแจ้งเตือน ({val})","permission_read":"อ่าน ({val})","permission_share":"แชร์ ({val})","permission_write":"เขียน ({val})","phone_dative":"มือถือ","private_editing_placeholder":"แค่คุณที่เห็นสิ่งนี้","push_init_failed":"การแจ้งเตือนล้มเหลว","reconnect_countdown":"ถูกตัดการเชื่อมต่อ. จะเชื่อมต่อใหม่ใน {seconds}…","reconnect_now":"ลองเลย","reload_update":"โหลดใหม่","report_chat_warning":"คุณแน่ใจหรือไม่ที่จะบล็อคและรายงานการสนทนานี้","requested_permissions":"ต้องการ","save_attachment":"บันทึก","search_for_contacts":"ใช้ค้นหารายชื่อ","search_no_results":"ไม่พบผลลัพธ์","search_placeholder":"เช่น email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"การแจ้งเตือน","sidepanel_title_acc_support":"สนับสนุน","sidepanel_title_account_settings":"การตั้งค่าบัญชี","sidepanel_title_archive":"แชทที่สำเร็จ","sidepanel_title_blocked":"แชทที่ถูกบล็อค","sidepanel_title_cred":"ยืนยันตัวตน","sidepanel_title_login":"ลงชื่อเข้าใช้","sidepanel_title_newtpk":"เริ่มแชทใหม่","sidepanel_title_register":"สร้างบัญชี","sidepanel_title_reset":"รีเซ็ตรหัสผ่าน","sidepanel_title_settings":"ตั้งค่า","stay_logged_in":"คงอยู่ในระบบ","tabtitle_find_user":"หา","tabtitle_group_by_id":"ด้วย ID","tabtitle_new_group":"กลุ่มใหม่","tags_editor_no_tags":"เพิ่มแท็ก","tags_not_found":"ไม่มีการกำหนดแท็ก เพิ่มแท็กเลย","title_all_contacts":"รายชื่อทั้งหมด","title_group_members":"สมาชิกกลุ่ม","title_manage_tags":"จัดการ","title_not_found":"ไม่พบ","title_permissions":"การอนุญาต","title_tag_manager":"แท็ก (ค้นหา & ค้นพบ)","topic_block_warning":"คุณแน่ใจหรือไม่ที่ต้องการบล็อกการสนทนานี้?","topic_delete_warning":"คุณแน่ใจหรือไม่ที่ต้องการลบการสนทนานี้? สิ่งนี้ไม่สามารถเลิกทำได้","topic_name_editing_placeholder":"ชื่อกลุ่มอิสระ","unnamed_topic":"ไม่มีชื่อ","update_available":"มีการอัพเดตพร้อมใช้งาน","upload_finishing":"กำลังจบ...","user_not_found":"ไม่พบ","description_editing_placeholder":"คำอธิบาย (ไม่บังคับ)","label_description":"คำอธิบาย","button_security":"ความปลอดภัย","panel_title_crop":"ลากเพื่อปรับ","panel_title_general":"ทั่วไป","panel_title_members":"สมาชิก","panel_title_security":"ความปลอดภัย","panel_title_info":"ข้อมูล","permissions_anonymous":"ไม่ระบุตัวตน","permissions_authenticated":"รับรองความถูกต้องแล้ว","topic_delete":"ลบการสนทนา","permissions_user":"การอนุญาตของผู้ใช้","password_reset_email_sent":"รหัสความปลอดภัยถูกส่งไปยังอีเมลแล้ว","label_unarchive_topic":"สำเร็จ:","menu_item_forward":"ส่งต่อ","forward_to":"ส่งต่อไปยัง","forward_to_search_placeholder":"ค้นหารายชื่อ","label_new_password":"รหัสผ่านใหม่","drafty_unknown":"ไม่รองรับ","calls_incoming":"สายโทรเข้า","calls_outgoing":"สายโทรออก","calls_you_label":"คุณ","menu_item_video_call":"วีดีโอคอล","already_in_call":"คุณกำลังอยู่ในการสนทนา!","call_cancelled":"ยกเลิกแล้ว","call_missed":"ไม่ได้รับสาย","call_declined":"ไม่รับสาย","call_disconnected":"ตัดการเชื่อมต่อแล้ว","label_use_secure_connection":"ใช้การเชื่อมต่อที่ปลอดภัย","cred_confirmed_successfully":"การยืนยันสำเร็จ","menu_item_edit":"แก้ไข","editing_message":"กำลังแก้ไข","message_edited_marker":", ถูกแก้ไข","icon_title_add_image":"เพิ่มรูปภาพ","icon_title_attach_file":"แนบไฟล์","icon_title_delete":"ลบ","icon_title_pause":"หยุด","icon_title_play":"เล่น","icon_title_record_voice":"บันทึกข้อความเสียง","icon_title_resume":"ต่อ","icon_title_send":"ส่งข้อความ","drag_file":"ลากไฟล์มาที่นี่","drafty_video":"กำลังบันทึกวิดีโอ","call_in_progress":"กำลังดำเนินการ","menu_item_audio_call":"โทร","unrecognized_video_format":"ไม่รู้จักรูปแบบของวิดีโอนี้","loading_note":"กำลังโหลด...","password_i_have_code":"ฉันมีรหัส","label_reset_password_tel":"ส่ง SMS เพื่อรีเซ็ตรหัสผ่าน:","mobile_phone_number":"หมายเลขโทรศัพท์มือถือ","password_reset_sms_sent":"ส่งข้อความพร้อมรหัสความปลอดภัยแล้ว","mobile_number_required":"จำเป็นต้องระบุหมายเลขโทรศัพท์มือถือ","current_email":"อีเมลปัจจุบัน","current_phone":"หมายเลขโทรศัพท์ปัจจุบัน","new_email":"อีเมลใหม่","new_phone_number":"หมายเลขโทรศัพท์ใหม่","change_email":"เปลี่ยนอีเมล","change_phone":"เปลี่ยนหมายเลขโทรศัพท์","call_busy":"ยุ่งอยู่","failed_to_init_audio":"ไม่สามารถเริ่มต้นการบันทึกเสียงได้","password_reset_success":"รีเซ็ตรหัสผ่านสำเร็จ","scan_qr_code":"สแกนรหัส QR","pin_message":"พิน","unpin_message":"ปลดหมุด","self_topic_comment":"บันทึก ข้อความ ลิงก์ ไฟล์ที่บันทึกไว้เพื่ออนาคต","self_topic_name":"ข้อความที่บันทึกไว้","message_not_found":"ไม่พบข้อความ","message_deleted":"ข้อความถูกลบ","alias_editing_placeholder":"นามแฝง (ไม่บังคับ)","label_alias":"นามแฝง:","alias_already_taken":"(ใช้ไปแล้ว)","alias_invalid":"(ไม่ถูกต้อง)","label_alias_edit":"นามแฝง","select_country":"เลือกประเทศ","text_copied":"คัดลอกไปยังคลิปบอร์ดแล้ว","color_schema_dark":"มืด","color_schema_light":"สว่าง","color_schema_system":"ค่าเริ่มต้นของระบบ","label_color_schema":"ธีม:","label_text_size":"ขนาดตัวอักษร:","incognito_mode_description":"ซ่อนสถานะออนไลน์และตัวบ่งชี้การพิมพ์ของคุณ","send_command":"ส่งด้วย {key}","send_command_explained":"กด Enter เพื่อขึ้นบรรทัดใหม่","send_plain":"ส่งด้วย Enter","send_plain_explained":"กด Shift + Enter เพื่อขึ้นบรรทัดใหม่","sidepanel_title_acc_general":"ทั่วไป","label_keyboard":"แป้นพิมพ์:","pin_chat":"ปักหมุด","unpin_chat":"เลิกปักหมุด","subscriber_count":"{count, plural, other {{count, number} ผู้ติดตาม}}","label_member_count":"สมาชิก:","label_subscriber_count":"ผู้ติดตาม:","member_count":"{count, plural, other {{count, number} สมาชิก}}","tabtitle_image":"รูปภาพ","tabtitle_pattern":"ลายลวดลาย","button_restore":"คืนค่าเริ่มต้น","wallpapers":"วอลเปเปอร์","label_blur_wallpaper":"เบลอ:","label_scan_id":"สแกน ID ของฉัน:","unknown_name":"ไม่ทราบ","save_action":"บันทึก","cannot_parse_vcard":"ไม่สามารถอ่านไฟล์ vCard ได้","chat_now":"แชท","find_user":"ค้นหา","label_contact_card":"นามบัตร","label_contacts":"ผู้ติดต่อ","add_members_prompt":"เพิ่มสมาชิก"} \ No newline at end of file diff --git a/src/i18n.min/uk.json b/src/i18n.min/uk.json index 9322a7f9..34b33084 100644 --- a/src/i18n.min/uk.json +++ b/src/i18n.min/uk.json @@ -1 +1 @@ -{"action_block_contact":"Заблокувати контакт","action_cancel":"Скасувати","action_clear_messages":"Очистити повідомлення","action_delete_messages":"Очистити повідомлення для всіх","action_leave_chat":"Покинути чат","action_report_chat":"Сповістити про порушення","archived_contacts":"Чати в архіві ({count})","badge_danger":"Підозрільний","badge_owner":"власник","badge_staff":"Адміністрація","badge_verified":"Верифікований","badge_you":"ви","block_contact_warning":"Ви дійсно бажаєте заблокувати цей контакт?","blocked_contacts_link":"Заблоковані контакти ({count})","button_add_members":"Додати учасників","button_cancel":"Скасувати","button_confirm":"Підтвердити","button_create":"Створити","button_delete_account":"Видалити акаунт","button_edit":"Змінити","button_logout":"Вийти","button_ok":"OK","button_reset":"Змінити","button_send_request":"Надіслати","button_sign_in":"Увійти","button_sign_up":"Створити акаунт","button_subscribe":"Підписатися","button_update":"Оновити","cannot_initiate_file_upload":"Помилка завантаження файлу.","channel":"канал","channel_prompt":"Створити канал","chat_invitation":"Вас запросили розпочати новий чат. Як ви хочете вчинити?","chat_invitation_accept":"Прийняти","chat_invitation_block":"Заблокувати","chat_invitation_ignore":"Ігнорувати","clear_messages_warning":"Ви дійсно бажаєте видалити всі повідомлення в чаті? Їх неможливо буде відновити.","code_doesnot_match":"Код не збігається","contacts_not_found":"Чатів немає
¯∖_(ツ)_/¯","contacts_not_found_short":"Немає контактів для запиту ''{query}''","credential_email_prompt":"Реєстраційний емейл","delete_account":"Видалити акаунт","delete_account_warning":"Ви впевнені, що хочете видалити свій акаунт? Його неможливо буде відновити.","delete_messages_warning":"Ви впевнені, що бажаєте видалити всі повідомлення для всіх? Їх неможливо буде відновити.","download_action":"завантажити","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Емейл, напр. ivan@example.com","enable_peers_messaging":"Розблокувати.","enter_confirmation_code_prompt":"Код підтвердження, отриманий по {method}:","error_invalid_id":"Невірний ID","file_attachment_too_large":"Розмір файла {size} перевищує {limit} ліміт.","forgot_password_link":"Нагадати пароль","full_name_prompt":"Повне ім'я, напр. Дмитро Соколов","granted_permissions":"Отримано","group_has_no_members":"Нема учасників","group_user_id_prompt":"ID чату або користувача","image_caption_prompt":"Підпис до фото","invalid_content":"повідомлення не читається","invalid_security_token":"Токен некоректний","label_client":"Клієнт:","label_content_type":"Тип:","label_default_access_mode":"Доступу по замовчуванню:","label_file_name":"Ім'я файлу:","label_group_members":"Учасники чату:","label_incognito_mode":"Режим інкогніто:","label_message_sound":"Звук нового повідомлення:","label_muting_topic":"Без сповіщень","label_other_user":"Інший","label_password":"Пароль","label_permissions":"Права доступу:","label_private":"Коментарій","label_push_notifications":"Сповіщення:","label_push_notifications_disabled":"Сповіщення (потребують HTTPS):","label_reset_password":"Надіслати емейл для зміни пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адреса сервера:","label_server_to_use":"Використання сервера:","label_size":"Розмір:","label_topic_name":"Назва","label_user_contacts":"Конакти","label_user_id":"ID:","label_wire_transport":"З'єднання:","label_you":"Ви:","label_your_name":"Ваше ім'я","label_your_permissions":"Ваші права доступу:","last_seen_timestamp":"Був активний","leave_chat_warning":"Ви дійсно бажаєте покинути цей чат?","link_contact_us":"Зв'язатися з нами","link_privacy_policy":"Політика конфіденційності","link_terms_of_service":"Умови сервісу","login_prompt":"Логін","menu_item_archive_topic":"В архів","menu_item_block":"Заблокувати","menu_item_clear_messages":"Очистити усі повідомлення","menu_item_clear_messages_for_all":"Очистити для всіх","menu_item_delete":"Видалити повідомлення","menu_item_delete_for_all":"Видалити для всіх","menu_item_delete_topic":"Видалити чат","menu_item_edit_permissions":"Права доступу","menu_item_info":"Інформація","menu_item_member_delete":"Відписати","menu_item_mute":"Не повідомляти","menu_item_restore_topic":"Розархівувати","menu_item_send_retry":"Надіслати заново","menu_item_unblock":"Разблокувати","menu_item_unmute":"Повідомляти","message_sending":"відправлення...","message_sending_failed":"помилка","messages_not_readable":"немає доступу до повідомлень","messaging_disabled_prompt":"Відправка недоступна","more_online_members":"+ще {overflow}","new_message_prompt":"Нове повідомлення","new_password_placeholder":"Введіть новий пароль","no_connection":"Немає зв'язку","no_contacts":"Ви не маєте контактів :-(","numeric_confirmation_code_prompt":"Тільки цифри","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не змінено","peers_messaging_disabled":"Чат заблоковано у кореспондента.","permission_admin":"Підтверджувати ({val})","permission_delete":"Видаляти ({val})","permission_join":"Підписуватись ({val})","permission_owner":"Власник ({val})","permission_pres":"Повідомляти ({val})","permission_read":"Читати ({val})","permission_share":"Запрошувати ({val})","permission_write":"Писати ({val})","phone_dative":"телефону","private_editing_placeholder":"Видно тільки вам","push_init_failed":"Помилка ініціалізації пуш сповіщень","reconnect_countdown":"Немає зв'язку. Підключення через {seconds}…","reconnect_now":"Підключити зараз.","reload_update":"Оновити","report_chat_warning":"Ви дійсно бажаєте повідомити про порушення і заблокувати цей?","requested_permissions":"Потрібні","save_attachment":"зберегти","search_for_contacts":"Пошук контактів","search_no_results":"Нічого не знайдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Сповіщення","sidepanel_title_acc_support":"Підтримка","sidepanel_title_account_settings":"Налаштування акаунту","sidepanel_title_archive":"Архів чатів","sidepanel_title_blocked":"Заблоковані чати","sidepanel_title_cred":"Підтвердити","sidepanel_title_login":"Авторизація","sidepanel_title_newtpk":"Новий чат","sidepanel_title_register":"Зареєструватися","sidepanel_title_reset":"Змінити пароль","sidepanel_title_settings":"Налаштування","stay_logged_in":"Запам'ятати","tabtitle_find_user":"знайти","tabtitle_group_by_id":"по id","tabtitle_new_group":"створити","tags_editor_no_tags":"Додайте теги","tags_not_found":"Теґів немає. Додайте.","title_all_contacts":"Всі контакти","title_group_members":"Учасники","title_manage_tags":"Редагувати","title_not_found":"Не знайдено","title_permissions":"Права доступу","title_tag_manager":"Теги для пошуку","topic_block_warning":"Ви дійсно бажаєте заблокувати цей чат?","topic_delete_warning":"Ви дійсно бажаєте видалити цей чат?","topic_name_editing_placeholder":"Назва чата","unnamed_topic":"Без назви","update_available":"Є нова версія програми.","upload_finishing":"завершення...","user_not_found":"Не найдено","description_editing_placeholder":"Опис (не обов'язково)","label_description":"Опис","button_security":"Безпека","panel_title_crop":"Обрізати картинку","panel_title_general":"Загальні налаштування","panel_title_members":"Учасники","panel_title_security":"Безпека","panel_title_info":"Деталі","permissions_anonymous":"Анонімний","permissions_authenticated":"Авторизований","topic_delete":"Видалити чат","permissions_user":"Права доступу","password_reset_email_sent":"Повідомлення було надіслано на вказаний email.","label_unarchive_topic":"Архівований:","menu_item_reply":"Відповісти","menu_item_forward":"Переслати","forward_to":"Переслати","forward_to_search_placeholder":"Пошук контактів","label_new_password":"Новий пароль","drafty_unknown":"Не підтримується","calls_incoming":"Вхідний дзвінок","calls_outgoing":"Вихідний дзвінок","calls_you_label":"Ви","menu_item_video_call":"Відеодзвінок","already_in_call":"Ви вже дзвоните комусь!","call_cancelled":"скасовано","call_missed":"пропущений","call_declined":"відхилений","call_disconnected":"роз'єднаний","label_use_secure_connection":"Безпечне з'єднання","cred_confirmed_successfully":"Підтверджено успішно","menu_item_edit":"Змінити","editing_message":"Редагування","message_edited_marker":", змінено","icon_title_add_image":"Додати зображення","icon_title_attach_file":"Прикріпити файл","icon_title_delete":"Видалити запис","icon_title_pause":"Пауза програвання","icon_title_play":"Програти запис","icon_title_record_voice":"Записати голосове повідомлення","icon_title_resume":"Продовжити","icon_title_send":"Надіслати повідомлення","drag_file":"Перетягніть файл сюди","drafty_video":"Відеозапис","call_in_progress":"в процесі","menu_item_audio_call":"Подзвонити","unrecognized_video_format":"Невідомий формат відео файлу","loading_note":"Завантажується...","password_i_have_code":"У мене є код","label_reset_password_tel":"Надіслати СМС для скидання пароля","mobile_phone_number":"Номер мобільного телефону","password_reset_sms_sent":"СМС із захисним кодом відправлено.","mobile_number_required":"Номер мобільного телефону","current_email":"Поточний e-mail","current_phone":"Поточний номер телефону","new_email":"Новий e-mail","new_phone_number":"Новий номер телефону","change_email":"Змінити e-mail","change_phone":"Змінити номер телефону","call_busy":"зайнято","failed_to_init_audio":"Не вдалося ініціалізувати аудіозапис","password_reset_success":"Пароль змінено успішно","scan_qr_code":"Відскануйте QR-код","pin_message":"закріпити","unpin_message":"відкріпити","self_topic_comment":"Нотатки, повідомлення, посилання, файли збережені для нащадків","self_topic_name":"Збережені повідомлення","message_not_found":"повідомлення не знайдено","message_deleted":"повідомлення видалено","alias_editing_placeholder":"Псевдонім (необов'язково)","label_alias":"Псевдонім:","alias_already_taken":"(вже зайнято)","alias_invalid":"(недійсний)","label_alias_edit":"Псевдонім","select_country":"Виберіть країну","text_copied":"Скопійовано в буфер обміну","color_schema_dark":"Темна","color_schema_light":"Світла","color_schema_system":"Системна","label_color_schema":"Тема:","label_text_size":"Розмір тексту:","incognito_mode_description":"Приховати ваш статус онлайн та індикатори набору тексту.","send_command":"Надіслати на {key}","send_command_explained":"Натисніть Enter для нового рядка","send_plain":"Надіслати на Enter","send_plain_explained":"Натисніть Shift + Enter для нового рядка","sidepanel_title_acc_general":"Загальні","label_keyboard":"Клавіатура:","pin_chat":"Закріпити","unpin_chat":"Відкріпити","subscriber_count":"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}","label_member_count":"Учасники:","label_subscriber_count":"Підписники:","member_count":"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}","tabtitle_image":"зображення","tabtitle_pattern":"візерунок","button_restore":"Відновити типові","wallpapers":"Шпалери","label_blur_wallpaper":"Розмиття:","label_scan_id":"Сканувати мій ID:"} \ No newline at end of file +{"action_block_contact":"Заблокувати контакт","action_cancel":"Скасувати","action_clear_messages":"Очистити повідомлення","action_delete_messages":"Очистити повідомлення для всіх","action_leave_chat":"Покинути чат","action_report_chat":"Сповістити про порушення","archived_contacts":"Чати в архіві ({count})","badge_danger":"Підозрільний","badge_owner":"власник","badge_staff":"Адміністрація","badge_verified":"Верифікований","badge_you":"ви","block_contact_warning":"Ви дійсно бажаєте заблокувати цей контакт?","blocked_contacts_link":"Заблоковані контакти ({count})","button_add_members":"Додати учасників","button_cancel":"Скасувати","button_confirm":"Підтвердити","button_create":"Створити","button_delete_account":"Видалити акаунт","button_edit":"Змінити","button_logout":"Вийти","button_ok":"OK","button_reset":"Змінити","button_send_request":"Надіслати","button_sign_in":"Увійти","button_sign_up":"Створити акаунт","button_subscribe":"Підписатися","button_update":"Оновити","cannot_initiate_file_upload":"Помилка завантаження файлу.","channel":"канал","channel_prompt":"Створити канал","chat_invitation":"Вас запросили розпочати новий чат. Як ви хочете вчинити?","chat_invitation_accept":"Прийняти","chat_invitation_block":"Заблокувати","chat_invitation_ignore":"Ігнорувати","clear_messages_warning":"Ви дійсно бажаєте видалити всі повідомлення в чаті? Їх неможливо буде відновити.","code_doesnot_match":"Код не збігається","contacts_not_found":"Чатів немає\n¯∖_(ツ)_/¯","contacts_not_found_short":"Немає контактів для запиту ''{query}''","credential_email_prompt":"Реєстраційний емейл","delete_account":"Видалити акаунт","delete_account_warning":"Ви впевнені, що хочете видалити свій акаунт? Його неможливо буде відновити.","delete_messages_warning":"Ви впевнені, що бажаєте видалити всі повідомлення для всіх? Їх неможливо буде відновити.","download_action":"завантажити","drafty_attachment":"Аттачмент","drafty_form":"Форма:","drafty_image":"Картинка","email_dative":"емейлу","email_prompt":"Емейл, напр. ivan@example.com","enable_peers_messaging":"Розблокувати.","enter_confirmation_code_prompt":"Код підтвердження, отриманий по {method}:","error_invalid_id":"Невірний ID","file_attachment_too_large":"Розмір файла {size} перевищує {limit} ліміт.","forgot_password_link":"Нагадати пароль","full_name_prompt":"Повне ім'я, напр. Дмитро Соколов","granted_permissions":"Отримано","group_has_no_members":"Нема учасників","group_user_id_prompt":"ID чату або користувача","image_caption_prompt":"Підпис до фото","invalid_content":"повідомлення не читається","invalid_security_token":"Токен некоректний","label_client":"Клієнт:","label_content_type":"Тип:","label_default_access_mode":"Доступу по замовчуванню:","label_file_name":"Ім'я файлу:","label_group_members":"Учасники чату:","label_incognito_mode":"Режим інкогніто:","label_message_sound":"Звук нового повідомлення:","label_muting_topic":"Без сповіщень","label_other_user":"Інший","label_password":"Пароль","label_permissions":"Права доступу:","label_private":"Коментарій","label_push_notifications":"Сповіщення:","label_push_notifications_disabled":"Сповіщення (потребують HTTPS):","label_reset_password":"Надіслати емейл для зміни пароля:","label_sdk":"SDK:","label_server":"Сервер:","label_server_address":"Адреса сервера:","label_server_to_use":"Використання сервера:","label_size":"Розмір:","label_topic_name":"Назва","label_user_contacts":"Конакти","label_user_id":"ID:","label_wire_transport":"З'єднання:","label_you":"Ви:","label_your_name":"Ваше ім'я","label_your_permissions":"Ваші права доступу:","last_seen_timestamp":"Був активний","leave_chat_warning":"Ви дійсно бажаєте покинути цей чат?","link_contact_us":"Зв'язатися з нами","link_privacy_policy":"Політика конфіденційності","link_terms_of_service":"Умови сервісу","login_prompt":"Логін","menu_item_archive_topic":"В архів","menu_item_block":"Заблокувати","menu_item_clear_messages":"Очистити усі повідомлення","menu_item_clear_messages_for_all":"Очистити для всіх","menu_item_delete":"Видалити повідомлення","menu_item_delete_for_all":"Видалити для всіх","menu_item_delete_topic":"Видалити чат","menu_item_edit_permissions":"Права доступу","menu_item_info":"Інформація","menu_item_member_delete":"Відписати","menu_item_mute":"Не повідомляти","menu_item_restore_topic":"Розархівувати","menu_item_send_retry":"Надіслати заново","menu_item_unblock":"Разблокувати","menu_item_unmute":"Повідомляти","message_sending":"відправлення...","message_sending_failed":"помилка","messages_not_readable":"немає доступу до повідомлень","messaging_disabled_prompt":"Відправка недоступна","more_online_members":"+ще {overflow}","new_message_prompt":"Нове повідомлення","new_password_placeholder":"Введіть новий пароль","no_connection":"Немає зв'язку","no_contacts":"Ви не маєте контактів :-(","numeric_confirmation_code_prompt":"Тільки цифри","online_now":"онлайн","password_prompt":"Пароль","password_unchanged_prompt":"Не змінено","peers_messaging_disabled":"Чат заблоковано у кореспондента.","permission_admin":"Підтверджувати ({val})","permission_delete":"Видаляти ({val})","permission_join":"Підписуватись ({val})","permission_owner":"Власник ({val})","permission_pres":"Повідомляти ({val})","permission_read":"Читати ({val})","permission_share":"Запрошувати ({val})","permission_write":"Писати ({val})","phone_dative":"телефону","private_editing_placeholder":"Видно тільки вам","push_init_failed":"Помилка ініціалізації пуш сповіщень","reconnect_countdown":"Немає зв'язку. Підключення через {seconds}…","reconnect_now":"Підключити зараз.","reload_update":"Оновити","report_chat_warning":"Ви дійсно бажаєте повідомити про порушення і заблокувати цей?","requested_permissions":"Потрібні","save_attachment":"зберегти","search_for_contacts":"Пошук контактів","search_no_results":"Нічого не знайдено","search_placeholder":"Список, напр. email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"Сповіщення","sidepanel_title_acc_support":"Підтримка","sidepanel_title_account_settings":"Налаштування акаунту","sidepanel_title_archive":"Архів чатів","sidepanel_title_blocked":"Заблоковані чати","sidepanel_title_cred":"Підтвердити","sidepanel_title_login":"Авторизація","sidepanel_title_newtpk":"Новий чат","sidepanel_title_register":"Зареєструватися","sidepanel_title_reset":"Змінити пароль","sidepanel_title_settings":"Налаштування","stay_logged_in":"Запам'ятати","tabtitle_find_user":"знайти","tabtitle_group_by_id":"по id","tabtitle_new_group":"створити","tags_editor_no_tags":"Додайте теги","tags_not_found":"Теґів немає. Додайте.","title_all_contacts":"Всі контакти","title_group_members":"Учасники","title_manage_tags":"Редагувати","title_not_found":"Не знайдено","title_permissions":"Права доступу","title_tag_manager":"Теги для пошуку","topic_block_warning":"Ви дійсно бажаєте заблокувати цей чат?","topic_delete_warning":"Ви дійсно бажаєте видалити цей чат?","topic_name_editing_placeholder":"Назва чата","unnamed_topic":"Без назви","update_available":"Є нова версія програми.","upload_finishing":"завершення...","user_not_found":"Не найдено","description_editing_placeholder":"Опис (не обов'язково)","label_description":"Опис","button_security":"Безпека","panel_title_crop":"Обрізати картинку","panel_title_general":"Загальні налаштування","panel_title_members":"Учасники","panel_title_security":"Безпека","panel_title_info":"Деталі","permissions_anonymous":"Анонімний","permissions_authenticated":"Авторизований","topic_delete":"Видалити чат","permissions_user":"Права доступу","password_reset_email_sent":"Повідомлення було надіслано на вказаний email.","label_unarchive_topic":"Архівований:","menu_item_reply":"Відповісти","menu_item_forward":"Переслати","forward_to":"Переслати","forward_to_search_placeholder":"Пошук контактів","label_new_password":"Новий пароль","drafty_unknown":"Не підтримується","calls_incoming":"Вхідний дзвінок","calls_outgoing":"Вихідний дзвінок","calls_you_label":"Ви","menu_item_video_call":"Відеодзвінок","already_in_call":"Ви вже дзвоните комусь!","call_cancelled":"скасовано","call_missed":"пропущений","call_declined":"відхилений","call_disconnected":"роз'єднаний","label_use_secure_connection":"Безпечне з'єднання","cred_confirmed_successfully":"Підтверджено успішно","menu_item_edit":"Змінити","editing_message":"Редагування","message_edited_marker":", змінено","icon_title_add_image":"Додати зображення","icon_title_attach_file":"Прикріпити файл","icon_title_delete":"Видалити запис","icon_title_pause":"Пауза програвання","icon_title_play":"Програти запис","icon_title_record_voice":"Записати голосове повідомлення","icon_title_resume":"Продовжити","icon_title_send":"Надіслати повідомлення","drag_file":"Перетягніть файл сюди","drafty_video":"Відеозапис","call_in_progress":"в процесі","menu_item_audio_call":"Подзвонити","unrecognized_video_format":"Невідомий формат відео файлу","loading_note":"Завантажується...","password_i_have_code":"У мене є код","label_reset_password_tel":"Надіслати СМС для скидання пароля","mobile_phone_number":"Номер мобільного телефону","password_reset_sms_sent":"СМС із захисним кодом відправлено.","mobile_number_required":"Номер мобільного телефону","current_email":"Поточний e-mail","current_phone":"Поточний номер телефону","new_email":"Новий e-mail","new_phone_number":"Новий номер телефону","change_email":"Змінити e-mail","change_phone":"Змінити номер телефону","call_busy":"зайнято","failed_to_init_audio":"Не вдалося ініціалізувати аудіозапис","password_reset_success":"Пароль змінено успішно","scan_qr_code":"Відскануйте QR-код","pin_message":"закріпити","unpin_message":"відкріпити","self_topic_comment":"Нотатки, повідомлення, посилання, файли збережені для нащадків","self_topic_name":"Збережені повідомлення","message_not_found":"повідомлення не знайдено","message_deleted":"повідомлення видалено","alias_editing_placeholder":"Псевдонім (необов'язково)","label_alias":"Псевдонім:","alias_already_taken":"(вже зайнято)","alias_invalid":"(недійсний)","label_alias_edit":"Псевдонім","select_country":"Виберіть країну","text_copied":"Скопійовано в буфер обміну","color_schema_dark":"Темна","color_schema_light":"Світла","color_schema_system":"Системна","label_color_schema":"Тема:","label_text_size":"Розмір тексту:","incognito_mode_description":"Приховати ваш статус онлайн та індикатори набору тексту.","send_command":"Надіслати на {key}","send_command_explained":"Натисніть Enter для нового рядка","send_plain":"Надіслати на Enter","send_plain_explained":"Натисніть Shift + Enter для нового рядка","sidepanel_title_acc_general":"Загальні","label_keyboard":"Клавіатура:","pin_chat":"Закріпити","unpin_chat":"Відкріпити","subscriber_count":"{count, plural, one {{count, number} підписник} few {{count, number} підписники} many {{count, number} підписників} other {{count, number} підписників}}","label_member_count":"Учасники:","label_subscriber_count":"Підписники:","member_count":"{count, plural, one {{count, number} учасник} few {{count, number} учасники} many {{count, number} учасників} other {{count, number} учасників}}","tabtitle_image":"зображення","tabtitle_pattern":"візерунок","button_restore":"Відновити типові","wallpapers":"Шпалери","label_blur_wallpaper":"Розмиття:","label_scan_id":"Сканувати мій ID:","unknown_name":"Невідомий","save_action":"Зберегти","cannot_parse_vcard":"Не вдалося обробити файл vCard.","chat_now":"Написати","find_user":"Знайти","label_contact_card":"Картка контакту","label_contacts":"Контакти","add_members_prompt":"додати учасників"} \ No newline at end of file diff --git a/src/i18n.min/vi.json b/src/i18n.min/vi.json new file mode 100644 index 00000000..bab493d5 --- /dev/null +++ b/src/i18n.min/vi.json @@ -0,0 +1 @@ +{"action_block_contact":"Chặn liên hệ","action_cancel":"hủy","action_clear_messages":"Xóa tin nhắn","action_delete_messages":"Xóa tin nhắn cho tất cả","action_leave_chat":"Rời cuộc trò chuyện","action_report_chat":"Báo cáo cuộc trò chuyện","archived_contacts":"Liên hệ đã lưu trữ ({count})","badge_danger":"Không đáng tin","badge_owner":"chủ sở hữu","badge_staff":"Được quản lý bởi nhân viên","badge_verified":"Đã xác minh/chính thức","badge_you":"bạn","block_contact_warning":"Bạn có chắc muốn chặn liên hệ này?","blocked_contacts_link":"Liên hệ bị chặn ({count})","button_add_members":"Thêm thành viên","button_cancel":"Hủy","button_confirm":"Xác nhận","button_create":"Tạo","button_delete_account":"Xóa tài khoản","button_edit":"Sửa","button_logout":"Đăng xuất","button_ok":"OK","button_reset":"Đặt lại","button_send_request":"Gửi yêu cầu","button_sign_in":"Đăng nhập","button_sign_up":"Đăng ký","button_subscribe":"Theo dõi","button_update":"Cập nhật","cannot_initiate_file_upload":"Không thể bắt đầu tải tệp lên.","channel":"kênh","channel_prompt":"Đây là một kênh","chat_invitation":"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?","chat_invitation_accept":"Chấp nhận","chat_invitation_block":"Chặn","chat_invitation_ignore":"Bỏ qua","clear_messages_warning":"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.","code_doesnot_match":"Mã không khớp","contacts_not_found":"Bạn chưa có cuộc trò chuyện nào\n¯∖_(ツ)_/¯","contacts_not_found_short":"Không có liên hệ nào khớp với ''{query}''","credential_email_prompt":"Email đăng ký của bạn","delete_account":"Xóa tài khoản","delete_account_warning":"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.","delete_messages_warning":"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.","download_action":"tải xuống","drafty_attachment":"Tệp đính kèm","drafty_form":"Biểu mẫu:","drafty_image":"Hình ảnh","email_dative":"email","email_prompt":"Email, ví dụ jdoe@example.com","enable_peers_messaging":"Bật","enter_confirmation_code_prompt":"Mã xác nhận","error_invalid_id":"ID không hợp lệ","file_attachment_too_large":"Kích thước tệp {size} vượt quá giới hạn {limit}.","forgot_password_link":"Quên mật khẩu?","full_name_prompt":"Họ và tên, ví dụ John Doe","granted_permissions":"Đã cấp","group_has_no_members":"Không có thành viên","group_user_id_prompt":"ID nhóm hoặc người dùng","image_caption_prompt":"Chú thích hình ảnh","invalid_content":"nội dung không hợp lệ","invalid_security_token":"Mã bảo mật không hợp lệ","label_client":"Client:","label_content_type":"Kiểu nội dung:","label_default_access_mode":"Chế độ truy cập mặc định:","label_file_name":"Tên tệp:","label_group_members":"Thành viên nhóm:","label_incognito_mode":"Chế độ ẩn danh:","label_message_sound":"Âm thanh tin nhắn:","label_muting_topic":"Đã tắt:","label_other_user":"Khác","label_password":"Mật khẩu","label_permissions":"Quyền:","label_private":"Chỉ bạn nhìn thấy","label_push_notifications":"Cảnh báo thông báo:","label_push_notifications_disabled":"Cảnh báo thông báo (yêu cầu HTTPS):","label_reset_password":"Gửi email đặt lại mật khẩu:","label_sdk":"SDK:","label_server":"Máy chủ:","label_server_address":"Địa chỉ máy chủ:","label_server_to_use":"Máy chủ sử dụng:","label_size":"Kích thước:","label_topic_name":"Tên","label_user_contacts":"Danh bạ","label_user_id":"ID:","label_wire_transport":"Giao thức truyền tải:","label_you":"Bạn:","label_your_name":"Tên của bạn","label_your_permissions":"Quyền của bạn:","last_seen_timestamp":"Lần cuối hoạt động: {timestamp}","leave_chat_warning":"Bạn có chắc muốn rời cuộc trò chuyện này?","link_contact_us":"Liên hệ chúng tôi","link_privacy_policy":"Chính sách quyền riêng tư","link_terms_of_service":"Điều khoản dịch vụ","login_prompt":"Đăng nhập","menu_item_archive_topic":"Lưu trữ","menu_item_block":"Chặn","menu_item_clear_messages":"Xóa tin nhắn","menu_item_clear_messages_for_all":"Xóa cho tất cả","menu_item_delete":"Xóa","menu_item_delete_for_all":"Xóa cho tất cả","menu_item_delete_topic":"Xóa","menu_item_edit_permissions":"Sửa quyền","menu_item_info":"Thông tin","menu_item_member_delete":"Xóa","menu_item_mute":"Tắt thông báo","menu_item_reply":"Trả lời","menu_item_restore_topic":"Khôi phục","menu_item_send_retry":"Thử lại","menu_item_unblock":"Bỏ chặn","menu_item_unmute":"Bật thông báo","message_sending":"đang gửi...","message_sending_failed":"thất bại","messages_not_readable":"không có quyền xem tin nhắn","messaging_disabled_prompt":"Tin nhắn bị tắt","more_online_members":"+{overflow} nữa","new_message_prompt":"Tin nhắn mới","new_password_placeholder":"Nhập mật khẩu mới","no_connection":"Không có kết nối","no_contacts":"Bạn chưa có liên hệ nào :-(","numeric_confirmation_code_prompt":"Chỉ số","online_now":"đang online","password_prompt":"Mật khẩu","password_unchanged_prompt":"Không thay đổi","peers_messaging_disabled":"Tin nhắn của người kia đã bị tắt.","permission_admin":"Phê duyệt ({val})","permission_delete":"Xóa ({val})","permission_join":"Tham gia ({val})","permission_owner":"Chủ sở hữu ({val})","permission_pres":"Nhận thông báo ({val})","permission_read":"Đọc ({val})","permission_share":"Chia sẻ ({val})","permission_write":"Ghi ({val})","phone_dative":"điện thoại","private_editing_placeholder":"Chỉ mình bạn nhìn thấy","push_init_failed":"Khởi tạo thông báo đẩy thất bại","reconnect_countdown":"Mất kết nối. Kết nối lại sau {seconds}…","reconnect_now":"Thử ngay","reload_update":"Tải lại","report_chat_warning":"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?","requested_permissions":"Đã yêu cầu","save_attachment":"lưu","search_for_contacts":"Dùng tìm kiếm để tìm liên hệ","search_no_results":"Không có kết quả nào","search_placeholder":"Liệt kê như email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Thông báo","sidepanel_title_acc_support":"Hỗ trợ","sidepanel_title_account_settings":"Cài đặt tài khoản","sidepanel_title_archive":"Cuộc trò chuyện đã lưu trữ","sidepanel_title_blocked":"Cuộc trò chuyện bị chặn","sidepanel_title_cred":"Xác nhận thông tin","sidepanel_title_login":"Đăng nhập","sidepanel_title_newtpk":"Bắt đầu cuộc trò chuyện mới","sidepanel_title_register":"Tạo tài khoản","sidepanel_title_reset":"Đặt lại mật khẩu","sidepanel_title_settings":"Cài đặt","stay_logged_in":"Giữ tôi đăng nhập","tabtitle_find_user":"tìm","tabtitle_group_by_id":"theo id","tabtitle_new_group":"nhóm mới","tags_editor_no_tags":"Thêm vài thẻ","tags_not_found":"Chưa có thẻ nào. Hãy thêm một vài thẻ.","title_all_contacts":"Tất cả liên hệ","title_group_members":"Thành viên nhóm","title_manage_tags":"Quản lý","title_not_found":"Không tìm thấy","title_permissions":"Quyền","title_tag_manager":"Thẻ (tìm kiếm & khám phá)","topic_block_warning":"Bạn có chắc muốn chặn cuộc trò chuyện này?","topic_delete_warning":"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.","topic_name_editing_placeholder":"Tên nhóm tự do","unnamed_topic":"Chưa đặt tên","update_available":"Có bản cập nhật.","upload_finishing":"đang hoàn tất...","user_not_found":"Không tìm thấy","description_editing_placeholder":"Mô tả tùy chọn","label_description":"Mô tả","button_security":"Bảo mật","panel_title_crop":"Kéo để điều chỉnh","panel_title_general":"Chung","panel_title_members":"Thành viên","panel_title_security":"Bảo mật","panel_title_info":"Thông tin","permissions_anonymous":"Ẩn danh","permissions_authenticated":"Đã xác thực","topic_delete":"Xóa cuộc trò chuyện","permissions_user":"Quyền của người dùng","password_reset_email_sent":"Email chứa mã bảo mật đã được gửi.","label_unarchive_topic":"Đã lưu trữ:","menu_item_forward":"Chuyển tiếp","forward_to":"Chuyển tiếp đến","forward_to_search_placeholder":"Tìm kiếm liên hệ","label_new_password":"Mật khẩu mới","drafty_unknown":"Không hỗ trợ","calls_incoming":"Cuộc gọi đến","calls_outgoing":"Cuộc gọi đi","calls_you_label":"Bạn","menu_item_video_call":"Gọi video","already_in_call":"Bạn đang có một cuộc gọi đang diễn ra!","call_cancelled":"đã hủy","call_missed":"bỏ lỡ","call_declined":"từ chối","call_disconnected":"mất kết nối","label_use_secure_connection":"Sử dụng kết nối bảo mật","cred_confirmed_successfully":"Xác nhận thành công","menu_item_edit":"Sửa","editing_message":"Đang sửa","message_edited_marker":", đã sửa","icon_title_add_image":"Thêm hình ảnh","icon_title_attach_file":"Đính kèm tệp","icon_title_delete":"Xóa","icon_title_pause":"Tạm dừng","icon_title_play":"Phát","icon_title_record_voice":"Ghi âm tin nhắn","icon_title_resume":"Tiếp tục","icon_title_send":"Gửi tin nhắn","drag_file":"Kéo tệp vào đây","drafty_video":"Video","call_in_progress":"đang diễn ra","menu_item_audio_call":"Gọi","unrecognized_video_format":"Không nhận dạng được định dạng video này","loading_note":"Đang tải...","password_i_have_code":"Tôi có mã","label_reset_password_tel":"Gửi SMS đặt lại mật khẩu:","mobile_phone_number":"Số điện thoại di động","password_reset_sms_sent":"Tin nhắn chứa mã bảo mật đã được gửi.","mobile_number_required":"Cần số điện thoại di động","current_email":"Email hiện tại","current_phone":"Số điện thoại hiện tại","new_email":"Email mới","new_phone_number":"Số điện thoại mới","change_email":"Đổi email","change_phone":"Đổi số điện thoại","call_busy":"bận","failed_to_init_audio":"Không thể khởi tạo ghi âm","password_reset_success":"Đặt lại mật khẩu thành công","scan_qr_code":"Quét mã QR","add_members_prompt":"thêm thành viên","alias_already_taken":"(đã được sử dụng)","alias_editing_placeholder":"Bí danh (tùy chọn)","alias_invalid":"(không hợp lệ)","button_restore":"Khôi phục mặc định","cannot_parse_vcard":"Không thể đọc tệp vCard.","chat_now":"Nhắn tin","color_schema_dark":"Tối","color_schema_light":"Sáng","color_schema_system":"Mặc định hệ thống","find_user":"Tìm kiếm","incognito_mode_description":"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.","label_alias":"Bí danh:","label_alias_edit":"Bí danh","label_blur_wallpaper":"Làm mờ:","label_color_schema":"Giao diện:","label_contact_card":"Danh thiếp","label_contacts":"Danh bạ","label_keyboard":"Bàn phím:","label_member_count":"Thành viên:","label_scan_id":"Quét mã của tôi:","label_subscriber_count":"Người theo dõi:","label_text_size":"Cỡ chữ:","member_count":"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}","message_deleted":"tin nhắn đã xóa","message_not_found":"không tìm thấy tin nhắn","pin_chat":"Ghim","pin_message":"Ghim","save_action":"Lưu","select_country":"Chọn quốc gia","self_topic_comment":"Ghi chú, tin nhắn, liên kết, tệp lưu lại","self_topic_name":"Tin nhắn đã lưu","send_command":"Gửi bằng {key}","send_command_explained":"Nhấn Enter để xuống dòng","send_plain":"Gửi bằng Enter","send_plain_explained":"Nhấn Shift + Enter để xuống dòng","sidepanel_title_acc_general":"Chung","subscriber_count":"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}","tabtitle_image":"hình ảnh","tabtitle_pattern":"hoa văn","text_copied":"Đã sao chép vào clipboard","unknown_name":"Không rõ","unpin_chat":"Bỏ ghim","unpin_message":"Bỏ ghim","wallpapers":"Hình nền"} \ No newline at end of file diff --git a/src/i18n.min/zh-TW.json b/src/i18n.min/zh-TW.json index 17dd5de1..70aa369a 100644 --- a/src/i18n.min/zh-TW.json +++ b/src/i18n.min/zh-TW.json @@ -1 +1 @@ -{"action_block_contact":"封鎖聯絡人","action_cancel":"取消","action_clear_messages":"清除訊息","action_delete_messages":"為所有人清除訊息","action_leave_chat":"離開對話","action_report_chat":"檢舉對話","archived_contacts":"已封存的聯絡人 ({count})","badge_danger":"不可信","badge_owner":"擁有者","badge_staff":"員工管理","badge_verified":"已驗證/官方","badge_you":"您","block_contact_warning":"您確定要封鎖此聯絡人嗎?","blocked_contacts_link":"已封鎖的聯絡人 ({count})","button_add_members":"新增成員","button_cancel":"取消","button_confirm":"確認","button_create":"建立","button_delete_account":"刪除帳號","button_edit":"編輯","button_logout":"登出","button_ok":"OK","button_reset":"重設","button_send_request":"傳送要求","button_sign_in":"登入","button_sign_up":"註冊","button_subscribe":"訂閱","button_update":"更新","cannot_initiate_file_upload":"無法為檔案上傳初始化。","channel":"頻道","channel_prompt":"這是頻道","chat_invitation":"您已被邀請開始新對話。您接下來要做什麼呢?","chat_invitation_accept":"接受","chat_invitation_block":"封鎖","chat_invitation_ignore":"忽略","clear_messages_warning":"您確定要清除所有訊息嗎?此操作無法復原。","code_doesnot_match":"代碼不相符","contacts_not_found":"您沒有任何對話
¯∖_(ツ)_/¯","contacts_not_found_short":"沒有符合 ''{query}'' 的聯絡人","credential_email_prompt":"您的註冊電子郵件地址","delete_account":"刪除帳號","delete_account_warning":"您確定要刪除您的帳戶嗎?此操作無法撤消。","delete_messages_warning":"您確定要為所有人刪除所有訊息嗎?此操作無法復原。","download_action":"下載","drafty_attachment":"附加檔案","drafty_form":"表單:","drafty_image":"圖片","email_dative":"電子郵件地址","email_prompt":"電子郵件地址,例如:jdoe@example.com","enable_peers_messaging":"啟用","enter_confirmation_code_prompt":"輸入透過 {method} 傳送給您的確認碼:","error_invalid_id":"ID 無效","file_attachment_too_large":"檔案大小 {size} 超出 {limit} 限制。","forgot_password_link":"忘記密碼?","full_name_prompt":"全名,例如:王小明","granted_permissions":"已授權","group_has_no_members":"無成員","group_user_id_prompt":"群組或使用者 ID","image_caption_prompt":"圖片說明","invalid_content":"內容無效","invalid_security_token":"安全權杖無效","label_client":"客戶端:","label_content_type":"類型:","label_default_access_mode":"預設存取模式:","label_file_name":"檔名:","label_group_members":"群組成員:","label_incognito_mode":"無痕模式:","label_message_sound":"訊息提示聲:","label_muting_topic":"靜音:","label_other_user":"其他","label_password":"密碼","label_permissions":"權限:","label_private":"私人留言","label_push_notifications":"通知:","label_push_notifications_disabled":"通知 (需要 HTTPS):","label_reset_password":"傳送重設密碼郵件:","label_sdk":"SDK:","label_server":"伺服器:","label_server_address":"伺服器位址:","label_server_to_use":"使用的伺服器:","label_size":"大小:","label_topic_name":"名稱","label_user_contacts":"聯絡人","label_user_id":"ID:","label_wire_transport":"線路傳輸:","label_you":"您:","label_your_name":"您的名字","label_your_permissions":"您的權限:","last_seen_timestamp":"最後上線","leave_chat_warning":"您確定要離開此對話嗎?","link_contact_us":"聯絡我們","link_privacy_policy":"隱私權政策","link_terms_of_service":"服務條款","login_prompt":"登入","menu_item_archive_topic":"封存","menu_item_block":"封鎖","menu_item_clear_messages":"清除訊息","menu_item_clear_messages_for_all":"為所有人清除訊息","menu_item_delete":"刪除","menu_item_delete_for_all":"為所有人刪除","menu_item_delete_topic":"刪除","menu_item_edit_permissions":"編輯權限","menu_item_info":"Info","menu_item_member_delete":"移除","menu_item_mute":"靜音","menu_item_restore_topic":"恢復","menu_item_send_retry":"重試","menu_item_unblock":"解除封鎖","menu_item_unmute":"解除靜音","message_sending":"正在傳送...","message_sending_failed":"失敗","messages_not_readable":"沒有存取訊息的權限","messaging_disabled_prompt":"停用訊息","more_online_members":"+{overflow}","new_message_prompt":"新訊息","new_password_placeholder":"輸入新的密碼","no_connection":"無連線","no_contacts":"您沒有任何聯絡人 :-(","numeric_confirmation_code_prompt":"僅數字","online_now":"上線中","password_prompt":"密碼","password_unchanged_prompt":"未修改","peers_messaging_disabled":"Peer 已停用訊息。","permission_admin":"核可 ({val})","permission_delete":"刪除 ({val})","permission_join":"加入 ({val})","permission_owner":"擁有者 ({val})","permission_pres":"收到通知 ({val})","permission_read":"讀取 ({val})","permission_share":"分享 ({val})","permission_write":"撰寫 ({val})","phone_dative":"phone","private_editing_placeholder":"僅您可見","push_init_failed":"初始化通知失敗。","reconnect_countdown":"已斷線。將在 {seconds} 秒後重新連線…","reconnect_now":"現在重試","reload_update":"重新載入","report_chat_warning":"您確定要封鎖並檢舉此對話嗎?","requested_permissions":"重新請求","save_attachment":"儲存","search_for_contacts":"使用搜尋來尋找聯絡人","search_no_results":"搜尋無結果","search_placeholder":"例如 email:alice@example.com, tel:17025550003... 的清單","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支援","sidepanel_title_account_settings":"帳號設定","sidepanel_title_archive":"已封存的對話","sidepanel_title_blocked":"已封鎖的對話","sidepanel_title_cred":"確認認證","sidepanel_title_login":"登入","sidepanel_title_newtpk":"開始新對話","sidepanel_title_register":"建立帳號","sidepanel_title_reset":"重設密碼","sidepanel_title_settings":"設定","stay_logged_in":"保持登入","tabtitle_find_user":"尋找","tabtitle_group_by_id":"以 id","tabtitle_new_group":"新群組","tags_editor_no_tags":"新增一些標籤","tags_not_found":"未定義任何標籤。請新增一些標籤。","title_all_contacts":"所有聯絡人","title_group_members":"群組成員","title_manage_tags":"管理","title_not_found":"找不到","title_permissions":"權限","title_tag_manager":"標籤 (使用者探索)","topic_block_warning":"您確定要封鎖此對話嗎?","topic_delete_warning":"您確定要刪除此對話嗎?","topic_name_editing_placeholder":"群組的任意名稱","unnamed_topic":"未命名","update_available":"有可用的更新。","upload_finishing":"正在完成...","user_not_found":"找不到","description_editing_placeholder":"說明(可選)","label_description":"說明","button_security":"安全性","panel_title_crop":"拖動調整","panel_title_general":"一般","panel_title_members":"成員","panel_title_security":"安全性","panel_title_info":"資訊","permissions_anonymous":"匿名","permissions_authenticated":"已認證","topic_delete":"刪除聊天","permissions_user":"用戶權限","password_reset_email_sent":"已發送一封帶有安全代碼的電子郵件。","label_unarchive_topic":"存檔聊天:","menu_item_reply":"回答","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索聯繫人","label_new_password":"新密碼","drafty_unknown":"不支持","calls_incoming":"來電","calls_outgoing":"撥出電話","calls_you_label":"你","menu_item_video_call":"視頻電話","already_in_call":"你已經在說話了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"斷開連接","label_use_secure_connection":"使用安全連接","cred_confirmed_successfully":"確認成功","menu_item_edit":"編輯","editing_message":"編輯","message_edited_marker":",編輯","icon_title_add_image":"添加圖片","icon_title_attach_file":"附加文件","icon_title_delete":"刪除錄音","icon_title_pause":"暫停播放","icon_title_play":"播放錄音","icon_title_record_voice":"錄製語音消息","icon_title_resume":"恢復播放","icon_title_send":"發信息","drag_file":"將文件拖到這裡","drafty_video":"視頻錄製","call_in_progress":"通話中","menu_item_audio_call":"稱呼","unrecognized_video_format":"無法識別此視頻的格式","loading_note":"加載中...","password_i_have_code":"我有代碼","label_reset_password_tel":"發送短信重置密碼","mobile_phone_number":"手機號碼","password_reset_sms_sent":"已發送帶有安全代碼的短信。","mobile_number_required":"需要手機號","current_email":"當前郵箱","current_phone":"當前電話號碼","new_email":"新電子郵件地址","new_phone_number":"新電話號碼","change_email":"更改郵箱","change_phone":"更改電話號碼","call_busy":"忙碌的","pin_message":"置頂消息","unpin_message":"取消置頂消息","failed_to_init_audio":"初始化錄音失敗","password_reset_success":"密碼重置成功","scan_qr_code":"掃描二維碼","self_topic_comment":"為後代所儲存的註解、訊息、連結、檔案","self_topic_name":"已儲存的訊息","message_not_found":"未找到訊息","message_deleted":"訊息已刪除","alias_editing_placeholder":"別名(可選)","label_alias":"別名:","alias_already_taken":"(已採取)","alias_invalid":"(無效)","label_alias_edit":"別名","select_country":"選擇國家","text_copied":"已複製到剪貼簿","color_schema_dark":"深色","color_schema_light":"淺色","color_schema_system":"系統預設","label_color_schema":"主題:","label_text_size":"文字大小:","incognito_mode_description":"隱藏您的線上狀態和正在輸入指示器。","send_command":"按 {key} 傳送","send_command_explained":"按 Enter 換行","send_plain":"按 Enter 傳送","send_plain_explained":"按 Shift + Enter 換行","sidepanel_title_acc_general":"一般","label_keyboard":"鍵盤:","pin_chat":"置頂","unpin_chat":"取消置頂","subscriber_count":"{count, plural, other {{count, number} 位訂閱者}}","label_member_count":"成員:","label_subscriber_count":"訂閱者:","member_count":"{count, plural, other {{count, number} 位成員}}","tabtitle_image":"圖片","tabtitle_pattern":"圖案","button_restore":"恢復預設","wallpapers":"桌布","label_blur_wallpaper":"模糊:","label_scan_id":"掃描我的 ID:"} \ No newline at end of file +{"action_block_contact":"封鎖聯絡人","action_cancel":"取消","action_clear_messages":"清除訊息","action_delete_messages":"為所有人清除訊息","action_leave_chat":"離開對話","action_report_chat":"檢舉對話","archived_contacts":"已封存的聯絡人 ({count})","badge_danger":"不可信","badge_owner":"擁有者","badge_staff":"員工管理","badge_verified":"已驗證/官方","badge_you":"您","block_contact_warning":"您確定要封鎖此聯絡人嗎?","blocked_contacts_link":"已封鎖的聯絡人 ({count})","button_add_members":"新增成員","button_cancel":"取消","button_confirm":"確認","button_create":"建立","button_delete_account":"刪除帳號","button_edit":"編輯","button_logout":"登出","button_ok":"OK","button_reset":"重設","button_send_request":"傳送要求","button_sign_in":"登入","button_sign_up":"註冊","button_subscribe":"訂閱","button_update":"更新","cannot_initiate_file_upload":"無法為檔案上傳初始化。","channel":"頻道","channel_prompt":"這是頻道","chat_invitation":"您已被邀請開始新對話。您接下來要做什麼呢?","chat_invitation_accept":"接受","chat_invitation_block":"封鎖","chat_invitation_ignore":"忽略","clear_messages_warning":"您確定要清除所有訊息嗎?此操作無法復原。","code_doesnot_match":"代碼不相符","contacts_not_found":"您沒有任何對話\n¯∖_(ツ)_/¯","contacts_not_found_short":"沒有符合 ''{query}'' 的聯絡人","credential_email_prompt":"您的註冊電子郵件地址","delete_account":"刪除帳號","delete_account_warning":"您確定要刪除您的帳戶嗎?此操作無法撤消。","delete_messages_warning":"您確定要為所有人刪除所有訊息嗎?此操作無法復原。","download_action":"下載","drafty_attachment":"附加檔案","drafty_form":"表單:","drafty_image":"圖片","email_dative":"電子郵件地址","email_prompt":"電子郵件地址,例如:jdoe@example.com","enable_peers_messaging":"啟用","enter_confirmation_code_prompt":"輸入透過 {method} 傳送給您的確認碼:","error_invalid_id":"ID 無效","file_attachment_too_large":"檔案大小 {size} 超出 {limit} 限制。","forgot_password_link":"忘記密碼?","full_name_prompt":"全名,例如:王小明","granted_permissions":"已授權","group_has_no_members":"無成員","group_user_id_prompt":"群組或使用者 ID","image_caption_prompt":"圖片說明","invalid_content":"內容無效","invalid_security_token":"安全權杖無效","label_client":"客戶端:","label_content_type":"類型:","label_default_access_mode":"預設存取模式:","label_file_name":"檔名:","label_group_members":"群組成員:","label_incognito_mode":"無痕模式:","label_message_sound":"訊息提示聲:","label_muting_topic":"靜音:","label_other_user":"其他","label_password":"密碼","label_permissions":"權限:","label_private":"私人留言","label_push_notifications":"通知:","label_push_notifications_disabled":"通知 (需要 HTTPS):","label_reset_password":"傳送重設密碼郵件:","label_sdk":"SDK:","label_server":"伺服器:","label_server_address":"伺服器位址:","label_server_to_use":"使用的伺服器:","label_size":"大小:","label_topic_name":"名稱","label_user_contacts":"聯絡人","label_user_id":"ID:","label_wire_transport":"線路傳輸:","label_you":"您:","label_your_name":"您的名字","label_your_permissions":"您的權限:","last_seen_timestamp":"最後上線","leave_chat_warning":"您確定要離開此對話嗎?","link_contact_us":"聯絡我們","link_privacy_policy":"隱私權政策","link_terms_of_service":"服務條款","login_prompt":"登入","menu_item_archive_topic":"封存","menu_item_block":"封鎖","menu_item_clear_messages":"清除訊息","menu_item_clear_messages_for_all":"為所有人清除訊息","menu_item_delete":"刪除","menu_item_delete_for_all":"為所有人刪除","menu_item_delete_topic":"刪除","menu_item_edit_permissions":"編輯權限","menu_item_info":"Info","menu_item_member_delete":"移除","menu_item_mute":"靜音","menu_item_restore_topic":"恢復","menu_item_send_retry":"重試","menu_item_unblock":"解除封鎖","menu_item_unmute":"解除靜音","message_sending":"正在傳送...","message_sending_failed":"失敗","messages_not_readable":"沒有存取訊息的權限","messaging_disabled_prompt":"停用訊息","more_online_members":"+{overflow}","new_message_prompt":"新訊息","new_password_placeholder":"輸入新的密碼","no_connection":"無連線","no_contacts":"您沒有任何聯絡人 :-(","numeric_confirmation_code_prompt":"僅數字","online_now":"上線中","password_prompt":"密碼","password_unchanged_prompt":"未修改","peers_messaging_disabled":"Peer 已停用訊息。","permission_admin":"核可 ({val})","permission_delete":"刪除 ({val})","permission_join":"加入 ({val})","permission_owner":"擁有者 ({val})","permission_pres":"收到通知 ({val})","permission_read":"讀取 ({val})","permission_share":"分享 ({val})","permission_write":"撰寫 ({val})","phone_dative":"phone","private_editing_placeholder":"僅您可見","push_init_failed":"初始化通知失敗。","reconnect_countdown":"已斷線。將在 {seconds} 秒後重新連線…","reconnect_now":"現在重試","reload_update":"重新載入","report_chat_warning":"您確定要封鎖並檢舉此對話嗎?","requested_permissions":"重新請求","save_attachment":"儲存","search_for_contacts":"使用搜尋來尋找聯絡人","search_no_results":"搜尋無結果","search_placeholder":"例如 email:alice@example.com, tel:17025550003... 的清單","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支援","sidepanel_title_account_settings":"帳號設定","sidepanel_title_archive":"已封存的對話","sidepanel_title_blocked":"已封鎖的對話","sidepanel_title_cred":"確認認證","sidepanel_title_login":"登入","sidepanel_title_newtpk":"開始新對話","sidepanel_title_register":"建立帳號","sidepanel_title_reset":"重設密碼","sidepanel_title_settings":"設定","stay_logged_in":"保持登入","tabtitle_find_user":"尋找","tabtitle_group_by_id":"以 id","tabtitle_new_group":"新群組","tags_editor_no_tags":"新增一些標籤","tags_not_found":"未定義任何標籤。請新增一些標籤。","title_all_contacts":"所有聯絡人","title_group_members":"群組成員","title_manage_tags":"管理","title_not_found":"找不到","title_permissions":"權限","title_tag_manager":"標籤 (使用者探索)","topic_block_warning":"您確定要封鎖此對話嗎?","topic_delete_warning":"您確定要刪除此對話嗎?","topic_name_editing_placeholder":"群組的任意名稱","unnamed_topic":"未命名","update_available":"有可用的更新。","upload_finishing":"正在完成...","user_not_found":"找不到","description_editing_placeholder":"說明(可選)","label_description":"說明","button_security":"安全性","panel_title_crop":"拖動調整","panel_title_general":"一般","panel_title_members":"成員","panel_title_security":"安全性","panel_title_info":"資訊","permissions_anonymous":"匿名","permissions_authenticated":"已認證","topic_delete":"刪除聊天","permissions_user":"用戶權限","password_reset_email_sent":"已發送一封帶有安全代碼的電子郵件。","label_unarchive_topic":"存檔聊天:","menu_item_reply":"回答","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索聯繫人","label_new_password":"新密碼","drafty_unknown":"不支持","calls_incoming":"來電","calls_outgoing":"撥出電話","calls_you_label":"你","menu_item_video_call":"視頻電話","already_in_call":"你已經在說話了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"斷開連接","label_use_secure_connection":"使用安全連接","cred_confirmed_successfully":"確認成功","menu_item_edit":"編輯","editing_message":"編輯","message_edited_marker":",編輯","icon_title_add_image":"添加圖片","icon_title_attach_file":"附加文件","icon_title_delete":"刪除錄音","icon_title_pause":"暫停播放","icon_title_play":"播放錄音","icon_title_record_voice":"錄製語音消息","icon_title_resume":"恢復播放","icon_title_send":"發信息","drag_file":"將文件拖到這裡","drafty_video":"視頻錄製","call_in_progress":"通話中","menu_item_audio_call":"稱呼","unrecognized_video_format":"無法識別此視頻的格式","loading_note":"加載中...","password_i_have_code":"我有代碼","label_reset_password_tel":"發送短信重置密碼","mobile_phone_number":"手機號碼","password_reset_sms_sent":"已發送帶有安全代碼的短信。","mobile_number_required":"需要手機號","current_email":"當前郵箱","current_phone":"當前電話號碼","new_email":"新電子郵件地址","new_phone_number":"新電話號碼","change_email":"更改郵箱","change_phone":"更改電話號碼","call_busy":"忙碌的","pin_message":"置頂消息","unpin_message":"取消置頂消息","failed_to_init_audio":"初始化錄音失敗","password_reset_success":"密碼重置成功","scan_qr_code":"掃描二維碼","self_topic_comment":"為後代所儲存的註解、訊息、連結、檔案","self_topic_name":"已儲存的訊息","message_not_found":"未找到訊息","message_deleted":"訊息已刪除","alias_editing_placeholder":"別名(可選)","label_alias":"別名:","alias_already_taken":"(已採取)","alias_invalid":"(無效)","label_alias_edit":"別名","select_country":"選擇國家","text_copied":"已複製到剪貼簿","color_schema_dark":"深色","color_schema_light":"淺色","color_schema_system":"系統預設","label_color_schema":"主題:","label_text_size":"文字大小:","incognito_mode_description":"隱藏您的線上狀態和正在輸入指示器。","send_command":"按 {key} 傳送","send_command_explained":"按 Enter 換行","send_plain":"按 Enter 傳送","send_plain_explained":"按 Shift + Enter 換行","sidepanel_title_acc_general":"一般","label_keyboard":"鍵盤:","pin_chat":"置頂","unpin_chat":"取消置頂","subscriber_count":"{count, plural, other {{count, number} 位訂閱者}}","label_member_count":"成員:","label_subscriber_count":"訂閱者:","member_count":"{count, plural, other {{count, number} 位成員}}","tabtitle_image":"圖片","tabtitle_pattern":"圖案","button_restore":"恢復預設","wallpapers":"桌布","label_blur_wallpaper":"模糊:","label_scan_id":"掃描我的 ID:","unknown_name":"未知","save_action":"儲存","cannot_parse_vcard":"無法解析 vCard 檔案。","chat_now":"聊天","find_user":"尋找","label_contact_card":"聯絡人卡片","label_contacts":"聯絡人","add_members_prompt":"新增成員"} \ No newline at end of file diff --git a/src/i18n.min/zh.json b/src/i18n.min/zh.json index 39b7572c..af117473 100644 --- a/src/i18n.min/zh.json +++ b/src/i18n.min/zh.json @@ -1 +1 @@ -{"action_block_contact":"屏蔽联系人","action_cancel":"取消","action_clear_messages":"删除讯息","action_delete_messages":"删除所有帖子","action_leave_chat":"离开","action_report_chat":"检举垃圾邮件","archived_contacts":"已归档联系人 ({count})","badge_danger":"可疑的","badge_owner":"所有者","badge_staff":"在员工管理下","badge_verified":"值得信赖","badge_you":"你","block_contact_warning":"您确定要阻止此联系人吗?","blocked_contacts_link":"封锁的联络人 ({count})","button_add_members":"添加成员","button_cancel":"取消","button_confirm":"确认","button_create":"创建","button_delete_account":"删除帐户","button_edit":"编辑","button_logout":"登出","button_ok":"好","button_reset":"重置","button_send_request":"发送请求","button_sign_in":"登录","button_sign_up":"注册","button_subscribe":"订阅","button_update":"更新","cannot_initiate_file_upload":"无法初始化文件上传。","channel":"频道","channel_prompt":"这是一个频道","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_block":"屏蔽","chat_invitation_ignore":"忽略","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","code_doesnot_match":"代码不匹配","contacts_not_found":"你尚无会话
¯∖_(ツ)_/¯","contacts_not_found_short":"无联系人匹配''{query}''","credential_email_prompt":"你的注册邮箱","delete_account":"删除帐户","delete_account_warning":"您确定要删除您的帐户吗?无法撤消。","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","download_action":"下载","drafty_attachment":"附件","drafty_form":"形式:","drafty_image":"图像","email_dative":"电子邮件","email_prompt":"电子邮件,例如 zhang@example.com","enable_peers_messaging":"启用","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","error_invalid_id":"无效 ID","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","forgot_password_link":"忘记密码?","full_name_prompt":"全名,例如张伟","granted_permissions":"已授予","group_has_no_members":"无成员","group_user_id_prompt":"群组或用户 ID","image_caption_prompt":"图片标题","invalid_content":"无效内容","invalid_security_token":"无效的安全令牌","label_client":"客户端:","label_content_type":"内容类型:","label_default_access_mode":"默认访问模式:","label_file_name":"文件名:","label_group_members":"群组成员:","label_incognito_mode":"无痕模式:","label_message_sound":"消息提示音:","label_muting_topic":"已静音:","label_other_user":"其他","label_password":"密码","label_permissions":"权限:","label_private":"私人评论","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","label_reset_password":"发送密码重置邮件:","label_sdk":"开发包:","label_server":"服务器:","label_server_address":"服务器地址:","label_server_to_use":"使用的服务器:","label_size":"大小:","label_topic_name":"名称","label_user_contacts":"往来","label_user_id":"地址:","label_wire_transport":"线路传输:","label_you":"你:","label_your_name":"你的姓名","label_your_permissions":"你的权限:","last_seen_timestamp":"最后可见","leave_chat_warning":"您确定要退出此对话吗?","link_contact_us":"联系我们","link_privacy_policy":"隐私政策","link_terms_of_service":"条款和条件","login_prompt":"登录","menu_item_archive_topic":"归档","menu_item_block":"屏蔽","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_delete_topic":"删除","menu_item_edit_permissions":"编辑权限","menu_item_info":"信息","menu_item_member_delete":"移除","menu_item_mute":"静音","menu_item_restore_topic":"从存档中恢复","menu_item_send_retry":"重试","menu_item_unblock":"取消屏蔽","menu_item_unmute":"取消静音","message_sending":"正在发送...","message_sending_failed":"发送失败","messages_not_readable":"无消息访问权限","messaging_disabled_prompt":"消息已禁用","more_online_members":"还有{overflow}个","new_message_prompt":"新消息","new_password_placeholder":"输入新密码","no_connection":"无连接","no_contacts":"你尚无联系人 (._.)","numeric_confirmation_code_prompt":"仅数字","online_now":"在线","password_prompt":"密码","password_unchanged_prompt":"未改变","peers_messaging_disabled":"成员间消息已禁用。","permission_admin":"批准 ({val})","permission_delete":"删除 ({val})","permission_join":"加入 ({val})","permission_owner":"所有者 ({val})","permission_pres":"获取通知 ({val})","permission_read":"读取 ({val})","permission_share":"分享 ({val})","permission_write":"写入 ({val})","phone_dative":"电话","private_editing_placeholder":"仅自己可见","push_init_failed":"初始化推送通知失败","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","reload_update":"重新载入","report_chat_warning":"您确定要停止并报告此对话吗?","requested_permissions":"已请求","save_attachment":"保存","search_for_contacts":"使用搜索寻找联系人","search_no_results":"搜索返回任何结果","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","sidepanel_title_account_settings":"帐号设定","sidepanel_title_archive":"已存档会话","sidepanel_title_blocked":"被阻止的聊天","sidepanel_title_cred":"确认凭据","sidepanel_title_login":"登录","sidepanel_title_newtpk":"开始新会话","sidepanel_title_register":"创建账户","sidepanel_title_reset":"重置密码","sidepanel_title_settings":"设置","stay_logged_in":"保持登录","tabtitle_find_user":"搜索","tabtitle_group_by_id":"通过 id","tabtitle_new_group":"新群组","tags_editor_no_tags":"添加一些标签","tags_not_found":"尚未定义标签。添加一些。","title_all_contacts":"全部联系人","title_group_members":"群组成员","title_manage_tags":"管理标签","title_not_found":"无法找到","title_permissions":"权限","title_tag_manager":"标签(用户发现)","topic_block_warning":"您确定要阻止此对话吗?","topic_delete_warning":"您确定要删除此对话吗?","topic_name_editing_placeholder":"群组自由格式名称","unnamed_topic":"未命名","update_available":"更新可用。","upload_finishing":"正在结束...","user_not_found":"未找到","description_editing_placeholder":"说明(可选)","label_description":"说明","button_security":"安全","panel_title_crop":"拖动调整","panel_title_general":"常用设定","panel_title_members":"成员","panel_title_security":"安全","panel_title_info":"信息","permissions_anonymous":"匿名","permissions_authenticated":"已认证","topic_delete":"删除聊天","permissions_user":"用户权限","password_reset_email_sent":"已发送一封带有安全代码的电子邮件。","label_unarchive_topic":"存档:","menu_item_reply":"回复","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索联系人","label_new_password":"新密码","drafty_unknown":"不支持","calls_incoming":"来电","calls_outgoing":"拨出电话","calls_you_label":"你","menu_item_video_call":"视频电话","already_in_call":"你已经在说话了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"断开连接","label_use_secure_connection":"使用安全连接","cred_confirmed_successfully":"确认成功","menu_item_edit":"编辑","editing_message":"编辑","message_edited_marker":",编辑","icon_title_add_image":"添加图片","icon_title_attach_file":"附加文件","icon_title_delete":"删除录音","icon_title_pause":"暂停播放","icon_title_play":"播放录音","icon_title_record_voice":"录制语音信息","icon_title_resume":"恢复播放","icon_title_send":"发信息","drag_file":"将文件拖到这里","drafty_video":"视频录制","call_in_progress":"通话中","menu_item_audio_call":"称呼","unrecognized_video_format":"无法识别此视频的格式","loading_note":"加载中...","password_i_have_code":"我有代码","label_reset_password_tel":"发送短信重置密码","mobile_phone_number":"手机号","password_reset_sms_sent":"已发送带有安全代码的短信。","mobile_number_required":"需要手机号","current_email":"当前邮箱","current_phone":"当前电话号码","new_email":"新电子邮件地址","new_phone_number":"新电话号码","change_email":"更改邮箱","change_phone":"更改电话号码","call_busy":"忙碌的","pin_message":"置顶消息","unpin_message":"取消置顶消息","failed_to_init_audio":"初始化录音失败","password_reset_success":"密码重置成功","scan_qr_code":"扫描二维码","self_topic_comment":"为后人保存的注释、消息、链接、文件","self_topic_name":"已保存的消息","message_not_found":"未找到消息","message_deleted":"消息已删除","alias_editing_placeholder":"别名(可选)","label_alias":"别名:","alias_already_taken":"(已占用)","alias_invalid":"(无效)","label_alias_edit":"别名","select_country":"选择国家","text_copied":"已复制到剪贴板","color_schema_dark":"深色","color_schema_light":"浅色","color_schema_system":"系统默认","label_color_schema":"主题:","label_text_size":"文字大小:","incognito_mode_description":"隐藏您的在线状态和正在输入指示器。","send_command":"按 {key} 发送","send_command_explained":"按 Enter 换行","send_plain":"按 Enter 发送","send_plain_explained":"按 Shift + Enter 换行","sidepanel_title_acc_general":"常规","label_keyboard":"键盘:","pin_chat":"置顶","unpin_chat":"取消置顶","subscriber_count":"{count, plural, other {{count, number} 位订阅者}}","label_member_count":"成员:","label_subscriber_count":"订阅者:","member_count":"{count, plural, other {{count, number} 位成员}}","tabtitle_image":"图片","tabtitle_pattern":"图案","button_restore":"恢复默认","wallpapers":"壁纸","label_blur_wallpaper":"模糊:","label_scan_id":"扫描我的 ID:"} \ No newline at end of file +{"action_block_contact":"屏蔽联系人","action_cancel":"取消","action_clear_messages":"删除讯息","action_delete_messages":"删除所有帖子","action_leave_chat":"离开","action_report_chat":"检举垃圾邮件","archived_contacts":"已归档联系人 ({count})","badge_danger":"可疑的","badge_owner":"所有者","badge_staff":"在员工管理下","badge_verified":"值得信赖","badge_you":"你","block_contact_warning":"您确定要阻止此联系人吗?","blocked_contacts_link":"封锁的联络人 ({count})","button_add_members":"添加成员","button_cancel":"取消","button_confirm":"确认","button_create":"创建","button_delete_account":"删除帐户","button_edit":"编辑","button_logout":"登出","button_ok":"好","button_reset":"重置","button_send_request":"发送请求","button_sign_in":"登录","button_sign_up":"注册","button_subscribe":"订阅","button_update":"更新","cannot_initiate_file_upload":"无法初始化文件上传。","channel":"频道","channel_prompt":"这是一个频道","chat_invitation":"你受邀开始新会话。你想怎么做?","chat_invitation_accept":"接受","chat_invitation_block":"屏蔽","chat_invitation_ignore":"忽略","clear_messages_warning":"您确定要清除所有消息吗?无法撤消。","code_doesnot_match":"代码不匹配","contacts_not_found":"你尚无会话\n¯∖_(ツ)_/¯","contacts_not_found_short":"无联系人匹配''{query}''","credential_email_prompt":"你的注册邮箱","delete_account":"删除帐户","delete_account_warning":"您确定要删除您的帐户吗?无法撤消。","delete_messages_warning":"您确定要删除所有消息吗?无法撤消。","download_action":"下载","drafty_attachment":"附件","drafty_form":"形式:","drafty_image":"图像","email_dative":"电子邮件","email_prompt":"电子邮件,例如 zhang@example.com","enable_peers_messaging":"启用","enter_confirmation_code_prompt":"输入通过{method}发送的验证码:","error_invalid_id":"无效 ID","file_attachment_too_large":"文件大小 {size} 超过 {limit} 限制。","forgot_password_link":"忘记密码?","full_name_prompt":"全名,例如张伟","granted_permissions":"已授予","group_has_no_members":"无成员","group_user_id_prompt":"群组或用户 ID","image_caption_prompt":"图片标题","invalid_content":"无效内容","invalid_security_token":"无效的安全令牌","label_client":"客户端:","label_content_type":"内容类型:","label_default_access_mode":"默认访问模式:","label_file_name":"文件名:","label_group_members":"群组成员:","label_incognito_mode":"无痕模式:","label_message_sound":"消息提示音:","label_muting_topic":"已静音:","label_other_user":"其他","label_password":"密码","label_permissions":"权限:","label_private":"私人评论","label_push_notifications":"通知提醒:","label_push_notifications_disabled":"通知提醒(需要 HTTPS):","label_reset_password":"发送密码重置邮件:","label_sdk":"开发包:","label_server":"服务器:","label_server_address":"服务器地址:","label_server_to_use":"使用的服务器:","label_size":"大小:","label_topic_name":"名称","label_user_contacts":"往来","label_user_id":"地址:","label_wire_transport":"线路传输:","label_you":"你:","label_your_name":"你的姓名","label_your_permissions":"你的权限:","last_seen_timestamp":"最后可见","leave_chat_warning":"您确定要退出此对话吗?","link_contact_us":"联系我们","link_privacy_policy":"隐私政策","link_terms_of_service":"条款和条件","login_prompt":"登录","menu_item_archive_topic":"归档","menu_item_block":"屏蔽","menu_item_clear_messages":"清空消息","menu_item_clear_messages_for_all":"全部清除","menu_item_delete":"删除","menu_item_delete_for_all":"全部删除","menu_item_delete_topic":"删除","menu_item_edit_permissions":"编辑权限","menu_item_info":"信息","menu_item_member_delete":"移除","menu_item_mute":"静音","menu_item_restore_topic":"从存档中恢复","menu_item_send_retry":"重试","menu_item_unblock":"取消屏蔽","menu_item_unmute":"取消静音","message_sending":"正在发送...","message_sending_failed":"发送失败","messages_not_readable":"无消息访问权限","messaging_disabled_prompt":"消息已禁用","more_online_members":"还有{overflow}个","new_message_prompt":"新消息","new_password_placeholder":"输入新密码","no_connection":"无连接","no_contacts":"你尚无联系人 (._.)","numeric_confirmation_code_prompt":"仅数字","online_now":"在线","password_prompt":"密码","password_unchanged_prompt":"未改变","peers_messaging_disabled":"成员间消息已禁用。","permission_admin":"批准 ({val})","permission_delete":"删除 ({val})","permission_join":"加入 ({val})","permission_owner":"所有者 ({val})","permission_pres":"获取通知 ({val})","permission_read":"读取 ({val})","permission_share":"分享 ({val})","permission_write":"写入 ({val})","phone_dative":"电话","private_editing_placeholder":"仅自己可见","push_init_failed":"初始化推送通知失败","reconnect_countdown":"连接已断开。{seconds} 秒后重新连接…","reconnect_now":"立即尝试","reload_update":"重新载入","report_chat_warning":"您确定要停止并报告此对话吗?","requested_permissions":"已请求","save_attachment":"保存","search_for_contacts":"使用搜索寻找联系人","search_no_results":"搜索返回任何结果","search_placeholder":"列表如 email:alice@example.com, tel:+17025550003...","sidepanel_title_acc_notifications":"通知","sidepanel_title_acc_support":"支持","sidepanel_title_account_settings":"帐号设定","sidepanel_title_archive":"已存档会话","sidepanel_title_blocked":"被阻止的聊天","sidepanel_title_cred":"确认凭据","sidepanel_title_login":"登录","sidepanel_title_newtpk":"开始新会话","sidepanel_title_register":"创建账户","sidepanel_title_reset":"重置密码","sidepanel_title_settings":"设置","stay_logged_in":"保持登录","tabtitle_find_user":"搜索","tabtitle_group_by_id":"通过 id","tabtitle_new_group":"新群组","tags_editor_no_tags":"添加一些标签","tags_not_found":"尚未定义标签。添加一些。","title_all_contacts":"全部联系人","title_group_members":"群组成员","title_manage_tags":"管理标签","title_not_found":"无法找到","title_permissions":"权限","title_tag_manager":"标签(用户发现)","topic_block_warning":"您确定要阻止此对话吗?","topic_delete_warning":"您确定要删除此对话吗?","topic_name_editing_placeholder":"群组自由格式名称","unnamed_topic":"未命名","update_available":"更新可用。","upload_finishing":"正在结束...","user_not_found":"未找到","description_editing_placeholder":"说明(可选)","label_description":"说明","button_security":"安全","panel_title_crop":"拖动调整","panel_title_general":"常用设定","panel_title_members":"成员","panel_title_security":"安全","panel_title_info":"信息","permissions_anonymous":"匿名","permissions_authenticated":"已认证","topic_delete":"删除聊天","permissions_user":"用户权限","password_reset_email_sent":"已发送一封带有安全代码的电子邮件。","label_unarchive_topic":"存档:","menu_item_reply":"回复","menu_item_forward":"重定向","forward_to":"重定向消息","forward_to_search_placeholder":"搜索联系人","label_new_password":"新密码","drafty_unknown":"不支持","calls_incoming":"来电","calls_outgoing":"拨出电话","calls_you_label":"你","menu_item_video_call":"视频电话","already_in_call":"你已经在说话了!","call_cancelled":"取消","call_missed":"未接","call_declined":"被拒","call_disconnected":"断开连接","label_use_secure_connection":"使用安全连接","cred_confirmed_successfully":"确认成功","menu_item_edit":"编辑","editing_message":"编辑","message_edited_marker":",编辑","icon_title_add_image":"添加图片","icon_title_attach_file":"附加文件","icon_title_delete":"删除录音","icon_title_pause":"暂停播放","icon_title_play":"播放录音","icon_title_record_voice":"录制语音信息","icon_title_resume":"恢复播放","icon_title_send":"发信息","drag_file":"将文件拖到这里","drafty_video":"视频录制","call_in_progress":"通话中","menu_item_audio_call":"称呼","unrecognized_video_format":"无法识别此视频的格式","loading_note":"加载中...","password_i_have_code":"我有代码","label_reset_password_tel":"发送短信重置密码","mobile_phone_number":"手机号","password_reset_sms_sent":"已发送带有安全代码的短信。","mobile_number_required":"需要手机号","current_email":"当前邮箱","current_phone":"当前电话号码","new_email":"新电子邮件地址","new_phone_number":"新电话号码","change_email":"更改邮箱","change_phone":"更改电话号码","call_busy":"忙碌的","pin_message":"置顶消息","unpin_message":"取消置顶消息","failed_to_init_audio":"初始化录音失败","password_reset_success":"密码重置成功","scan_qr_code":"扫描二维码","self_topic_comment":"为后人保存的注释、消息、链接、文件","self_topic_name":"已保存的消息","message_not_found":"未找到消息","message_deleted":"消息已删除","alias_editing_placeholder":"别名(可选)","label_alias":"别名:","alias_already_taken":"(已占用)","alias_invalid":"(无效)","label_alias_edit":"别名","select_country":"选择国家","text_copied":"已复制到剪贴板","color_schema_dark":"深色","color_schema_light":"浅色","color_schema_system":"系统默认","label_color_schema":"主题:","label_text_size":"文字大小:","incognito_mode_description":"隐藏您的在线状态和正在输入指示器。","send_command":"按 {key} 发送","send_command_explained":"按 Enter 换行","send_plain":"按 Enter 发送","send_plain_explained":"按 Shift + Enter 换行","sidepanel_title_acc_general":"常规","label_keyboard":"键盘:","pin_chat":"置顶","unpin_chat":"取消置顶","subscriber_count":"{count, plural, other {{count, number} 位订阅者}}","label_member_count":"成员:","label_subscriber_count":"订阅者:","member_count":"{count, plural, other {{count, number} 位成员}}","tabtitle_image":"图片","tabtitle_pattern":"图案","button_restore":"恢复默认","wallpapers":"壁纸","label_blur_wallpaper":"模糊:","label_scan_id":"扫描我的 ID:","unknown_name":"未知","save_action":"保存","cannot_parse_vcard":"无法解析 vCard 文件。","chat_now":"聊天","find_user":"查找","label_contact_card":"联系人卡片","label_contacts":"联系人","add_members_prompt":"添加成员"} \ No newline at end of file diff --git a/src/i18n/ar.json b/src/i18n/ar.json index 7be6e9c6..1eff0178 100644 --- a/src/i18n/ar.json +++ b/src/i18n/ar.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "ليس لديك محادثات
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "ليس لديك محادثات\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1225,7 +1225,7 @@ "label_description": { "translation": "الوصف", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "غير معروف", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "حفظ", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "تعذّر تحليل ملف vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "محادثة", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "بحث", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "بطاقة الاتصال", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "جهات الاتصال", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "إضافة أعضاء", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/de.json b/src/i18n/de.json index a0e2edc7..83a64936 100644 --- a/src/i18n/de.json +++ b/src/i18n/de.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Sie haben keine Unterhaltungen
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Sie haben keine Unterhaltungen\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1225,7 +1225,7 @@ "label_description": { "translation": "Beschreibung", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Unbekannt", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Speichern", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "vCard-Datei konnte nicht verarbeitet werden.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Chatten", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Suchen", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Kontaktkarte", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Kontakte", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "Mitglieder hinzufügen", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/en.json b/src/i18n/en.json index 84ae79c2..d0ea4b9f 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "You have no chats
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "You have no chats\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1225,7 +1225,7 @@ "label_description": { "translation": "Description", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Unknown", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Save", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Cannot parse vCard file.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Chat", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Find", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Contact Card", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Contacts", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "add members", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/es.json b/src/i18n/es.json index 7466dbad..d0f4a5d7 100644 --- a/src/i18n/es.json +++ b/src/i18n/es.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "No tienes chats
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "No tienes chats\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "Descripción", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Desconocido", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Guardar", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "No se puede analizar el archivo vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Chatear", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Buscar", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Tarjeta de contacto", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Contactos", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "añadir miembros", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/ex/base-en.json b/src/i18n/ex/base-en.json index cdae1e38..326e3915 100644 --- a/src/i18n/ex/base-en.json +++ b/src/i18n/ex/base-en.json @@ -23,6 +23,10 @@ "defaultMessage": "Report Conversation", "description": "Flat button [Report Group]" }, + "add_members_prompt": { + "defaultMessage": "add members", + "description": "Placeholder in group members input field" + }, "alias_already_taken": { "defaultMessage": "(already taken)", "description": "Error message for alias already taken" @@ -175,6 +179,10 @@ "defaultMessage": "Cannot initiate file upload.", "description": "Generic error messagewhen attachment fails" }, + "cannot_parse_vcard": { + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed" + }, "change_email": { "defaultMessage": "Change email", "description": "Prompt to change current email" @@ -207,6 +215,10 @@ "defaultMessage": "Ignore", "description": "Action [Ignore] for chat invitation." }, + "chat_now": { + "defaultMessage": "Chat", + "description": "Label for message button in contact card" + }, "clear_messages_warning": { "defaultMessage": "Are you sure you want to clear all messages? It cannot be undone.", "description": "Alert dialog warning when deleting all messages." @@ -228,7 +240,7 @@ "description": "Name of the color schema" }, "contacts_not_found": { - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found" }, "contacts_not_found_short": { @@ -327,6 +339,10 @@ "defaultMessage": "The file size {size} exceeds the {limit} limit.", "description": "Error message when attachment is too large" }, + "find_user": { + "defaultMessage": "Find", + "description": "Label for search button in contact card" + }, "forgot_password_link": { "defaultMessage": "Forgot password?", "description": "Link to Reset password form" @@ -422,6 +438,14 @@ "defaultMessage": "Theme:", "description": "Label for selecting color scheme (dark, light) in Settings" }, + "label_contact_card": { + "defaultMessage": "Contact Card", + "description": "Label for contact card preview" + }, + "label_contacts": { + "defaultMessage": "Contacts", + "description": "Label for contact information" + }, "label_content_type": { "defaultMessage": "Content type:", "description": "Label for file content type (mime)" @@ -432,7 +456,7 @@ }, "label_description": { "defaultMessage": "Description", - "description": "Label for editing topic description" + "description": "Label for description of user or topic" }, "label_file_name": { "defaultMessage": "File name:", @@ -880,6 +904,10 @@ "defaultMessage": "Requested", "description": "Title for permissions" }, + "save_action": { + "defaultMessage": "Save", + "description": "Label for Save button" + }, "save_attachment": { "defaultMessage": "save", "description": "Call to save an attachment" @@ -1056,6 +1084,10 @@ "defaultMessage": "Freeform name of the group", "description": "Prompt for entering topic name" }, + "unknown_name": { + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing" + }, "unnamed_topic": { "defaultMessage": "Unnamed", "description": "Title shown when the topic has no name" diff --git a/src/i18n/fr.json b/src/i18n/fr.json index ad91b27c..dd7da423 100644 --- a/src/i18n/fr.json +++ b/src/i18n/fr.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Vous n'avez aucune conversation
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Vous n'avez aucune conversation\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1225,7 +1225,7 @@ "label_description": { "translation": "Description", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Inconnu", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Enregistrer", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Impossible d'analyser le fichier vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Discuter", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Rechercher", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Carte de contact", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Contacts", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "ajouter des membres", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/it.json b/src/i18n/it.json index 0658484e..939a75a3 100644 --- a/src/i18n/it.json +++ b/src/i18n/it.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Non hai chats
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Non hai chats\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "Descrizione", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Sconosciuto", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Salva", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Impossibile analizzare il file vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Chatta", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Cerca", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Scheda contatto", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Contatti", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "aggiungi membri", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/ko.json b/src/i18n/ko.json index 321539ea..00b24f3a 100644 --- a/src/i18n/ko.json +++ b/src/i18n/ko.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "채팅이없습니다
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "채팅이없습니다\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "설명", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "알 수 없음", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "저장", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "vCard 파일을 파싱할 수 없습니다.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "채팅", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "찾기", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "연락처 카드", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "연락처", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "멤버 추가", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/ro.json b/src/i18n/ro.json index 99ab893b..660db13c 100644 --- a/src/i18n/ro.json +++ b/src/i18n/ro.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Nu ai contacte salvate
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Nu ai contacte salvate\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "Descriere", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Necunoscut", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Salvează", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Nu se poate procesa fișierul vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Conversație", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Caută", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Card de contact", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Contacte", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "adaugă membri", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/ru.json b/src/i18n/ru.json index 87a364c9..378f70ff 100644 --- a/src/i18n/ru.json +++ b/src/i18n/ru.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Чатов нет
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Чатов нет\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "Описание", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Неизвестный", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Сохранить", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Не удалось обработать файл vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Написать", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Найти", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Карточка контакта", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Контакты", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "добавить участников", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/th.json b/src/i18n/th.json index 8f2d2ae6..7fb1fe58 100644 --- a/src/i18n/th.json +++ b/src/i18n/th.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "ไม่พบแชท
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "ไม่พบแชท \n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1225,7 +1225,7 @@ "label_description": { "translation": "คำอธิบาย", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "ไม่ทราบ", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "บันทึก", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "ไม่สามารถอ่านไฟล์ vCard ได้", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "แชท", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "ค้นหา", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "นามบัตร", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "ผู้ติดต่อ", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "เพิ่มสมาชิก", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/uk.json b/src/i18n/uk.json index ea6fc0ba..6d76d4fd 100644 --- a/src/i18n/uk.json +++ b/src/i18n/uk.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "Чатів немає
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "Чатів немає\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "Опис", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "Невідомий", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Зберегти", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Не вдалося обробити файл vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Написати", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Знайти", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Картка контакту", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Контакти", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "додати учасників", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/vi.json b/src/i18n/vi.json new file mode 100644 index 00000000..c3c19a1a --- /dev/null +++ b/src/i18n/vi.json @@ -0,0 +1,1966 @@ +{ + "action_block_contact": { + "translation": "Chặn liên hệ", + "defaultMessage": "Block Contact", + "description": "Flat button [Block Contact]", + "missing": false, + "obsolete": false + }, + "action_cancel": { + "translation": "hủy", + "defaultMessage": "cancel", + "description": "Call to action [cancel]", + "missing": false, + "obsolete": false + }, + "action_clear_messages": { + "translation": "Xóa tin nhắn", + "defaultMessage": "Clear Messages", + "description": "Flat button [Clear Messages] (soft-delete messages)", + "missing": false, + "obsolete": false + }, + "action_delete_messages": { + "translation": "Xóa tin nhắn cho tất cả", + "defaultMessage": "Clear Messages for All", + "description": "Flat button [Clear for All] (hard-delete all messages)", + "missing": false, + "obsolete": false + }, + "action_leave_chat": { + "translation": "Rời cuộc trò chuyện", + "defaultMessage": "Leave Conversation", + "description": "Flat button [Leave Conversation]", + "missing": false, + "obsolete": false + }, + "action_report_chat": { + "translation": "Báo cáo cuộc trò chuyện", + "defaultMessage": "Report Conversation", + "description": "Flat button [Report Group]", + "missing": false, + "obsolete": false + }, + "archived_contacts": { + "translation": "Liên hệ đã lưu trữ ({count})", + "defaultMessage": "Archived contacts ({count})", + "description": "Label for archived chats", + "missing": false, + "obsolete": false + }, + "badge_danger": { + "translation": "Không đáng tin", + "defaultMessage": "Untrustworthy", + "description": "Suspicious or untrustworthy account or topic badge", + "missing": false, + "obsolete": false + }, + "badge_owner": { + "translation": "chủ sở hữu", + "defaultMessage": "owner", + "description": "Badge for indicating the owner", + "missing": false, + "obsolete": false + }, + "badge_staff": { + "translation": "Được quản lý bởi nhân viên", + "defaultMessage": "Staff-managed", + "description": "Explanation of a staff-managed account or topic badge", + "missing": false, + "obsolete": false + }, + "badge_verified": { + "translation": "Đã xác minh/chính thức", + "defaultMessage": "Verified/official", + "description": "Explanation of a verified account or topic badge", + "missing": false, + "obsolete": false + }, + "badge_you": { + "translation": "bạn", + "defaultMessage": "you", + "description": "Badge for indicating the current user", + "missing": false, + "obsolete": false + }, + "block_contact_warning": { + "translation": "Bạn có chắc muốn chặn liên hệ này?", + "defaultMessage": "Are you sure you want to block this contact?", + "description": "Alert dialog warning when blocking a contact.", + "missing": false, + "obsolete": false + }, + "blocked_contacts_link": { + "translation": "Liên hệ bị chặn ({count})", + "defaultMessage": "Blocked contacts ({count})", + "description": "Blocked contacts link", + "missing": false, + "obsolete": false + }, + "button_add_members": { + "translation": "Thêm thành viên", + "defaultMessage": "Add members", + "description": "Flat button [Add members] (to topic)", + "missing": false, + "obsolete": false + }, + "button_cancel": { + "translation": "Hủy", + "defaultMessage": "Cancel", + "description": "Button [Cancel]", + "missing": false, + "obsolete": false + }, + "button_confirm": { + "translation": "Xác nhận", + "defaultMessage": "Confirm", + "description": "Button [Confirm]", + "missing": false, + "obsolete": false + }, + "button_create": { + "translation": "Tạo", + "defaultMessage": "Create", + "description": "Button [Create]", + "missing": false, + "obsolete": false + }, + "button_delete_account": { + "translation": "Xóa tài khoản", + "defaultMessage": "Delete account", + "description": "Button [Delete account]", + "missing": false, + "obsolete": false + }, + "button_edit": { + "translation": "Sửa", + "defaultMessage": "Edit", + "description": "Call to action [Edit]", + "missing": false, + "obsolete": false + }, + "button_logout": { + "translation": "Đăng xuất", + "defaultMessage": "Logout", + "description": "Button [Logout]", + "missing": false, + "obsolete": false + }, + "button_ok": { + "translation": "OK", + "defaultMessage": "OK", + "description": "Button [OK]", + "missing": false, + "obsolete": false + }, + "button_reset": { + "translation": "Đặt lại", + "defaultMessage": "Reset", + "description": "Button [Reset]", + "missing": false, + "obsolete": false + }, + "button_send_request": { + "translation": "Gửi yêu cầu", + "defaultMessage": "Send request", + "description": "Button [Send request]", + "missing": false, + "obsolete": false + }, + "button_sign_in": { + "translation": "Đăng nhập", + "defaultMessage": "Sign in", + "description": "Button [Sign In]", + "missing": false, + "obsolete": false + }, + "button_sign_up": { + "translation": "Đăng ký", + "defaultMessage": "Sign up", + "description": "Create account button [Sign Up]", + "missing": false, + "obsolete": false + }, + "button_subscribe": { + "translation": "Theo dõi", + "defaultMessage": "Subscribe", + "description": "Button [Subscribe]", + "missing": false, + "obsolete": false + }, + "button_update": { + "translation": "Cập nhật", + "defaultMessage": "Update", + "description": "Button [Update]", + "missing": false, + "obsolete": false + }, + "cannot_initiate_file_upload": { + "translation": "Không thể bắt đầu tải tệp lên.", + "defaultMessage": "Cannot initiate file upload.", + "description": "Generic error messagewhen attachment fails", + "missing": false, + "obsolete": false + }, + "channel": { + "translation": "kênh", + "defaultMessage": "channel", + "description": "Subtitle shown for channels in MessagesView instead of last seen", + "missing": false, + "obsolete": false + }, + "channel_prompt": { + "translation": "Đây là một kênh", + "defaultMessage": "This is a channel", + "description": "Checkbox label when creating a channel", + "missing": false, + "obsolete": false + }, + "chat_invitation": { + "translation": "Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?", + "defaultMessage": "You are invited to start a new chat. What would you like to do?", + "description": "New chat invitation message: [Accept] [Ignore] [Block].", + "missing": false, + "obsolete": false + }, + "chat_invitation_accept": { + "translation": "Chấp nhận", + "defaultMessage": "Accept", + "description": "Action [Accept] for chat invitation.", + "missing": false, + "obsolete": false + }, + "chat_invitation_block": { + "translation": "Chặn", + "defaultMessage": "Block", + "description": "Action [Block] for chat invitation.", + "missing": false, + "obsolete": false + }, + "chat_invitation_ignore": { + "translation": "Bỏ qua", + "defaultMessage": "Ignore", + "description": "Action [Ignore] for chat invitation.", + "missing": false, + "obsolete": false + }, + "clear_messages_warning": { + "translation": "Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.", + "defaultMessage": "Are you sure you want to clear all messages? It cannot be undone.", + "description": "Alert dialog warning when deleting all messages.", + "missing": false, + "obsolete": false + }, + "code_doesnot_match": { + "translation": "Mã không khớp", + "defaultMessage": "Code does not match", + "description": "Error message when the credential validation code is incorrect.", + "missing": false, + "obsolete": false + }, + "contacts_not_found": { + "translation": "Bạn chưa có cuộc trò chuyện nào\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", + "description": "HTML message shown in ContactList when no contacts are found", + "missing": false, + "obsolete": false + }, + "contacts_not_found_short": { + "translation": "Không có liên hệ nào khớp với ''{query}''", + "defaultMessage": "No contacts match ''{query}''", + "description": "Shown in ContactsView when search returned no results", + "missing": false, + "obsolete": false + }, + "credential_email_prompt": { + "translation": "Email đăng ký của bạn", + "defaultMessage": "Your registration email", + "description": "Placeholder for entering email", + "missing": false, + "obsolete": false + }, + "delete_account": { + "translation": "Xóa tài khoản", + "defaultMessage": "Delete account", + "description": "Title for delete account warning", + "missing": false, + "obsolete": false + }, + "delete_account_warning": { + "translation": "Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.", + "defaultMessage": "Are you sure you want to delete your account? It cannot be undone.", + "description": "Warning message when deleting an account", + "missing": false, + "obsolete": false + }, + "delete_messages_warning": { + "translation": "Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.", + "defaultMessage": "Are you sure you want to delete all messages for everyone? It cannot be undone.", + "description": "Alert dialog warning when hard-deleting all messages.", + "missing": false, + "obsolete": false + }, + "download_action": { + "translation": "tải xuống", + "defaultMessage": "download", + "description": "Call to action [download]", + "missing": false, + "obsolete": false + }, + "drafty_attachment": { + "translation": "Tệp đính kèm", + "defaultMessage": "Attachment", + "description": "Comment for attachment in Drafty", + "missing": false, + "obsolete": false + }, + "drafty_form": { + "translation": "Biểu mẫu:", + "defaultMessage": "Form:", + "description": "Comment for form in Drafty", + "missing": false, + "obsolete": false + }, + "drafty_image": { + "translation": "Hình ảnh", + "defaultMessage": "Picture", + "description": "Comment for embedded images in Drafty", + "missing": false, + "obsolete": false + }, + "email_dative": { + "translation": "email", + "defaultMessage": "email", + "description": "Dative case of 'email', i.e. 'email' in 'by email'", + "missing": false, + "obsolete": false + }, + "email_prompt": { + "translation": "Email, ví dụ jdoe@example.com", + "defaultMessage": "Email, e.g. jdoe@example.com", + "description": "Input placeholder for email entry", + "missing": false, + "obsolete": false + }, + "enable_peers_messaging": { + "translation": "Bật", + "defaultMessage": "Enable", + "description": "Call to action to enable peer's messaging", + "missing": false, + "obsolete": false + }, + "enter_confirmation_code_prompt": { + "translation": "Mã xác nhận", + "defaultMessage": "Confirmation code", + "description": "Request to enter confirmation code", + "missing": false, + "obsolete": false + }, + "error_invalid_id": { + "translation": "ID không hợp lệ", + "defaultMessage": "Invalid ID", + "description": "Error message", + "missing": false, + "obsolete": false + }, + "file_attachment_too_large": { + "translation": "Kích thước tệp {size} vượt quá giới hạn {limit}.", + "defaultMessage": "The file size {size} exceeds the {limit} limit.", + "description": "Error message when attachment is too large", + "missing": false, + "obsolete": false + }, + "forgot_password_link": { + "translation": "Quên mật khẩu?", + "defaultMessage": "Forgot password?", + "description": "Link to Reset password form", + "missing": false, + "obsolete": false + }, + "full_name_prompt": { + "translation": "Họ và tên, ví dụ John Doe", + "defaultMessage": "Full name, e.g. John Doe", + "description": "Input placeholder for person's full name", + "missing": false, + "obsolete": false + }, + "granted_permissions": { + "translation": "Đã cấp", + "defaultMessage": "Granted", + "description": "Title for permissions", + "missing": false, + "obsolete": false + }, + "group_has_no_members": { + "translation": "Không có thành viên", + "defaultMessage": "No members", + "description": "Shown in place of group members", + "missing": false, + "obsolete": false + }, + "group_user_id_prompt": { + "translation": "ID nhóm hoặc người dùng", + "defaultMessage": "Group or User ID", + "description": "Prompt for entering user or group ID", + "missing": false, + "obsolete": false + }, + "image_caption_prompt": { + "translation": "Chú thích hình ảnh", + "defaultMessage": "Image caption", + "description": "Prompt in SendMessage for attached image", + "missing": false, + "obsolete": false + }, + "invalid_content": { + "translation": "nội dung không hợp lệ", + "defaultMessage": "invalid content", + "description": "Shown when the message is unreadable", + "missing": false, + "obsolete": false + }, + "invalid_security_token": { + "translation": "Mã bảo mật không hợp lệ", + "defaultMessage": "Invalid security token", + "description": "Error message when resetting password.", + "missing": false, + "obsolete": false + }, + "label_client": { + "translation": "Client:", + "defaultMessage": "Client:", + "description": "Label for a client version", + "missing": false, + "obsolete": false + }, + "label_content_type": { + "translation": "Kiểu nội dung:", + "defaultMessage": "Content type:", + "description": "Label for file content type (mime)", + "missing": false, + "obsolete": false + }, + "label_default_access_mode": { + "translation": "Chế độ truy cập mặc định:", + "defaultMessage": "Default access mode:", + "description": "Label for default access mode", + "missing": false, + "obsolete": false + }, + "label_file_name": { + "translation": "Tên tệp:", + "defaultMessage": "File name:", + "description": "Label for a file name", + "missing": false, + "obsolete": false + }, + "label_group_members": { + "translation": "Thành viên nhóm:", + "defaultMessage": "Group members:", + "description": "Section title or label", + "missing": false, + "obsolete": false + }, + "label_incognito_mode": { + "translation": "Chế độ ẩn danh:", + "defaultMessage": "Incognito mode:", + "description": "Label for incognito mode toggle", + "missing": false, + "obsolete": false + }, + "label_message_sound": { + "translation": "Âm thanh tin nhắn:", + "defaultMessage": "Message sound:", + "description": "Label for message sounds toggle", + "missing": false, + "obsolete": false + }, + "label_muting_topic": { + "translation": "Đã tắt:", + "defaultMessage": "Muted:", + "description": "Label for Muting/unmuting the topic", + "missing": false, + "obsolete": false + }, + "label_other_user": { + "translation": "Khác", + "defaultMessage": "Other", + "description": "Label for the other user when the user is unnamed", + "missing": false, + "obsolete": false + }, + "label_password": { + "translation": "Mật khẩu", + "defaultMessage": "Password", + "description": "Label for password editing", + "missing": false, + "obsolete": false + }, + "label_permissions": { + "translation": "Quyền:", + "defaultMessage": "Permissions:", + "description": "Section title", + "missing": false, + "obsolete": false + }, + "label_private": { + "translation": "Chỉ bạn nhìn thấy", + "defaultMessage": "Private comment", + "description": "Label for editing 'private'", + "missing": false, + "obsolete": false + }, + "label_push_notifications": { + "translation": "Cảnh báo thông báo:", + "defaultMessage": "Notification alerts:", + "description": "Label for push notifications switch", + "missing": false, + "obsolete": false + }, + "label_push_notifications_disabled": { + "translation": "Cảnh báo thông báo (yêu cầu HTTPS):", + "defaultMessage": "Notification alerts (requires HTTPS):", + "description": "Label for push notifications switch", + "missing": false, + "obsolete": false + }, + "label_reset_password": { + "translation": "Gửi email đặt lại mật khẩu:", + "defaultMessage": "Send a password reset email", + "description": "Label for password reset field", + "missing": false, + "obsolete": false + }, + "label_sdk": { + "translation": "SDK:", + "defaultMessage": "SDK:", + "missing": false, + "obsolete": false + }, + "label_server": { + "translation": "Máy chủ:", + "defaultMessage": "Server:", + "description": "Label for a server version", + "missing": false, + "obsolete": false + }, + "label_server_address": { + "translation": "Địa chỉ máy chủ:", + "defaultMessage": "Server address:", + "missing": false, + "obsolete": false + }, + "label_server_to_use": { + "translation": "Máy chủ sử dụng:", + "defaultMessage": "Server to use:", + "description": "Label for server selector in SettingsView", + "missing": false, + "obsolete": false + }, + "label_size": { + "translation": "Kích thước:", + "defaultMessage": "Size:", + "description": "Label for file size", + "missing": false, + "obsolete": false + }, + "label_topic_name": { + "translation": "Tên", + "defaultMessage": "Name", + "description": "Label for editing topic name", + "missing": false, + "obsolete": false + }, + "label_user_contacts": { + "translation": "Danh bạ", + "defaultMessage": "Contacts", + "description": "Label for user contacts", + "missing": false, + "obsolete": false + }, + "label_user_id": { + "translation": "ID:", + "defaultMessage": "ID:", + "description": "Label for user address (ID)", + "missing": false, + "obsolete": false + }, + "label_wire_transport": { + "translation": "Giao thức truyền tải:", + "defaultMessage": "Wire transport:", + "description": "Label for wire transport selection in SettingsView", + "missing": false, + "obsolete": false + }, + "label_you": { + "translation": "Bạn:", + "defaultMessage": "You:", + "description": "Label for the current user", + "missing": false, + "obsolete": false + }, + "label_your_name": { + "translation": "Tên của bạn", + "defaultMessage": "Your name", + "description": "Label for full name editing", + "missing": false, + "obsolete": false + }, + "label_your_permissions": { + "translation": "Quyền của bạn:", + "defaultMessage": "Your permissions:", + "description": "Label for current user permissions", + "missing": false, + "obsolete": false + }, + "last_seen_timestamp": { + "translation": "Lần cuối hoạt động: {timestamp}", + "defaultMessage": "Last seen: {timestamp}", + "description": "Label for the timestamp of when the user or topic was last online", + "missing": false, + "obsolete": false + }, + "leave_chat_warning": { + "translation": "Bạn có chắc muốn rời cuộc trò chuyện này?", + "defaultMessage": "Are you sure you want to leave this conversation?", + "description": "Alert dialog warning when unsubscribing from a chat.", + "missing": false, + "obsolete": false + }, + "link_contact_us": { + "translation": "Liên hệ chúng tôi", + "defaultMessage": "Contact Us", + "description": "Ancor text for contacting us by email", + "missing": false, + "obsolete": false + }, + "link_privacy_policy": { + "translation": "Chính sách quyền riêng tư", + "defaultMessage": "Privacy Policy", + "description": "Ancor text for privacy policy link", + "missing": false, + "obsolete": false + }, + "link_terms_of_service": { + "translation": "Điều khoản dịch vụ", + "defaultMessage": "Terms of Service", + "description": "Ancor text for terms of service link", + "missing": false, + "obsolete": false + }, + "login_prompt": { + "translation": "Đăng nhập", + "defaultMessage": "Login", + "description": "Placeholer for username/login", + "missing": false, + "obsolete": false + }, + "menu_item_archive_topic": { + "translation": "Lưu trữ", + "defaultMessage": "Archive", + "description": "Move topic from the list of active chats to archive", + "missing": false, + "obsolete": false + }, + "menu_item_block": { + "translation": "Chặn", + "defaultMessage": "Block", + "description": "Block topic or user", + "missing": false, + "obsolete": false + }, + "menu_item_clear_messages": { + "translation": "Xóa tin nhắn", + "defaultMessage": "Clear messages", + "description": "Delete all messages", + "missing": false, + "obsolete": false + }, + "menu_item_clear_messages_for_all": { + "translation": "Xóa cho tất cả", + "defaultMessage": "Clear for All", + "description": "Delete all message(s) for all members", + "missing": false, + "obsolete": false + }, + "menu_item_delete": { + "translation": "Xóa", + "defaultMessage": "Delete", + "description": "Delete selected messages", + "missing": false, + "obsolete": false + }, + "menu_item_delete_for_all": { + "translation": "Xóa cho tất cả", + "defaultMessage": "Delete for All", + "description": "Delete selected message(s) for all members", + "missing": false, + "obsolete": false + }, + "menu_item_delete_topic": { + "translation": "Xóa", + "defaultMessage": "Delete", + "description": "Delete entire topic", + "missing": false, + "obsolete": false + }, + "menu_item_edit_permissions": { + "translation": "Sửa quyền", + "defaultMessage": "Edit permissions", + "description": "Menu item [Edit permissions]", + "missing": false, + "obsolete": false + }, + "menu_item_info": { + "translation": "Thông tin", + "defaultMessage": "Info", + "description": "Show extended topic information", + "missing": false, + "obsolete": false + }, + "menu_item_member_delete": { + "translation": "Xóa", + "defaultMessage": "Remove", + "description": "Remove user from topic", + "missing": false, + "obsolete": false + }, + "menu_item_mute": { + "translation": "Tắt thông báo", + "defaultMessage": "Mute", + "description": "Turn off notifications", + "missing": false, + "obsolete": false + }, + "menu_item_reply": { + "translation": "Trả lời", + "defaultMessage": "Reply", + "description": "Reply to message", + "missing": false, + "obsolete": false + }, + "menu_item_restore_topic": { + "translation": "Khôi phục", + "defaultMessage": "Restore", + "description": "Restore topic from archive", + "missing": false, + "obsolete": false + }, + "menu_item_send_retry": { + "translation": "Thử lại", + "defaultMessage": "Retry", + "description": "Retry sending message", + "missing": false, + "obsolete": false + }, + "menu_item_unblock": { + "translation": "Bỏ chặn", + "defaultMessage": "Unblock", + "description": "Unblock topic or user", + "missing": false, + "obsolete": false + }, + "menu_item_unmute": { + "translation": "Bật thông báo", + "defaultMessage": "Unmute", + "description": "Turn notifications on", + "missing": false, + "obsolete": false + }, + "message_sending": { + "translation": "đang gửi...", + "defaultMessage": "sending...", + "description": "Message being sent, in place of time stamp", + "missing": false, + "obsolete": false + }, + "message_sending_failed": { + "translation": "thất bại", + "defaultMessage": "failed", + "description": "Failed to send message, in place of time stamp", + "missing": false, + "obsolete": false + }, + "messages_not_readable": { + "translation": "không có quyền xem tin nhắn", + "defaultMessage": "no access to messages", + "description": "Message shown in topic without the read access", + "missing": false, + "obsolete": false + }, + "messaging_disabled_prompt": { + "translation": "Tin nhắn bị tắt", + "defaultMessage": "Messaging disabled", + "description": "Prompt in SendMessage in read-only topic", + "missing": false, + "obsolete": false + }, + "more_online_members": { + "translation": "+{overflow} nữa", + "defaultMessage": "+{overflow} more", + "description": "Shown in MessagesView title bar when the number of online subscribers exceeds MAX_ONLINE_IN_TOPIC", + "missing": false, + "obsolete": false + }, + "new_message_prompt": { + "translation": "Tin nhắn mới", + "defaultMessage": "New message", + "description": "Prompt in send message field", + "missing": false, + "obsolete": false + }, + "new_password_placeholder": { + "translation": "Nhập mật khẩu mới", + "defaultMessage": "Enter new password", + "description": "Placeholder for entering new password", + "missing": false, + "obsolete": false + }, + "no_connection": { + "translation": "Không có kết nối", + "defaultMessage": "No connection", + "description": "Warning that the user is offline.", + "missing": false, + "obsolete": false + }, + "no_contacts": { + "translation": "Bạn chưa có liên hệ nào :-(", + "defaultMessage": "You have no contacts :-(", + "description": "Shown in ContactsView when the user has no contacts", + "missing": false, + "obsolete": false + }, + "numeric_confirmation_code_prompt": { + "translation": "Chỉ số", + "defaultMessage": "Numbers only", + "description": "Prompt for numeric conformation code", + "missing": false, + "obsolete": false + }, + "online_now": { + "translation": "đang online", + "defaultMessage": "online now", + "description": "Indicator that the user or topic is currently online", + "missing": false, + "obsolete": false + }, + "password_prompt": { + "translation": "Mật khẩu", + "defaultMessage": "Password", + "description": "Placeholder/prompt for entering password", + "missing": false, + "obsolete": false + }, + "password_unchanged_prompt": { + "translation": "Không thay đổi", + "defaultMessage": "Unchanged", + "description": "Message in editor while password is unchanged", + "missing": false, + "obsolete": false + }, + "peers_messaging_disabled": { + "translation": "Tin nhắn của người kia đã bị tắt.", + "defaultMessage": "Peer's messaging is disabled.", + "description": "Shown when the p2p peer's messaging is disabled", + "missing": false, + "obsolete": false + }, + "permission_admin": { + "translation": "Phê duyệt ({val})", + "defaultMessage": "Approve ({val})", + "description": "Name of A permission", + "missing": false, + "obsolete": false + }, + "permission_delete": { + "translation": "Xóa ({val})", + "defaultMessage": "Delete ({val})", + "description": "Name of D permission", + "missing": false, + "obsolete": false + }, + "permission_join": { + "translation": "Tham gia ({val})", + "defaultMessage": "Join ({val})", + "description": "Name of J permission", + "missing": false, + "obsolete": false + }, + "permission_owner": { + "translation": "Chủ sở hữu ({val})", + "defaultMessage": "Owner ({val})", + "description": "Name of O permission", + "missing": false, + "obsolete": false + }, + "permission_pres": { + "translation": "Nhận thông báo ({val})", + "defaultMessage": "Get notified ({val})", + "description": "Name of P permission", + "missing": false, + "obsolete": false + }, + "permission_read": { + "translation": "Đọc ({val})", + "defaultMessage": "Read ({val})", + "description": "Name of R permission", + "missing": false, + "obsolete": false + }, + "permission_share": { + "translation": "Chia sẻ ({val})", + "defaultMessage": "Share ({val})", + "description": "Name of S permission", + "missing": false, + "obsolete": false + }, + "permission_write": { + "translation": "Ghi ({val})", + "defaultMessage": "Write ({val})", + "description": "Name of W permission", + "missing": false, + "obsolete": false + }, + "phone_dative": { + "translation": "điện thoại", + "defaultMessage": "phone", + "description": "Dative case of 'phone', i.e. 'phone' in 'by phone'", + "missing": false, + "obsolete": false + }, + "private_editing_placeholder": { + "translation": "Chỉ mình bạn nhìn thấy", + "defaultMessage": "Visible to you only", + "description": "Placeholder for editing 'private'", + "missing": false, + "obsolete": false + }, + "push_init_failed": { + "translation": "Khởi tạo thông báo đẩy thất bại", + "defaultMessage": "Failed to initialize push notifications", + "description": "Error message when push notifications have failed to initialize.", + "missing": false, + "obsolete": false + }, + "reconnect_countdown": { + "translation": "Mất kết nối. Kết nối lại sau {seconds}…", + "defaultMessage": "Disconnected. Reconnecting in {seconds}…", + "description": "Message shown when an app update is available.", + "missing": false, + "obsolete": false + }, + "reconnect_now": { + "translation": "Thử ngay", + "defaultMessage": "Try now", + "description": "Prompt for reconnecting now", + "missing": false, + "obsolete": false + }, + "reload_update": { + "translation": "Tải lại", + "defaultMessage": "Reload", + "description": "Call to action to reload application when update is available.", + "missing": false, + "obsolete": false + }, + "report_chat_warning": { + "translation": "Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?", + "defaultMessage": "Are you sure you want to block and report this conversation?", + "description": "Alert dialog warning when reporting a conversation for abuse", + "missing": false, + "obsolete": false + }, + "requested_permissions": { + "translation": "Đã yêu cầu", + "defaultMessage": "Requested", + "description": "Title for permissions", + "missing": false, + "obsolete": false + }, + "save_attachment": { + "translation": "lưu", + "defaultMessage": "save", + "description": "Call to save an attachment", + "missing": false, + "obsolete": false + }, + "search_for_contacts": { + "translation": "Dùng tìm kiếm để tìm liên hệ", + "defaultMessage": "Use search to find contacts", + "description": "Text shown in contacts view when user entered no search query.", + "missing": false, + "obsolete": false + }, + "search_no_results": { + "translation": "Không có kết quả nào", + "defaultMessage": "Search returned no results", + "description": "Text shown in contacts view when query returned no results.", + "missing": false, + "obsolete": false + }, + "search_placeholder": { + "translation": "Liệt kê như email:alice@example.com, tel:17025550003...", + "defaultMessage": "List like alice@example.com, +17025550003...", + "description": "Placeholder in contacts search field", + "missing": false, + "obsolete": false + }, + "sidepanel_title_acc_notifications": { + "translation": "Thông báo", + "defaultMessage": "Notifications", + "description": "Sidepanel title for AccNotificationsView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_acc_support": { + "translation": "Hỗ trợ", + "defaultMessage": "Support", + "description": "Sidepanel title for AccSupportView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_account_settings": { + "translation": "Cài đặt tài khoản", + "defaultMessage": "Account Settings", + "description": "Sidepanel title for AccountSettingsView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_archive": { + "translation": "Cuộc trò chuyện đã lưu trữ", + "defaultMessage": "Archived Chats", + "description": "Sidepanel title for ContactsView-Archive.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_blocked": { + "translation": "Cuộc trò chuyện bị chặn", + "defaultMessage": "Blocked Chats", + "description": "Sidepanel title for ContactsView-Blocked.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_cred": { + "translation": "Xác nhận thông tin", + "defaultMessage": "Confirm Credentials", + "description": "Sidepanel title for ValidationView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_login": { + "translation": "Đăng nhập", + "defaultMessage": "Sign In", + "description": "Sidepanel title for LoginView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_newtpk": { + "translation": "Bắt đầu cuộc trò chuyện mới", + "defaultMessage": "Start New Chat", + "description": "Sidepanel title for NewTopicView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_register": { + "translation": "Tạo tài khoản", + "defaultMessage": "Create Account", + "description": "Sidepanel title for CreateAccountView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_reset": { + "translation": "Đặt lại mật khẩu", + "defaultMessage": "Reset Password", + "description": "Sidepanel title for PasswordResetView.", + "missing": false, + "obsolete": false + }, + "sidepanel_title_settings": { + "translation": "Cài đặt", + "defaultMessage": "Settings", + "description": "Sidepanel title for SettingsView.", + "missing": false, + "obsolete": false + }, + "stay_logged_in": { + "translation": "Giữ tôi đăng nhập", + "defaultMessage": "Stay logged in", + "description": "Label for a checkbox", + "missing": false, + "obsolete": false + }, + "tabtitle_find_user": { + "translation": "tìm", + "defaultMessage": "find", + "description": "Tab title Find", + "missing": false, + "obsolete": false + }, + "tabtitle_group_by_id": { + "translation": "theo id", + "defaultMessage": "by id", + "description": "Tab title Find topic by ID", + "missing": false, + "obsolete": false + }, + "tabtitle_new_group": { + "translation": "nhóm mới", + "defaultMessage": "new group", + "description": "Tab title New Group", + "missing": false, + "obsolete": false + }, + "tags_editor_no_tags": { + "translation": "Thêm vài thẻ", + "defaultMessage": "Add some tags", + "description": "Tag editor prompt when no tags are found.", + "missing": false, + "obsolete": false + }, + "tags_not_found": { + "translation": "Chưa có thẻ nào. Hãy thêm một vài thẻ.", + "defaultMessage": "No tags defined. Add some.", + "description": "", + "missing": false, + "obsolete": false + }, + "title_all_contacts": { + "translation": "Tất cả liên hệ", + "defaultMessage": "All Contacts", + "description": "Section title [All Contacts]", + "missing": false, + "obsolete": false + }, + "title_group_members": { + "translation": "Thành viên nhóm", + "defaultMessage": "Group Members", + "description": "Section title", + "missing": false, + "obsolete": false + }, + "title_manage_tags": { + "translation": "Quản lý", + "defaultMessage": "Manage", + "description": "Section title for the list of tags", + "missing": false, + "obsolete": false + }, + "title_not_found": { + "translation": "Không tìm thấy", + "defaultMessage": "Not found", + "description": "Title shown when topic is not found", + "missing": false, + "obsolete": false + }, + "title_permissions": { + "translation": "Quyền", + "defaultMessage": "Permissions", + "description": "Section title", + "missing": false, + "obsolete": false + }, + "title_tag_manager": { + "translation": "Thẻ (tìm kiếm & khám phá)", + "defaultMessage": "Tags (search & discovery)", + "description": "Section title for TagManager", + "missing": false, + "obsolete": false + }, + "topic_block_warning": { + "translation": "Bạn có chắc muốn chặn cuộc trò chuyện này?", + "defaultMessage": "Are you sure you want to block this conversation?", + "description": "Alert warning when blocking a topic.", + "missing": false, + "obsolete": false + }, + "topic_delete_warning": { + "translation": "Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.", + "defaultMessage": "Are you sure you want to delete this conversation? It cannot be undone.", + "description": "Alert warning when deleting entire topic", + "missing": false, + "obsolete": false + }, + "topic_name_editing_placeholder": { + "translation": "Tên nhóm tự do", + "defaultMessage": "Freeform name of the group", + "description": "Prompt for entering topic name", + "missing": false, + "obsolete": false + }, + "unnamed_topic": { + "translation": "Chưa đặt tên", + "defaultMessage": "Unnamed", + "description": "Title shown when the topic has no name", + "missing": false, + "obsolete": false + }, + "update_available": { + "translation": "Có bản cập nhật.", + "defaultMessage": "Update available.", + "description": "Message shown when an app update is available.", + "missing": false, + "obsolete": false + }, + "upload_finishing": { + "translation": "đang hoàn tất...", + "defaultMessage": "finishing...", + "description": "Notification that upload is finishing", + "missing": false, + "obsolete": false + }, + "user_not_found": { + "translation": "Không tìm thấy", + "defaultMessage": "Not found", + "description": "In place of a user's full name when the user is not found.", + "missing": false, + "obsolete": false + }, + "description_editing_placeholder": { + "translation": "Mô tả tùy chọn", + "defaultMessage": "Description (optional)", + "description": "Placeholder for editing topic description", + "missing": false, + "obsolete": false + }, + "label_description": { + "translation": "Mô tả", + "defaultMessage": "Description", + "description": "Label for description of user or topic", + "missing": false, + "obsolete": false + }, + "button_security": { + "translation": "Bảo mật", + "defaultMessage": "Security", + "description": "Navigaton button for security panel.", + "missing": false, + "obsolete": false + }, + "panel_title_crop": { + "translation": "Kéo để điều chỉnh", + "defaultMessage": "Drag to Adjust", + "description": "Title for AvatarCropView.", + "missing": false, + "obsolete": false + }, + "panel_title_general": { + "translation": "Chung", + "defaultMessage": "General", + "description": "Title for TopicCommon.", + "missing": false, + "obsolete": false + }, + "panel_title_members": { + "translation": "Thành viên", + "defaultMessage": "Members", + "description": "Title for managing group members view.", + "missing": false, + "obsolete": false + }, + "panel_title_security": { + "translation": "Bảo mật", + "defaultMessage": "Security", + "description": "Title for TopicSecirity and AccSecurity.", + "missing": false, + "obsolete": false + }, + "panel_title_info": { + "translation": "Thông tin", + "defaultMessage": "Info", + "description": "Title for InfoView", + "missing": false, + "obsolete": false + }, + "permissions_anonymous": { + "translation": "Ẩn danh", + "defaultMessage": "Anonymous", + "description": "Title for editing default anonymous permissions", + "missing": false, + "obsolete": false + }, + "permissions_authenticated": { + "translation": "Đã xác thực", + "defaultMessage": "Authenticated", + "description": "Title for editing default authenticated permissions", + "missing": false, + "obsolete": false + }, + "topic_delete": { + "translation": "Xóa cuộc trò chuyện", + "defaultMessage": "Delete Conversation", + "description": "Alert title when deleting the topic.", + "missing": false, + "obsolete": false + }, + "permissions_user": { + "translation": "Quyền của người dùng", + "defaultMessage": "User's Permissions", + "description": "Title for editing user's permissions", + "missing": false, + "obsolete": false + }, + "password_reset_email_sent": { + "translation": "Email chứa mã bảo mật đã được gửi.", + "defaultMessage": "An email with security code has been sent.", + "description": "Notification that the email with password reset instructions has been sent", + "missing": false, + "obsolete": false + }, + "label_unarchive_topic": { + "translation": "Đã lưu trữ:", + "defaultMessage": "Archived:", + "description": "Label for unarchiving the topic", + "missing": false, + "obsolete": false + }, + "menu_item_forward": { + "translation": "Chuyển tiếp", + "defaultMessage": "Forward", + "description": "Forward message", + "missing": false, + "obsolete": false + }, + "forward_to": { + "translation": "Chuyển tiếp đến", + "defaultMessage": "Forward to", + "missing": false, + "obsolete": false + }, + "forward_to_search_placeholder": { + "translation": "Tìm kiếm liên hệ", + "defaultMessage": "Search contacts", + "description": "Contact search prompt when forwarding a message.", + "missing": false, + "obsolete": false + }, + "label_new_password": { + "translation": "Mật khẩu mới", + "defaultMessage": "New password", + "description": "Label for entering a new password", + "missing": false, + "obsolete": false + }, + "drafty_unknown": { + "translation": "Không hỗ trợ", + "defaultMessage": "Unsupported", + "description": "Unsupported entity in drafty", + "missing": false, + "obsolete": false + }, + "calls_incoming": { + "translation": "Cuộc gọi đến", + "defaultMessage": "Incoming call", + "description": "Incoming call label", + "missing": false, + "obsolete": false + }, + "calls_outgoing": { + "translation": "Cuộc gọi đi", + "defaultMessage": "Outgoing call", + "description": "Outgoing call label", + "missing": false, + "obsolete": false + }, + "calls_you_label": { + "translation": "Bạn", + "defaultMessage": "You", + "description": "Shown over the local video screen", + "missing": false, + "obsolete": false + }, + "menu_item_video_call": { + "translation": "Gọi video", + "defaultMessage": "Video call", + "description": "Start video call", + "missing": false, + "obsolete": false + }, + "already_in_call": { + "translation": "Bạn đang có một cuộc gọi đang diễn ra!", + "defaultMessage": "You already in an ongoing call!", + "description": "Error message when the user tried to accept a new call without finishing pervious one", + "missing": false, + "obsolete": false + }, + "call_cancelled": { + "translation": "đã hủy", + "defaultMessage": "cancelled", + "description": "Label for cancelled outgoing call", + "missing": false, + "obsolete": false + }, + "call_missed": { + "translation": "bỏ lỡ", + "defaultMessage": "missed", + "description": "Label for missed incoming call", + "missing": false, + "obsolete": false + }, + "call_declined": { + "translation": "từ chối", + "defaultMessage": "declined", + "description": "Label for declined call", + "missing": false, + "obsolete": false + }, + "call_disconnected": { + "translation": "mất kết nối", + "defaultMessage": "disconnected", + "description": "Label for disconnected call", + "missing": false, + "obsolete": false + }, + "label_use_secure_connection": { + "translation": "Sử dụng kết nối bảo mật", + "defaultMessage": "Use secure connection", + "description": "Label for WS/WSS connection type in SettingsView", + "missing": false, + "obsolete": false + }, + "cred_confirmed_successfully": { + "translation": "Xác nhận thành công", + "defaultMessage": "Confirmed successfully", + "description": "Notification message that the credential was successfully validated.", + "missing": false, + "obsolete": false + }, + "menu_item_edit": { + "translation": "Sửa", + "defaultMessage": "Edit", + "description": "Edit message", + "missing": false, + "obsolete": false + }, + "editing_message": { + "translation": "Đang sửa", + "defaultMessage": "Editing", + "description": "Title over message editing preview", + "missing": false, + "obsolete": false + }, + "message_edited_marker": { + "translation": ", đã sửa", + "defaultMessage": ", edited", + "description": "Marker indicating that the message was edited", + "missing": false, + "obsolete": false + }, + "icon_title_add_image": { + "translation": "Thêm hình ảnh", + "defaultMessage": "Add image", + "description": "Icon tool tip for attaching an image", + "missing": false, + "obsolete": false + }, + "icon_title_attach_file": { + "translation": "Đính kèm tệp", + "defaultMessage": "Attach file", + "description": "Icon tool tip for attaching a file", + "missing": false, + "obsolete": false + }, + "icon_title_delete": { + "translation": "Xóa", + "defaultMessage": "Delete recording", + "description": "Icon tool tip for deleting recorded audio", + "missing": false, + "obsolete": false + }, + "icon_title_pause": { + "translation": "Tạm dừng", + "defaultMessage": "Pause playback", + "description": "Icon tool tip for pausing audio playback", + "missing": false, + "obsolete": false + }, + "icon_title_play": { + "translation": "Phát", + "defaultMessage": "Play recording", + "description": "Icon tool tip for starting audio playback", + "missing": false, + "obsolete": false + }, + "icon_title_record_voice": { + "translation": "Ghi âm tin nhắn", + "defaultMessage": "Record voice message", + "description": "Icon tool tip for recording a voice message", + "missing": false, + "obsolete": false + }, + "icon_title_resume": { + "translation": "Tiếp tục", + "defaultMessage": "Resume playback", + "description": "Icon tool tip for resuming audio playback", + "missing": false, + "obsolete": false + }, + "icon_title_send": { + "translation": "Gửi tin nhắn", + "defaultMessage": "Send message", + "description": "Icon tool tip for sending a message", + "missing": false, + "obsolete": false + }, + "drag_file": { + "translation": "Kéo tệp vào đây", + "defaultMessage": "Drag file here", + "description": "Prompt on the file drag-n-drop overlay banner", + "missing": false, + "obsolete": false + }, + "drafty_video": { + "translation": "Video", + "defaultMessage": "Video recording", + "description": "Comment for videos embedded in Drafty", + "missing": false, + "obsolete": false + }, + "call_in_progress": { + "translation": "đang diễn ra", + "defaultMessage": "in progress", + "description": "Label for call in progress", + "missing": false, + "obsolete": false + }, + "menu_item_audio_call": { + "translation": "Gọi", + "defaultMessage": "Call", + "description": "Start audio call", + "missing": false, + "obsolete": false + }, + "unrecognized_video_format": { + "translation": "Không nhận dạng được định dạng video này", + "defaultMessage": "Format of this video is not recognized", + "description": "Error message when uploaded video is invalid", + "missing": false, + "obsolete": false + }, + "loading_note": { + "translation": "Đang tải...", + "defaultMessage": "Loading...", + "description": "Message shown when component is loading", + "missing": false, + "obsolete": false + }, + "password_i_have_code": { + "translation": "Tôi có mã", + "defaultMessage": "I have code", + "description": "Call to open field to enter password reset code", + "missing": false, + "obsolete": false + }, + "label_reset_password_tel": { + "translation": "Gửi SMS đặt lại mật khẩu:", + "defaultMessage": "Send SMS to reset password", + "description": "Label for password reset field by phone", + "missing": false, + "obsolete": false + }, + "mobile_phone_number": { + "translation": "Số điện thoại di động", + "defaultMessage": "Mobile phone number", + "description": "Prompt for entering a mobile phone number", + "missing": false, + "obsolete": false + }, + "password_reset_sms_sent": { + "translation": "Tin nhắn chứa mã bảo mật đã được gửi.", + "defaultMessage": "A text message with security code has been sent.", + "description": "Notification that the SMS with password reset instructions has been sent", + "missing": false, + "obsolete": false + }, + "mobile_number_required": { + "translation": "Cần số điện thoại di động", + "defaultMessage": "Mobile phone number required", + "description": "Error message", + "missing": false, + "obsolete": false + }, + "current_email": { + "translation": "Email hiện tại", + "defaultMessage": "Current email", + "description": "Label for old email", + "missing": false, + "obsolete": false + }, + "current_phone": { + "translation": "Số điện thoại hiện tại", + "defaultMessage": "Current phone number", + "description": "Label for old phone", + "missing": false, + "obsolete": false + }, + "new_email": { + "translation": "Email mới", + "defaultMessage": "New email", + "description": "Prompt for entering a new email", + "missing": false, + "obsolete": false + }, + "new_phone_number": { + "translation": "Số điện thoại mới", + "defaultMessage": "New phone number", + "description": "Prompt for entering a new telephone number", + "missing": false, + "obsolete": false + }, + "change_email": { + "translation": "Đổi email", + "defaultMessage": "Change email", + "description": "Prompt to change current email", + "missing": false, + "obsolete": false + }, + "change_phone": { + "translation": "Đổi số điện thoại", + "defaultMessage": "Change phone number", + "description": "Prompt to change current phone number", + "missing": false, + "obsolete": false + }, + "call_busy": { + "translation": "bận", + "defaultMessage": "busy", + "description": "Label for busy call line", + "missing": false, + "obsolete": false + }, + "failed_to_init_audio": { + "translation": "Không thể khởi tạo ghi âm", + "defaultMessage": "Failed to initialize audio recording", + "description": "Error message when audio is not available", + "missing": false, + "obsolete": false + }, + "password_reset_success": { + "translation": "Đặt lại mật khẩu thành công", + "defaultMessage": "Password reset successfully", + "description": "Notification message that the password was successfully reset.", + "missing": false, + "obsolete": false + }, + "scan_qr_code": { + "translation": "Quét mã QR", + "defaultMessage": "Scan QR Code", + "description": "Title for scanning QR code", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "thêm thành viên", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false + }, + "alias_already_taken": { + "translation": "(đã được sử dụng)", + "defaultMessage": "(already taken)", + "description": "Error message for alias already taken", + "missing": false, + "obsolete": false + }, + "alias_editing_placeholder": { + "translation": "Bí danh (tùy chọn)", + "defaultMessage": "Alias (optional)", + "description": "Placeholder for editing user or topic alias", + "missing": false, + "obsolete": false + }, + "alias_invalid": { + "translation": "(không hợp lệ)", + "defaultMessage": "(invalid)", + "description": "Error message for invalid alias", + "missing": false, + "obsolete": false + }, + "button_restore": { + "translation": "Khôi phục mặc định", + "defaultMessage": "Restore default", + "description": "Reset setting to default", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "Không thể đọc tệp vCard.", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "Nhắn tin", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "color_schema_dark": { + "translation": "Tối", + "defaultMessage": "Dark", + "description": "Name of the color schema", + "missing": false, + "obsolete": false + }, + "color_schema_light": { + "translation": "Sáng", + "defaultMessage": "Light", + "description": "Name of the color schema", + "missing": false, + "obsolete": false + }, + "color_schema_system": { + "translation": "Mặc định hệ thống", + "defaultMessage": "System default", + "description": "Name of the color schema", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "Tìm kiếm", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "incognito_mode_description": { + "translation": "Ẩn trạng thái trực tuyến và chỉ báo đang nhập.", + "defaultMessage": "Hide your online status and typing indicators.", + "description": "Description for incognito mode toggle", + "missing": false, + "obsolete": false + }, + "label_alias": { + "translation": "Bí danh:", + "defaultMessage": "Alias:", + "description": "Label for user or topic alias", + "missing": false, + "obsolete": false + }, + "label_alias_edit": { + "translation": "Bí danh", + "defaultMessage": "Alias", + "description": "Label for editing user or topic alias", + "missing": false, + "obsolete": false + }, + "label_blur_wallpaper": { + "translation": "Làm mờ:", + "defaultMessage": "Blur:", + "description": "Label adjusting blur amount", + "missing": false, + "obsolete": false + }, + "label_color_schema": { + "translation": "Giao diện:", + "defaultMessage": "Theme:", + "description": "Label for selecting color scheme (dark, light) in Settings", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "Danh thiếp", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "Danh bạ", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "label_keyboard": { + "translation": "Bàn phím:", + "defaultMessage": "Keyboard:", + "description": "Label for send on enter settings", + "missing": false, + "obsolete": false + }, + "label_member_count": { + "translation": "Thành viên:", + "defaultMessage": "Members:", + "description": "Label for the count of group topic members", + "missing": false, + "obsolete": false + }, + "label_scan_id": { + "translation": "Quét mã của tôi:", + "defaultMessage": "Scan my ID:", + "description": "Label [Scan my ID:]", + "missing": false, + "obsolete": false + }, + "label_subscriber_count": { + "translation": "Người theo dõi:", + "defaultMessage": "Subscribers:", + "description": "Label for the count of channel subscribers", + "missing": false, + "obsolete": false + }, + "label_text_size": { + "translation": "Cỡ chữ:", + "defaultMessage": "Text size:", + "description": "Label adjusting text size", + "missing": false, + "obsolete": false + }, + "member_count": { + "translation": "{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}", + "defaultMessage": "{count, plural, one {{count, number} member} two {{count, number} members} three {{count, number} members} few {{count, number} members} many {{count, number} members} other {{count, number} members}}", + "description": "Count of group topic members", + "missing": false, + "obsolete": false + }, + "message_deleted": { + "translation": "tin nhắn đã xóa", + "defaultMessage": "message deleted", + "description": "Pinned message is deleted", + "missing": false, + "obsolete": false + }, + "message_not_found": { + "translation": "không tìm thấy tin nhắn", + "defaultMessage": "message not found", + "description": "Pinned message is not found", + "missing": false, + "obsolete": false + }, + "pin_chat": { + "translation": "Ghim", + "defaultMessage": "Pin", + "description": "Menu item [Pin] for pinning chat to the top.", + "missing": false, + "obsolete": false + }, + "pin_message": { + "translation": "Ghim", + "defaultMessage": "Pin", + "description": "Menu item [Pin] for pinning message to the top.", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "Lưu", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "select_country": { + "translation": "Chọn quốc gia", + "defaultMessage": "Select country", + "description": "Placeholder for the country selector", + "missing": false, + "obsolete": false + }, + "self_topic_comment": { + "translation": "Ghi chú, tin nhắn, liên kết, tệp lưu lại", + "defaultMessage": "Notes, messages, links, files saved for posterity", + "description": "Comment for self topic for UI", + "missing": false, + "obsolete": false + }, + "self_topic_name": { + "translation": "Tin nhắn đã lưu", + "defaultMessage": "Saved messages", + "description": "Name of self topic for UI", + "missing": false, + "obsolete": false + }, + "send_command": { + "translation": "Gửi bằng {key}", + "defaultMessage": "Send on {key}", + "description": "Config option to send message on hitting CTRL(or Cmd)-Enter", + "missing": false, + "obsolete": false + }, + "send_command_explained": { + "translation": "Nhấn Enter để xuống dòng", + "defaultMessage": "Press Enter for new line", + "description": "Explanation how to enter newline when [Send on CTRL-Enter] is enabled", + "missing": false, + "obsolete": false + }, + "send_plain": { + "translation": "Gửi bằng Enter", + "defaultMessage": "Send on Enter", + "description": "Config option to send message on hitting Enter", + "missing": false, + "obsolete": false + }, + "send_plain_explained": { + "translation": "Nhấn Shift + Enter để xuống dòng", + "defaultMessage": "Press Shift + Enter for new line", + "description": "Explanation how to enter newline when [Send on Enter] is enabled", + "missing": false, + "obsolete": false + }, + "sidepanel_title_acc_general": { + "translation": "Chung", + "defaultMessage": "General", + "description": "Sidepanel title for AccGeneralView.", + "missing": false, + "obsolete": false + }, + "subscriber_count": { + "translation": "{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}", + "defaultMessage": "{count, plural, one {{count, number} subscriber} two {{count, number} subscribers} three {{count, number} subscribers} few {{count, number} subscribers} many {{count, number} subscribers} other {{count, number} subscribers}}", + "description": "Count of channel subscribers", + "missing": false, + "obsolete": false + }, + "tabtitle_image": { + "translation": "hình ảnh", + "defaultMessage": "image", + "description": "Tab title Image", + "missing": false, + "obsolete": false + }, + "tabtitle_pattern": { + "translation": "hoa văn", + "defaultMessage": "pattern", + "description": "Tab title Pattern", + "missing": false, + "obsolete": false + }, + "text_copied": { + "translation": "Đã sao chép vào clipboard", + "defaultMessage": "Copied to clipboard", + "description": "Notification that text has been copied to clipboard", + "missing": false, + "obsolete": false + }, + "unknown_name": { + "translation": "Không rõ", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "unpin_chat": { + "translation": "Bỏ ghim", + "defaultMessage": "Unpin", + "description": "Menu item [Unpin] for un-pinning the chat.", + "missing": false, + "obsolete": false + }, + "unpin_message": { + "translation": "Bỏ ghim", + "defaultMessage": "Unpin", + "description": "Menu item [Unpin] for un-pinning the message.", + "missing": false, + "obsolete": false + }, + "wallpapers": { + "translation": "Hình nền", + "defaultMessage": "Wallpapers", + "description": "Link or title for working with wallpapers.", + "missing": false, + "obsolete": false + } +} diff --git a/src/i18n/zh-TW.json b/src/i18n/zh-TW.json index d443ea56..4823ffa8 100644 --- a/src/i18n/zh-TW.json +++ b/src/i18n/zh-TW.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "您沒有任何對話
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "您沒有任何對話\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "說明", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "未知", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "儲存", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "無法解析 vCard 檔案。", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "聊天", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "尋找", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "聯絡人卡片", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "聯絡人", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "新增成員", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/i18n/zh.json b/src/i18n/zh.json index 5b0cc6f4..a925686a 100644 --- a/src/i18n/zh.json +++ b/src/i18n/zh.json @@ -259,8 +259,8 @@ "obsolete": false }, "contacts_not_found": { - "translation": "你尚无会话
¯∖_(ツ)_/¯", - "defaultMessage": "You have no chats
¯∖_(ツ)_/¯", + "translation": "你尚无会话\n¯∖_(ツ)_/¯", + "defaultMessage": "You have no chats\\n¯∖_(ツ)_/¯", "description": "HTML message shown in ContactList when no contacts are found", "missing": false, "obsolete": false @@ -1218,7 +1218,7 @@ "label_description": { "translation": "说明", "defaultMessage": "Description", - "description": "Label for editing topic description", + "description": "Label for description of user or topic", "missing": false, "obsolete": false }, @@ -1906,5 +1906,61 @@ "description": "Label [Scan my ID:]", "missing": false, "obsolete": false + }, + "unknown_name": { + "translation": "未知", + "defaultMessage": "Unknown", + "description": "Name to show when the name is missing", + "missing": false, + "obsolete": false + }, + "save_action": { + "translation": "保存", + "defaultMessage": "Save", + "description": "Label for Save button", + "missing": false, + "obsolete": false + }, + "cannot_parse_vcard": { + "translation": "无法解析 vCard 文件。", + "defaultMessage": "Cannot parse vCard file.", + "description": "Error message when vCard file cannot be parsed", + "missing": false, + "obsolete": false + }, + "chat_now": { + "translation": "聊天", + "defaultMessage": "Chat", + "description": "Label for message button in contact card", + "missing": false, + "obsolete": false + }, + "find_user": { + "translation": "查找", + "defaultMessage": "Find", + "description": "Label for search button in contact card", + "missing": false, + "obsolete": false + }, + "label_contact_card": { + "translation": "联系人卡片", + "defaultMessage": "Contact Card", + "description": "Label for contact card preview", + "missing": false, + "obsolete": false + }, + "label_contacts": { + "translation": "联系人", + "defaultMessage": "Contacts", + "description": "Label for contact information", + "missing": false, + "obsolete": false + }, + "add_members_prompt": { + "translation": "添加成员", + "defaultMessage": "add members", + "description": "Placeholder in group members input field", + "missing": false, + "obsolete": false } } diff --git a/src/index.js b/src/index.js index 068fdf24..dff2a042 100644 --- a/src/index.js +++ b/src/index.js @@ -35,6 +35,7 @@ const messageLoader = { 'ru': _ => import('./i18n.min/ru.json'), 'th': _ => import('./i18n.min/th.json'), 'uk': _ => import('./i18n.min/uk.json'), + 'vi': _ => import('./i18n.min/vi.json'), 'zh': _ => import('./i18n.min/zh.json'), 'zh-TW': _ => import('./i18n.min/zh-TW.json') }; diff --git a/src/lib/blob-helpers.js b/src/lib/blob-helpers.js index 0a8b2d29..d305911d 100644 --- a/src/lib/blob-helpers.js +++ b/src/lib/blob-helpers.js @@ -1,4 +1,5 @@ // File and image helper functions. +import { TheCard } from 'tinode-sdk'; // Supported image MIME types and corresponding file extensions. export const SUPPORTED_IMAGE_FORMATS = ['image/jpeg', 'image/gif', 'image/png', 'image/svg', 'image/svg+xml']; @@ -305,3 +306,21 @@ export function base64ToIntArray(b64) { } catch (err) {} return null; } + +export function importVCard(fileOrBlob) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onerror = _ => { + reject(reader.error); + }; + reader.onload = _ => { + const card = TheCard.importVCard(reader.result); + if (!card) { + reject(new Error("Failed to parse vCard")); + return; + } + resolve(card); + }; + reader.readAsText(fileOrBlob); + }); +} diff --git a/src/lib/formatters.js b/src/lib/formatters.js index 61573196..72d84ad7 100644 --- a/src/lib/formatters.js +++ b/src/lib/formatters.js @@ -1,13 +1,14 @@ import React from 'react'; import { defineMessages } from 'react-intl'; -import { Drafty } from 'tinode-sdk'; +import { Drafty, TheCard } from 'tinode-sdk'; import AudioPlayer from '../widgets/audio-player.jsx' import CallMessage from '../widgets/call-message.jsx' import CallStatus from '../widgets/call-status.jsx'; import InlineVideo from '../widgets/inline-video.jsx'; -import LazyImage from '../widgets/lazy-image.jsx' +import LazyImage from '../widgets/lazy-image.jsx'; +import TheCardMini from '../widgets/the-card-mini.jsx'; import UploadingImage from '../widgets/uploading-image.jsx' import { BROKEN_IMAGE_SIZE, CLICKABLE_URL_SCHEMES, IMAGE_THUMBNAIL_DIM, NO_DIMENSIONS_VIDEO, @@ -48,10 +49,7 @@ const messages = defineMessages({ // 'this' must contain: // viewportWidth: // authorizeURL: -// onImagePreview: -// onVideoPreview: -// onFormButtonClick: -// onQuoteClick: +// onHandleClick: export function fullFormatter(style, data, values, key, stack) { if (stack.includes('QQ')) { return quoteFormatter.call(this, style, data, values, key); @@ -100,7 +98,7 @@ export function fullFormatter(style, data, values, key, stack) { break; case 'BN': // Button - attr.onClick = this.onFormButtonClick; + attr.onClick = (e) => this.onHandleClick(e, 'form_button'); let inner = React.Children.map(values, (child) => { return typeof child == 'string' ? child : undefined; }); @@ -133,7 +131,16 @@ export function fullFormatter(style, data, values, key, stack) { case 'QQ': // Quote/citation. attr.className = 'reply-quote' - attr.onClick = this.onQuoteClick; + attr.onClick = (e) => this.onHandleClick(e, 'quote'); + break; + case 'TC': + // TheCard + el = TheCardMini; + attr.content = data; + attr.authorizeURL = this.authorizeURL; + attr.onChatClick = (e) => this.onHandleClick(e, 'contact_chat'); + attr.onFindClick = (e) => this.onHandleClick(e, 'contact_find'); + values = null; break; case 'VC': el = CallMessage; @@ -200,7 +207,7 @@ function handleImageData(el, data, attr) { if (attr.src) { if (Math.max(data.width || 0, data.height || 0) > IMAGE_THUMBNAIL_DIM) { // Allow previews for large enough images. - attr.onClick = this.onImagePreview; + attr.onClick = (e) => this.onHandleClick(e, 'image'); attr.className += ' image-clickable'; } attr.loading = 'lazy'; @@ -241,7 +248,7 @@ function handleVideoData(el, data, attr) { attr.src = this.authorizeURL(sanitizeUrlForMime(attr.src, 'image')); attr.alt = data.name; if (data.ref || data.val) { - attr.onClick = this.onVideoPreview; + attr.onClick = (e) => this.onHandleClick(e, 'video'); attr.loading = 'lazy'; } el = InlineVideo; @@ -329,6 +336,12 @@ export function previewFormatter(style, data, values, key) { el = null; values = null; break; + case 'TC': + // TheCard + el = React.Fragment; + values = [contact_mail, ' ', + TheCard.getFn(data) || this.formatMessage(messages.drafty_unknown)]; + break; case 'VD': // Replace image with '[icon] Video'. el = React.Fragment; @@ -392,7 +405,7 @@ function inlineVideoAttr(attr, data) { // formatMessage: this.props.intl.formatMessage // messages: formatjs messages defined with defineMessages. // authorizeURL: this.props.tinode.authorizeURL -// onQuoteClick: this.handleQuoteClick (optional) +// onHandleClick: this.handleDraftyClick function quoteFormatter(style, data, values, key) { if (['BR', 'EX', 'IM', 'MN', 'VD'].includes(style)) { let el = Drafty.tagName(style); diff --git a/src/lib/navigation.js b/src/lib/navigation.js index 35a1ad3f..0e89309d 100644 --- a/src/lib/navigation.js +++ b/src/lib/navigation.js @@ -55,6 +55,17 @@ export default class HashNavigation { return HashNavigation.composeUrlHash(parsed.path, parsed.params); } + static removeUrlParams(hash, keys) { + if (!Array.isArray(keys)) { + keys = [keys]; + } + const parsed = HashNavigation.parseUrlHash(hash); + for (const key of keys) { + delete parsed.params[key]; + } + return HashNavigation.composeUrlHash(parsed.path, parsed.params); + } + static setUrlSidePanel(hash, sidepanel) { const parsed = HashNavigation.parseUrlHash(hash); parsed.path[0] = sidepanel; diff --git a/src/lib/utils.js b/src/lib/utils.js index 681743d6..af92e964 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -254,3 +254,23 @@ export function defaultWallpaper() { const wp = wallpaperIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index]; return {name: `../${WALLPAPER_DEFAULTS.path}${wp.name}`, size: wp.size}; } + +export function wallpaperNameFromUrl(wallpaperUrl) { + // Get filename from URL. + const parts = wallpaperUrl.split('/'); + return parts[parts.length - 1]; +} + +export function wallpaperTypeFromUrl(wallpaperUrl) { + // Get filename from URL. + const fname = wallpaperNameFromUrl(wallpaperUrl); + const wallpaperIndex = require('../../img/bkg/index.json'); + for (const type in wallpaperIndex) { + for (let i = 0; i < wallpaperIndex[type].length; i++) { + if (wallpaperIndex[type][i].name == fname) { + return type; + } + } + } + return null; +} diff --git a/src/version.js b/src/version.js index eadd343a..f8adf19e 100644 --- a/src/version.js +++ b/src/version.js @@ -1,3 +1,3 @@ // This is a generated file. Don't edit. -export const PACKAGE_VERSION = "0.25.1"; +export const PACKAGE_VERSION = "0.25.2"; diff --git a/src/views/account-settings-view.jsx b/src/views/account-settings-view.jsx index 4afcf397..ac80f30a 100644 --- a/src/views/account-settings-view.jsx +++ b/src/views/account-settings-view.jsx @@ -138,7 +138,7 @@ export default class AccountSettingsView extends React.Component {
{this.state.description}
: null} diff --git a/src/views/contacts-view.jsx b/src/views/contacts-view.jsx index ad79c86c..8db5716f 100644 --- a/src/views/contacts-view.jsx +++ b/src/views/contacts-view.jsx @@ -91,7 +91,7 @@ export default class ContactsView extends React.Component { render() { return ( { (no_contacts) => { this.setState({toast: ''}); }, TOAST_DURATION); }); + } + handleShare(e) { + e.preventDefault(); + const card = new TheCard(this.state.fullName, this.state.avatar, null, this.state.description); + TheCard.setTinodeID(card, Tinode.URI_TOPIC_ID_PREFIX + this.props.topic); + this.props.onShareTheCard(card); } handleShowAddMembers(e) { @@ -629,6 +635,9 @@ class InfoView extends React.Component {   qr_code   +   + share +   {alias ? @@ -673,7 +682,7 @@ class InfoView extends React.Component {
{this.state.description}
: null} diff --git a/src/views/messages-view.jsx b/src/views/messages-view.jsx index 22cfc246..c77c3a91 100644 --- a/src/views/messages-view.jsx +++ b/src/views/messages-view.jsx @@ -1,17 +1,17 @@ // Panel with a chat. -import React from 'react'; +import React, { Suspense } from 'react'; import { FormattedMessage, defineMessages, injectIntl } from 'react-intl'; -import { Drafty, Tinode } from 'tinode-sdk'; +import { Drafty, Tinode, TheCard } from 'tinode-sdk'; -import CallPanel from '../widgets/call-panel.jsx'; +const CallPanel = React.lazy(_ => import('../widgets/call-panel.jsx')); import ChatMessage from '../widgets/chat-message.jsx'; import ContactBadges from '../widgets/contact-badges.jsx'; -import DocPreview from '../widgets/doc-preview.jsx'; +const DocPreview = React.lazy(_ => import('../widgets/doc-preview.jsx')); import ErrorPanel from '../widgets/error-panel.jsx'; import GroupSubs from '../widgets/group-subs.jsx'; -import ImagePreview from '../widgets/image-preview.jsx'; +const ImagePreview = React.lazy(_ => import('../widgets/image-preview.jsx')); import Invitation from '../widgets/invitation.jsx'; import LetterTile from '../widgets/letter-tile.jsx'; import LoadSpinner from '../widgets/load-spinner.jsx'; @@ -19,13 +19,14 @@ import LogoView from './logo-view.jsx'; import MetaMessage from '../widgets/meta-message.jsx'; import PinnedMessages from '../widgets/pinned-messages.jsx'; import SendMessage from '../widgets/send-message.jsx'; -import VideoPreview from '../widgets/video-preview.jsx'; +const TheCardPreview = React.lazy(_ => import('../widgets/the-card-preview.jsx')); +const VideoPreview = React.lazy(_ => import('../widgets/video-preview.jsx')); import { DEFAULT_P2P_ACCESS_MODE, EDIT_PREVIEW_LENGTH, IMAGE_PREVIEW_DIM, IMMEDIATE_P2P_SUBSCRIPTION, DRAFTY_FR_MIME_TYPE_LEGACY, KEYPRESS_DELAY, MESSAGES_PAGE, MAX_EXTERN_ATTACHMENT_SIZE, MAX_IMAGE_DIM, MAX_INBAND_ATTACHMENT_SIZE, READ_DELAY, QUOTED_REPLY_LENGTH, VIDEO_PREVIEW_DIM } from '../config.js'; import { CALL_STATE_OUTGOING_INITATED, CALL_STATE_IN_PROGRESS } from '../constants.js'; -import { blobToBase64, fileToBase64, imageScaled, makeImageUrl } from '../lib/blob-helpers.js'; +import { blobToBase64, fileToBase64, imageScaled, importVCard, makeImageUrl } from '../lib/blob-helpers.js'; import HashNavigation from '../lib/navigation.js'; import { bytesToHumanSize, relativeDateFormat, shortDateFormat } from '../lib/strformat.js'; @@ -104,6 +105,11 @@ const messages = defineMessages({ 'other {{count, number} members}}', description: 'Count of group topic members' }, + cannot_parse_vcard: { + id: 'cannot_parse_vcard', + defaultMessage: 'Cannot parse vCard file.', + description: 'Error message when vCard file cannot be parsed' + } }); // Checks if the access permissions are granted but not yet accepted. @@ -144,6 +150,7 @@ class MessagesView extends React.Component { this.sendVideoAttachment = this.sendVideoAttachment.bind(this); this.sendFileAttachment = this.sendFileAttachment.bind(this); this.sendAudioAttachment = this.sendAudioAttachment.bind(this); + this.sendTheCardAttachment = this.sendTheCardAttachment.bind(this); this.sendKeyPress = this.sendKeyPress.bind(this); this.subscribe = this.subscribe.bind(this); this.handleScrollReference = this.handleScrollReference.bind(this); @@ -319,6 +326,9 @@ class MessagesView extends React.Component { } else if (topic.isSubscribed() && this.state.isReader && !prevState.isReader) { // If reader status has changed and data became available. topic.getMeta(topic.startMetaQuery().withLaterData().build()); + } else if (!topic.isSubscribed() && this.props.ready && !prevProps.ready) { + // Connection restored (e.g. wake from sleep): resubscribe to the currently open topic. + this.subscribe(topic); } } } @@ -383,11 +393,21 @@ class MessagesView extends React.Component { }; if (nextProps.forwardMessage) { - // We are forwarding a message. Show preview. - nextState.reply = { - content: nextProps.forwardMessage.preview, - seq: null - }; + if (nextProps.forwardMessage.content) { + const content = nextProps.forwardMessage.content; + const size = content?.length || (content?.size || 0); + nextState.docPreview = { + object: content, + type: nextProps.forwardMessage.type, + size: size + }; + } else { + // We are forwarding a message. Show preview. + nextState.reply = { + content: nextProps.forwardMessage.preview, + seq: null + }; + } } else { nextState.reply = null; } @@ -901,7 +921,14 @@ class MessagesView extends React.Component { if (this.state.videoPreview && this.state.videoPreview.url) { URL.revokeObjectURL(this.state.videoPreview.url); } - this.setState({ imagePostview: null, imagePreview: null, docPreview: null, videoPreview: null, videoPostview: null}); + this.setState({ + imagePostview: null, + imagePreview: null, + docPreview: null, + videoPreview: null, + videoPostview: null, + }); + this.props.onCancelForwardMessage(); } handleFormResponse(action, text, data) { @@ -1001,7 +1028,7 @@ class MessagesView extends React.Component { // sendMessage sends the message with an optional subscription to topic first. sendMessage(msg, uploadCompletionPromise, uploader) { let head; - if (this.props.forwardMessage) { + if (!msg && this.props.forwardMessage) { // We are forwarding a message. msg = this.props.forwardMessage.msg; head = this.props.forwardMessage.head; @@ -1039,7 +1066,7 @@ class MessagesView extends React.Component { }); } - // Send attachment as Drafty message: + // sendFileAttachment sends the file as Drafty message: // - if file is too large, upload it and send a s link. // - if file is small enough, just send it in-band. sendFileAttachment(file) { @@ -1047,6 +1074,15 @@ class MessagesView extends React.Component { const maxInbandAttachmentSize = (this.props.tinode.getServerParam('maxMessageSize', MAX_INBAND_ATTACHMENT_SIZE) * 0.75 - 1024) | 0; + if (TheCard.isFileSupported(file.type, file.name) || file.type == TheCard.contentType) { + // This is a vCard file, try to convert and send as TheCard. + if (this.sendTheCardAttachment(file, maxInbandAttachmentSize)) { + // Successfully sent as TheCard. + return; + } + // Sending as TheCard failed, fall through to sending as generic file attachment. + } + // If the attachment is a JSON file, then use 'application/octet-stream' instead of 'application/json'. // This is a temporary workaround for the collision with the 'application/json' MIME type of form responses. // Remove this code in 2026 or so. @@ -1081,6 +1117,29 @@ class MessagesView extends React.Component { } } + // Convert attached vCard to TheCard and send. + sendTheCardAttachment(file, maxInbandAttachmentSize) { + if (file.size > maxInbandAttachmentSize) { + // Cannot convert to TheCard, send as a generic file attachment instead. + return false; + } + + if (file.type == TheCard.contentType) { + // Already TheCard, no need to convert. + this.sendMessage(Drafty.appendTheCard(null, file.object)); + return true; + } + + importVCard(file) + .then(card => { + this.sendMessage(Drafty.appendTheCard(null, card)); + }) + .catch(err => { + this.props.onError(this.props.intl.formatMessage(messages.cannot_parse_vcard, {error: err.message}), 'err'); + }); + return true; + } + // handleAttachFile method is called when [Attach file] button is clicked: launch attachment preview. handleAttachFile(file) { const maxExternAttachmentSize = this.props.tinode.getServerParam('maxFileUploadSize', MAX_EXTERN_ATTACHMENT_SIZE); @@ -1488,85 +1547,109 @@ class MessagesView extends React.Component { // P2P call is an overlay, not a separate component because it cannot be // re-mounted between full screen/minimized. - const overlay = this.state.rtcPanel ? ( - - ) : null; + const overlay = this.state.rtcPanel && + }> + + ; let component; if (!this.state.topic) { - component = ( - - ); + serverAddress={this.props.serverAddress} />; + } else { let component2; if (this.state.imagePreview) { // Preview image before sending. component2 = ( - + }> + + ); } else if (this.state.videoPreview) { // Preview video. - component2 = ( - - ); + component2 = }> + + ; + } else if (this.state.imagePostview) { // Expand received image. - component2 = ( - - ); + component2 = }> + + ; + } else if (this.state.videoPostview) { // Play received video. - component2 = ( - - ); + component2 = }> + + ; + } else if (this.state.docPreview) { // Preview attachment before sending. - component2 = ( - - ); + if (TheCard.isFileSupported(this.state.docPreview.type, this.state.docPreview.name) || + this.state.docPreview.type == TheCard.contentType) { + component2 = }> + + ; + } else { + component2 = }> + + ; + } } else { const topic = this.props.tinode.getTopic(this.state.topic); const isChannel = topic.isChannelType() || topic.chan; @@ -1777,7 +1860,7 @@ class MessagesView extends React.Component { null}
: - this.state.tabSelected === 'byid' ? - : -
- - -
} + + this.state.tabSelected === 'byid' ? + : + +
+ + +
}
); } diff --git a/src/views/sidepanel-view.jsx b/src/views/sidepanel-view.jsx index d02084cc..cc2d9421 100644 --- a/src/views/sidepanel-view.jsx +++ b/src/views/sidepanel-view.jsx @@ -254,6 +254,9 @@ class SidepanelView extends React.PureComponent { }> diff --git a/src/views/tinode-web.jsx b/src/views/tinode-web.jsx index a3098883..1ec9e5fc 100644 --- a/src/views/tinode-web.jsx +++ b/src/views/tinode-web.jsx @@ -15,7 +15,7 @@ import CallIncoming from '../widgets/call-incoming.jsx'; const PhoneCountrySelector = React.lazy(_ => import('../widgets/phone-country-selector.jsx')); const InfoView = React.lazy(_ => import('./info-view.jsx')); -import MessagesView from './messages-view.jsx'; +const MessagesView = React.lazy(_ => import('./messages-view.jsx')); import SidepanelView from './sidepanel-view.jsx'; import { API_KEY, APP_NAME, DEFAULT_COLOR_SCHEME, DEFAULT_P2P_ACCESS_MODE, DEFAULT_TEXT_SIZE, FORWARDED_PREVIEW_LENGTH, @@ -108,6 +108,7 @@ class TinodeWeb extends React.Component { this.handleResize = this.handleResize.bind(this); this.handleHashRoute = this.handleHashRoute.bind(this); this.handleOnline = this.handleOnline.bind(this); + this.handleEscapeKey = this.handleEscapeKey.bind(this); this.handleColorSchemeChange = this.handleColorSchemeChange.bind(this); this.checkForAppUpdate = this.checkForAppUpdate.bind(this); this.handleVisibilityEvent = this.handleVisibilityEvent.bind(this); @@ -165,6 +166,7 @@ class TinodeWeb extends React.Component { this.handleLeaveUnsubRequest = this.handleLeaveUnsubRequest.bind(this); this.handleBlockTopicRequest = this.handleBlockTopicRequest.bind(this); this.handleReportTopic = this.handleReportTopic.bind(this); + this.handleShareTheCard = this.handleShareTheCard.bind(this); this.handleShowContextMenu = this.handleShowContextMenu.bind(this); this.defaultTopicContextMenu = this.defaultTopicContextMenu.bind(this); this.handleHideContextMenu = this.handleHideContextMenu.bind(this); @@ -319,6 +321,9 @@ class TinodeWeb extends React.Component { // Window/tab visible or invisible for pausing timers. document.addEventListener('visibilitychange', this.handleVisibilityEvent); + // Listen for Escape key to clear selections. + document.addEventListener('keydown', this.handleEscapeKey); + document.documentElement.style.colorScheme = this.state.colorSchema == 'auto' ? 'light dark' : this.state.colorSchema; document.documentElement.style.setProperty('--message-text-size', `${this.state.textSize}pt`); @@ -407,6 +412,7 @@ class TinodeWeb extends React.Component { window.removeEventListener('offline', this.handleOnlineOff); window.matchMedia('(prefers-color-scheme: dark)').removeEventListener('change', this.handleColorSchemeChange); document.removeEventListener('visibilitychange', this.handleVisibilityEvent); + document.removeEventListener('keydown', this.handleEscapeKey); clearInterval(this.wakeUpTicker); } @@ -516,6 +522,27 @@ class TinodeWeb extends React.Component { } } + handleEscapeKey(e) { + if (e.key === 'Escape' || e.keyCode === 27) { + // Clear selections and navigate to base state + this.setState({ + topicSelected: null, + errorText: '', + errorLevel: null, + mobilePanel: 'sidepanel', + topicSelectedOnline: false, + topicSelectedAcs: null, + infoPanel: undefined, + forwardMessage: null, + contextMenuVisible: false, + forwardDialogVisible: false, + alertVisible: false + }); + // Navigate to contacts or login view + HashNavigation.navigateTo(HashNavigation.setUrlTopic('', null)); + } + } + // Check if a newer version of TinodeWeb app is available at the server. checkForAppUpdate(reg) { reg.onupdatefound = _ => { @@ -826,7 +853,9 @@ class TinodeWeb extends React.Component { LocalStorageUtil.setObject('auth-token', this.tinode.getAuthToken()); } - const goToTopic = this.state.requestedTopic; + // On reconnect, requestedTopic is undefined but topicSelected may still be set. + // Preserve the open topic so it gets restored after re-login. + const goToTopic = this.state.requestedTopic || this.state.topicSelected; // Logged in fine, subscribe to 'me' attaching callbacks from the contacts view. const me = this.tinode.getMeTopic(); me.onMetaDesc = this.tnMeMetaDesc; @@ -1123,7 +1152,6 @@ class TinodeWeb extends React.Component { // - head - head dictionary to be attached to the message handleSendMessage(msg, uploadCompletionPromise, uploader, head) { const topic = this.tinode.getTopic(this.state.topicSelected); - /* TODO: check if return is required */ return this.sendMessageToTopic(topic, msg, uploadCompletionPromise, uploader, head); } @@ -1703,7 +1731,7 @@ class TinodeWeb extends React.Component { // If the Find panel is active, close it. this.handleSidepanelCancel(); } - const header = '➦ ' + params.userName; + const header = params.userName ? '➦ ' + params.userName : ''; const content = typeof params.content == 'string' ? Drafty.init(params.content) : Drafty.forwardedContent(params.content); const preview = Drafty.preview(content, FORWARDED_PREVIEW_LENGTH, true); const msg = Drafty.append(Drafty.appendLineBreak(Drafty.mention(header, params.userFrom)), content); @@ -1718,6 +1746,16 @@ class TinodeWeb extends React.Component { }); } + handleShareTheCard(card) { + this.setState({ + forwardDialogVisible: true, + forwardMessage: { + content: card, + type: card.contentType, + } + }); + } + defaultTopicContextMenu(topicName) { const topic = this.tinode.getTopic(topicName); @@ -2179,6 +2217,9 @@ class TinodeWeb extends React.Component { reqCredMethod={this.state.reqCredMethod} textSize={this.state.textSize} colorSchema={this.state.colorSchema} + wallpaper={this.state.wallpaper} + wallpaperSize={this.state.wallpaperSize} + wallpaperBlur={this.state.wallpaperBlur} systemColorSchema={this.state.systemColorSchema} sendOnEnter={this.state.sendOnEnter} @@ -2225,56 +2266,59 @@ class TinodeWeb extends React.Component { : null} {!this.state.displayMobile || (this.state.mobilePanel == 'topic-view' && !this.state.infoPanel) ? - }> + + onHideMessagesView={this.handleHideMessagesView} + onError={this.handleError} + onNewTopicCreated={this.handleNewTopicCreated} + showContextMenu={this.handleShowContextMenu} + onChangePermissions={this.handleChangePermissions} + onNewChat={this.handleNewChatInvitation} + sendMessage={this.handleSendMessage} + onVideoCallClosed={this.handleCallClose} /> + : null} {this.state.infoPanel ? @@ -2304,7 +2348,7 @@ class TinodeWeb extends React.Component { onLeaveTopic={this.handleLeaveUnsubRequest} onBlockTopic={this.handleBlockTopicRequest} onReportTopic={this.handleReportTopic} - onAddMember={this.handleManageGroupMembers} + onShareTheCard={this.handleShareTheCard} onTopicTagsUpdateRequest={this.handleTagsUpdateRequest} onTopicUnArchive={this.handleUnarchive} onInitFind={this.tnInitFind} diff --git a/src/views/wallpapers.jsx b/src/views/wallpapers.jsx index 8bea899d..145f7786 100644 --- a/src/views/wallpapers.jsx +++ b/src/views/wallpapers.jsx @@ -3,17 +3,20 @@ import React from 'react'; import { FormattedMessage } from 'react-intl'; import HashNavigation from '../lib/navigation.js'; import { WALLPAPER_DEFAULTS } from '../config.js'; +import { wallpaperNameFromUrl, wallpaperTypeFromUrl } from '../lib/utils.js'; import imageIndex from '../../img/bkg/index.json'; export default class WallpapersView extends React.PureComponent { constructor(props) { super(props); + const type = wallpaperTypeFromUrl(this.props.wallpaper); + const name = wallpaperNameFromUrl(this.props.wallpaper); this.state = { - tab: WALLPAPER_DEFAULTS.type, // currently selected tab: 'patt' | 'img' - selectedType: WALLPAPER_DEFAULTS.type, // type of the selected wallpaper. - wallpaper: imageIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index].name, - blur: 0, + tab: type || WALLPAPER_DEFAULTS.type, // currently selected tab: 'patt' | 'img' + selectedType: type || WALLPAPER_DEFAULTS.type, // type of the selected wallpaper. + wallpaper: name || imageIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index].name, + blur: this.props.wallpaperBlur | 0, }; this.blurValues = [0, 1, 2, 4, 8, 16]; @@ -21,6 +24,7 @@ export default class WallpapersView extends React.PureComponent { this.handleTabClick = this.handleTabClick.bind(this); this.handleWallpaperSelected = this.handleWallpaperSelected.bind(this); this.handleBlurChanged = this.handleBlurChanged.bind(this); + this.hasChanged = this.hasChanged.bind(this); } handleTabClick(e) { @@ -32,6 +36,10 @@ export default class WallpapersView extends React.PureComponent { handleWallpaperSelected(e) { let index, type, blur if (!e) { + if (!this.hasChanged()) { + return; + } + // Restore default. type = WALLPAPER_DEFAULTS.type; index = WALLPAPER_DEFAULTS.index; @@ -58,11 +66,18 @@ export default class WallpapersView extends React.PureComponent { } } + hasChanged() { + return this.state.selectedType != WALLPAPER_DEFAULTS.type || + this.state.wallpaper != imageIndex[WALLPAPER_DEFAULTS.type][WALLPAPER_DEFAULTS.index].name || + this.state.blur != 0; + } + render() { return (
-
- this.handleWallpaperSelected(null)}> +
+ this.handleWallpaperSelected(null)}> undo  diff --git a/src/widgets/avatar-upload.jsx b/src/widgets/avatar-upload.jsx index 29a9150b..fb6955dd 100644 --- a/src/widgets/avatar-upload.jsx +++ b/src/widgets/avatar-upload.jsx @@ -48,7 +48,7 @@ export default class AvatarUpload extends React.Component { this.props.readOnly && this.props.uid ?
diff --git a/src/widgets/call-incoming.jsx b/src/widgets/call-incoming.jsx index 67ef3b0c..fb28ca58 100644 --- a/src/widgets/call-incoming.jsx +++ b/src/widgets/call-incoming.jsx @@ -122,7 +122,7 @@ export default class CallIncoming extends React.Component {
diff --git a/src/widgets/call-panel.jsx b/src/widgets/call-panel.jsx index fdf95124..3698d331 100644 --- a/src/widgets/call-panel.jsx +++ b/src/widgets/call-panel.jsx @@ -346,11 +346,11 @@ class CallPanel extends React.PureComponent { } handleDataChannelClose(event) { - console.log('close data channel:', event); + console.info('close data channel:', event); } handleDataChannelEvent(event) { - console.log('data channel event:', event); + console.info('data channel event:', event); const channel = event.channel; channel.onerror = this.handleDataChannelError; channel.onmessage = this.handleDataChannelMessage; @@ -680,7 +680,7 @@ class CallPanel extends React.PureComponent {
diff --git a/src/widgets/chat-message.jsx b/src/widgets/chat-message.jsx index 26036e67..637f5d6d 100644 --- a/src/widgets/chat-message.jsx +++ b/src/widgets/chat-message.jsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormattedMessage, injectIntl } from 'react-intl'; -import { Drafty, Tinode } from 'tinode-sdk'; +import { Drafty, Tinode, TheCard } from 'tinode-sdk'; import Attachment from './attachment.jsx'; import LetterTile from './letter-tile.jsx'; @@ -10,6 +10,7 @@ import ReceivedMarker from './received-marker.jsx' import { fullFormatter } from '../lib/formatters.js'; import { sanitizeUrl } from '../lib/utils.js'; +import HashNavigation from '../lib/navigation.js'; class BaseChatMessage extends React.PureComponent { constructor(props) { @@ -26,22 +27,59 @@ class BaseChatMessage extends React.PureComponent { this.handleExpandImage = this.handleExpandImage.bind(this); this.handlePlayVideo = this.handlePlayVideo.bind(this); this.handleFormButtonClick = this.handleFormButtonClick.bind(this); + this.handleQuoteClick = this.handleQuoteClick.bind(this); this.handleContextClick = this.handleContextClick.bind(this); this.handleCancelUpload = this.handleCancelUpload.bind(this); - this.handleQuoteClick = this.handleQuoteClick.bind(this); + this.handleDraftyClick = this.handleDraftyClick.bind(this); this.formatterContext = { formatMessage: props.intl.formatMessage.bind(props.intl), viewportWidth: props.viewportWidth, authorizeURL: props.tinode.authorizeURL.bind(props.tinode), - onImagePreview: this.handleExpandImage, - onVideoPreview: this.handlePlayVideo, - onFormButtonClick: this.handleFormButtonClick, - onQuoteClick: this.handleQuoteClick + onHandleClick: this.handleDraftyClick }; } + handleDraftyClick = (e, action) => { + switch (action) { + case 'image': + this.handleExpandImage(e); + break; + case 'video': + this.handlePlayVideo(e); + break; + case 'form_button': + this.handleFormButtonClick(e); + break; + case 'quote': + this.handleQuoteClick(e); + break; + case 'contact_chat': + e.preventDefault(); + try { + // tinode:topic/usr123abc -> usr123abc + const pathname = new URL(e.target.dataset.val)?.pathname; + const parts = pathname.split('/').filter(Boolean); + HashNavigation.navigateTo(HashNavigation.setUrlTopic('', parts.pop() || '')); + } catch (error) { + console.error("Invalid URL:", error); + } + break; + case 'contact_find': + e.preventDefault(); + let hashUrl = HashNavigation.setUrlSidePanel(window.location.hash, 'newtpk'); + hashUrl = HashNavigation.addUrlParam(hashUrl, 'q', e.target.dataset.val); + hashUrl = HashNavigation.addUrlParam(hashUrl, 'tab', 'find'); + HashNavigation.navigateTo(hashUrl); + break; + default: + // No special handling; let the browser deal with it. + console.info('Unhandled drafty action.', action, e.target.dataset); + break; + } + } + handleExpandImage(e) { e.preventDefault(); this.props.onExpandMedia({ @@ -99,7 +137,7 @@ class BaseChatMessage extends React.PureComponent { if (!this.props.response) { let immutable = false; Drafty.entities(this.props.content, (_0, _1, tp) => { - immutable = ['AU', 'EX', 'FM', 'IM', 'VC', 'VD'].includes(tp); + immutable = ['AU', 'EX', 'FM', 'IM', 'TC', 'VC', 'VD'].includes(tp); return immutable; }); if (!immutable) { @@ -200,7 +238,7 @@ class BaseChatMessage extends React.PureComponent {
{fullDisplay ? : diff --git a/src/widgets/chip-input.jsx b/src/widgets/chip-input.jsx index 1a59298b..0ea305ff 100644 --- a/src/widgets/chip-input.jsx +++ b/src/widgets/chip-input.jsx @@ -23,7 +23,6 @@ export default class ChipInput extends React.Component { static deriveStateFromProps(props) { return { - placeholder: props.chips ? '' : props.prompt, sortedChips: ChipInput.sortChips(props.chips, props.staticMembers), chipIndex: ChipInput.indexChips(props.chips) }; @@ -137,7 +136,7 @@ export default class ChipInput extends React.Component {
{chips} :
diff --git a/src/widgets/contact-list.jsx b/src/widgets/contact-list.jsx index 14002d71..e737deb5 100644 --- a/src/widgets/contact-list.jsx +++ b/src/widgets/contact-list.jsx @@ -25,7 +25,7 @@ const messages = defineMessages({ } }); -class ContactList extends React.Component { +class ContactList extends React.PureComponent { render() { const { formatMessage } = this.props.intl; const showCheckmark = Array.isArray(this.props.topicSelected); @@ -53,6 +53,8 @@ class ContactList extends React.Component { contactsCount ++; } if (this.props.contacts && this.props.contacts.length > 0) { + // Used keys to prevent duplicates when the user comes both from the 'fnd' and the list of contacts. + const usedKeys = {}; this.props.contacts.forEach(c => { if (c.action) { // Action item @@ -65,6 +67,10 @@ class ContactList extends React.Component { } else { // Normal contact const key = this.props.showMode ? c.user : (c.topic || c.user); + if (usedKeys[key]) { + return; + } + usedKeys[key] = true; // If filter function is provided, filter out the items // which don't satisfy the condition. if (this.props.filterFunc && this.props.filter) { @@ -154,8 +160,9 @@ class ContactList extends React.Component { return (
{contactsCount == 0 ? -
+
+ {this.props.emptyListMessage} +
: null } diff --git a/src/widgets/contact.jsx b/src/widgets/contact.jsx index 3fb5c8d1..db49ae29 100644 --- a/src/widgets/contact.jsx +++ b/src/widgets/contact.jsx @@ -122,7 +122,7 @@ class Contact extends React.Component {
  • -
    + diff --git a/src/widgets/group-manager.jsx b/src/widgets/group-manager.jsx index ad9d6a63..63ffb33e 100644 --- a/src/widgets/group-manager.jsx +++ b/src/widgets/group-manager.jsx @@ -15,6 +15,11 @@ const messages = defineMessages({ id: 'contacts_not_found_short', defaultMessage: "No contacts match ''{query}''", description: 'Shown in ContactsView when search returned no results' + }, + add_members_prompt: { + id: 'add_members_prompt', + defaultMessage: 'add members', + description: 'Placeholder in group members input field' } }); @@ -166,7 +171,7 @@ class GroupManager extends React.Component { tinode={this.props.tinode} chips={this.state.members} staticMembers={this.state.staticMembers} - prompt="add members" + prompt={this.props.intl.formatMessage(messages.add_members_prompt)} filterFunc={this.handleContactFilter} onChipRemoved={this.handleMemberRemoved} />
    diff --git a/src/widgets/group-subs.jsx b/src/widgets/group-subs.jsx index 68addfb1..519ca386 100644 --- a/src/widgets/group-subs.jsx +++ b/src/widgets/group-subs.jsx @@ -22,7 +22,7 @@ export default class GroupSubs extends React.Component { usersOnline.push(
    diff --git a/src/widgets/image-preview.jsx b/src/widgets/image-preview.jsx index 445f6f24..1f777d6f 100644 --- a/src/widgets/image-preview.jsx +++ b/src/widgets/image-preview.jsx @@ -77,7 +77,7 @@ export default class ImagePreview extends React.PureComponent { return (
    -
    +
    {this.props.onSendMessage ? {fname} : diff --git a/src/widgets/letter-tile.jsx b/src/widgets/letter-tile.jsx index 8865694b..ec88f8a5 100644 --- a/src/widgets/letter-tile.jsx +++ b/src/widgets/letter-tile.jsx @@ -27,7 +27,7 @@ export default class LetterTile extends React.PureComponent { } } } else if (this.props.avatar) { - const url = this.props.tinode.authorizeURL(sanitizeUrlForMime(this.props.avatar, 'image')); + const url = this.props.authorizeURL(sanitizeUrlForMime(this.props.avatar, 'image')); // If avatar image is invalid, show a placeholder. const className = 'avatar' + (this.props.deleted ? ' deleted' : ''); avatar = avatar { diff --git a/src/widgets/search-contacts.jsx b/src/widgets/search-contacts.jsx index 6076dc6d..c9fed558 100644 --- a/src/widgets/search-contacts.jsx +++ b/src/widgets/search-contacts.jsx @@ -8,7 +8,7 @@ export default class SearchContacts extends React.PureComponent { this.state = { edited: false, - search: '' + search: this.props.initialQuery || '' }; this.handleSearchChange = this.handleSearchChange.bind(this); @@ -47,7 +47,8 @@ export default class SearchContacts extends React.PureComponent { if (e.key === 'Enter') { this.handleSearch(e); } else if (e.key === 'Escape') { - this.handleClear(); + e.stopPropagation(); + this.handleClear(e); } } diff --git a/src/widgets/show-qrcode.jsx b/src/widgets/show-qrcode.jsx index bd33aa89..1e8670f1 100644 --- a/src/widgets/show-qrcode.jsx +++ b/src/widgets/show-qrcode.jsx @@ -23,6 +23,7 @@ export default class ShowQRCode extends React.PureComponent {

    +
    {this.props.uri}
    \n \n
    \n );\n }\n}\n\nexport default injectIntl(CredentialEdit);\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\nimport CredentialEdit from '../widgets/credential-edit.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\n\nfunction _clip(str, length) {\n return truncateString(str, length);\n}\n\nexport default class AccountSettingsView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: _clip(me.public ? me.public.fn : undefined, MAX_TITLE_LENGTH),\n description: _clip(me.public ? me.public.note : undefined, MAX_TOPIC_DESCRIPTION_LENGTH),\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n credentials: me.getCredentials() || [],\n credEdit: undefined,\n alias: ((me.tags() || []).find(tag => tag.startsWith('alias:')) || '').substring(6),\n };\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = _ => this.setState({credentials: me.getCredentials()});\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = null;\n }\n\n render() {\n if (this.state.credEdit) {\n return (\n this.setState({credEdit: undefined})}\n onError={this.props.onError} />\n );\n }\n\n // Count how many times each method is validated.\n const validated = {};\n this.state.credentials.forEach(cred => {\n if (cred.done) {\n validated[cred.meth] = (validated[cred.meth] || 0) + 1;\n }\n });\n\n const credentials = [];\n this.state.credentials.forEach((cred, idx) => {\n if (!['email', 'tel'].includes(cred.meth)) {\n // Skip unknown methods.\n return ;\n }\n\n let val = cred.val\n if (cred.meth == 'tel') {\n const number = parsePhoneNumber(cred.val);\n val = number ? number.formatInternational() : cred.val;\n }\n\n credentials.push(\n
    \n {e.preventDefault(); this.setState({credEdit: cred});}}>{val}\n {cred.done ? null : pending} \n {!cred.done || validated[cred.meth] > 1 || this.props.reqCredMethod != cred.meth ?\n {e.preventDefault(); this.props.onCredDelete(cred.meth, cred.val);}}>\n delete\n \n :\n null}\n \n
    );\n });\n if (credentials.length > 0) {\n // Add title as the first element.\n credentials.unshift(\n );\n }\n\n return (\n
    \n
    \n {e.preventDefault(); this.props.onNavigate('general');}}>\n edit \n \n \n
    \n \n
    \n
    \n \n
    {this.state.fullName}
    \n
    \n
    \n  \n {this.props.myUserId}\n
    \n {this.state.alias ?\n
    \n  \n @{this.state.alias}\n
    : null}\n
    \n \n
    \n {this.state.description ?\n
    \n \n
    {this.state.description}
    \n
    : null}\n
    \n
    \n
    \n
    {credentials}
    \n
    \n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n \n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","CredentialEdit","React","constructor","props","super","this","state","code","tel","email","sent","handleSubmit","bind","handleEmailChange","handlePhoneChange","handleCodeChange","formatPhoneNumber","raw","number","parsePhoneNumber","err","formatInternational","e","setState","target","value","replace","preventDefault","method","onError","onCredConfirm","onCredAdd","msg","intl","formatMessage","render","readyForCode","done","rawValue","val","formattedValue","changeEmail","className","FormattedMessage","changePhone","newEmailLabel","newEmailInput","email_prompt","type","placeholder","autoComplete","onChange","required","newPhoneLabel","newPhoneInput","PhoneEdit","autoFocus","onShowCountrySelector","onSubmit","codeInput","numbers_only","maxLength","onClick","onCancel","injectIntl","_clip","str","length","truncateString","AccountSettingsView","me","tinode","getMeTopic","fullName","public","fn","undefined","MAX_TITLE_LENGTH","description","note","MAX_TOPIC_DESCRIPTION_LENGTH","avatar","makeImageUrl","photo","credentials","getCredentials","credEdit","alias","tags","find","tag","startsWith","substring","componentDidMount","onCredsUpdated","_","componentWillUnmount","meth","validated","forEach","cred","idx","includes","push","key","reqCredMethod","href","onCredDelete","unshift","onNavigate","AvatarUpload","readOnly","uid","myUserId","title","BadgeList","trustedBadges","mobile_number_required","codeMap","dcodes","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","trim","isValid","inputField","setCustomValidity","format","sample","getExampleNumber","examples","flagEmoji","ref","onKeyDown","onBlur"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"271.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/credential-edit.jsx","webpack://tinode-webapp/./src/views/account-settings-view.jsx","webpack://tinode-webapp/./src/widgets/phone-edit.jsx"],"sourcesContent":["// Enter one credential at a time.\n\nimport React from 'react';\nimport { defineMessages, FormattedMessage, injectIntl } from 'react-intl';\nimport PhoneEdit from './phone-edit.jsx';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nconst messages = defineMessages({\n password_reset_email_sent: {\n id: 'password_reset_email_sent',\n defaultMessage: 'An email with security code has been sent.',\n description: 'Notification that the email with password reset instructions has been sent'\n },\n password_reset_sms_sent: {\n id: 'password_reset_sms_sent',\n defaultMessage: 'A text message with security code has been sent.',\n description: 'Notification that the SMS with password reset instructions has been sent'\n },\n});\n\nclass CredentialEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n code: '',\n tel: '',\n email: '',\n sent: false\n };\n\n this.handleSubmit = this.handleSubmit.bind(this);\n this.handleEmailChange = this.handleEmailChange.bind(this);\n this.handlePhoneChange = this.handlePhoneChange.bind(this);\n this.handleCodeChange = this.handleCodeChange.bind(this);\n }\n\n static formatPhoneNumber(raw) {\n let number;\n try {\n number = parsePhoneNumber(raw);\n } catch (err) {}\n return number ? number.formatInternational() : raw;\n }\n\n handleEmailChange(e) {\n this.setState({email: e.target.value});\n }\n\n handlePhoneChange(number) {\n this.setState({tel: number});\n }\n\n handleCodeChange(e) {\n this.setState({code: e.target.value.replace(/[^\\d]/g, '')});\n }\n\n handleSubmit(e) {\n e.preventDefault();\n const value = this.props.method == 'email' ? this.state.email : this.state.tel;\n if (this.state.code) {\n this.props.onError(null);\n this.props.onCredConfirm(this.props.method, this.state.code);\n } else if (value) {\n this.props.onCredAdd(this.props.method, value);\n this.setState({sent: true});\n const msg = this.props.method == 'email' ? messages.password_reset_email_sent : messages.password_reset_sms_sent;\n this.props.onError(this.props.intl.formatMessage(msg), 'info');\n }\n }\n\n render() {\n const readyForCode = this.state.sent || !this.props.done;\n const rawValue = readyForCode ? (this.state.tel || this.state.email) : this.props.val;\n const formattedValue = this.props.method == 'tel' ? CredentialEdit.formatPhoneNumber(rawValue) : rawValue;\n\n const changeEmail = (\n <>
    \n \n
    \n
    \n \n
    );\n\n const changePhone = (\n <>
    \n \n
    \n
    \n \n
    \n );\n\n const newEmailLabel = ();\n\n const newEmailInput = (\n <>
    {newEmailLabel}
    \n
    \n {\n (email_prompt) => \n }\n
    \n );\n\n const newPhoneLabel = ();\n\n const newPhoneInput = (\n <>
    {newPhoneLabel}
    \n
    \n \n
    \n );\n\n const codeInput = (\n <>
    \n \n
    \n
    \n {\n (numbers_only) => \n }\n
    \n );\n\n return (
    \n {readyForCode ?\n (this.props.method == 'email' ? newEmailLabel : this.props.method == 'tel' ? newPhoneLabel : null)\n :\n (this.props.method == 'email' ? changeEmail : this.props.method == 'tel' ? changePhone : null)\n }\n
    \n {formattedValue}\n
    \n {readyForCode ?\n null\n :\n (this.props.method == 'email' ? newEmailInput : this.props.method == 'tel' ? newPhoneInput : null)\n }\n {readyForCode ? codeInput : null}\n
    \n \n \n
    \n
    );\n }\n}\n\nexport default injectIntl(CredentialEdit);\n","// Edit account parameters.\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\nimport { parsePhoneNumber } from 'libphonenumber-js/mobile';\n\nimport AvatarUpload from '../widgets/avatar-upload.jsx';\nimport BadgeList from '../widgets/badge-list.jsx';\nimport CredentialEdit from '../widgets/credential-edit.jsx';\n\nimport { makeImageUrl } from '../lib/blob-helpers.js';\nimport { truncateString } from '../lib/strformat.js';\nimport { MAX_TITLE_LENGTH, MAX_TOPIC_DESCRIPTION_LENGTH } from '../config.js';\n\nfunction _clip(str, length) {\n return truncateString(str, length);\n}\n\nexport default class AccountSettingsView extends React.Component {\n constructor(props) {\n super(props);\n\n const me = this.props.tinode.getMeTopic();\n this.state = {\n fullName: _clip(me.public ? me.public.fn : undefined, MAX_TITLE_LENGTH),\n description: _clip(me.public ? me.public.note : undefined, MAX_TOPIC_DESCRIPTION_LENGTH),\n avatar: makeImageUrl(me.public ? me.public.photo : null),\n credentials: me.getCredentials() || [],\n credEdit: undefined,\n alias: ((me.tags() || []).find(tag => tag.startsWith('alias:')) || '').substring(6),\n };\n }\n\n componentDidMount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = _ => this.setState({credentials: me.getCredentials()});\n }\n\n componentWillUnmount() {\n const me = this.props.tinode.getMeTopic();\n me.onCredsUpdated = null;\n }\n\n render() {\n if (this.state.credEdit) {\n return (\n this.setState({credEdit: undefined})}\n onError={this.props.onError} />\n );\n }\n\n // Count how many times each method is validated.\n const validated = {};\n this.state.credentials.forEach(cred => {\n if (cred.done) {\n validated[cred.meth] = (validated[cred.meth] || 0) + 1;\n }\n });\n\n const credentials = [];\n this.state.credentials.forEach((cred, idx) => {\n if (!['email', 'tel'].includes(cred.meth)) {\n // Skip unknown methods.\n return ;\n }\n\n let val = cred.val\n if (cred.meth == 'tel') {\n const number = parsePhoneNumber(cred.val);\n val = number ? number.formatInternational() : cred.val;\n }\n\n credentials.push(\n
    \n {e.preventDefault(); this.setState({credEdit: cred});}}>{val}\n {cred.done ? null : pending} \n {!cred.done || validated[cred.meth] > 1 || this.props.reqCredMethod != cred.meth ?\n {e.preventDefault(); this.props.onCredDelete(cred.meth, cred.val);}}>\n delete\n \n :\n null}\n \n
    );\n });\n if (credentials.length > 0) {\n // Add title as the first element.\n credentials.unshift(\n );\n }\n\n return (\n
    \n
    \n {e.preventDefault(); this.props.onNavigate('general');}}>\n edit \n \n \n
    \n \n
    \n
    \n \n
    {this.state.fullName}
    \n
    \n
    \n  \n {this.props.myUserId}\n
    \n {this.state.alias ?\n
    \n  \n @{this.state.alias}\n
    : null}\n
    \n \n
    \n {this.state.description ?\n
    \n \n
    {this.state.description}
    \n
    : null}\n
    \n
    \n
    \n
    {credentials}
    \n
    \n \n );\n }\n};\n","// Editor for a phone number.\n\nimport React from 'react';\nimport { defineMessages, injectIntl } from 'react-intl';\nimport { AsYouType, getExampleNumber, parsePhoneNumber } from 'libphonenumber-js/mobile';\nimport examples from 'libphonenumber-js/mobile/examples'\n\nimport * as dcodes from '../dcodes.json';\nimport { flagEmoji } from '../lib/strformat';\n\nconst messages = defineMessages({\n mobile_number_required: {\n id: 'mobile_number_required',\n defaultMessage: 'Mobile phone number required',\n description: 'Error message'\n }\n});\n\nclass PhoneEdit extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.codeMap = {};\n dcodes.default.forEach(dc => { this.codeMap[dc.code] = dc.dial; });\n\n const code = props.countryCode || 'US';\n const dial = this.codeMap[code];\n\n this.state = {\n countryCode: code,\n dialCode: dial,\n localNumber: '',\n placeholderNumber: this.placeholderNumber(code, dial)\n };\n\n this.handleChange = this.handleChange.bind(this);\n this.handleFinished = this.handleFinished.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.showCountrySelector = this.showCountrySelector.bind(this);\n }\n\n handleChange(e) {\n const prefix = `+${this.state.dialCode}`;\n let formatted = new AsYouType().input(`${prefix}${this.filterNumber(e.target.value)}`);\n formatted = formatted.substring(prefix.length).trim();\n this.setState({localNumber: formatted});\n }\n\n handleFinished(e) {\n e.preventDefault();\n const raw = `${this.state.dialCode}${this.state.localNumber.trim()}`.replace(/[^\\d]/g, '');\n let number = null;\n try {\n number = parsePhoneNumber(`+${raw}`);\n } catch (err) {}\n\n if (!number || !number.isValid()) {\n this.inputField.setCustomValidity(this.props.intl.formatMessage(messages.mobile_number_required));\n return;\n }\n\n this.inputField.setCustomValidity('');\n this.props.onSubmit(number.format('E.164'));\n }\n\n\n handleKeyDown(e) {\n if (e.key === 'Enter') {\n this.handleFinished(e);\n }\n }\n\n showCountrySelector() {\n this.props.onShowCountrySelector(this.state.countryCode, this.state.dialCode,\n (code, dial) => {\n this.setState({\n countryCode: code,\n dialCode: dial,\n placeholderNumber: this.placeholderNumber(code, dial)\n })\n });\n }\n\n // Filter out characters not permitted in a phone number.\n filterNumber(number) {\n if (!number) {\n return number;\n }\n // Leave numbers, space, (, ), -, and .\n // The + is not allowed: it's handled by the country code portion.\n return number.replace(/[^-\\s().\\d]/g, '');\n }\n\n placeholderNumber(code, dial) {\n const sample = getExampleNumber(code, examples);\n return sample ? sample.formatInternational().substring(dial.length + 1).trim() : '123 0123';\n }\n\n render() {\n return (\n <>\n \n {flagEmoji(this.state.countryCode)} \n +{this.state.dialCode} \n {this.inputField = ref}} placeholder={this.state.placeholderNumber}\n value={this.state.localNumber} onChange={this.handleChange}\n maxLength={17} onKeyDown={this.handleKeyDown} onBlur={this.handleFinished}\n required autoFocus={this.props.autoFocus} />\n \n );\n }\n}\n\nexport default injectIntl(PhoneEdit);\n"],"names":["messages","defineMessages","password_reset_email_sent","id","defaultMessage","password_reset_sms_sent","CredentialEdit","React","constructor","props","super","this","state","code","tel","email","sent","handleSubmit","bind","handleEmailChange","handlePhoneChange","handleCodeChange","formatPhoneNumber","raw","number","parsePhoneNumber","err","formatInternational","e","setState","target","value","replace","preventDefault","method","onError","onCredConfirm","onCredAdd","msg","intl","formatMessage","render","readyForCode","done","rawValue","val","formattedValue","changeEmail","className","FormattedMessage","changePhone","newEmailLabel","newEmailInput","email_prompt","type","placeholder","autoComplete","onChange","required","newPhoneLabel","newPhoneInput","PhoneEdit","autoFocus","onShowCountrySelector","onSubmit","codeInput","numbers_only","maxLength","onClick","onCancel","injectIntl","_clip","str","length","truncateString","AccountSettingsView","me","tinode","getMeTopic","fullName","public","fn","undefined","MAX_TITLE_LENGTH","description","note","MAX_TOPIC_DESCRIPTION_LENGTH","avatar","makeImageUrl","photo","credentials","getCredentials","credEdit","alias","tags","find","tag","startsWith","substring","componentDidMount","onCredsUpdated","_","componentWillUnmount","meth","validated","forEach","cred","idx","includes","push","key","reqCredMethod","href","onCredDelete","unshift","onNavigate","AvatarUpload","readOnly","uid","myUserId","title","BadgeList","trustedBadges","mobile_number_required","codeMap","dcodes","dc","dial","countryCode","dialCode","localNumber","placeholderNumber","handleChange","handleFinished","handleKeyDown","showCountrySelector","prefix","formatted","AsYouType","input","filterNumber","trim","isValid","inputField","setCustomValidity","format","sample","getExampleNumber","examples","flagEmoji","ref","onKeyDown","onBlur"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/297.prod.js b/umd/297.prod.js new file mode 100644 index 00000000..333994fa --- /dev/null +++ b/umd/297.prod.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[297],{6297:function(n){n.exports=JSON.parse('{"action_block_contact":"Chặn liên hệ","action_cancel":"hủy","action_clear_messages":"Xóa tin nhắn","action_delete_messages":"Xóa tin nhắn cho tất cả","action_leave_chat":"Rời cuộc trò chuyện","action_report_chat":"Báo cáo cuộc trò chuyện","archived_contacts":"Liên hệ đã lưu trữ ({count})","badge_danger":"Không đáng tin","badge_owner":"chủ sở hữu","badge_staff":"Được quản lý bởi nhân viên","badge_verified":"Đã xác minh/chính thức","badge_you":"bạn","block_contact_warning":"Bạn có chắc muốn chặn liên hệ này?","blocked_contacts_link":"Liên hệ bị chặn ({count})","button_add_members":"Thêm thành viên","button_cancel":"Hủy","button_confirm":"Xác nhận","button_create":"Tạo","button_delete_account":"Xóa tài khoản","button_edit":"Sửa","button_logout":"Đăng xuất","button_ok":"OK","button_reset":"Đặt lại","button_send_request":"Gửi yêu cầu","button_sign_in":"Đăng nhập","button_sign_up":"Đăng ký","button_subscribe":"Theo dõi","button_update":"Cập nhật","cannot_initiate_file_upload":"Không thể bắt đầu tải tệp lên.","channel":"kênh","channel_prompt":"Đây là một kênh","chat_invitation":"Bạn được mời bắt đầu cuộc trò chuyện mới. Bạn muốn làm gì?","chat_invitation_accept":"Chấp nhận","chat_invitation_block":"Chặn","chat_invitation_ignore":"Bỏ qua","clear_messages_warning":"Bạn có chắc muốn xóa tất cả tin nhắn? Hành động này không thể hoàn tác.","code_doesnot_match":"Mã không khớp","contacts_not_found":"Bạn chưa có cuộc trò chuyện nào\\n¯∖_(ツ)_/¯","contacts_not_found_short":"Không có liên hệ nào khớp với \'\'{query}\'\'","credential_email_prompt":"Email đăng ký của bạn","delete_account":"Xóa tài khoản","delete_account_warning":"Bạn có chắc muốn xóa tài khoản? Hành động này không thể hoàn tác.","delete_messages_warning":"Bạn có chắc muốn xóa tất cả tin nhắn cho mọi người? Hành động này không thể hoàn tác.","download_action":"tải xuống","drafty_attachment":"Tệp đính kèm","drafty_form":"Biểu mẫu:","drafty_image":"Hình ảnh","email_dative":"email","email_prompt":"Email, ví dụ jdoe@example.com","enable_peers_messaging":"Bật","enter_confirmation_code_prompt":"Mã xác nhận","error_invalid_id":"ID không hợp lệ","file_attachment_too_large":"Kích thước tệp {size} vượt quá giới hạn {limit}.","forgot_password_link":"Quên mật khẩu?","full_name_prompt":"Họ và tên, ví dụ John Doe","granted_permissions":"Đã cấp","group_has_no_members":"Không có thành viên","group_user_id_prompt":"ID nhóm hoặc người dùng","image_caption_prompt":"Chú thích hình ảnh","invalid_content":"nội dung không hợp lệ","invalid_security_token":"Mã bảo mật không hợp lệ","label_client":"Client:","label_content_type":"Kiểu nội dung:","label_default_access_mode":"Chế độ truy cập mặc định:","label_file_name":"Tên tệp:","label_group_members":"Thành viên nhóm:","label_incognito_mode":"Chế độ ẩn danh:","label_message_sound":"Âm thanh tin nhắn:","label_muting_topic":"Đã tắt:","label_other_user":"Khác","label_password":"Mật khẩu","label_permissions":"Quyền:","label_private":"Chỉ bạn nhìn thấy","label_push_notifications":"Cảnh báo thông báo:","label_push_notifications_disabled":"Cảnh báo thông báo (yêu cầu HTTPS):","label_reset_password":"Gửi email đặt lại mật khẩu:","label_sdk":"SDK:","label_server":"Máy chủ:","label_server_address":"Địa chỉ máy chủ:","label_server_to_use":"Máy chủ sử dụng:","label_size":"Kích thước:","label_topic_name":"Tên","label_user_contacts":"Danh bạ","label_user_id":"ID:","label_wire_transport":"Giao thức truyền tải:","label_you":"Bạn:","label_your_name":"Tên của bạn","label_your_permissions":"Quyền của bạn:","last_seen_timestamp":"Lần cuối hoạt động: {timestamp}","leave_chat_warning":"Bạn có chắc muốn rời cuộc trò chuyện này?","link_contact_us":"Liên hệ chúng tôi","link_privacy_policy":"Chính sách quyền riêng tư","link_terms_of_service":"Điều khoản dịch vụ","login_prompt":"Đăng nhập","menu_item_archive_topic":"Lưu trữ","menu_item_block":"Chặn","menu_item_clear_messages":"Xóa tin nhắn","menu_item_clear_messages_for_all":"Xóa cho tất cả","menu_item_delete":"Xóa","menu_item_delete_for_all":"Xóa cho tất cả","menu_item_delete_topic":"Xóa","menu_item_edit_permissions":"Sửa quyền","menu_item_info":"Thông tin","menu_item_member_delete":"Xóa","menu_item_mute":"Tắt thông báo","menu_item_reply":"Trả lời","menu_item_restore_topic":"Khôi phục","menu_item_send_retry":"Thử lại","menu_item_unblock":"Bỏ chặn","menu_item_unmute":"Bật thông báo","message_sending":"đang gửi...","message_sending_failed":"thất bại","messages_not_readable":"không có quyền xem tin nhắn","messaging_disabled_prompt":"Tin nhắn bị tắt","more_online_members":"+{overflow} nữa","new_message_prompt":"Tin nhắn mới","new_password_placeholder":"Nhập mật khẩu mới","no_connection":"Không có kết nối","no_contacts":"Bạn chưa có liên hệ nào :-(","numeric_confirmation_code_prompt":"Chỉ số","online_now":"đang online","password_prompt":"Mật khẩu","password_unchanged_prompt":"Không thay đổi","peers_messaging_disabled":"Tin nhắn của người kia đã bị tắt.","permission_admin":"Phê duyệt ({val})","permission_delete":"Xóa ({val})","permission_join":"Tham gia ({val})","permission_owner":"Chủ sở hữu ({val})","permission_pres":"Nhận thông báo ({val})","permission_read":"Đọc ({val})","permission_share":"Chia sẻ ({val})","permission_write":"Ghi ({val})","phone_dative":"điện thoại","private_editing_placeholder":"Chỉ mình bạn nhìn thấy","push_init_failed":"Khởi tạo thông báo đẩy thất bại","reconnect_countdown":"Mất kết nối. Kết nối lại sau {seconds}…","reconnect_now":"Thử ngay","reload_update":"Tải lại","report_chat_warning":"Bạn có chắc muốn chặn và báo cáo cuộc trò chuyện này?","requested_permissions":"Đã yêu cầu","save_attachment":"lưu","search_for_contacts":"Dùng tìm kiếm để tìm liên hệ","search_no_results":"Không có kết quả nào","search_placeholder":"Liệt kê như email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Thông báo","sidepanel_title_acc_support":"Hỗ trợ","sidepanel_title_account_settings":"Cài đặt tài khoản","sidepanel_title_archive":"Cuộc trò chuyện đã lưu trữ","sidepanel_title_blocked":"Cuộc trò chuyện bị chặn","sidepanel_title_cred":"Xác nhận thông tin","sidepanel_title_login":"Đăng nhập","sidepanel_title_newtpk":"Bắt đầu cuộc trò chuyện mới","sidepanel_title_register":"Tạo tài khoản","sidepanel_title_reset":"Đặt lại mật khẩu","sidepanel_title_settings":"Cài đặt","stay_logged_in":"Giữ tôi đăng nhập","tabtitle_find_user":"tìm","tabtitle_group_by_id":"theo id","tabtitle_new_group":"nhóm mới","tags_editor_no_tags":"Thêm vài thẻ","tags_not_found":"Chưa có thẻ nào. Hãy thêm một vài thẻ.","title_all_contacts":"Tất cả liên hệ","title_group_members":"Thành viên nhóm","title_manage_tags":"Quản lý","title_not_found":"Không tìm thấy","title_permissions":"Quyền","title_tag_manager":"Thẻ (tìm kiếm & khám phá)","topic_block_warning":"Bạn có chắc muốn chặn cuộc trò chuyện này?","topic_delete_warning":"Bạn có chắc muốn xóa cuộc trò chuyện này? Hành động này không thể hoàn tác.","topic_name_editing_placeholder":"Tên nhóm tự do","unnamed_topic":"Chưa đặt tên","update_available":"Có bản cập nhật.","upload_finishing":"đang hoàn tất...","user_not_found":"Không tìm thấy","description_editing_placeholder":"Mô tả tùy chọn","label_description":"Mô tả","button_security":"Bảo mật","panel_title_crop":"Kéo để điều chỉnh","panel_title_general":"Chung","panel_title_members":"Thành viên","panel_title_security":"Bảo mật","panel_title_info":"Thông tin","permissions_anonymous":"Ẩn danh","permissions_authenticated":"Đã xác thực","topic_delete":"Xóa cuộc trò chuyện","permissions_user":"Quyền của người dùng","password_reset_email_sent":"Email chứa mã bảo mật đã được gửi.","label_unarchive_topic":"Đã lưu trữ:","menu_item_forward":"Chuyển tiếp","forward_to":"Chuyển tiếp đến","forward_to_search_placeholder":"Tìm kiếm liên hệ","label_new_password":"Mật khẩu mới","drafty_unknown":"Không hỗ trợ","calls_incoming":"Cuộc gọi đến","calls_outgoing":"Cuộc gọi đi","calls_you_label":"Bạn","menu_item_video_call":"Gọi video","already_in_call":"Bạn đang có một cuộc gọi đang diễn ra!","call_cancelled":"đã hủy","call_missed":"bỏ lỡ","call_declined":"từ chối","call_disconnected":"mất kết nối","label_use_secure_connection":"Sử dụng kết nối bảo mật","cred_confirmed_successfully":"Xác nhận thành công","menu_item_edit":"Sửa","editing_message":"Đang sửa","message_edited_marker":", đã sửa","icon_title_add_image":"Thêm hình ảnh","icon_title_attach_file":"Đính kèm tệp","icon_title_delete":"Xóa","icon_title_pause":"Tạm dừng","icon_title_play":"Phát","icon_title_record_voice":"Ghi âm tin nhắn","icon_title_resume":"Tiếp tục","icon_title_send":"Gửi tin nhắn","drag_file":"Kéo tệp vào đây","drafty_video":"Video","call_in_progress":"đang diễn ra","menu_item_audio_call":"Gọi","unrecognized_video_format":"Không nhận dạng được định dạng video này","loading_note":"Đang tải...","password_i_have_code":"Tôi có mã","label_reset_password_tel":"Gửi SMS đặt lại mật khẩu:","mobile_phone_number":"Số điện thoại di động","password_reset_sms_sent":"Tin nhắn chứa mã bảo mật đã được gửi.","mobile_number_required":"Cần số điện thoại di động","current_email":"Email hiện tại","current_phone":"Số điện thoại hiện tại","new_email":"Email mới","new_phone_number":"Số điện thoại mới","change_email":"Đổi email","change_phone":"Đổi số điện thoại","call_busy":"bận","failed_to_init_audio":"Không thể khởi tạo ghi âm","password_reset_success":"Đặt lại mật khẩu thành công","scan_qr_code":"Quét mã QR","add_members_prompt":"thêm thành viên","alias_already_taken":"(đã được sử dụng)","alias_editing_placeholder":"Bí danh (tùy chọn)","alias_invalid":"(không hợp lệ)","button_restore":"Khôi phục mặc định","cannot_parse_vcard":"Không thể đọc tệp vCard.","chat_now":"Nhắn tin","color_schema_dark":"Tối","color_schema_light":"Sáng","color_schema_system":"Mặc định hệ thống","find_user":"Tìm kiếm","incognito_mode_description":"Ẩn trạng thái trực tuyến và chỉ báo đang nhập.","label_alias":"Bí danh:","label_alias_edit":"Bí danh","label_blur_wallpaper":"Làm mờ:","label_color_schema":"Giao diện:","label_contact_card":"Danh thiếp","label_contacts":"Danh bạ","label_keyboard":"Bàn phím:","label_member_count":"Thành viên:","label_scan_id":"Quét mã của tôi:","label_subscriber_count":"Người theo dõi:","label_text_size":"Cỡ chữ:","member_count":"{count, plural, one {{count, number} thành viên} other {{count, number} thành viên}}","message_deleted":"tin nhắn đã xóa","message_not_found":"không tìm thấy tin nhắn","pin_chat":"Ghim","pin_message":"Ghim","save_action":"Lưu","select_country":"Chọn quốc gia","self_topic_comment":"Ghi chú, tin nhắn, liên kết, tệp lưu lại","self_topic_name":"Tin nhắn đã lưu","send_command":"Gửi bằng {key}","send_command_explained":"Nhấn Enter để xuống dòng","send_plain":"Gửi bằng Enter","send_plain_explained":"Nhấn Shift + Enter để xuống dòng","sidepanel_title_acc_general":"Chung","subscriber_count":"{count, plural, one {{count, number} người theo dõi} other {{count, number} người theo dõi}}","tabtitle_image":"hình ảnh","tabtitle_pattern":"hoa văn","text_copied":"Đã sao chép vào clipboard","unknown_name":"Không rõ","unpin_chat":"Bỏ ghim","unpin_message":"Bỏ ghim","wallpapers":"Hình nền"}')}}]); \ No newline at end of file diff --git a/umd/330.prod.js b/umd/330.prod.js new file mode 100644 index 00000000..fb68ae88 --- /dev/null +++ b/umd/330.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[330],{4701:function(t,e){e.A={AC:"40123",AD:"312345",AE:"501234567",AF:"701234567",AG:"2684641234",AI:"2642351234",AL:"672123456",AM:"77123456",AO:"923123456",AR:"91123456789",AS:"6847331234",AT:"664123456",AU:"412345678",AW:"5601234",AX:"412345678",AZ:"401234567",BA:"61123456",BB:"2462501234",BD:"1812345678",BE:"470123456",BF:"70123456",BG:"43012345",BH:"36001234",BI:"79561234",BJ:"0195123456",BL:"690001234",BM:"4413701234",BN:"7123456",BO:"71234567",BQ:"3181234",BR:"11961234567",BS:"2423591234",BT:"17123456",BW:"71123456",BY:"294911911",BZ:"6221234",CA:"5062345678",CC:"412345678",CD:"991234567",CF:"70012345",CG:"061234567",CH:"781234567",CI:"0123456789",CK:"71234",CL:"221234567",CM:"671234567",CN:"13123456789",CO:"3211234567",CR:"83123456",CU:"51234567",CV:"9911234",CW:"95181234",CX:"412345678",CY:"96123456",CZ:"601123456",DE:"15123456789",DJ:"77831001",DK:"34412345",DM:"7672251234",DO:"8092345678",DZ:"551234567",EC:"991234567",EE:"51234567",EG:"1001234567",EH:"650123456",ER:"7123456",ES:"612345678",ET:"911234567",FI:"412345678",FJ:"7012345",FK:"51234",FM:"3501234",FO:"211234",FR:"612345678",GA:"06031234",GB:"7400123456",GD:"4734031234",GE:"555123456",GF:"694201234",GG:"7781123456",GH:"231234567",GI:"57123456",GL:"221234",GM:"3012345",GN:"601123456",GP:"690001234",GQ:"222123456",GR:"6912345678",GT:"51234567",GU:"6713001234",GW:"955012345",GY:"6091234",HK:"51234567",HN:"91234567",HR:"921234567",HT:"34101234",HU:"201234567",ID:"812345678",IE:"850123456",IL:"502345678",IM:"7924123456",IN:"8123456789",IO:"3801234",IQ:"7912345678",IR:"9123456789",IS:"6111234",IT:"3123456789",JE:"7797712345",JM:"8762101234",JO:"790123456",JP:"9012345678",KE:"712123456",KG:"700123456",KH:"91234567",KI:"72001234",KM:"3212345",KN:"8697652917",KP:"1921234567",KR:"1020000000",KW:"50012345",KY:"3453231234",KZ:"7710009998",LA:"2023123456",LB:"71123456",LC:"7582845678",LI:"660234567",LK:"712345678",LR:"770123456",LS:"50123456",LT:"61234567",LU:"628123456",LV:"21234567",LY:"912345678",MA:"650123456",MC:"612345678",MD:"62112345",ME:"60123456",MF:"690001234",MG:"321234567",MH:"2351234",MK:"72345678",ML:"65012345",MM:"92123456",MN:"88123456",MO:"66123456",MP:"6702345678",MQ:"696201234",MR:"22123456",MS:"6644923456",MT:"96961234",MU:"52512345",MV:"7712345",MW:"991234567",MX:"2221234567",MY:"123456789",MZ:"821234567",NA:"811234567",NC:"751234",NE:"93123456",NF:"381234",NG:"8021234567",NI:"81234567",NL:"612345678",NO:"40612345",NP:"9841234567",NR:"5551234",NU:"8884012",NZ:"211234567",OM:"92123456",PA:"61234567",PE:"912345678",PF:"87123456",PG:"70123456",PH:"9051234567",PK:"3012345678",PL:"512345678",PM:"551234",PR:"7872345678",PS:"599123456",PT:"912345678",PW:"6201234",PY:"961456789",QA:"33123456",RE:"692123456",RO:"712034567",RS:"601234567",RU:"9123456789",RW:"720123456",SA:"512345678",SB:"7421234",SC:"2510123",SD:"911231234",SE:"701234567",SG:"81234567",SH:"51234",SI:"31234567",SJ:"41234567",SK:"912123456",SL:"25123456",SM:"66661212",SN:"701234567",SO:"71123456",SR:"7412345",SS:"977123456",ST:"9812345",SV:"70123456",SX:"7215205678",SY:"944567890",SZ:"76123456",TA:"8999",TC:"6492311234",TD:"63012345",TG:"90112345",TH:"812345678",TJ:"917123456",TK:"7290",TL:"77212345",TM:"66123456",TN:"20123456",TO:"7715123",TR:"5012345678",TT:"8682911234",TV:"901234",TW:"912345678",TZ:"621234567",UA:"501234567",UG:"712345678",US:"2015550123",UY:"94231234",UZ:"912345678",VA:"3123456789",VC:"7844301234",VE:"4121234567",VG:"2843001234",VI:"3406421234",VN:"912345678",VU:"5912345",WF:"821234",WS:"7212345",XK:"43201234",YE:"712345678",YT:"639012345",ZA:"711234567",ZM:"955123456",ZW:"712345678"}},4724:function(t,e,n){n.d(e,{Q:function(){return bt}});var r=n(1211),i=n(3247),a=n(96);function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function l(t,e){for(var n=0;n=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n1;)1&e&&(n+=t),e>>=1,t+=t;return n+t}function d(t,e){return")"===t[e]&&e++,function(t){var e=[],n=0;for(;n=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function k(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n1&&void 0!==arguments[1]?arguments[1]:{}).allowOverflow;if(!t)throw new Error("String is required");var n=R(t.split(""),this.matchTree,!0);if(n&&n.match&&delete n.matchedChars,!n||!n.overflow||e)return n}}],e&&D(t.prototype,e),n&&D(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();function R(t,e,n){if("string"==typeof e){var r=t.join("");return 0===e.indexOf(r)?t.length===e.length?{match:!0,matchedChars:t}:{partialMatch:!0}:0===r.indexOf(e)?n&&t.length>e.length?{overflow:!0}:{match:!0,matchedChars:t.slice(0,e.length)}:void 0}if(Array.isArray(e)){for(var i=t.slice(),a=0;a=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function W(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=0)){var n=this.getTemplateForFormat(t,e);return n?(this.setNationalNumberTemplate(n,e),!0):void 0}}},{key:"getSeparatorAfterNationalPrefix",value:function(t){return this.isNANP||t&&t.nationalPrefixFormattingRule()&&H.test(t.nationalPrefixFormattingRule())?" ":""}},{key:"getInternationalPrefixBeforeCountryCallingCode",value:function(t,e){var n=t.IDDPrefix,r=t.missingPlus;return n?e&&!1===e.spacing?n:n+" ":r?"":"+"}},{key:"getTemplate",value:function(t){if(this.template){for(var e=-1,n=0,r=t.international?this.getInternationalPrefixBeforeCountryCallingCode(t,{spacing:!1}):"";nl.length)){var u=new RegExp("^"+o+"$"),s=n.replace(/\d/g,"9");u.test(s)&&(l=s);var f,c=this.getFormatFormat(t,r);if(this.shouldTryNationalPrefixFormattingRule(t,{international:r,nationalPrefix:i})){var m=c.replace(v._,t.nationalPrefixFormattingRule());if((0,p.Ay)(t.nationalPrefixFormattingRule())===(i||"")+(0,p.Ay)("$1")&&(c=m,f=!0,i))for(var d=i.length;d>0;)c=c.replace(/\d/,h),d--}var y=l.replace(new RegExp(o),c).replace(new RegExp("9","g"),h);return f||(a?y=g(h,a.length)+" "+y:i&&(y=g(h,i.length)+this.getSeparatorAfterNationalPrefix(t)+y)),r&&(y=(0,B.A)(y)),y}}},{key:"formatNextNationalNumberDigits",value:function(t){var e=function(t,e,n){for(var r,i=f(n.split(""));!(r=i()).done;){var a=r.value;if(t.slice(e+1).search(m)<0)return;e=t.search(m),t=t.replace(m,a)}return[t,e]}(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition,t);if(e)return this.populatedNationalNumberTemplate=e[0],this.populatedNationalNumberTemplatePosition=e[1],d(this.populatedNationalNumberTemplate,this.populatedNationalNumberTemplatePosition+1);this.resetFormat()}},{key:"shouldTryNationalPrefixFormattingRule",value:function(t,e){var n=e.international,r=e.nationalPrefix;if(t.nationalPrefixFormattingRule()){var i=t.usesNationalPrefix();if(i&&r||!i&&!n)return!0}}}])&&U(t.prototype,e),n&&U(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}(),_=n(9713),Q=n(283),X=n(1459),q=n(6890);function z(t){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},z(t)}function tt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,a,o,l=[],u=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return et(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?et(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function et(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n=3;if(e.appendDigits(t),r&&this.extractIddPrefix(e),this.isWaitingForCountryCallingCode(e)){if(!this.extractCountryCallingCode(e))return}else e.appendNationalSignificantNumberDigits(t);e.international||this.hasExtractedNationalSignificantNumber||this.extractNationalSignificantNumber(e.getNationalDigits(),function(t){return e.update(t)})}},{key:"isWaitingForCountryCallingCode",value:function(t){var e=t.international,n=t.callingCode;return e&&!n}},{key:"extractCountryCallingCode",value:function(t){var e=(0,_.A)("+"+t.getDigitsWithoutInternationalPrefix(),t.country,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata),n=e.countryCallingCode,r=e.number;if(n)return t.setCallingCode(n),t.update({nationalSignificantNumber:r}),!0}},{key:"reset",value:function(t){if(t){this.hasSelectedNumberingPlan=!0;var e=t._nationalPrefixForParsing();this.couldPossiblyExtractAnotherNationalSignificantNumber=e&&ut.test(e)}else this.hasSelectedNumberingPlan=void 0,this.couldPossiblyExtractAnotherNationalSignificantNumber=void 0}},{key:"extractNationalSignificantNumber",value:function(t,e){if(this.hasSelectedNumberingPlan){var n=(0,X.A)(t,this.metadata),r=n.nationalPrefix,i=n.nationalNumber,a=n.carrierCode;if(i!==t)return this.onExtractedNationalNumber(r,a,i,t,e),!0}}},{key:"extractAnotherNationalSignificantNumber",value:function(t,e,n){if(!this.hasExtractedNationalSignificantNumber)return this.extractNationalSignificantNumber(t,n);if(this.couldPossiblyExtractAnotherNationalSignificantNumber){var r=(0,X.A)(t,this.metadata),i=r.nationalPrefix,a=r.nationalNumber,o=r.carrierCode;if(a!==e)return this.onExtractedNationalNumber(i,o,a,t,n),!0}}},{key:"onExtractedNationalNumber",value:function(t,e,n,r,i){var a,o=!1,l=r.lastIndexOf(n);if(l<0||l!==r.length-n.length)o=!0;else{var u=r.slice(0,l);u&&u!==t&&(a=u)}i({nationalPrefix:t,carrierCode:e,nationalSignificantNumber:n,nationalSignificantNumberIsModified:o,prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix:a}),this.hasExtractedNationalSignificantNumber=!0,this.onNationalSignificantNumberChange()}},{key:"reExtractNationalSignificantNumber",value:function(t){return!!this.extractAnotherNationalSignificantNumber(t.getNationalDigits(),t.nationalSignificantNumber,function(e){return t.update(e)})||(this.extractIddPrefix(t)||this.fixMissingPlus(t)?(this.extractCallingCodeAndNationalSignificantNumber(t),!0):void 0)}},{key:"extractIddPrefix",value:function(t){var e=t.international,n=t.IDDPrefix,r=t.digits;if(t.nationalSignificantNumber,!e&&!n){var i=(0,q.A)(r,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata);return void 0!==i&&i!==r?(t.update({IDDPrefix:r.slice(0,r.length-i.length)}),this.startInternationalNumber(t,{country:void 0,callingCode:void 0}),!0):void 0}}},{key:"fixMissingPlus",value:function(t){if(!t.international){var e=(0,Q.A)(t.digits,t.country,this.defaultCountry,this.defaultCallingCode,this.metadata.metadata).countryCallingCode;if(e)return t.update({missingPlus:!0}),this.startInternationalNumber(t,{country:t.country,callingCode:e}),!0}}},{key:"startInternationalNumber",value:function(t,e){var n=e.country,r=e.callingCode;t.startInternationalNumber(n,r),t.nationalSignificantNumber&&(t.resetNationalSignificantNumber(),this.onNationalSignificantNumberChange(),this.hasExtractedNationalSignificantNumber=void 0)}},{key:"extractCallingCodeAndNationalSignificantNumber",value:function(t){this.extractCountryCallingCode(t)&&this.extractNationalSignificantNumber(t.getNationalDigits(),function(e){return t.update(e)})}}])&&nt(t.prototype,e),n&&nt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();var ft=n(9495),ct=n(6111),ht=n(284);function mt(t){return mt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},mt(t)}function gt(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var n=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=n){var r,i,a,o,l=[],u=!0,s=!1;try{if(a=(n=n.call(t)).next,0===e){if(Object(n)!==n)return;u=!1}else for(;!(u=(r=a.call(n)).done)&&(l.push(r.value),l.length!==e);u=!0);}catch(t){s=!0,i=t}finally{try{if(!u&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(t,e)||function(t,e){if(t){if("string"==typeof t)return dt(t,e);var n={}.toString.call(t).slice(8,-1);return"Object"===n&&t.constructor&&(n=t.constructor.name),"Map"===n||"Set"===n?Array.from(t):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?dt(t,e):void 0}}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dt(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=Array(e);n1}},{key:"determineTheCountry",value:function(){this.state.setCountry((0,ft.A)(this.isInternational()?this.state.callingCode:this.defaultCallingCode,{nationalNumber:this.state.nationalSignificantNumber,metadata:this.metadata}))}},{key:"getNumberValue",value:function(){var t=this.state,e=t.digits,n=t.callingCode,r=t.country,i=t.nationalSignificantNumber;if(e)return this.isInternational()?n?"+"+n+i:"+"+e:r||n?"+"+(r?this.metadata.countryCallingCode():n)+i:void 0}},{key:"getNumber",value:function(){var t=this.state,e=t.nationalSignificantNumber,n=t.carrierCode,r=t.callingCode,o=this._getCountry();if(e&&(o||r)){if(o&&o===this.defaultCountry){var l=new i.Ay(this.metadata.metadata);l.selectNumberingPlan(o);var u=l.numberingPlan.callingCode(),s=this.metadata.getCountryCodesForCallingCode(u);if(s.length>1){var f=(0,ct.A)(e,{countries:s,metadata:this.metadata.metadata});f&&(o=f)}}var c=new a.A(o||r,e,this.metadata.metadata);return n&&(c.carrierCode=n),c}}},{key:"isPossible",value:function(){var t=this.getNumber();return!!t&&t.isPossible()}},{key:"isValid",value:function(){var t=this.getNumber();return!!t&&t.isValid()}},{key:"getNationalNumber",value:function(){return this.state.nationalSignificantNumber}},{key:"getChars",value:function(){return(this.state.international?"+":"")+this.state.digits}},{key:"getTemplate",value:function(){return this.formatter.getTemplate(this.state)||this.getNonFormattedTemplate()||""}}])&&yt(t.prototype,e),n&&yt(t,n),Object.defineProperty(t,"prototype",{writable:!1}),t;var t,e,n}();function bt(t){return vt.call(this,t,r.A)}bt.prototype=Object.create(vt.prototype,{}),bt.prototype.constructor=bt},6187:function(t,e,n){n.d(e,{a:function(){return o}});var r=n(5693),i=n(96);function a(t,e,n){if(e[t])return new i.A(t,e[t],n)}function o(){return(0,r.A)(a,arguments)}}}]); +//# sourceMappingURL=330.prod.js.map \ No newline at end of file diff --git a/umd/330.prod.js.map b/umd/330.prod.js.map new file mode 100644 index 00000000..09a10b6e --- /dev/null +++ b/umd/330.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"330.prod.js","mappings":"iHAGA,KAAgB,GAAK,QAAQ,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,UAAU,GAAK,WAAW,GAAK,UAAU,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,UAAU,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,QAAQ,GAAK,YAAY,GAAK,YAAY,GAAK,cAAc,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,cAAc,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,QAAQ,GAAK,UAAU,GAAK,SAAS,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,SAAS,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,SAAS,GAAK,WAAW,GAAK,SAAS,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,aAAa,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,SAAS,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,YAAY,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,YAAY,GAAK,YAAY,GAAK,UAAU,GAAK,UAAU,GAAK,YAAY,GAAK,YAAY,GAAK,WAAW,GAAK,QAAQ,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,WAAW,GAAK,UAAU,GAAK,YAAY,GAAK,UAAU,GAAK,WAAW,GAAK,aAAa,GAAK,YAAY,GAAK,WAAW,GAAK,OAAO,GAAK,aAAa,GAAK,WAAW,GAAK,WAAW,GAAK,YAAY,GAAK,YAAY,GAAK,OAAO,GAAK,WAAW,GAAK,WAAW,GAAK,WAAW,GAAK,UAAU,GAAK,aAAa,GAAK,aAAa,GAAK,SAAS,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,YAAY,GAAK,aAAa,GAAK,WAAW,GAAK,YAAY,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,aAAa,GAAK,YAAY,GAAK,UAAU,GAAK,SAAS,GAAK,UAA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","sources":["webpack://tinode-webapp/./node_modules/libphonenumber-js/examples.mobile.json.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeState.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.util.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.complete.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.PatternMatcher.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeFormatter.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouTypeParser.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/AsYouType.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/es6/getExampleNumber.js","webpack://tinode-webapp/./node_modules/libphonenumber-js/mobile/exports/getExampleNumber.js"],"sourcesContent":["// This file is a workaround for a bug in web browsers' \"native\"\n// ES6 importing system which is uncapable of importing \"*.json\" files.\n// https://github.com/catamphetamine/libphonenumber-js/issues/239\nexport default {\"AC\":\"40123\",\"AD\":\"312345\",\"AE\":\"501234567\",\"AF\":\"701234567\",\"AG\":\"2684641234\",\"AI\":\"2642351234\",\"AL\":\"672123456\",\"AM\":\"77123456\",\"AO\":\"923123456\",\"AR\":\"91123456789\",\"AS\":\"6847331234\",\"AT\":\"664123456\",\"AU\":\"412345678\",\"AW\":\"5601234\",\"AX\":\"412345678\",\"AZ\":\"401234567\",\"BA\":\"61123456\",\"BB\":\"2462501234\",\"BD\":\"1812345678\",\"BE\":\"470123456\",\"BF\":\"70123456\",\"BG\":\"43012345\",\"BH\":\"36001234\",\"BI\":\"79561234\",\"BJ\":\"0195123456\",\"BL\":\"690001234\",\"BM\":\"4413701234\",\"BN\":\"7123456\",\"BO\":\"71234567\",\"BQ\":\"3181234\",\"BR\":\"11961234567\",\"BS\":\"2423591234\",\"BT\":\"17123456\",\"BW\":\"71123456\",\"BY\":\"294911911\",\"BZ\":\"6221234\",\"CA\":\"5062345678\",\"CC\":\"412345678\",\"CD\":\"991234567\",\"CF\":\"70012345\",\"CG\":\"061234567\",\"CH\":\"781234567\",\"CI\":\"0123456789\",\"CK\":\"71234\",\"CL\":\"221234567\",\"CM\":\"671234567\",\"CN\":\"13123456789\",\"CO\":\"3211234567\",\"CR\":\"83123456\",\"CU\":\"51234567\",\"CV\":\"9911234\",\"CW\":\"95181234\",\"CX\":\"412345678\",\"CY\":\"96123456\",\"CZ\":\"601123456\",\"DE\":\"15123456789\",\"DJ\":\"77831001\",\"DK\":\"34412345\",\"DM\":\"7672251234\",\"DO\":\"8092345678\",\"DZ\":\"551234567\",\"EC\":\"991234567\",\"EE\":\"51234567\",\"EG\":\"1001234567\",\"EH\":\"650123456\",\"ER\":\"7123456\",\"ES\":\"612345678\",\"ET\":\"911234567\",\"FI\":\"412345678\",\"FJ\":\"7012345\",\"FK\":\"51234\",\"FM\":\"3501234\",\"FO\":\"211234\",\"FR\":\"612345678\",\"GA\":\"06031234\",\"GB\":\"7400123456\",\"GD\":\"4734031234\",\"GE\":\"555123456\",\"GF\":\"694201234\",\"GG\":\"7781123456\",\"GH\":\"231234567\",\"GI\":\"57123456\",\"GL\":\"221234\",\"GM\":\"3012345\",\"GN\":\"601123456\",\"GP\":\"690001234\",\"GQ\":\"222123456\",\"GR\":\"6912345678\",\"GT\":\"51234567\",\"GU\":\"6713001234\",\"GW\":\"955012345\",\"GY\":\"6091234\",\"HK\":\"51234567\",\"HN\":\"91234567\",\"HR\":\"921234567\",\"HT\":\"34101234\",\"HU\":\"201234567\",\"ID\":\"812345678\",\"IE\":\"850123456\",\"IL\":\"502345678\",\"IM\":\"7924123456\",\"IN\":\"8123456789\",\"IO\":\"3801234\",\"IQ\":\"7912345678\",\"IR\":\"9123456789\",\"IS\":\"6111234\",\"IT\":\"3123456789\",\"JE\":\"7797712345\",\"JM\":\"8762101234\",\"JO\":\"790123456\",\"JP\":\"9012345678\",\"KE\":\"712123456\",\"KG\":\"700123456\",\"KH\":\"91234567\",\"KI\":\"72001234\",\"KM\":\"3212345\",\"KN\":\"8697652917\",\"KP\":\"1921234567\",\"KR\":\"1020000000\",\"KW\":\"50012345\",\"KY\":\"3453231234\",\"KZ\":\"7710009998\",\"LA\":\"2023123456\",\"LB\":\"71123456\",\"LC\":\"7582845678\",\"LI\":\"660234567\",\"LK\":\"712345678\",\"LR\":\"770123456\",\"LS\":\"50123456\",\"LT\":\"61234567\",\"LU\":\"628123456\",\"LV\":\"21234567\",\"LY\":\"912345678\",\"MA\":\"650123456\",\"MC\":\"612345678\",\"MD\":\"62112345\",\"ME\":\"60123456\",\"MF\":\"690001234\",\"MG\":\"321234567\",\"MH\":\"2351234\",\"MK\":\"72345678\",\"ML\":\"65012345\",\"MM\":\"92123456\",\"MN\":\"88123456\",\"MO\":\"66123456\",\"MP\":\"6702345678\",\"MQ\":\"696201234\",\"MR\":\"22123456\",\"MS\":\"6644923456\",\"MT\":\"96961234\",\"MU\":\"52512345\",\"MV\":\"7712345\",\"MW\":\"991234567\",\"MX\":\"2221234567\",\"MY\":\"123456789\",\"MZ\":\"821234567\",\"NA\":\"811234567\",\"NC\":\"751234\",\"NE\":\"93123456\",\"NF\":\"381234\",\"NG\":\"8021234567\",\"NI\":\"81234567\",\"NL\":\"612345678\",\"NO\":\"40612345\",\"NP\":\"9841234567\",\"NR\":\"5551234\",\"NU\":\"8884012\",\"NZ\":\"211234567\",\"OM\":\"92123456\",\"PA\":\"61234567\",\"PE\":\"912345678\",\"PF\":\"87123456\",\"PG\":\"70123456\",\"PH\":\"9051234567\",\"PK\":\"3012345678\",\"PL\":\"512345678\",\"PM\":\"551234\",\"PR\":\"7872345678\",\"PS\":\"599123456\",\"PT\":\"912345678\",\"PW\":\"6201234\",\"PY\":\"961456789\",\"QA\":\"33123456\",\"RE\":\"692123456\",\"RO\":\"712034567\",\"RS\":\"601234567\",\"RU\":\"9123456789\",\"RW\":\"720123456\",\"SA\":\"512345678\",\"SB\":\"7421234\",\"SC\":\"2510123\",\"SD\":\"911231234\",\"SE\":\"701234567\",\"SG\":\"81234567\",\"SH\":\"51234\",\"SI\":\"31234567\",\"SJ\":\"41234567\",\"SK\":\"912123456\",\"SL\":\"25123456\",\"SM\":\"66661212\",\"SN\":\"701234567\",\"SO\":\"71123456\",\"SR\":\"7412345\",\"SS\":\"977123456\",\"ST\":\"9812345\",\"SV\":\"70123456\",\"SX\":\"7215205678\",\"SY\":\"944567890\",\"SZ\":\"76123456\",\"TA\":\"8999\",\"TC\":\"6492311234\",\"TD\":\"63012345\",\"TG\":\"90112345\",\"TH\":\"812345678\",\"TJ\":\"917123456\",\"TK\":\"7290\",\"TL\":\"77212345\",\"TM\":\"66123456\",\"TN\":\"20123456\",\"TO\":\"7715123\",\"TR\":\"5012345678\",\"TT\":\"8682911234\",\"TV\":\"901234\",\"TW\":\"912345678\",\"TZ\":\"621234567\",\"UA\":\"501234567\",\"UG\":\"712345678\",\"US\":\"2015550123\",\"UY\":\"94231234\",\"UZ\":\"912345678\",\"VA\":\"3123456789\",\"VC\":\"7844301234\",\"VE\":\"4121234567\",\"VG\":\"2843001234\",\"VI\":\"3406421234\",\"VN\":\"912345678\",\"VU\":\"5912345\",\"WF\":\"821234\",\"WS\":\"7212345\",\"XK\":\"43201234\",\"YE\":\"712345678\",\"YT\":\"639012345\",\"ZA\":\"711234567\",\"ZM\":\"955123456\",\"ZW\":\"712345678\"}","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\n// This \"state\" object simply holds the state of the \"AsYouType\" parser:\n//\n// * `country?: string` — The exact country of the phone number, if it could be determined.\n// When inputting a phone number in \"international\" format, it will derive the `country` from \"country calling code\" and the phone number digits.\n// When inputting a phone number in \"national\" format, it will derive the `country` from `defaultCountry` that was specified when creating the `AsYouType` formatter.\n// Sidenote: If `USE_NON_GEOGRAPHIC_COUNTRY_CODE` flag was `true`, then for \"non-geographic phone numbers\" `state.country` would've been \"001\".\n// * `callingCode?: string` — \"Country calling code\" that has been extracted from the input phone number.\n// When inputting a phone number in \"international\" format, it will extract the \"country calling code\" from the digits that follow the \"+\" character.\n// When inputting a phone number in \"national\" format, `callingCode` will be `undefined`.\n// Sidenote: `state.callingCode` is therefore independent from `state.country` and there could be situations when `state.country` is defined by `state.callingCode` is not — that would be when inputting a phone number not in \"international\" format.\n// * `digits: string` — Phone number digits that have been input so far, including the \"+\" character, if present. In case of inputting non-arabic digits, those will be converted to arabic ones.\n// * `international: boolean` — Whether the phone number is being input in \"international\" format, i.e. with a \"+\" character.\n// * `missingPlus: boolean` — Whether it's a phone number in \"international\" format that is missing the leading \"+\" character for some reason — apparently, Google thinks that it's a common mistake when inputting a phone number.\n// * `IDDPrefix?: string` — An \"IDD prefix\", when the phone number is being input in an \"out-of-country dialing\" format. https://wikitravel.org/en/International_dialling_prefix\n// * `carrierCode?: string` — A \"carrier code\", if the phone number contains it. Normally, those can only be present in Colombia or Brazil, and only when calling from mobile phones to fixed-line numbers.\n// * `nationalPrefix?: string` — \"National prefix\", if present in the phone number input.\n// * `nationalSignificantNumber?: string` — National (significant) number digits that have been input so far.\n// * `nationalSignificantNumberIsModified: boolean` — Tells if the parsed national (significant) number is present as-is in the input string. For example, when inputting \"0343515551212999\" Argentinian mobile number, the parsed national (significant) number is \"93435551212999\". There, one can see how it stripped \"0\" national prefix and prepended a \"9\", because that's how it is instructed to do in Argentina's metadata. So in the described example, the parsed national (significant) number is not present as-is in the input string. Instead, it's \"modified\" in the input string. https://gitlab.com/caamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n// * `prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix?: string` — In some countries, a phone number could have a prefix that is not a \"national prefix\" but rather some other type of \"utility\" prefix.\n// For example, when calling within Australia, one could prepend `1831` prefix to hide caller's phone number.\n// https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n//\nvar AsYouTypeState = /*#__PURE__*/function () {\n function AsYouTypeState(_ref) {\n var onCountryChange = _ref.onCountryChange,\n onCallingCodeChange = _ref.onCallingCodeChange;\n _classCallCheck(this, AsYouTypeState);\n this.onCountryChange = onCountryChange;\n this.onCallingCodeChange = onCallingCodeChange;\n }\n return _createClass(AsYouTypeState, [{\n key: \"reset\",\n value: function reset(_ref2) {\n var country = _ref2.country,\n callingCode = _ref2.callingCode;\n this.international = false;\n this.missingPlus = false;\n this.IDDPrefix = undefined;\n this.callingCode = undefined;\n this.digits = '';\n this.resetNationalSignificantNumber();\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"resetNationalSignificantNumber\",\n value: function resetNationalSignificantNumber() {\n this.nationalSignificantNumber = this.getNationalDigits();\n this.nationalSignificantNumberIsModified = false;\n this.nationalPrefix = undefined;\n this.carrierCode = undefined;\n this.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = undefined;\n }\n }, {\n key: \"update\",\n value: function update(properties) {\n for (var _i = 0, _Object$keys = Object.keys(properties); _i < _Object$keys.length; _i++) {\n var key = _Object$keys[_i];\n this[key] = properties[key];\n }\n }\n }, {\n key: \"initCountryAndCallingCode\",\n value: function initCountryAndCallingCode(country, callingCode) {\n this.setCountry(country);\n this.setCallingCode(callingCode);\n }\n }, {\n key: \"setCountry\",\n value: function setCountry(country) {\n this.country = country;\n this.onCountryChange(country);\n }\n }, {\n key: \"setCallingCode\",\n value: function setCallingCode(callingCode) {\n this.callingCode = callingCode;\n this.onCallingCodeChange(callingCode, this.country);\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(country, callingCode) {\n // Prepend the `+` to parsed input.\n this.international = true;\n // If a default country was set then reset it\n // because an explicitly international phone\n // number is being entered.\n this.initCountryAndCallingCode(country, callingCode);\n }\n }, {\n key: \"appendDigits\",\n value: function appendDigits(nextDigits) {\n this.digits += nextDigits;\n }\n }, {\n key: \"appendNationalSignificantNumberDigits\",\n value: function appendNationalSignificantNumberDigits(nextDigits) {\n this.nationalSignificantNumber += nextDigits;\n }\n\n /**\r\n * Returns the part of `this.digits` that corresponds to the national number.\r\n * Basically, all digits that have been input by the user, except for the\r\n * international prefix and the country calling code part\r\n * (if the number is an international one).\r\n * @return {string}\r\n */\n }, {\n key: \"getNationalDigits\",\n value: function getNationalDigits() {\n if (this.international) {\n return this.digits.slice((this.IDDPrefix ? this.IDDPrefix.length : 0) + (this.callingCode ? this.callingCode.length : 0));\n }\n return this.digits;\n }\n }, {\n key: \"getDigitsWithoutInternationalPrefix\",\n value: function getDigitsWithoutInternationalPrefix() {\n if (this.international) {\n if (this.IDDPrefix) {\n return this.digits.slice(this.IDDPrefix.length);\n }\n }\n return this.digits;\n }\n }]);\n}();\nexport { AsYouTypeState as default };\n//# sourceMappingURL=AsYouTypeState.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\n// Should be the same as `DIGIT_PLACEHOLDER` in `libphonenumber-metadata-generator`.\nexport var DIGIT_PLACEHOLDER = 'x'; // '\\u2008' (punctuation space)\nvar DIGIT_PLACEHOLDER_MATCHER = new RegExp(DIGIT_PLACEHOLDER);\n\n// Counts all occurences of a symbol in a string.\n// Unicode-unsafe (because using `.split()`).\nexport function countOccurences(symbol, string) {\n var count = 0;\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for counting brackets it is safe.\n // for (const character of string)\n for (var _iterator = _createForOfIteratorHelperLoose(string.split('')), _step; !(_step = _iterator()).done;) {\n var character = _step.value;\n if (character === symbol) {\n count++;\n }\n }\n return count;\n}\n\n// Repeats a string (or a symbol) N times.\n// http://stackoverflow.com/questions/202605/repeat-string-javascript\nexport function repeat(string, times) {\n if (times < 1) {\n return '';\n }\n var result = '';\n while (times > 1) {\n if (times & 1) {\n result += string;\n }\n times >>= 1;\n string += string;\n }\n return result + string;\n}\nexport function cutAndStripNonPairedParens(string, cutBeforeIndex) {\n if (string[cutBeforeIndex] === ')') {\n cutBeforeIndex++;\n }\n return stripNonPairedParens(string.slice(0, cutBeforeIndex));\n}\nexport function closeNonPairedParens(template, cut_before) {\n var retained_template = template.slice(0, cut_before);\n var opening_braces = countOccurences('(', retained_template);\n var closing_braces = countOccurences(')', retained_template);\n var dangling_braces = opening_braces - closing_braces;\n while (dangling_braces > 0 && cut_before < template.length) {\n if (template[cut_before] === ')') {\n dangling_braces--;\n }\n cut_before++;\n }\n return template.slice(0, cut_before);\n}\nexport function stripNonPairedParens(string) {\n var dangling_braces = [];\n var i = 0;\n while (i < string.length) {\n if (string[i] === '(') {\n dangling_braces.push(i);\n } else if (string[i] === ')') {\n dangling_braces.pop();\n }\n i++;\n }\n var start = 0;\n var cleared_string = '';\n dangling_braces.push(string.length);\n for (var _i = 0, _dangling_braces = dangling_braces; _i < _dangling_braces.length; _i++) {\n var index = _dangling_braces[_i];\n cleared_string += string.slice(start, index);\n start = index + 1;\n }\n return cleared_string;\n}\nexport function populateTemplateWithDigits(template, position, digits) {\n // Using `.split('')` to iterate through a string here\n // to avoid requiring `Symbol.iterator` polyfill.\n // `.split('')` is generally not safe for Unicode,\n // but in this particular case for `digits` it is safe.\n // for (const digit of digits)\n for (var _iterator2 = _createForOfIteratorHelperLoose(digits.split('')), _step2; !(_step2 = _iterator2()).done;) {\n var digit = _step2.value;\n // If there is room for more digits in current `template`,\n // then set the next digit in the `template`,\n // and return the formatted digits so far.\n // If more digits are entered than the current format could handle.\n if (template.slice(position + 1).search(DIGIT_PLACEHOLDER_MATCHER) < 0) {\n return;\n }\n position = template.search(DIGIT_PLACEHOLDER_MATCHER);\n template = template.replace(DIGIT_PLACEHOLDER_MATCHER, digit);\n }\n return [template, position];\n}\n//# sourceMappingURL=AsYouTypeFormatter.util.js.map","import checkNumberLength from './helpers/checkNumberLength.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport formatNationalNumberUsingFormat from './helpers/formatNationalNumberUsingFormat.js';\nexport default function formatCompleteNumber(state, format, _ref) {\n var metadata = _ref.metadata,\n shouldTryNationalPrefixFormattingRule = _ref.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref.getSeparatorAfterNationalPrefix;\n var matcher = new RegExp(\"^(?:\".concat(format.pattern(), \")$\"));\n if (matcher.test(state.nationalSignificantNumber)) {\n return formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, {\n metadata: metadata,\n shouldTryNationalPrefixFormattingRule: shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix\n });\n }\n}\nexport function canFormatCompleteNumber(nationalSignificantNumber, country, metadata) {\n return checkNumberLength(nationalSignificantNumber, country, metadata) === 'IS_POSSIBLE';\n}\nfunction formatNationalNumberWithAndWithoutNationalPrefixFormattingRule(state, format, _ref2) {\n var metadata = _ref2.metadata,\n shouldTryNationalPrefixFormattingRule = _ref2.shouldTryNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref2.getSeparatorAfterNationalPrefix;\n // `format` has already been checked for `nationalPrefix` requirement.\n\n var nationalSignificantNumber = state.nationalSignificantNumber,\n international = state.international,\n nationalPrefix = state.nationalPrefix,\n carrierCode = state.carrierCode;\n\n // Format the number with using `national_prefix_formatting_rule`.\n // If the resulting formatted number is a valid formatted number, then return it.\n //\n // Google's AsYouType formatter is different in a way that it doesn't try\n // to format using the \"national prefix formatting rule\", and instead it\n // simply prepends a national prefix followed by a \" \" character.\n // This code does that too, but as a fallback.\n // The reason is that \"national prefix formatting rule\" may use parentheses,\n // which wouldn't be included has it used the simpler Google's way.\n //\n if (shouldTryNationalPrefixFormattingRule(format)) {\n var formattedNumber = formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: true,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n if (formattedNumber) {\n return formattedNumber;\n }\n }\n\n // Format the number without using `national_prefix_formatting_rule`.\n return formatNationalNumber(state, format, {\n useNationalPrefixFormattingRule: false,\n getSeparatorAfterNationalPrefix: getSeparatorAfterNationalPrefix,\n metadata: metadata\n });\n}\nfunction formatNationalNumber(state, format, _ref3) {\n var metadata = _ref3.metadata,\n useNationalPrefixFormattingRule = _ref3.useNationalPrefixFormattingRule,\n getSeparatorAfterNationalPrefix = _ref3.getSeparatorAfterNationalPrefix;\n var formattedNationalNumber = formatNationalNumberUsingFormat(state.nationalSignificantNumber, format, {\n carrierCode: state.carrierCode,\n useInternationalFormat: state.international,\n withNationalPrefix: useNationalPrefixFormattingRule,\n metadata: metadata\n });\n if (!useNationalPrefixFormattingRule) {\n if (state.nationalPrefix) {\n // If a national prefix was extracted, then just prepend it,\n // followed by a \" \" character.\n formattedNationalNumber = state.nationalPrefix + getSeparatorAfterNationalPrefix(format) + formattedNationalNumber;\n } else if (state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n formattedNationalNumber = state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix + ' ' + formattedNationalNumber;\n }\n }\n if (isValidFormattedNationalNumber(formattedNationalNumber, state)) {\n return formattedNationalNumber;\n }\n}\n\n// Check that the formatted phone number contains exactly\n// the same digits that have been input by the user.\n// For example, when \"0111523456789\" is input for `AR` country,\n// the extracted `this.nationalSignificantNumber` is \"91123456789\",\n// which means that the national part of `this.digits` isn't simply equal to\n// `this.nationalPrefix` + `this.nationalSignificantNumber`.\n//\n// Also, a `format` can add extra digits to the `this.nationalSignificantNumber`\n// being formatted via `metadata[country].national_prefix_transform_rule`.\n// For example, for `VI` country, it prepends `340` to the national number,\n// and if this check hasn't been implemented, then there would be a bug\n// when `340` \"area coude\" is \"duplicated\" during input for `VI` country:\n// https://github.com/catamphetamine/libphonenumber-js/issues/318\n//\n// So, all these \"gotchas\" are filtered out.\n//\n// In the original Google's code, the comments say:\n// \"Check that we didn't remove nor add any extra digits when we matched\n// this formatting pattern. This usually happens after we entered the last\n// digit during AYTF. Eg: In case of MX, we swallow mobile token (1) when\n// formatted but AYTF should retain all the number entered and not change\n// in order to match a format (of same leading digits and length) display\n// in that way.\"\n// \"If it's the same (i.e entered number and format is same), then it's\n// safe to return this in formatted number as nothing is lost / added.\"\n// Otherwise, don't use this format.\n// https://github.com/google/libphonenumber/commit/3e7c1f04f5e7200f87fb131e6f85c6e99d60f510#diff-9149457fa9f5d608a11bb975c6ef4bc5\n// https://github.com/google/libphonenumber/commit/3ac88c7106e7dcb553bcc794b15f19185928a1c6#diff-2dcb77e833422ee304da348b905cde0b\n//\nfunction isValidFormattedNationalNumber(formattedNationalNumber, state) {\n return parseDigits(formattedNationalNumber) === state.getNationalDigits();\n}\n//# sourceMappingURL=AsYouTypeFormatter.complete.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nvar PatternParser = /*#__PURE__*/function () {\n function PatternParser() {\n _classCallCheck(this, PatternParser);\n }\n return _createClass(PatternParser, [{\n key: \"parse\",\n value: function parse(pattern) {\n this.context = [{\n or: true,\n instructions: []\n }];\n this.parsePattern(pattern);\n if (this.context.length !== 1) {\n throw new Error('Non-finalized contexts left when pattern parse ended');\n }\n var _this$context$ = this.context[0],\n branches = _this$context$.branches,\n instructions = _this$context$.instructions;\n if (branches) {\n return {\n op: '|',\n args: branches.concat([expandSingleElementArray(instructions)])\n };\n }\n\n /* istanbul ignore if */\n if (instructions.length === 0) {\n throw new Error('Pattern is required');\n }\n if (instructions.length === 1) {\n return instructions[0];\n }\n return instructions;\n }\n }, {\n key: \"startContext\",\n value: function startContext(context) {\n this.context.push(context);\n }\n }, {\n key: \"endContext\",\n value: function endContext() {\n this.context.pop();\n }\n }, {\n key: \"getContext\",\n value: function getContext() {\n return this.context[this.context.length - 1];\n }\n }, {\n key: \"parsePattern\",\n value: function parsePattern(pattern) {\n if (!pattern) {\n throw new Error('Pattern is required');\n }\n var match = pattern.match(OPERATOR);\n if (!match) {\n if (ILLEGAL_CHARACTER_REGEXP.test(pattern)) {\n throw new Error(\"Illegal characters found in a pattern: \".concat(pattern));\n }\n this.getContext().instructions = this.getContext().instructions.concat(pattern.split(''));\n return;\n }\n var operator = match[1];\n var before = pattern.slice(0, match.index);\n var rightPart = pattern.slice(match.index + operator.length);\n switch (operator) {\n case '(?:':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n or: true,\n instructions: [],\n branches: []\n });\n break;\n case ')':\n if (!this.getContext().or) {\n throw new Error('\")\" operator must be preceded by \"(?:\" operator');\n }\n if (before) {\n this.parsePattern(before);\n }\n if (this.getContext().instructions.length === 0) {\n throw new Error('No instructions found after \"|\" operator in an \"or\" group');\n }\n var _this$getContext = this.getContext(),\n branches = _this$getContext.branches;\n branches.push(expandSingleElementArray(this.getContext().instructions));\n this.endContext();\n this.getContext().instructions.push({\n op: '|',\n args: branches\n });\n break;\n case '|':\n if (!this.getContext().or) {\n throw new Error('\"|\" operator can only be used inside \"or\" groups');\n }\n if (before) {\n this.parsePattern(before);\n }\n // The top-level is an implicit \"or\" group, if required.\n if (!this.getContext().branches) {\n // `branches` are not defined only for the root implicit \"or\" operator.\n /* istanbul ignore else */\n if (this.context.length === 1) {\n this.getContext().branches = [];\n } else {\n throw new Error('\"branches\" not found in an \"or\" group context');\n }\n }\n this.getContext().branches.push(expandSingleElementArray(this.getContext().instructions));\n this.getContext().instructions = [];\n break;\n case '[':\n if (before) {\n this.parsePattern(before);\n }\n this.startContext({\n oneOfSet: true\n });\n break;\n case ']':\n if (!this.getContext().oneOfSet) {\n throw new Error('\"]\" operator must be preceded by \"[\" operator');\n }\n this.endContext();\n this.getContext().instructions.push({\n op: '[]',\n args: parseOneOfSet(before)\n });\n break;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unknown operator: \".concat(operator));\n }\n if (rightPart) {\n this.parsePattern(rightPart);\n }\n }\n }]);\n}();\nexport { PatternParser as default };\nfunction parseOneOfSet(pattern) {\n var values = [];\n var i = 0;\n while (i < pattern.length) {\n if (pattern[i] === '-') {\n if (i === 0 || i === pattern.length - 1) {\n throw new Error(\"Couldn't parse a one-of set pattern: \".concat(pattern));\n }\n var prevValue = pattern[i - 1].charCodeAt(0) + 1;\n var nextValue = pattern[i + 1].charCodeAt(0) - 1;\n var value = prevValue;\n while (value <= nextValue) {\n values.push(String.fromCharCode(value));\n value++;\n }\n } else {\n values.push(pattern[i]);\n }\n i++;\n }\n return values;\n}\nvar ILLEGAL_CHARACTER_REGEXP = /[\\(\\)\\[\\]\\?\\:\\|]/;\nvar OPERATOR = new RegExp(\n// any of:\n'(' +\n// or operator\n'\\\\|' +\n// or\n'|' +\n// or group start\n'\\\\(\\\\?\\\\:' +\n// or\n'|' +\n// or group end\n'\\\\)' +\n// or\n'|' +\n// one-of set start\n'\\\\[' +\n// or\n'|' +\n// one-of set end\n'\\\\]' + ')');\nfunction expandSingleElementArray(array) {\n if (array.length === 1) {\n return array[0];\n }\n return array;\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternParser.js.map","function _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport PatternParser from './AsYouTypeFormatter.PatternParser.js';\nvar PatternMatcher = /*#__PURE__*/function () {\n function PatternMatcher(pattern) {\n _classCallCheck(this, PatternMatcher);\n this.matchTree = new PatternParser().parse(pattern);\n }\n return _createClass(PatternMatcher, [{\n key: \"match\",\n value: function match(string) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n allowOverflow = _ref.allowOverflow;\n if (!string) {\n throw new Error('String is required');\n }\n var result = _match(string.split(''), this.matchTree, true);\n if (result && result.match) {\n delete result.matchedChars;\n }\n if (result && result.overflow) {\n if (!allowOverflow) {\n return;\n }\n }\n return result;\n }\n }]);\n}();\n/**\r\n * Matches `characters` against a pattern compiled into a `tree`.\r\n * @param {string[]} characters\r\n * @param {Tree} tree — A pattern compiled into a `tree`. See the `*.d.ts` file for the description of the `tree` structure.\r\n * @param {boolean} last — Whether it's the last (rightmost) subtree on its level of the match tree.\r\n * @return {object} See the `*.d.ts` file for the description of the result object.\r\n */\nexport { PatternMatcher as default };\nfunction _match(characters, tree, last) {\n // If `tree` is a string, then `tree` is a single character.\n // That's because when a pattern is parsed, multi-character-string parts\n // of a pattern are compiled into arrays of single characters.\n // I still wrote this piece of code for a \"general\" hypothetical case\n // when `tree` could be a string of several characters, even though\n // such case is not possible with the current implementation.\n if (typeof tree === 'string') {\n var characterString = characters.join('');\n if (tree.indexOf(characterString) === 0) {\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore else */\n if (characters.length === tree.length) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n // `tree` is always a single character.\n // If `tree.indexOf(characterString) === 0`\n // then `characters.length === tree.length`.\n /* istanbul ignore next */\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n if (characterString.indexOf(tree) === 0) {\n if (last) {\n // The `else` path is not possible because `tree` is always a single character.\n // The `else` case for `characters.length > tree.length` would be\n // `characters.length <= tree.length` which means `characters.length <= 1`.\n // `characters` array can't be empty, so that means `characters === [tree]`,\n // which would also mean `tree.indexOf(characterString) === 0` and that'd mean\n // that the `if (tree.indexOf(characterString) === 0)` condition before this\n // `if` condition would be entered, and returned from there, not reaching this code.\n /* istanbul ignore else */\n if (characters.length > tree.length) {\n return {\n overflow: true\n };\n }\n }\n return {\n match: true,\n matchedChars: characters.slice(0, tree.length)\n };\n }\n return;\n }\n if (Array.isArray(tree)) {\n var restCharacters = characters.slice();\n var i = 0;\n while (i < tree.length) {\n var subtree = tree[i];\n var result = _match(restCharacters, subtree, last && i === tree.length - 1);\n if (!result) {\n return;\n } else if (result.overflow) {\n return result;\n } else if (result.match) {\n // Continue with the next subtree with the rest of the characters.\n restCharacters = restCharacters.slice(result.matchedChars.length);\n if (restCharacters.length === 0) {\n if (i === tree.length - 1) {\n return {\n match: true,\n matchedChars: characters\n };\n } else {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n }\n }\n } else {\n /* istanbul ignore else */\n if (result.partialMatch) {\n return {\n partialMatch: true\n // matchedChars: characters\n };\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(result, null, 2)));\n }\n }\n i++;\n }\n // If `last` then overflow has already been checked\n // by the last element of the `tree` array.\n /* istanbul ignore if */\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: characters.slice(0, characters.length - restCharacters.length)\n };\n }\n switch (tree.op) {\n case '|':\n var partialMatch;\n for (var _iterator = _createForOfIteratorHelperLoose(tree.args), _step; !(_step = _iterator()).done;) {\n var branch = _step.value;\n var _result = _match(characters, branch, last);\n if (_result) {\n if (_result.overflow) {\n return _result;\n } else if (_result.match) {\n return {\n match: true,\n matchedChars: _result.matchedChars\n };\n } else {\n /* istanbul ignore else */\n if (_result.partialMatch) {\n partialMatch = true;\n } else {\n throw new Error(\"Unsupported match result:\\n\".concat(JSON.stringify(_result, null, 2)));\n }\n }\n }\n }\n if (partialMatch) {\n return {\n partialMatch: true\n // matchedChars: ...\n };\n }\n // Not even a partial match.\n return;\n case '[]':\n for (var _iterator2 = _createForOfIteratorHelperLoose(tree.args), _step2; !(_step2 = _iterator2()).done;) {\n var _char = _step2.value;\n if (characters[0] === _char) {\n if (characters.length === 1) {\n return {\n match: true,\n matchedChars: characters\n };\n }\n if (last) {\n return {\n overflow: true\n };\n }\n return {\n match: true,\n matchedChars: [_char]\n };\n }\n }\n // No character matches.\n return;\n\n /* istanbul ignore next */\n default:\n throw new Error(\"Unsupported instruction tree: \".concat(tree));\n }\n}\n//# sourceMappingURL=AsYouTypeFormatter.PatternMatcher.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _createForOfIteratorHelperLoose(r, e) { var t = \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (t) return (t = t.call(r)).next.bind(t); if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && \"number\" == typeof r.length) { t && (r = t); var o = 0; return function () { return o >= r.length ? { done: !0 } : { done: !1, value: r[o++] }; }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport { DIGIT_PLACEHOLDER, countOccurences, repeat, cutAndStripNonPairedParens, closeNonPairedParens, stripNonPairedParens, populateTemplateWithDigits } from './AsYouTypeFormatter.util.js';\nimport formatCompleteNumber, { canFormatCompleteNumber } from './AsYouTypeFormatter.complete.js';\nimport PatternMatcher from './AsYouTypeFormatter.PatternMatcher.js';\nimport parseDigits from './helpers/parseDigits.js';\nexport { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.util.js';\nimport { FIRST_GROUP_PATTERN } from './helpers/formatNationalNumberUsingFormat.js';\nimport { VALID_PUNCTUATION } from './constants.js';\nimport applyInternationalSeparatorStyle from './helpers/applyInternationalSeparatorStyle.js';\n\n// Used in phone number format template creation.\n// Could be any digit, I guess.\nvar DUMMY_DIGIT = '9';\n// I don't know why is it exactly `15`\nvar LONGEST_NATIONAL_PHONE_NUMBER_LENGTH = 15;\n// Create a phone number consisting only of the digit 9 that matches the\n// `number_pattern` by applying the pattern to the \"longest phone number\" string.\nvar LONGEST_DUMMY_PHONE_NUMBER = repeat(DUMMY_DIGIT, LONGEST_NATIONAL_PHONE_NUMBER_LENGTH);\n\n// A set of characters that, if found in a national prefix formatting rules, are an indicator to\n// us that we should separate the national prefix from the number when formatting.\nvar NATIONAL_PREFIX_SEPARATORS_PATTERN = /[- ]/;\n\n// Deprecated: Google has removed some formatting pattern related code from their repo.\n// https://github.com/googlei18n/libphonenumber/commit/a395b4fef3caf57c4bc5f082e1152a4d2bd0ba4c\n// \"We no longer have numbers in formatting matching patterns, only \\d.\"\n// Because this library supports generating custom metadata\n// some users may still be using old metadata so the relevant\n// code seems to stay until some next major version update.\nvar SUPPORT_LEGACY_FORMATTING_PATTERNS = true;\n\n// A pattern that is used to match character classes in regular expressions.\n// An example of a character class is \"[1-4]\".\nvar CREATE_CHARACTER_CLASS_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\[([^\\[\\]])*\\]/g;\n};\n\n// Any digit in a regular expression that actually denotes a digit. For\n// example, in the regular expression \"80[0-2]\\d{6,10}\", the first 2 digits\n// (8 and 0) are standalone digits, but the rest are not.\n// Two look-aheads are needed because the number following \\\\d could be a\n// two-digit number, since the phone number can be as long as 15 digits.\nvar CREATE_STANDALONE_DIGIT_PATTERN = SUPPORT_LEGACY_FORMATTING_PATTERNS && function () {\n return /\\d(?=[^,}][^,}])/g;\n};\n\n// A regular expression that is used to determine if a `format` is\n// suitable to be used in the \"as you type formatter\".\n// A `format` is suitable when the resulting formatted number has\n// the same digits as the user has entered.\n//\n// In the simplest case, that would mean that the format\n// doesn't add any additional digits when formatting a number.\n// Google says that it also shouldn't add \"star\" (`*`) characters,\n// like it does in some Israeli formats.\n// Such basic format would only contain \"valid punctuation\"\n// and \"captured group\" identifiers ($1, $2, etc).\n//\n// An example of a format that adds additional digits:\n//\n// Country: `AR` (Argentina).\n// Format:\n// {\n// \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n// \"leading_digits_patterns\": [\"91\"],\n// \"national_prefix_formatting_rule\": \"0$1\",\n// \"format\": \"$2 15-$3-$4\",\n// \"international_format\": \"$1 $2 $3-$4\"\n// }\n//\n// In the format above, the `format` adds `15` to the digits when formatting a number.\n// A sidenote: this format actually is suitable because `national_prefix_for_parsing`\n// has previously removed `15` from a national number, so re-adding `15` in `format`\n// doesn't actually result in any extra digits added to user's input.\n// But verifying that would be a complex procedure, so the code chooses a simpler path:\n// it simply filters out all `format`s that contain anything but \"captured group\" ids.\n//\n// This regular expression is called `ELIGIBLE_FORMAT_PATTERN` in Google's\n// `libphonenumber` code.\n//\nvar NON_ALTERING_FORMAT_REG_EXP = new RegExp('[' + VALID_PUNCTUATION + ']*' +\n// Google developers say:\n// \"We require that the first matching group is present in the\n// output pattern to ensure no data is lost while formatting.\"\n'\\\\$1' + '[' + VALID_PUNCTUATION + ']*' + '(\\\\$\\\\d[' + VALID_PUNCTUATION + ']*)*' + '$');\n\n// This is the minimum length of the leading digits of a phone number\n// to guarantee the first \"leading digits pattern\" for a phone number format\n// to be preemptive.\nvar MIN_LEADING_DIGITS_LENGTH = 3;\nvar AsYouTypeFormatter = /*#__PURE__*/function () {\n function AsYouTypeFormatter(_ref) {\n var state = _ref.state,\n metadata = _ref.metadata;\n _classCallCheck(this, AsYouTypeFormatter);\n this.metadata = metadata;\n this.resetFormat();\n }\n return _createClass(AsYouTypeFormatter, [{\n key: \"resetFormat\",\n value: function resetFormat() {\n this.chosenFormat = undefined;\n this.template = undefined;\n this.nationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplate = undefined;\n this.populatedNationalNumberTemplatePosition = -1;\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan, state) {\n this.resetFormat();\n if (numberingPlan) {\n this.isNANP = numberingPlan.callingCode() === '1';\n this.matchingFormats = numberingPlan.formats();\n if (state.nationalSignificantNumber) {\n this.narrowDownMatchingFormats(state);\n }\n } else {\n this.isNANP = undefined;\n this.matchingFormats = [];\n }\n }\n\n /**\r\n * Formats an updated phone number.\r\n * @param {string} nextDigits — Additional phone number digits.\r\n * @param {object} state — `AsYouType` state.\r\n * @return {[string]} Returns undefined if the updated phone number can't be formatted using any of the available formats.\r\n */\n }, {\n key: \"format\",\n value: function format(nextDigits, state) {\n var _this = this;\n // See if the phone number digits can be formatted as a complete phone number.\n // If not, use the results from `formatNationalNumberWithNextDigits()`,\n // which formats based on the chosen formatting pattern.\n //\n // Attempting to format complete phone number first is how it's done\n // in Google's `libphonenumber`, so this library just follows it.\n // Google's `libphonenumber` code doesn't explain in detail why does it\n // attempt to format digits as a complete phone number\n // instead of just going with a previoulsy (or newly) chosen `format`:\n //\n // \"Checks to see if there is an exact pattern match for these digits.\n // If so, we should use this instead of any other formatting template\n // whose leadingDigitsPattern also matches the input.\"\n //\n if (canFormatCompleteNumber(state.nationalSignificantNumber, state.country, this.metadata)) {\n for (var _iterator = _createForOfIteratorHelperLoose(this.matchingFormats), _step; !(_step = _iterator()).done;) {\n var _format = _step.value;\n var formattedCompleteNumber = formatCompleteNumber(state, _format, {\n metadata: this.metadata,\n shouldTryNationalPrefixFormattingRule: function shouldTryNationalPrefixFormattingRule(format) {\n return _this.shouldTryNationalPrefixFormattingRule(format, {\n international: state.international,\n nationalPrefix: state.nationalPrefix\n });\n },\n getSeparatorAfterNationalPrefix: function getSeparatorAfterNationalPrefix(format) {\n return _this.getSeparatorAfterNationalPrefix(format);\n }\n });\n if (formattedCompleteNumber) {\n this.resetFormat();\n this.chosenFormat = _format;\n this.setNationalNumberTemplate(formattedCompleteNumber.replace(/\\d/g, DIGIT_PLACEHOLDER), state);\n this.populatedNationalNumberTemplate = formattedCompleteNumber;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = this.template.lastIndexOf(DIGIT_PLACEHOLDER);\n return formattedCompleteNumber;\n }\n }\n }\n // Format the digits as a partial (incomplete) phone number\n // using the previously chosen formatting pattern (or a newly chosen one).\n return this.formatNationalNumberWithNextDigits(nextDigits, state);\n }\n\n // Formats the next phone number digits.\n }, {\n key: \"formatNationalNumberWithNextDigits\",\n value: function formatNationalNumberWithNextDigits(nextDigits, state) {\n var previouslyChosenFormat = this.chosenFormat;\n\n // Choose a format from the list of matching ones.\n var newlyChosenFormat = this.chooseFormat(state);\n if (newlyChosenFormat) {\n if (newlyChosenFormat === previouslyChosenFormat) {\n // If it can format the next (current) digits\n // using the previously chosen phone number format\n // then return the updated formatted number.\n return this.formatNextNationalNumberDigits(nextDigits);\n } else {\n // If a more appropriate phone number format\n // has been chosen for these \"leading digits\",\n // then re-format the national phone number part\n // using the newly selected format.\n return this.formatNextNationalNumberDigits(state.getNationalDigits());\n }\n }\n }\n }, {\n key: \"narrowDownMatchingFormats\",\n value: function narrowDownMatchingFormats(_ref2) {\n var _this2 = this;\n var nationalSignificantNumber = _ref2.nationalSignificantNumber,\n nationalPrefix = _ref2.nationalPrefix,\n international = _ref2.international;\n var leadingDigits = nationalSignificantNumber;\n\n // \"leading digits\" pattern list starts with a\n // \"leading digits\" pattern fitting a maximum of 3 leading digits.\n // So, after a user inputs 3 digits of a national (significant) phone number\n // this national (significant) number can already be formatted.\n // The next \"leading digits\" pattern is for 4 leading digits max,\n // and the \"leading digits\" pattern after it is for 5 leading digits max, etc.\n\n // This implementation is different from Google's\n // in that it searches for a fitting format\n // even if the user has entered less than\n // `MIN_LEADING_DIGITS_LENGTH` digits of a national number.\n // Because some leading digit patterns already match for a single first digit.\n var leadingDigitsPatternIndex = leadingDigits.length - MIN_LEADING_DIGITS_LENGTH;\n if (leadingDigitsPatternIndex < 0) {\n leadingDigitsPatternIndex = 0;\n }\n this.matchingFormats = this.matchingFormats.filter(function (format) {\n return _this2.formatSuits(format, international, nationalPrefix) && _this2.formatMatches(format, leadingDigits, leadingDigitsPatternIndex);\n });\n\n // If there was a phone number format chosen\n // and it no longer holds given the new leading digits then reset it.\n // The test for this `if` condition is marked as:\n // \"Reset a chosen format when it no longer holds given the new leading digits\".\n // To construct a valid test case for this one can find a country\n // in `PhoneNumberMetadata.xml` yielding one format for 3 ``\n // and yielding another format for 4 `` (Australia in this case).\n if (this.chosenFormat && this.matchingFormats.indexOf(this.chosenFormat) === -1) {\n this.resetFormat();\n }\n }\n }, {\n key: \"formatSuits\",\n value: function formatSuits(format, international, nationalPrefix) {\n // When a prefix before a national (significant) number is\n // simply a national prefix, then it's parsed as `this.nationalPrefix`.\n // In more complex cases, a prefix before national (significant) number\n // could include a national prefix as well as some \"capturing groups\",\n // and in that case there's no info whether a national prefix has been parsed.\n // If national prefix is not used when formatting a phone number\n // using this format, but a national prefix has been entered by the user,\n // and was extracted, then discard such phone number format.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L175-L184\n if (nationalPrefix && !format.usesNationalPrefix() &&\n // !format.domesticCarrierCodeFormattingRule() &&\n !format.nationalPrefixIsOptionalWhenFormattingInNationalFormat()) {\n return false;\n }\n // If national prefix is mandatory for this phone number format\n // and there're no guarantees that a national prefix is present in user input\n // then discard this phone number format as not suitable.\n // In Google's \"AsYouType\" formatter code, the equivalent would be this part:\n // https://github.com/google/libphonenumber/blob/0a45cfd96e71cad8edb0e162a70fcc8bd9728933/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L185-L193\n if (!international && !nationalPrefix && format.nationalPrefixIsMandatoryWhenFormattingInNationalFormat()) {\n return false;\n }\n return true;\n }\n }, {\n key: \"formatMatches\",\n value: function formatMatches(format, leadingDigits, leadingDigitsPatternIndex) {\n var leadingDigitsPatternsCount = format.leadingDigitsPatterns().length;\n\n // If this format is not restricted to a certain\n // leading digits pattern then it fits.\n // The test case could be found by searching for \"leadingDigitsPatternsCount === 0\".\n if (leadingDigitsPatternsCount === 0) {\n return true;\n }\n\n // Start narrowing down the list of possible formats based on the leading digits.\n // (only previously matched formats take part in the narrowing down process)\n\n // `leading_digits_patterns` start with 3 digits min\n // and then go up from there one digit at a time.\n leadingDigitsPatternIndex = Math.min(leadingDigitsPatternIndex, leadingDigitsPatternsCount - 1);\n var leadingDigitsPattern = format.leadingDigitsPatterns()[leadingDigitsPatternIndex];\n\n // Google imposes a requirement on the leading digits\n // to be minimum 3 digits long in order to be eligible\n // for checking those with a leading digits pattern.\n //\n // Since `leading_digits_patterns` start with 3 digits min,\n // Google's original `libphonenumber` library only starts\n // excluding any non-matching formats only when the\n // national number entered so far is at least 3 digits long,\n // otherwise format matching would give false negatives.\n //\n // For example, when the digits entered so far are `2`\n // and the leading digits pattern is `21` –\n // it's quite obvious in this case that the format could be the one\n // but due to the absence of further digits it would give false negative.\n //\n // Also, `leading_digits_patterns` doesn't always correspond to a single\n // digits count. For example, `60|8` pattern would already match `8`\n // but the `60` part would require having at least two leading digits,\n // so the whole pattern would require inputting two digits first in order to\n // decide on whether it matches the input, even when the input is \"80\".\n //\n // This library — `libphonenumber-js` — allows filtering by `leading_digits_patterns`\n // even when there's only 1 or 2 digits of the national (significant) number.\n // To do that, it uses a non-strict pattern matcher written specifically for that.\n //\n if (leadingDigits.length < MIN_LEADING_DIGITS_LENGTH) {\n // Before leading digits < 3 matching was implemented:\n // return true\n //\n // After leading digits < 3 matching was implemented:\n try {\n return new PatternMatcher(leadingDigitsPattern).match(leadingDigits, {\n allowOverflow: true\n }) !== undefined;\n } catch (error) /* istanbul ignore next */{\n // There's a slight possibility that there could be some undiscovered bug\n // in the pattern matcher code. Since the \"leading digits < 3 matching\"\n // feature is not \"essential\" for operation, it can fall back to the old way\n // in case of any issues rather than halting the application's execution.\n console.error(error);\n return true;\n }\n }\n\n // If at least `MIN_LEADING_DIGITS_LENGTH` digits of a national number are\n // available then use the usual regular expression matching.\n //\n // The whole pattern is wrapped in round brackets (`()`) because\n // the pattern can use \"or\" operator (`|`) at the top level of the pattern.\n //\n return new RegExp(\"^(\".concat(leadingDigitsPattern, \")\")).test(leadingDigits);\n }\n }, {\n key: \"getFormatFormat\",\n value: function getFormatFormat(format, international) {\n return international ? format.internationalFormat() : format.format();\n }\n }, {\n key: \"chooseFormat\",\n value: function chooseFormat(state) {\n var _this3 = this;\n var _loop = function _loop() {\n var format = _step2.value;\n // If this format is currently being used\n // and is still suitable, then stick to it.\n if (_this3.chosenFormat === format) {\n return 0; // break\n }\n // Sometimes, a formatting rule inserts additional digits in a phone number,\n // and \"as you type\" formatter can't do that: it should only use the digits\n // that the user has input.\n //\n // For example, in Argentina, there's a format for mobile phone numbers:\n //\n // {\n // \"pattern\": \"(\\\\d)(\\\\d{2})(\\\\d{4})(\\\\d{4})\",\n // \"leading_digits_patterns\": [\"91\"],\n // \"national_prefix_formatting_rule\": \"0$1\",\n // \"format\": \"$2 15-$3-$4\",\n // \"international_format\": \"$1 $2 $3-$4\"\n // }\n //\n // In that format, `international_format` is used instead of `format`\n // because `format` inserts `15` in the formatted number,\n // and `AsYouType` formatter should only use the digits\n // the user has actually input, without adding any extra digits.\n // In this case, it wouldn't make a difference, because the `15`\n // is first stripped when applying `national_prefix_for_parsing`\n // and then re-added when using `format`, so in reality it doesn't\n // add any new digits to the number, but to detect that, the code\n // would have to be more complex: it would have to try formatting\n // the digits using the format and then see if any digits have\n // actually been added or removed, and then, every time a new digit\n // is input, it should re-check whether the chosen format doesn't\n // alter the digits.\n //\n // Google's code doesn't go that far, and so does this library:\n // it simply requires that a `format` doesn't add any additonal\n // digits to user's input.\n //\n // Also, people in general should move from inputting phone numbers\n // in national format (possibly with national prefixes)\n // and use international phone number format instead:\n // it's a logical thing in the modern age of mobile phones,\n // globalization and the internet.\n //\n /* istanbul ignore if */\n if (!NON_ALTERING_FORMAT_REG_EXP.test(_this3.getFormatFormat(format, state.international))) {\n return 1; // continue\n }\n if (!_this3.createTemplateForFormat(format, state)) {\n // Remove the format if it can't generate a template.\n _this3.matchingFormats = _this3.matchingFormats.filter(function (_) {\n return _ !== format;\n });\n return 1; // continue\n }\n _this3.chosenFormat = format;\n return 0; // break\n },\n _ret;\n // When there are multiple available formats, the formatter uses the first\n // format where a formatting template could be created.\n //\n // For some weird reason, `istanbul` says \"else path not taken\"\n // for the `for of` line below. Supposedly that means that\n // the loop doesn't ever go over the last element in the list.\n // That's true because there always is `this.chosenFormat`\n // when `this.matchingFormats` is non-empty.\n // And, for some weird reason, it doesn't think that the case\n // with empty `this.matchingFormats` qualifies for a valid \"else\" path.\n // So simply muting this `istanbul` warning.\n // It doesn't skip the contents of the `for of` loop,\n // it just skips the `for of` line.\n //\n /* istanbul ignore next */\n for (var _iterator2 = _createForOfIteratorHelperLoose(this.matchingFormats.slice()), _step2; !(_step2 = _iterator2()).done;) {\n _ret = _loop();\n if (_ret === 0) break;\n if (_ret === 1) continue;\n }\n if (!this.chosenFormat) {\n // No format matches the national (significant) phone number.\n this.resetFormat();\n }\n return this.chosenFormat;\n }\n }, {\n key: \"createTemplateForFormat\",\n value: function createTemplateForFormat(format, state) {\n // The formatter doesn't format numbers when numberPattern contains '|', e.g.\n // (20|3)\\d{4}. In those cases we quickly return.\n // (Though there's no such format in current metadata)\n /* istanbul ignore if */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS && format.pattern().indexOf('|') >= 0) {\n return;\n }\n // Get formatting template for this phone number format\n var template = this.getTemplateForFormat(format, state);\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (template) {\n this.setNationalNumberTemplate(template, state);\n return true;\n }\n }\n }, {\n key: \"getSeparatorAfterNationalPrefix\",\n value: function getSeparatorAfterNationalPrefix(format) {\n // `US` metadata doesn't have a `national_prefix_formatting_rule`,\n // so the `if` condition below doesn't apply to `US`,\n // but in reality there shoudl be a separator\n // between a national prefix and a national (significant) number.\n // So `US` national prefix separator is a \"special\" \"hardcoded\" case.\n if (this.isNANP) {\n return ' ';\n }\n // If a `format` has a `national_prefix_formatting_rule`\n // and that rule has a separator after a national prefix,\n // then it means that there should be a separator\n // between a national prefix and a national (significant) number.\n if (format && format.nationalPrefixFormattingRule() && NATIONAL_PREFIX_SEPARATORS_PATTERN.test(format.nationalPrefixFormattingRule())) {\n return ' ';\n }\n // At this point, there seems to be no clear evidence that\n // there should be a separator between a national prefix\n // and a national (significant) number. So don't insert one.\n return '';\n }\n }, {\n key: \"getInternationalPrefixBeforeCountryCallingCode\",\n value: function getInternationalPrefixBeforeCountryCallingCode(_ref3, options) {\n var IDDPrefix = _ref3.IDDPrefix,\n missingPlus = _ref3.missingPlus;\n if (IDDPrefix) {\n return options && options.spacing === false ? IDDPrefix : IDDPrefix + ' ';\n }\n if (missingPlus) {\n return '';\n }\n return '+';\n }\n }, {\n key: \"getTemplate\",\n value: function getTemplate(state) {\n if (!this.template) {\n return;\n }\n // `this.template` holds the template for a \"complete\" phone number.\n // The currently entered phone number is most likely not \"complete\",\n // so trim all non-populated digits.\n var index = -1;\n var i = 0;\n var internationalPrefix = state.international ? this.getInternationalPrefixBeforeCountryCallingCode(state, {\n spacing: false\n }) : '';\n while (i < internationalPrefix.length + state.getDigitsWithoutInternationalPrefix().length) {\n index = this.template.indexOf(DIGIT_PLACEHOLDER, index + 1);\n i++;\n }\n return cutAndStripNonPairedParens(this.template, index + 1);\n }\n }, {\n key: \"setNationalNumberTemplate\",\n value: function setNationalNumberTemplate(template, state) {\n this.nationalNumberTemplate = template;\n this.populatedNationalNumberTemplate = template;\n // With a new formatting template, the matched position\n // using the old template needs to be reset.\n this.populatedNationalNumberTemplatePosition = -1;\n // For convenience, the public `.template` property\n // contains the whole international number\n // if the phone number being input is international:\n // 'x' for the '+' sign, 'x'es for the country phone code,\n // a spacebar and then the template for the formatted national number.\n if (state.international) {\n this.template = this.getInternationalPrefixBeforeCountryCallingCode(state).replace(/[\\d\\+]/g, DIGIT_PLACEHOLDER) + repeat(DIGIT_PLACEHOLDER, state.callingCode.length) + ' ' + template;\n } else {\n this.template = template;\n }\n }\n\n /**\r\n * Generates formatting template for a national phone number,\r\n * optionally containing a national prefix, for a format.\r\n * @param {Format} format\r\n * @param {string} nationalPrefix\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplateForFormat\",\n value: function getTemplateForFormat(format, _ref4) {\n var nationalSignificantNumber = _ref4.nationalSignificantNumber,\n international = _ref4.international,\n nationalPrefix = _ref4.nationalPrefix,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _ref4.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n var pattern = format.pattern();\n\n /* istanbul ignore else */\n if (SUPPORT_LEGACY_FORMATTING_PATTERNS) {\n pattern = pattern\n // Replace anything in the form of [..] with \\d\n .replace(CREATE_CHARACTER_CLASS_PATTERN(), '\\\\d')\n // Replace any standalone digit (not the one in `{}`) with \\d\n .replace(CREATE_STANDALONE_DIGIT_PATTERN(), '\\\\d');\n }\n\n // Generate a dummy national number (consisting of `9`s)\n // that fits this format's `pattern`.\n //\n // This match will always succeed,\n // because the \"longest dummy phone number\"\n // has enough length to accomodate any possible\n // national phone number format pattern.\n //\n var digits = LONGEST_DUMMY_PHONE_NUMBER.match(pattern)[0];\n\n // If the national number entered is too long\n // for any phone number format, then abort.\n if (nationalSignificantNumber.length > digits.length) {\n return;\n }\n\n // Get a formatting template which can be used to efficiently format\n // a partial number where digits are added one by one.\n\n // Below `strictPattern` is used for the\n // regular expression (with `^` and `$`).\n // This wasn't originally in Google's `libphonenumber`\n // and I guess they don't really need it\n // because they're not using \"templates\" to format phone numbers\n // but I added `strictPattern` after encountering\n // South Korean phone number formatting bug.\n //\n // Non-strict regular expression bug demonstration:\n //\n // this.nationalSignificantNumber : `111111111` (9 digits)\n //\n // pattern : (\\d{2})(\\d{3,4})(\\d{4})\n // format : `$1 $2 $3`\n // digits : `9999999999` (10 digits)\n //\n // '9999999999'.replace(new RegExp(/(\\d{2})(\\d{3,4})(\\d{4})/g), '$1 $2 $3') = \"99 9999 9999\"\n //\n // template : xx xxxx xxxx\n //\n // But the correct template in this case is `xx xxx xxxx`.\n // The template was generated incorrectly because of the\n // `{3,4}` variability in the `pattern`.\n //\n // The fix is, if `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then `this.nationalSignificantNumber`\n // is used instead of `digits`.\n\n var strictPattern = new RegExp('^' + pattern + '$');\n var nationalNumberDummyDigits = nationalSignificantNumber.replace(/\\d/g, DUMMY_DIGIT);\n\n // If `this.nationalSignificantNumber` has already sufficient length\n // to satisfy the `pattern` completely then use it\n // instead of `digits`.\n if (strictPattern.test(nationalNumberDummyDigits)) {\n digits = nationalNumberDummyDigits;\n }\n var numberFormat = this.getFormatFormat(format, international);\n var nationalPrefixIncludedInTemplate;\n\n // If a user did input a national prefix (and that's guaranteed),\n // and if a `format` does have a national prefix formatting rule,\n // then see if that national prefix formatting rule\n // prepends exactly the same national prefix the user has input.\n // If that's the case, then use the `format` with the national prefix formatting rule.\n // Otherwise, use the `format` without the national prefix formatting rule,\n // and prepend a national prefix manually to it.\n if (this.shouldTryNationalPrefixFormattingRule(format, {\n international: international,\n nationalPrefix: nationalPrefix\n })) {\n var numberFormatWithNationalPrefix = numberFormat.replace(FIRST_GROUP_PATTERN, format.nationalPrefixFormattingRule());\n // If `national_prefix_formatting_rule` of a `format` simply prepends\n // national prefix at the start of a national (significant) number,\n // then such formatting can be used with `AsYouType` formatter.\n // There seems to be no `else` case: everywhere in metadata,\n // national prefix formatting rule is national prefix + $1,\n // or `($1)`, in which case such format isn't even considered\n // when the user has input a national prefix.\n /* istanbul ignore else */\n if (parseDigits(format.nationalPrefixFormattingRule()) === (nationalPrefix || '') + parseDigits('$1')) {\n numberFormat = numberFormatWithNationalPrefix;\n nationalPrefixIncludedInTemplate = true;\n // Replace all digits of the national prefix in the formatting template\n // with `DIGIT_PLACEHOLDER`s.\n if (nationalPrefix) {\n var i = nationalPrefix.length;\n while (i > 0) {\n numberFormat = numberFormat.replace(/\\d/, DIGIT_PLACEHOLDER);\n i--;\n }\n }\n }\n }\n\n // Generate formatting template for this phone number format.\n var template = digits\n // Format the dummy phone number according to the format.\n .replace(new RegExp(pattern), numberFormat)\n // Replace each dummy digit with a DIGIT_PLACEHOLDER.\n .replace(new RegExp(DUMMY_DIGIT, 'g'), DIGIT_PLACEHOLDER);\n\n // If a prefix of a national (significant) number is not as simple\n // as just a basic national prefix, then just prepend such prefix\n // before the national (significant) number, optionally spacing\n // the two with a whitespace.\n if (!nationalPrefixIncludedInTemplate) {\n if (prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix) {\n // Prepend the prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix.length) + ' ' + template;\n } else if (nationalPrefix) {\n // Prepend national prefix to the template manually.\n template = repeat(DIGIT_PLACEHOLDER, nationalPrefix.length) + this.getSeparatorAfterNationalPrefix(format) + template;\n }\n }\n if (international) {\n template = applyInternationalSeparatorStyle(template);\n }\n return template;\n }\n }, {\n key: \"formatNextNationalNumberDigits\",\n value: function formatNextNationalNumberDigits(digits) {\n var result = populateTemplateWithDigits(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition, digits);\n if (!result) {\n // Reset the format.\n this.resetFormat();\n return;\n }\n this.populatedNationalNumberTemplate = result[0];\n this.populatedNationalNumberTemplatePosition = result[1];\n\n // Return the formatted phone number so far.\n return cutAndStripNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1);\n\n // The old way which was good for `input-format` but is not so good\n // for `react-phone-number-input`'s default input (`InputBasic`).\n // return closeNonPairedParens(this.populatedNationalNumberTemplate, this.populatedNationalNumberTemplatePosition + 1)\n // \t.replace(new RegExp(DIGIT_PLACEHOLDER, 'g'), ' ')\n }\n }, {\n key: \"shouldTryNationalPrefixFormattingRule\",\n value: function shouldTryNationalPrefixFormattingRule(format, _ref5) {\n var international = _ref5.international,\n nationalPrefix = _ref5.nationalPrefix;\n if (format.nationalPrefixFormattingRule()) {\n // In some countries, `national_prefix_formatting_rule` is `($1)`,\n // so it applies even if the user hasn't input a national prefix.\n // `format.usesNationalPrefix()` detects such cases.\n var usesNationalPrefix = format.usesNationalPrefix();\n if (usesNationalPrefix && nationalPrefix || !usesNationalPrefix && !international) {\n return true;\n }\n }\n }\n }]);\n}();\nexport { AsYouTypeFormatter as default };\n//# sourceMappingURL=AsYouTypeFormatter.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport _extractCountryCallingCode from './helpers/extractCountryCallingCode.js';\nimport extractCountryCallingCodeFromInternationalNumberWithoutPlusSign from './helpers/extractCountryCallingCodeFromInternationalNumberWithoutPlusSign.js';\nimport extractNationalNumberFromPossiblyIncompleteNumber from './helpers/extractNationalNumberFromPossiblyIncompleteNumber.js';\nimport stripIddPrefix from './helpers/stripIddPrefix.js';\nimport parseDigits from './helpers/parseDigits.js';\nimport { VALID_DIGITS, VALID_PUNCTUATION, PLUS_CHARS } from './constants.js';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART = '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+';\nvar VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN = new RegExp('^' + VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART + '$', 'i');\nvar VALID_FORMATTED_PHONE_NUMBER_PART = '(?:' + '[' + PLUS_CHARS + ']' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']*' + '|' + '[' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + ')';\nvar AFTER_PHONE_NUMBER_DIGITS_END_PATTERN = new RegExp('[^' + VALID_PUNCTUATION + VALID_DIGITS + ']+' + '.*' + '$');\n\n// Tests whether `national_prefix_for_parsing` could match\n// different national prefixes.\n// Matches anything that's not a digit or a square bracket.\nvar COMPLEX_NATIONAL_PREFIX = /[^\\d\\[\\]]/;\nvar AsYouTypeParser = /*#__PURE__*/function () {\n function AsYouTypeParser(_ref) {\n var defaultCountry = _ref.defaultCountry,\n defaultCallingCode = _ref.defaultCallingCode,\n metadata = _ref.metadata,\n onNationalSignificantNumberChange = _ref.onNationalSignificantNumberChange;\n _classCallCheck(this, AsYouTypeParser);\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.metadata = metadata;\n this.onNationalSignificantNumberChange = onNationalSignificantNumberChange;\n }\n return _createClass(AsYouTypeParser, [{\n key: \"input\",\n value: function input(text, state) {\n var _extractFormattedDigi = extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi2 = _slicedToArray(_extractFormattedDigi, 2),\n formattedDigits = _extractFormattedDigi2[0],\n hasPlus = _extractFormattedDigi2[1];\n var digits = parseDigits(formattedDigits);\n // Checks for a special case: just a leading `+` has been entered.\n var justLeadingPlus;\n if (hasPlus) {\n if (!state.digits) {\n state.startInternationalNumber(undefined, undefined);\n if (!digits) {\n justLeadingPlus = true;\n }\n }\n }\n if (digits) {\n this.inputDigits(digits, state);\n }\n return {\n digits: digits,\n justLeadingPlus: justLeadingPlus\n };\n }\n\n /**\r\n * Inputs \"next\" phone number digits.\r\n * @param {string} digits\r\n * @return {string} [formattedNumber] Formatted national phone number (if it can be formatted at this stage). Returning `undefined` means \"don't format the national phone number at this stage\".\r\n */\n }, {\n key: \"inputDigits\",\n value: function inputDigits(nextDigits, state) {\n var digits = state.digits;\n var hasReceivedThreeLeadingDigits = digits.length < 3 && digits.length + nextDigits.length >= 3;\n\n // Append phone number digits.\n state.appendDigits(nextDigits);\n\n // Attempt to extract IDD prefix:\n // Some users input their phone number in international format,\n // but in an \"out-of-country\" dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers as soon as there're at least 3 digits.\n // Google's library attempts to extract IDD prefix at 3 digits,\n // so this library just copies that behavior.\n // I guess that's because the most commot IDD prefixes are\n // `00` (Europe) and `011` (US).\n // There exist really long IDD prefixes too:\n // for example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n // An IDD prefix is extracted here, and then every time when\n // there's a new digit and the number couldn't be formatted.\n if (hasReceivedThreeLeadingDigits) {\n this.extractIddPrefix(state);\n }\n if (this.isWaitingForCountryCallingCode(state)) {\n if (!this.extractCountryCallingCode(state)) {\n return;\n }\n } else {\n state.appendNationalSignificantNumberDigits(nextDigits);\n }\n\n // If a phone number is being input in international format,\n // then it's not valid for it to have a national prefix.\n // Still, some people incorrectly input such numbers with a national prefix.\n // In such cases, only attempt to strip a national prefix if the number becomes too long.\n // (but that is done later, not here)\n if (!state.international) {\n if (!this.hasExtractedNationalSignificantNumber) {\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }\n }, {\n key: \"isWaitingForCountryCallingCode\",\n value: function isWaitingForCountryCallingCode(_ref2) {\n var international = _ref2.international,\n callingCode = _ref2.callingCode;\n return international && !callingCode;\n }\n\n // Extracts a country calling code from a number\n // being entered in internatonal format.\n }, {\n key: \"extractCountryCallingCode\",\n value: function extractCountryCallingCode(state) {\n var _extractCountryCallin = _extractCountryCallingCode('+' + state.getDigitsWithoutInternationalPrefix(), state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n countryCallingCode = _extractCountryCallin.countryCallingCode,\n number = _extractCountryCallin.number;\n if (countryCallingCode) {\n state.setCallingCode(countryCallingCode);\n state.update({\n nationalSignificantNumber: number\n });\n return true;\n }\n }\n }, {\n key: \"reset\",\n value: function reset(numberingPlan) {\n if (numberingPlan) {\n this.hasSelectedNumberingPlan = true;\n var nationalPrefixForParsing = numberingPlan._nationalPrefixForParsing();\n this.couldPossiblyExtractAnotherNationalSignificantNumber = nationalPrefixForParsing && COMPLEX_NATIONAL_PREFIX.test(nationalPrefixForParsing);\n } else {\n this.hasSelectedNumberingPlan = undefined;\n this.couldPossiblyExtractAnotherNationalSignificantNumber = undefined;\n }\n }\n\n /**\r\n * Extracts a national (significant) number from user input.\r\n * Google's library is different in that it only applies `national_prefix_for_parsing`\r\n * and doesn't apply `national_prefix_transform_rule` after that.\r\n * https://github.com/google/libphonenumber/blob/a3d70b0487875475e6ad659af404943211d26456/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java#L539\r\n * @return {boolean} [extracted]\r\n */\n }, {\n key: \"extractNationalSignificantNumber\",\n value: function extractNationalSignificantNumber(nationalDigits, setState) {\n if (!this.hasSelectedNumberingPlan) {\n return;\n }\n var _extractNationalNumbe = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe.nationalPrefix,\n nationalNumber = _extractNationalNumbe.nationalNumber,\n carrierCode = _extractNationalNumbe.carrierCode;\n if (nationalNumber === nationalDigits) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n\n /**\r\n * In Google's code this function is called \"attempt to extract longer NDD\".\r\n * \"Some national prefixes are a substring of others\", they say.\r\n * @return {boolean} [result] — Returns `true` if extracting a national prefix produced different results from what they were.\r\n */\n }, {\n key: \"extractAnotherNationalSignificantNumber\",\n value: function extractAnotherNationalSignificantNumber(nationalDigits, prevNationalSignificantNumber, setState) {\n if (!this.hasExtractedNationalSignificantNumber) {\n return this.extractNationalSignificantNumber(nationalDigits, setState);\n }\n if (!this.couldPossiblyExtractAnotherNationalSignificantNumber) {\n return;\n }\n var _extractNationalNumbe2 = extractNationalNumberFromPossiblyIncompleteNumber(nationalDigits, this.metadata),\n nationalPrefix = _extractNationalNumbe2.nationalPrefix,\n nationalNumber = _extractNationalNumbe2.nationalNumber,\n carrierCode = _extractNationalNumbe2.carrierCode;\n // If a national prefix has been extracted previously,\n // then it's always extracted as additional digits are added.\n // That's assuming `extractNationalNumberFromPossiblyIncompleteNumber()`\n // doesn't do anything different from what it currently does.\n // So, just in case, here's this check, though it doesn't occur.\n /* istanbul ignore if */\n if (nationalNumber === prevNationalSignificantNumber) {\n return;\n }\n this.onExtractedNationalNumber(nationalPrefix, carrierCode, nationalNumber, nationalDigits, setState);\n return true;\n }\n }, {\n key: \"onExtractedNationalNumber\",\n value: function onExtractedNationalNumber(nationalPrefix, carrierCode, nationalSignificantNumber, nationalDigits, setState) {\n // Tells if the parsed national (significant) number is present as-is in the input string.\n // For example, when inputting \"0343515551212999\" Argentinian mobile number,\n // the parsed national (significant) number is \"93435551212999\".\n // There, one can see how it stripped \"0\" national prefix and prepended a \"9\",\n // because that's how it is instructed to do in Argentina's metadata.\n // So in the described example, the parsed national (significant) number is not present\n // as-is in the input string. Instead, it's \"modified\" in the input string.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var nationalSignificantNumberIsModified = false;\n\n // In some countries, a phone number could have a prefix that is not a \"national prefix\"\n // but rather some other type of \"utility\" prefix.\n // For example, when calling within Australia, one could prepend `1831` prefix to hide\n // caller's phone number.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/blob/master/METADATA.md#national_prefix_for_parsing--national_prefix_transform_rule\n var prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix;\n\n // `nationalSignificantNumber` could be empty. In that case, `.lastIndexOf()` still works correctly.\n var nationalSignificantNumberIndex = nationalDigits.lastIndexOf(nationalSignificantNumber);\n\n // If the parsed national (significant) number is the last substring of the `nationalDigits`,\n // then it means that it's present as-is in the input string.\n // In any other case, the parsed national (significant) number is \"modified\" in the input string.\n if (nationalSignificantNumberIndex < 0 || nationalSignificantNumberIndex !== nationalDigits.length - nationalSignificantNumber.length) {\n nationalSignificantNumberIsModified = true;\n } else {\n var prefixBeforeNationalNumber = nationalDigits.slice(0, nationalSignificantNumberIndex);\n // When national (significant) number is equal to the `nationalDigits`,\n // this `onExtractedNationalNumber()` function simply doesn't get called.\n // This means that at this point, `prefixBeforeNationalNumber` is always non-empty.\n // Still, added this `if` check just to prevent potential silly bugs.\n // The `!prefixBeforeNationalNumber` case is not really testable\n // so this line is exluded from the code coverage.\n /* istanbul ignore if */\n if (prefixBeforeNationalNumber) {\n if (prefixBeforeNationalNumber !== nationalPrefix) {\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = prefixBeforeNationalNumber;\n }\n }\n }\n setState({\n nationalPrefix: nationalPrefix,\n carrierCode: carrierCode,\n nationalSignificantNumber: nationalSignificantNumber,\n nationalSignificantNumberIsModified: nationalSignificantNumberIsModified,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix: prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix\n });\n // `onExtractedNationalNumber()` is only called when\n // the national (significant) number actually did change.\n this.hasExtractedNationalSignificantNumber = true;\n this.onNationalSignificantNumberChange();\n }\n }, {\n key: \"reExtractNationalSignificantNumber\",\n value: function reExtractNationalSignificantNumber(state) {\n // Attempt to extract a national prefix.\n //\n // Some people incorrectly input national prefix\n // in an international phone number.\n // For example, some people write British phone numbers as `+44(0)...`.\n //\n // Also, in some rare cases, it is valid for a national prefix\n // to be a part of an international phone number.\n // For example, mobile phone numbers in Mexico are supposed to be\n // dialled internationally using a `1` national prefix,\n // so the national prefix will be part of an international number.\n //\n // Quote from:\n // https://www.mexperience.com/dialing-cell-phones-in-mexico/\n //\n // \"Dialing a Mexican cell phone from abroad\n // When you are calling a cell phone number in Mexico from outside Mexico,\n // it’s necessary to dial an additional “1” after Mexico’s country code\n // (which is “52”) and before the area code.\n // You also ignore the 045, and simply dial the area code and the\n // cell phone’s number.\n //\n // If you don’t add the “1”, you’ll receive a recorded announcement\n // asking you to redial using it.\n //\n // For example, if you are calling from the USA to a cell phone\n // in Mexico City, you would dial +52 – 1 – 55 – 1234 5678.\n // (Note that this is different to calling a land line in Mexico City\n // from abroad, where the number dialed would be +52 – 55 – 1234 5678)\".\n //\n // Google's demo output:\n // https://libphonenumber.appspot.com/phonenumberparser?number=%2b5215512345678&country=MX\n //\n if (this.extractAnotherNationalSignificantNumber(state.getNationalDigits(), state.nationalSignificantNumber, function (stateUpdate) {\n return state.update(stateUpdate);\n })) {\n return true;\n }\n // If no format matches the phone number, then it could be\n // \"a really long IDD\" (quote from a comment in Google's library).\n // An IDD prefix is first extracted when the user has entered at least 3 digits,\n // and then here — every time when there's a new digit and the number\n // couldn't be formatted.\n // For example, in Australia the default IDD prefix is `0011`,\n // and it could even be as long as `14880011`.\n //\n // Could also check `!hasReceivedThreeLeadingDigits` here\n // to filter out the case when this check duplicates the one\n // already performed when there're 3 leading digits,\n // but it's not a big deal, and in most cases there\n // will be a suitable `format` when there're 3 leading digits.\n //\n if (this.extractIddPrefix(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n // Google's AsYouType formatter supports sort of an \"autocorrection\" feature\n // when it \"autocorrects\" numbers that have been input for a country\n // with that country's calling code.\n // Such \"autocorrection\" feature looks weird, but different people have been requesting it:\n // https://github.com/catamphetamine/libphonenumber-js/issues/376\n // https://github.com/catamphetamine/libphonenumber-js/issues/375\n // https://github.com/catamphetamine/libphonenumber-js/issues/316\n if (this.fixMissingPlus(state)) {\n this.extractCallingCodeAndNationalSignificantNumber(state);\n return true;\n }\n }\n }, {\n key: \"extractIddPrefix\",\n value: function extractIddPrefix(state) {\n // An IDD prefix can't be present in a number written with a `+`.\n // Also, don't re-extract an IDD prefix if has already been extracted.\n var international = state.international,\n IDDPrefix = state.IDDPrefix,\n digits = state.digits,\n nationalSignificantNumber = state.nationalSignificantNumber;\n if (international || IDDPrefix) {\n return;\n }\n // Some users input their phone number in \"out-of-country\"\n // dialing format instead of using the leading `+`.\n // https://github.com/catamphetamine/libphonenumber-js/issues/185\n // Detect such numbers.\n var numberWithoutIDD = stripIddPrefix(digits, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata);\n if (numberWithoutIDD !== undefined && numberWithoutIDD !== digits) {\n // If an IDD prefix was stripped then convert the IDD-prefixed number\n // to international number for subsequent parsing.\n state.update({\n IDDPrefix: digits.slice(0, digits.length - numberWithoutIDD.length)\n });\n this.startInternationalNumber(state, {\n country: undefined,\n callingCode: undefined\n });\n return true;\n }\n }\n }, {\n key: \"fixMissingPlus\",\n value: function fixMissingPlus(state) {\n if (!state.international) {\n var _extractCountryCallin2 = extractCountryCallingCodeFromInternationalNumberWithoutPlusSign(state.digits, state.country, this.defaultCountry, this.defaultCallingCode, this.metadata.metadata),\n newCallingCode = _extractCountryCallin2.countryCallingCode;\n if (newCallingCode) {\n state.update({\n missingPlus: true\n });\n this.startInternationalNumber(state, {\n country: state.country,\n callingCode: newCallingCode\n });\n return true;\n }\n }\n }\n }, {\n key: \"startInternationalNumber\",\n value: function startInternationalNumber(state, _ref3) {\n var country = _ref3.country,\n callingCode = _ref3.callingCode;\n state.startInternationalNumber(country, callingCode);\n // If a national (significant) number has been extracted before, reset it.\n if (state.nationalSignificantNumber) {\n state.resetNationalSignificantNumber();\n this.onNationalSignificantNumberChange();\n this.hasExtractedNationalSignificantNumber = undefined;\n }\n }\n }, {\n key: \"extractCallingCodeAndNationalSignificantNumber\",\n value: function extractCallingCodeAndNationalSignificantNumber(state) {\n if (this.extractCountryCallingCode(state)) {\n // `this.extractCallingCode()` is currently called when the number\n // couldn't be formatted during the standard procedure.\n // Normally, the national prefix would be re-extracted\n // for an international number if such number couldn't be formatted,\n // but since it's already not able to be formatted,\n // there won't be yet another retry, so also extract national prefix here.\n this.extractNationalSignificantNumber(state.getNationalDigits(), function (stateUpdate) {\n return state.update(stateUpdate);\n });\n }\n }\n }]);\n}();\n/**\r\n * Extracts formatted phone number from text (if there's any).\r\n * @param {string} text\r\n * @return {string} [formattedPhoneNumber]\r\n */\nexport { AsYouTypeParser as default };\nfunction extractFormattedPhoneNumber(text) {\n // Attempt to extract a possible number from the string passed in.\n var startsAt = text.search(VALID_FORMATTED_PHONE_NUMBER_PART);\n if (startsAt < 0) {\n return;\n }\n // Trim everything to the left of the phone number.\n text = text.slice(startsAt);\n // Trim the `+`.\n var hasPlus;\n if (text[0] === '+') {\n hasPlus = true;\n text = text.slice('+'.length);\n }\n // Trim everything to the right of the phone number.\n text = text.replace(AFTER_PHONE_NUMBER_DIGITS_END_PATTERN, '');\n // Re-add the previously trimmed `+`.\n if (hasPlus) {\n text = '+' + text;\n }\n return text;\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nfunction _extractFormattedDigitsAndPlus(text) {\n // Extract a formatted phone number part from text.\n var extractedNumber = extractFormattedPhoneNumber(text) || '';\n // Trim a `+`.\n if (extractedNumber[0] === '+') {\n return [extractedNumber.slice('+'.length), true];\n }\n return [extractedNumber];\n}\n\n/**\r\n * Extracts formatted phone number digits (and a `+`) from text (if there're any).\r\n * @param {string} text\r\n * @return {any[]}\r\n */\nexport function extractFormattedDigitsAndPlus(text) {\n var _extractFormattedDigi3 = _extractFormattedDigitsAndPlus(text),\n _extractFormattedDigi4 = _slicedToArray(_extractFormattedDigi3, 2),\n formattedDigits = _extractFormattedDigi4[0],\n hasPlus = _extractFormattedDigi4[1];\n // If the extracted phone number part\n // can possibly be a part of some valid phone number\n // then parse phone number characters from a formatted phone number.\n if (!VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN.test(formattedDigits)) {\n formattedDigits = '';\n }\n return [formattedDigits, hasPlus];\n}\n//# sourceMappingURL=AsYouTypeParser.js.map","function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\nfunction _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); }\nfunction _unsupportedIterableToArray(r, a) { if (r) { if (\"string\" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return \"Object\" === t && r.constructor && (t = r.constructor.name), \"Map\" === t || \"Set\" === t ? Array.from(r) : \"Arguments\" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }\nfunction _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }\nfunction _iterableToArrayLimit(r, l) { var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }\nfunction _arrayWithHoles(r) { if (Array.isArray(r)) return r; }\nfunction _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError(\"Cannot call a class as a function\"); }\nfunction _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, \"value\" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }\nfunction _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, \"prototype\", { writable: !1 }), e; }\nfunction _toPropertyKey(t) { var i = _toPrimitive(t, \"string\"); return \"symbol\" == _typeof(i) ? i : i + \"\"; }\nfunction _toPrimitive(t, r) { if (\"object\" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || \"default\"); if (\"object\" != _typeof(i)) return i; throw new TypeError(\"@@toPrimitive must return a primitive value.\"); } return (\"string\" === r ? String : Number)(t); }\nimport Metadata from './metadata.js';\nimport PhoneNumber from './PhoneNumber.js';\nimport AsYouTypeState from './AsYouTypeState.js';\nimport AsYouTypeFormatter, { DIGIT_PLACEHOLDER } from './AsYouTypeFormatter.js';\nimport AsYouTypeParser, { extractFormattedDigitsAndPlus } from './AsYouTypeParser.js';\nimport getCountryByCallingCode from './helpers/getCountryByCallingCode.js';\nimport getCountryByNationalNumber from './helpers/getCountryByNationalNumber.js';\nimport isObject from './helpers/isObject.js';\nvar USE_NON_GEOGRAPHIC_COUNTRY_CODE = false;\nvar AsYouType = /*#__PURE__*/function () {\n /**\r\n * @param {(string|object)?} [optionsOrDefaultCountry] - The default country used for parsing non-international phone numbers. Can also be an `options` object.\r\n * @param {Object} metadata\r\n */\n function AsYouType(optionsOrDefaultCountry, metadata) {\n _classCallCheck(this, AsYouType);\n this.metadata = new Metadata(metadata);\n var _this$getCountryAndCa = this.getCountryAndCallingCode(optionsOrDefaultCountry),\n _this$getCountryAndCa2 = _slicedToArray(_this$getCountryAndCa, 2),\n defaultCountry = _this$getCountryAndCa2[0],\n defaultCallingCode = _this$getCountryAndCa2[1];\n // `this.defaultCountry` and `this.defaultCallingCode` aren't required to be in sync.\n // For example, `this.defaultCountry` could be `\"AR\"` and `this.defaultCallingCode` could be `undefined`.\n // So `this.defaultCountry` and `this.defaultCallingCode` are totally independent.\n this.defaultCountry = defaultCountry;\n this.defaultCallingCode = defaultCallingCode;\n this.reset();\n }\n return _createClass(AsYouType, [{\n key: \"getCountryAndCallingCode\",\n value: function getCountryAndCallingCode(optionsOrDefaultCountry) {\n // Set `defaultCountry` and `defaultCallingCode` options.\n var defaultCountry;\n var defaultCallingCode;\n // Turns out `null` also has type \"object\". Weird.\n if (optionsOrDefaultCountry) {\n if (isObject(optionsOrDefaultCountry)) {\n defaultCountry = optionsOrDefaultCountry.defaultCountry;\n defaultCallingCode = optionsOrDefaultCountry.defaultCallingCode;\n } else {\n defaultCountry = optionsOrDefaultCountry;\n }\n }\n if (defaultCountry && !this.metadata.hasCountry(defaultCountry)) {\n defaultCountry = undefined;\n }\n if (defaultCallingCode) {\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n if (this.metadata.isNonGeographicCallingCode(defaultCallingCode)) {\n defaultCountry = '001';\n }\n }\n }\n return [defaultCountry, defaultCallingCode];\n }\n\n /**\r\n * Inputs \"next\" phone number characters.\r\n * @param {string} text\r\n * @return {string} Formatted phone number characters that have been input so far.\r\n */\n }, {\n key: \"input\",\n value: function input(text) {\n var _this$parser$input = this.parser.input(text, this.state),\n digits = _this$parser$input.digits,\n justLeadingPlus = _this$parser$input.justLeadingPlus;\n if (justLeadingPlus) {\n this.formattedOutput = '+';\n } else if (digits) {\n this.determineTheCountryIfNeeded();\n // Match the available formats by the currently available leading digits.\n if (this.state.nationalSignificantNumber) {\n this.formatter.narrowDownMatchingFormats(this.state);\n }\n var formattedNationalNumber;\n if (this.metadata.hasSelectedNumberingPlan()) {\n formattedNationalNumber = this.formatter.format(digits, this.state);\n }\n if (formattedNationalNumber === undefined) {\n // See if another national (significant) number could be re-extracted.\n if (this.parser.reExtractNationalSignificantNumber(this.state)) {\n this.determineTheCountryIfNeeded();\n // If it could, then re-try formatting the new national (significant) number.\n var nationalDigits = this.state.getNationalDigits();\n if (nationalDigits) {\n formattedNationalNumber = this.formatter.format(nationalDigits, this.state);\n }\n }\n }\n this.formattedOutput = formattedNationalNumber ? this.getFullNumber(formattedNationalNumber) : this.getNonFormattedNumber();\n }\n return this.formattedOutput;\n }\n }, {\n key: \"reset\",\n value: function reset() {\n var _this = this;\n this.state = new AsYouTypeState({\n onCountryChange: function onCountryChange(country) {\n // Before version `1.6.0`, the official `AsYouType` formatter API\n // included a `.country` property on an `AsYouType` instance.\n // Since that property (along with the others) have been moved to\n // `this.state`, `this.country` property is emulated for compatibility\n // with the old versions.\n _this.country = country;\n },\n onCallingCodeChange: function onCallingCodeChange(callingCode, country) {\n _this.metadata.selectNumberingPlan(country, callingCode);\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n _this.parser.reset(_this.metadata.numberingPlan);\n }\n });\n this.formatter = new AsYouTypeFormatter({\n state: this.state,\n metadata: this.metadata\n });\n this.parser = new AsYouTypeParser({\n defaultCountry: this.defaultCountry,\n defaultCallingCode: this.defaultCallingCode,\n metadata: this.metadata,\n state: this.state,\n onNationalSignificantNumberChange: function onNationalSignificantNumberChange() {\n _this.determineTheCountryIfNeeded();\n _this.formatter.reset(_this.metadata.numberingPlan, _this.state);\n }\n });\n this.state.reset({\n country: this.defaultCountry,\n callingCode: this.defaultCallingCode\n });\n this.formattedOutput = '';\n return this;\n }\n\n /**\r\n * Returns `true` if the phone number is being input in international format.\r\n * In other words, returns `true` if and only if the parsed phone number starts with a `\"+\"`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isInternational\",\n value: function isInternational() {\n return this.state.international;\n }\n\n /**\r\n * Returns the \"calling code\" part of the phone number when it's being input\r\n * in an international format.\r\n * If no valid calling code has been entered so far, returns `undefined`.\r\n * @return {string} [callingCode]\r\n */\n }, {\n key: \"getCallingCode\",\n value: function getCallingCode() {\n // If the number is being input in national format and some \"default calling code\"\n // has been passed to `AsYouType` constructor, then `this.state.callingCode`\n // is equal to that \"default calling code\".\n //\n // If the number is being input in national format and no \"default calling code\"\n // has been passed to `AsYouType` constructor, then returns `undefined`,\n // even if a \"default country\" has been passed to `AsYouType` constructor.\n //\n if (this.isInternational()) {\n return this.state.callingCode;\n }\n }\n\n // A legacy alias.\n }, {\n key: \"getCountryCallingCode\",\n value: function getCountryCallingCode() {\n return this.getCallingCode();\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * Returns `undefined` if no phone number has been input yet.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"getCountry\",\n value: function getCountry() {\n var digits = this.state.digits;\n // Return `undefined` if no digits have been input yet.\n if (digits) {\n return this._getCountry();\n }\n }\n\n /**\r\n * Returns a two-letter country code of the phone number.\r\n * Returns `undefined` for \"non-geographic\" phone numbering plans.\r\n * @return {string} [country]\r\n */\n }, {\n key: \"_getCountry\",\n value: function _getCountry() {\n var country = this.state.country;\n /* istanbul ignore if */\n if (USE_NON_GEOGRAPHIC_COUNTRY_CODE) {\n // `AsYouType.getCountry()` returns `undefined`\n // for \"non-geographic\" phone numbering plans.\n if (country === '001') {\n return;\n }\n }\n return country;\n }\n }, {\n key: \"determineTheCountryIfNeeded\",\n value: function determineTheCountryIfNeeded() {\n // Suppose a user enters a phone number in international format,\n // and there're several countries corresponding to that country calling code,\n // and a country has been derived from the number, and then\n // a user enters one more digit and the number is no longer\n // valid for the derived country, so the country should be re-derived\n // on every new digit in those cases.\n //\n // If the phone number is being input in national format,\n // then it could be a case when `defaultCountry` wasn't specified\n // when creating `AsYouType` instance, and just `defaultCallingCode` was specified,\n // and that \"calling code\" could correspond to a \"non-geographic entity\",\n // or there could be several countries corresponding to that country calling code.\n // In those cases, `this.country` is `undefined` and should be derived\n // from the number. Again, if country calling code is ambiguous, then\n // `this.country` should be re-derived with each new digit.\n //\n if (!this.state.country || this.isCountryCallingCodeAmbiguous()) {\n this.determineTheCountry();\n }\n }\n\n // Prepends `+CountryCode ` in case of an international phone number\n }, {\n key: \"getFullNumber\",\n value: function getFullNumber(formattedNationalNumber) {\n var _this2 = this;\n if (this.isInternational()) {\n var prefix = function prefix(text) {\n return _this2.formatter.getInternationalPrefixBeforeCountryCallingCode(_this2.state, {\n spacing: text ? true : false\n }) + text;\n };\n var callingCode = this.state.callingCode;\n if (!callingCode) {\n return prefix(\"\".concat(this.state.getDigitsWithoutInternationalPrefix()));\n }\n if (!formattedNationalNumber) {\n return prefix(callingCode);\n }\n return prefix(\"\".concat(callingCode, \" \").concat(formattedNationalNumber));\n }\n return formattedNationalNumber;\n }\n }, {\n key: \"getNonFormattedNationalNumberWithPrefix\",\n value: function getNonFormattedNationalNumberWithPrefix() {\n var _this$state = this.state,\n nationalSignificantNumber = _this$state.nationalSignificantNumber,\n prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix = _this$state.prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix,\n nationalPrefix = _this$state.nationalPrefix;\n var number = nationalSignificantNumber;\n var prefix = prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix || nationalPrefix;\n if (prefix) {\n number = prefix + number;\n }\n return number;\n }\n }, {\n key: \"getNonFormattedNumber\",\n value: function getNonFormattedNumber() {\n var nationalSignificantNumberIsModified = this.state.nationalSignificantNumberIsModified;\n return this.getFullNumber(nationalSignificantNumberIsModified ? this.state.getNationalDigits() : this.getNonFormattedNationalNumberWithPrefix());\n }\n }, {\n key: \"getNonFormattedTemplate\",\n value: function getNonFormattedTemplate() {\n var number = this.getNonFormattedNumber();\n if (number) {\n return number.replace(/[\\+\\d]/g, DIGIT_PLACEHOLDER);\n }\n }\n }, {\n key: \"isCountryCallingCodeAmbiguous\",\n value: function isCountryCallingCodeAmbiguous() {\n var callingCode = this.state.callingCode;\n var countryCodes = this.metadata.getCountryCodesForCallingCode(callingCode);\n return countryCodes && countryCodes.length > 1;\n }\n\n // Determines the exact country of the phone number\n // entered so far based on the country phone code\n // and the national phone number.\n }, {\n key: \"determineTheCountry\",\n value: function determineTheCountry() {\n this.state.setCountry(getCountryByCallingCode(this.isInternational() ? this.state.callingCode : this.defaultCallingCode, {\n nationalNumber: this.state.nationalSignificantNumber,\n metadata: this.metadata\n }));\n }\n\n /**\r\n * Returns a E.164 phone number value for the user's input.\r\n *\r\n * For example, for country `\"US\"` and input `\"(222) 333-4444\"`\r\n * it will return `\"+12223334444\"`.\r\n *\r\n * For international phone number input, it will also auto-correct\r\n * some minor errors such as using a national prefix when writing\r\n * an international phone number. For example, if the user inputs\r\n * `\"+44 0 7400 000000\"` then it will return an auto-corrected\r\n * `\"+447400000000\"` phone number value.\r\n *\r\n * Will return `undefined` if no digits have been input,\r\n * or when inputting a phone number in national format and no\r\n * default country or default \"country calling code\" have been set.\r\n *\r\n * @return {string} [value]\r\n */\n }, {\n key: \"getNumberValue\",\n value: function getNumberValue() {\n var _this$state2 = this.state,\n digits = _this$state2.digits,\n callingCode = _this$state2.callingCode,\n country = _this$state2.country,\n nationalSignificantNumber = _this$state2.nationalSignificantNumber;\n\n // Will return `undefined` if no digits have been input.\n if (!digits) {\n return;\n }\n if (this.isInternational()) {\n if (callingCode) {\n return '+' + callingCode + nationalSignificantNumber;\n } else {\n return '+' + digits;\n }\n } else {\n if (country || callingCode) {\n var callingCode_ = country ? this.metadata.countryCallingCode() : callingCode;\n return '+' + callingCode_ + nationalSignificantNumber;\n }\n }\n }\n\n /**\r\n * Returns an instance of `PhoneNumber` class.\r\n * Will return `undefined` if no national (significant) number\r\n * digits have been entered so far, or if no `defaultCountry` has been\r\n * set and the user enters a phone number not in international format.\r\n */\n }, {\n key: \"getNumber\",\n value: function getNumber() {\n var _this$state3 = this.state,\n nationalSignificantNumber = _this$state3.nationalSignificantNumber,\n carrierCode = _this$state3.carrierCode,\n callingCode = _this$state3.callingCode;\n\n // `this._getCountry()` is basically same as `this.state.country`\n // with the only change that it return `undefined` in case of a\n // \"non-geographic\" numbering plan instead of `\"001\"` \"internal use\" value.\n var country = this._getCountry();\n if (!nationalSignificantNumber) {\n return;\n }\n\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `country` could be `\"AR\"` and `callingCode` could be `undefined`.\n // So `country` and `callingCode` are totally independent.\n\n if (!country && !callingCode) {\n return;\n }\n\n // By default, if `defaultCountry` parameter was passed when\n // creating `AsYouType` instance, `state.country` is gonna be\n // that `defaultCountry`, which doesn't entirely conform with\n // `parsePhoneNumber()`'s behavior where it attempts to determine\n // the country more precisely in cases when multiple countries\n // could correspond to the same `countryCallingCode`.\n // https://gitlab.com/catamphetamine/libphonenumber-js/-/issues/103#note_1417192969\n //\n // Because `AsYouType.getNumber()` method is supposed to be a 1:1\n // equivalent for `parsePhoneNumber(AsYouType.getNumberValue())`,\n // then it should also behave accordingly in cases of `country` ambiguity.\n // That's how users of this library would expect it to behave anyway.\n //\n if (country) {\n if (country === this.defaultCountry) {\n // `state.country` and `state.callingCode` aren't required to be in sync.\n // For example, `state.country` could be `\"AR\"` and `state.callingCode` could be `undefined`.\n // So `state.country` and `state.callingCode` are totally independent.\n var metadata = new Metadata(this.metadata.metadata);\n metadata.selectNumberingPlan(country);\n var _callingCode = metadata.numberingPlan.callingCode();\n var ambiguousCountries = this.metadata.getCountryCodesForCallingCode(_callingCode);\n if (ambiguousCountries.length > 1) {\n var exactCountry = getCountryByNationalNumber(nationalSignificantNumber, {\n countries: ambiguousCountries,\n metadata: this.metadata.metadata\n });\n if (exactCountry) {\n country = exactCountry;\n }\n }\n }\n }\n var phoneNumber = new PhoneNumber(country || callingCode, nationalSignificantNumber, this.metadata.metadata);\n if (carrierCode) {\n phoneNumber.carrierCode = carrierCode;\n }\n // Phone number extensions are not supported by \"As You Type\" formatter.\n return phoneNumber;\n }\n\n /**\r\n * Returns `true` if the phone number is \"possible\".\r\n * Is just a shortcut for `PhoneNumber.isPossible()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isPossible\",\n value: function isPossible() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isPossible();\n }\n\n /**\r\n * Returns `true` if the phone number is \"valid\".\r\n * Is just a shortcut for `PhoneNumber.isValid()`.\r\n * @return {boolean}\r\n */\n }, {\n key: \"isValid\",\n value: function isValid() {\n var phoneNumber = this.getNumber();\n if (!phoneNumber) {\n return false;\n }\n return phoneNumber.isValid();\n }\n\n /**\r\n * @deprecated\r\n * This method is used in `react-phone-number-input/source/input-control.js`\r\n * in versions before `3.0.16`.\r\n */\n }, {\n key: \"getNationalNumber\",\n value: function getNationalNumber() {\n return this.state.nationalSignificantNumber;\n }\n\n /**\r\n * Returns the phone number characters entered by the user.\r\n * @return {string}\r\n */\n }, {\n key: \"getChars\",\n value: function getChars() {\n return (this.state.international ? '+' : '') + this.state.digits;\n }\n\n /**\r\n * Returns the template for the formatted phone number.\r\n * @return {string}\r\n */\n }, {\n key: \"getTemplate\",\n value: function getTemplate() {\n return this.formatter.getTemplate(this.state) || this.getNonFormattedTemplate() || '';\n }\n }]);\n}();\nexport { AsYouType as default };\n//# sourceMappingURL=AsYouType.js.map","// Importing from a \".js\" file is a workaround for Node.js \"ES Modules\"\r\n// importing system which is even uncapable of importing \"*.json\" files.\r\nimport metadata from '../../metadata.mobile.json.js'\r\n\r\nimport { AsYouType as _AsYouType } from '../../core/index.js'\r\n\r\nexport function AsYouType(country) {\r\n\treturn _AsYouType.call(this, country, metadata)\r\n}\r\n\r\nAsYouType.prototype = Object.create(_AsYouType.prototype, {})\r\nAsYouType.prototype.constructor = AsYouType","import PhoneNumber from './PhoneNumber.js';\nexport default function getExampleNumber(country, examples, metadata) {\n if (examples[country]) {\n return new PhoneNumber(country, examples[country], metadata);\n }\n}\n//# sourceMappingURL=getExampleNumber.js.map","import withMetadataArgument from './withMetadataArgument.js'\r\nimport { getExampleNumber as _getExampleNumber } from '../../core/index.js'\r\n\r\nexport function getExampleNumber() {\r\n\treturn withMetadataArgument(_getExampleNumber, arguments)\r\n}"],"names":["_typeof","o","Symbol","iterator","constructor","prototype","_defineProperties","e","r","t","length","enumerable","configurable","writable","Object","defineProperty","_toPropertyKey","key","i","toPrimitive","call","TypeError","String","Number","_toPrimitive","AsYouTypeState","_ref","onCountryChange","onCallingCodeChange","a","n","_classCallCheck","this","value","_ref2","country","callingCode","international","missingPlus","IDDPrefix","undefined","digits","resetNationalSignificantNumber","initCountryAndCallingCode","nationalSignificantNumber","getNationalDigits","nationalSignificantNumberIsModified","nationalPrefix","carrierCode","prefixBeforeNationalSignificantNumberThatIsNotNationalPrefix","properties","_i","_Object$keys","keys","setCountry","setCallingCode","nextDigits","slice","_createForOfIteratorHelperLoose","next","bind","Array","isArray","_arrayLikeToArray","toString","name","from","test","_unsupportedIterableToArray","done","DIGIT_PLACEHOLDER","DIGIT_PLACEHOLDER_MATCHER","RegExp","repeat","string","times","result","cutAndStripNonPairedParens","cutBeforeIndex","dangling_braces","push","pop","start","cleared_string","_dangling_braces","index","stripNonPairedParens","formatCompleteNumber","state","format","metadata","shouldTryNationalPrefixFormattingRule","getSeparatorAfterNationalPrefix","concat","pattern","formattedNumber","formatNationalNumber","useNationalPrefixFormattingRule","formatNationalNumberWithAndWithoutNationalPrefixFormattingRule","_ref3","formattedNationalNumber","formatNationalNumberUsingFormat","useInternationalFormat","withNationalPrefix","parseDigits","isValidFormattedNationalNumber","PatternParser","context","or","instructions","parsePattern","Error","_this$context$","branches","op","args","expandSingleElementArray","match","OPERATOR","operator","before","rightPart","startContext","getContext","endContext","oneOfSet","parseOneOfSet","ILLEGAL_CHARACTER_REGEXP","split","values","prevValue","charCodeAt","nextValue","fromCharCode","array","PatternMatcher","matchTree","parse","allowOverflow","arguments","_match","matchedChars","overflow","characters","tree","last","characterString","join","indexOf","partialMatch","restCharacters","JSON","stringify","_step","_iterator","_result","_step2","_iterator2","_char","LONGEST_DUMMY_PHONE_NUMBER","NATIONAL_PREFIX_SEPARATORS_PATTERN","CREATE_CHARACTER_CLASS_PATTERN","CREATE_STANDALONE_DIGIT_PATTERN","NON_ALTERING_FORMAT_REG_EXP","AsYouTypeFormatter","resetFormat","chosenFormat","template","nationalNumberTemplate","populatedNationalNumberTemplate","populatedNationalNumberTemplatePosition","numberingPlan","isNANP","matchingFormats","formats","narrowDownMatchingFormats","_this","checkNumberLength","_format","formattedCompleteNumber","setNationalNumberTemplate","replace","lastIndexOf","formatNationalNumberWithNextDigits","previouslyChosenFormat","newlyChosenFormat","chooseFormat","formatNextNationalNumberDigits","_this2","leadingDigits","leadingDigitsPatternIndex","filter","formatSuits","formatMatches","usesNationalPrefix","nationalPrefixIsOptionalWhenFormattingInNationalFormat","nationalPrefixIsMandatoryWhenFormattingInNationalFormat","leadingDigitsPatternsCount","leadingDigitsPatterns","Math","min","leadingDigitsPattern","error","console","internationalFormat","_this3","_loop","getFormatFormat","createTemplateForFormat","_","getTemplateForFormat","nationalPrefixFormattingRule","options","spacing","internationalPrefix","getInternationalPrefixBeforeCountryCallingCode","getDigitsWithoutInternationalPrefix","_ref4","strictPattern","nationalNumberDummyDigits","nationalPrefixIncludedInTemplate","numberFormat","numberFormatWithNationalPrefix","applyInternationalSeparatorStyle","position","digit","search","populateTemplateWithDigits","_ref5","_slicedToArray","_arrayWithHoles","l","u","f","_iterableToArrayLimit","_nonIterableRest","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART","VALID_FORMATTED_PHONE_NUMBER_DIGITS_PART_PATTERN","VALID_FORMATTED_PHONE_NUMBER_PART","AFTER_PHONE_NUMBER_DIGITS_END_PATTERN","COMPLEX_NATIONAL_PREFIX","AsYouTypeParser","defaultCountry","defaultCallingCode","onNationalSignificantNumberChange","text","justLeadingPlus","_extractFormattedDigi","_extractFormattedDigi3","extractedNumber","hasPlus","startsAt","extractFormattedPhoneNumber","_extractFormattedDigitsAndPlus","_extractFormattedDigi4","formattedDigits","extractFormattedDigitsAndPlus","_extractFormattedDigi2","startInternationalNumber","inputDigits","hasReceivedThreeLeadingDigits","appendDigits","extractIddPrefix","isWaitingForCountryCallingCode","extractCountryCallingCode","appendNationalSignificantNumberDigits","hasExtractedNationalSignificantNumber","extractNationalSignificantNumber","stateUpdate","update","_extractCountryCallin","countryCallingCode","number","hasSelectedNumberingPlan","nationalPrefixForParsing","_nationalPrefixForParsing","couldPossiblyExtractAnotherNationalSignificantNumber","nationalDigits","setState","_extractNationalNumbe","extractNationalNumberFromPossiblyIncompleteNumber","nationalNumber","onExtractedNationalNumber","prevNationalSignificantNumber","_extractNationalNumbe2","nationalSignificantNumberIndex","prefixBeforeNationalNumber","extractAnotherNationalSignificantNumber","fixMissingPlus","extractCallingCodeAndNationalSignificantNumber","numberWithoutIDD","stripIddPrefix","newCallingCode","extractCountryCallingCodeFromInternationalNumberWithoutPlusSign","AsYouType","optionsOrDefaultCountry","_this$getCountryAndCa2","getCountryAndCallingCode","reset","isObject","hasCountry","_this$parser$input","parser","input","formattedOutput","determineTheCountryIfNeeded","formatter","reExtractNationalSignificantNumber","getFullNumber","getNonFormattedNumber","selectNumberingPlan","isInternational","getCallingCode","_getCountry","isCountryCallingCodeAmbiguous","determineTheCountry","prefix","_this$state","getNonFormattedNationalNumberWithPrefix","countryCodes","getCountryCodesForCallingCode","getCountryByCallingCode","_this$state2","_this$state3","_callingCode","ambiguousCountries","exactCountry","getCountryByNationalNumber","countries","phoneNumber","PhoneNumber","getNumber","isPossible","isValid","getTemplate","getNonFormattedTemplate","create","getExampleNumber","examples","withMetadataArgument"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/371.prod.js b/umd/371.prod.js new file mode 100644 index 00000000..ea06fbf8 --- /dev/null +++ b/umd/371.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[371],{6371:function(e,t,n){n.r(t);var i=n(1594),o=n.n(i),s=n(8181),r=n(1725),a=n(8589);const l=(0,s.defineMessages)({unrecognized_video_format:{id:"unrecognized_video_format",defaultMessage:[{type:0,value:"Format of this video is not recognized"}]}});class d extends o().PureComponent{constructor(e){super(e),this.videoRef=o().createRef(),this.handleSendVideo=this.handleSendVideo.bind(this),this.handleKeyDown=this.handleKeyDown.bind(this)}componentDidMount(){document.addEventListener("keydown",this.handleKeyDown)}componentWillUnmount(){document.removeEventListener("keydown",this.handleKeyDown)}handleKeyDown(e){this.props.onSendMessage||(e.preventDefault(),"Escape"===e.key&&this.props.onClose())}handleSendVideo(e){this.props.onClose();const t={width:this.videoRef.current.videoWidth,height:this.videoRef.current.videoHeight,duration:1e3*this.videoRef.current.duration|0,mime:this.props.content.mime,name:this.props.content.filename};if(0==t.width||0==t.height)return void this.props.onError(this.props.intl.formatMessage(l.unrecognized_video_format),"err");const n=document.createElement("canvas");n.width=t.width,n.height=t.height;const i=n.getContext("2d");i.drawImage(this.videoRef.current,0,0,n.width,n.height),i.canvas.toBlob(n=>this.props.onSendMessage(e,this.props.content.blob,n,t),"image/jpeg",.75)}render(){if(!this.props.content)return null;const e=this.props.content.width||"-",t=this.props.content.height||"-",n=this.props.onSendMessage?"nodownload":"",i=!this.props.onSendMessage;return o().createElement("div",{id:"image-preview"},o().createElement("div",{id:"preview-caption-panel"},o().createElement("span",null,this.props.content.filename),o().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onClose()}},o().createElement("i",{className:"material-icons gray"},"close"))),o().createElement("div",{id:"image-preview-container"},o().createElement("video",{className:"image-preview",controls:!0,controlsList:n,disablePictureInPicture:!0,ref:this.videoRef,autoPlay:i,src:this.props.tinode.authorizeURL(this.props.content.url),poster:this.props.content.preview,alt:this.props.content.filename})),this.props.onSendMessage?o().createElement(r.A,{messagePrompt:"add_image_caption",acceptBlank:!0,tinode:this.props.tinode,reply:this.props.reply,onCancelReply:this.props.onCancelReply,onSendMessage:this.handleSendVideo,onError:this.props.onError}):o().createElement("div",{id:"image-preview-footer"},o().createElement("div",null,o().createElement("div",null,o().createElement("b",null,o().createElement(s.FormattedMessage,{id:"label_file_name",defaultMessage:[{type:0,value:"File name:"}]}))),o().createElement("div",null,o().createElement("span",{title:this.props.content.filename},this.props.content.filename))),o().createElement("div",null,o().createElement("div",null,o().createElement("b",null,o().createElement(s.FormattedMessage,{id:"label_content_type",defaultMessage:[{type:0,value:"Content type:"}]}))),o().createElement("div",null,this.props.content.type)),o().createElement("div",null,o().createElement("div",null,o().createElement("b",null,o().createElement(s.FormattedMessage,{id:"label_size",defaultMessage:[{type:0,value:"Size:"}]}))),o().createElement("div",null,e," × ",t," px; ",(0,a.lX)(this.props.content.size)))))}}t.default=(0,s.injectIntl)(d)}}]); +//# sourceMappingURL=371.prod.js.map \ No newline at end of file diff --git a/umd/371.prod.js.map b/umd/371.prod.js.map new file mode 100644 index 00000000..8c5568b3 --- /dev/null +++ b/umd/371.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"371.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/video-preview.jsx"],"sourcesContent":["import React from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport SendMessage from './send-message.jsx';\n\nimport { bytesToHumanSize } from '../lib/strformat.js';\n\nconst messages = defineMessages({\n unrecognized_video_format: {\n id: 'unrecognized_video_format',\n defaultMessage: 'Format of this video is not recognized',\n description: 'Error message when uploaded video is invalid',\n }\n});\n\nclass VideoPreview extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.videoRef = React.createRef();\n\n this.handleSendVideo = this.handleSendVideo.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n componentDidMount() {\n document.addEventListener('keydown', this.handleKeyDown);\n }\n\n componentWillUnmount() {\n document.removeEventListener('keydown', this.handleKeyDown);\n }\n\n handleKeyDown(e) {\n if (this.props.onSendMessage) {\n return;\n }\n\n e.preventDefault();\n if (e.key === 'Escape') {\n this.props.onClose();\n }\n }\n\n handleSendVideo(caption) {\n this.props.onClose();\n const params = {\n width: this.videoRef.current.videoWidth,\n height: this.videoRef.current.videoHeight,\n duration: (this.videoRef.current.duration * 1000) | 0,\n mime: this.props.content.mime,\n name: this.props.content.filename\n }\n\n if (params.width == 0 || params.height == 0) {\n this.props.onError(this.props.intl.formatMessage(messages.unrecognized_video_format), 'err');\n return;\n }\n\n // Capture screen from a video.\n const canvas = document.createElement('canvas');\n canvas.width = params.width;\n canvas.height = params.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(this.videoRef.current, 0, 0, canvas.width, canvas.height);\n ctx.canvas.toBlob(\n preview => this.props.onSendMessage(caption, this.props.content.blob, preview, params),\n 'image/jpeg', 0.75\n );\n }\n\n render() {\n if (!this.props.content) {\n return null;\n }\n\n const width = this.props.content.width || '-';\n const height = this.props.content.height || '-';\n\n const controlist = this.props.onSendMessage ? 'nodownload' : '';\n const autoPlay = !this.props.onSendMessage;\n\n return (\n
    \n
    \n {this.props.content.filename}\n {e.preventDefault(); this.props.onClose();}}>close\n
    \n
    \n \n
    \n {this.props.onSendMessage ?\n \n :\n
    \n
    \n
    \n
    {this.props.content.filename}
    \n
    \n
    \n
    \n
    {this.props.content.type}
    \n
    \n
    \n
    \n
    {width} × {height} px; {bytesToHumanSize(this.props.content.size)}
    \n
    \n
    }\n
    \n );\n }\n};\n\nexport default injectIntl(VideoPreview);\n"],"names":["messages","defineMessages","unrecognized_video_format","id","defaultMessage","VideoPreview","React","constructor","props","super","this","videoRef","handleSendVideo","bind","handleKeyDown","componentDidMount","document","addEventListener","componentWillUnmount","removeEventListener","e","onSendMessage","preventDefault","key","onClose","caption","params","width","current","videoWidth","height","videoHeight","duration","mime","content","name","filename","onError","intl","formatMessage","canvas","createElement","ctx","getContext","drawImage","toBlob","preview","blob","render","controlist","autoPlay","href","onClick","className","controls","controlsList","disablePictureInPicture","ref","src","tinode","authorizeURL","url","poster","alt","SendMessage","messagePrompt","acceptBlank","reply","onCancelReply","FormattedMessage","title","type","bytesToHumanSize","size","injectIntl"],"ignoreList":[],"sourceRoot":""} \ No newline at end of file diff --git a/umd/399.prod.js b/umd/399.prod.js index eab945a8..fdfd4835 100644 --- a/umd/399.prod.js +++ b/umd/399.prod.js @@ -1 +1 @@ -"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[399],{3399:function(e){e.exports=JSON.parse('{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats
    ¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User\'s Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","password_reset_success":"Password reset successfully","scan_qr_code":"Scan QR Code","self_topic_comment":"Notes, messages, links, files saved for posterity","self_topic_name":"Saved messages","message_not_found":"message not found","message_deleted":"message deleted","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(already taken)","alias_invalid":"(invalid)","label_alias_edit":"Alias","select_country":"Select country","text_copied":"Copied to clipboard","color_schema_dark":"Dark","color_schema_light":"Light","color_schema_system":"System default","label_color_schema":"Theme:","label_text_size":"Text size:","incognito_mode_description":"Hide your online status and typing indicators.","send_command":"Send on {key}","send_command_explained":"Press Enter for new line","send_plain":"Send on Enter","send_plain_explained":"Press Shift + Enter for new line","sidepanel_title_acc_general":"General","label_keyboard":"Keyboard:","pin_chat":"Pin","unpin_chat":"Unpin","subscriber_count":"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}","label_member_count":"Members:","label_subscriber_count":"Subscribers:","member_count":"{count, plural, one {{count, number} member} other {{count, number} members}}","tabtitle_image":"image","tabtitle_pattern":"pattern","button_restore":"Restore default","wallpapers":"Wallpapers","label_blur_wallpaper":"Blur:","label_scan_id":"Scan my ID:"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[399],{3399:function(e){e.exports=JSON.parse('{"action_block_contact":"Block Contact","action_cancel":"cancel","action_clear_messages":"Clear Messages","action_delete_messages":"Clear Messages for All","action_leave_chat":"Leave Conversation","action_report_chat":"Report Conversation","archived_contacts":"Archived contacts ({count})","badge_danger":"Untrustworthy","badge_owner":"owner","badge_staff":"Staff-managed","badge_verified":"Verified/official","badge_you":"you","block_contact_warning":"Are you sure you want to block this contact?","blocked_contacts_link":"Blocked contacts ({count})","button_add_members":"Add members","button_cancel":"Cancel","button_confirm":"Confirm","button_create":"Create","button_delete_account":"Delete account","button_edit":"Edit","button_logout":"Logout","button_ok":"OK","button_reset":"Reset","button_send_request":"Send request","button_sign_in":"Sign in","button_sign_up":"Sign up","button_subscribe":"Subscribe","button_update":"Update","cannot_initiate_file_upload":"Cannot initiate file upload.","channel":"channel","channel_prompt":"This is a channel","chat_invitation":"You are invited to start a new chat. What would you like to do?","chat_invitation_accept":"Accept","chat_invitation_block":"Block","chat_invitation_ignore":"Ignore","clear_messages_warning":"Are you sure you want to clear all messages? It cannot be undone.","code_doesnot_match":"Code does not match","contacts_not_found":"You have no chats\\n¯∖_(ツ)_/¯","contacts_not_found_short":"No contacts match \'\'{query}\'\'","credential_email_prompt":"Your registration email","delete_account":"Delete account","delete_account_warning":"Are you sure you want to delete your account? It cannot be undone.","delete_messages_warning":"Are you sure you want to delete all messages for everyone? It cannot be undone.","download_action":"download","drafty_attachment":"Attachment","drafty_form":"Form:","drafty_image":"Picture","email_dative":"email","email_prompt":"Email, e.g. jdoe@example.com","enable_peers_messaging":"Enable","enter_confirmation_code_prompt":"Confirmation code","error_invalid_id":"Invalid ID","file_attachment_too_large":"The file size {size} exceeds the {limit} limit.","forgot_password_link":"Forgot password?","full_name_prompt":"Full name, e.g. John Doe","granted_permissions":"Granted","group_has_no_members":"No members","group_user_id_prompt":"Group or User ID","image_caption_prompt":"Image caption","invalid_content":"invalid content","invalid_security_token":"Invalid security token","label_client":"Client:","label_content_type":"Content type:","label_default_access_mode":"Default access mode:","label_file_name":"File name:","label_group_members":"Group members:","label_incognito_mode":"Incognito mode:","label_message_sound":"Message sound:","label_muting_topic":"Muted:","label_other_user":"Other","label_password":"Password","label_permissions":"Permissions:","label_private":"Private comment","label_push_notifications":"Notification alerts:","label_push_notifications_disabled":"Notification alerts (requires HTTPS):","label_reset_password":"Send a password reset email:","label_sdk":"SDK:","label_server":"Server:","label_server_address":"Server address:","label_server_to_use":"Server to use:","label_size":"Size:","label_topic_name":"Name","label_user_contacts":"Contacts","label_user_id":"ID:","label_wire_transport":"Wire transport:","label_you":"You:","label_your_name":"Your name","label_your_permissions":"Your permissions:","last_seen_timestamp":"Last seen","leave_chat_warning":"Are you sure you want to leave this conversation?","link_contact_us":"Contact Us","link_privacy_policy":"Privacy Policy","link_terms_of_service":"Terms of Service","login_prompt":"Login","menu_item_archive_topic":"Archive","menu_item_block":"Block","menu_item_clear_messages":"Clear messages","menu_item_clear_messages_for_all":"Clear for All","menu_item_delete":"Delete","menu_item_delete_for_all":"Delete for All","menu_item_delete_topic":"Delete","menu_item_edit_permissions":"Edit permissions","menu_item_info":"Info","menu_item_member_delete":"Remove","menu_item_mute":"Mute","menu_item_reply":"Reply","menu_item_restore_topic":"Restore","menu_item_send_retry":"Retry","menu_item_unblock":"Unblock","menu_item_unmute":"Unmute","message_sending":"sending...","message_sending_failed":"failed","messages_not_readable":"no access to messages","messaging_disabled_prompt":"Messaging disabled","more_online_members":"+{overflow} more","new_message_prompt":"New message","new_password_placeholder":"Enter new password","no_connection":"No connection","no_contacts":"You have no contacts :-(","numeric_confirmation_code_prompt":"Numbers only","online_now":"online now","password_prompt":"Password","password_unchanged_prompt":"Unchanged","peers_messaging_disabled":"Peer\'s messaging is disabled.","permission_admin":"Approve ({val})","permission_delete":"Delete ({val})","permission_join":"Join ({val})","permission_owner":"Owner ({val})","permission_pres":"Get notified ({val})","permission_read":"Read ({val})","permission_share":"Share ({val})","permission_write":"Write ({val})","phone_dative":"phone","private_editing_placeholder":"Visible to you only","push_init_failed":"Failed to initialize push notifications","reconnect_countdown":"Disconnected. Reconnecting in {seconds}…","reconnect_now":"Try now","reload_update":"Reload","report_chat_warning":"Are you sure you want to block and report this conversation?","requested_permissions":"Requested","save_attachment":"save","search_for_contacts":"Use search to find contacts","search_no_results":"Search returned no results","search_placeholder":"List like email:alice@example.com, tel:17025550003...","sidepanel_title_acc_notifications":"Notifications","sidepanel_title_acc_support":"Support","sidepanel_title_account_settings":"Account Settings","sidepanel_title_archive":"Archived Chats","sidepanel_title_blocked":"Blocked Chats","sidepanel_title_cred":"Confirm Credentials","sidepanel_title_login":"Sign In","sidepanel_title_newtpk":"Start New Chat","sidepanel_title_register":"Create Account","sidepanel_title_reset":"Reset Password","sidepanel_title_settings":"Settings","stay_logged_in":"Stay logged in","tabtitle_find_user":"find","tabtitle_group_by_id":"by id","tabtitle_new_group":"new group","tags_editor_no_tags":"Add some tags","tags_not_found":"No tags defined. Add some.","title_all_contacts":"All Contacts","title_group_members":"Group Members","title_manage_tags":"Manage","title_not_found":"Not found","title_permissions":"Permissions","title_tag_manager":"Tags (search & discovery)","topic_block_warning":"Are you sure you want to block this conversation?","topic_delete_warning":"Are you sure you want to delete this conversation?","topic_name_editing_placeholder":"Freeform name of the group","unnamed_topic":"Unnamed","update_available":"Update available.","upload_finishing":"finishing...","user_not_found":"Not found","description_editing_placeholder":"Optional description","label_description":"Description","button_security":"Security","panel_title_crop":"Drag to Adjust","panel_title_general":"General","panel_title_members":"Members","panel_title_security":"Security","panel_title_info":"Info","permissions_anonymous":"Anonymous","permissions_authenticated":"Authenticated","topic_delete":"Delete Conversation","permissions_user":"User\'s Permissions","password_reset_email_sent":"An email with security code has been sent.","label_unarchive_topic":"Archived:","menu_item_forward":"Forward","forward_to":"Forward to","forward_to_search_placeholder":"Search contacts","label_new_password":"New password","drafty_unknown":"Unsupported","calls_incoming":"Incoming call","calls_outgoing":"Outgoing call","calls_you_label":"You","menu_item_video_call":"Video call","already_in_call":"You already in an ongoing call!","call_cancelled":"cancelled","call_missed":"missed","call_declined":"declined","call_disconnected":"disconnected","label_use_secure_connection":"Use secure connection","cred_confirmed_successfully":"Confirmed successfully","menu_item_edit":"Edit","editing_message":"Editing","message_edited_marker":", edited","icon_title_add_image":"Add image","icon_title_attach_file":"Attach file","icon_title_delete":"Delete","icon_title_pause":"Pause","icon_title_play":"Play","icon_title_record_voice":"Record voice message","icon_title_resume":"Resume","icon_title_send":"Send message","drag_file":"Drag file here","drafty_video":"Video recording","call_in_progress":"in progress","menu_item_audio_call":"Call","unrecognized_video_format":"Format of this video is not recognized","loading_note":"Loading...","password_i_have_code":"I have code","label_reset_password_tel":"Send a password reset SMS:","mobile_phone_number":"Mobile phone number","password_reset_sms_sent":"A text message with security code has been sent.","mobile_number_required":"Mobile phone number required","current_email":"Current email","current_phone":"Current phone number","new_email":"New email","new_phone_number":"New phone number","change_email":"Change email","change_phone":"Change phone number","call_busy":"busy","failed_to_init_audio":"Failed to initialize audio recording","pin_message":"Pin","unpin_message":"Unpin","password_reset_success":"Password reset successfully","scan_qr_code":"Scan QR Code","self_topic_comment":"Notes, messages, links, files saved for posterity","self_topic_name":"Saved messages","message_not_found":"message not found","message_deleted":"message deleted","alias_editing_placeholder":"Alias (optional)","label_alias":"Alias:","alias_already_taken":"(already taken)","alias_invalid":"(invalid)","label_alias_edit":"Alias","select_country":"Select country","text_copied":"Copied to clipboard","color_schema_dark":"Dark","color_schema_light":"Light","color_schema_system":"System default","label_color_schema":"Theme:","label_text_size":"Text size:","incognito_mode_description":"Hide your online status and typing indicators.","send_command":"Send on {key}","send_command_explained":"Press Enter for new line","send_plain":"Send on Enter","send_plain_explained":"Press Shift + Enter for new line","sidepanel_title_acc_general":"General","label_keyboard":"Keyboard:","pin_chat":"Pin","unpin_chat":"Unpin","subscriber_count":"{count, plural, one {{count, number} subscriber} other {{count, number} subscribers}}","label_member_count":"Members:","label_subscriber_count":"Subscribers:","member_count":"{count, plural, one {{count, number} member} other {{count, number} members}}","tabtitle_image":"image","tabtitle_pattern":"pattern","button_restore":"Restore default","wallpapers":"Wallpapers","label_blur_wallpaper":"Blur:","label_scan_id":"Scan my ID:","unknown_name":"Unknown","save_action":"Save","cannot_parse_vcard":"Cannot parse vCard file.","chat_now":"Chat","find_user":"Find","label_contact_card":"Contact Card","label_contacts":"Contacts","add_members_prompt":"add members"}')}}]); \ No newline at end of file diff --git a/umd/429.prod.js b/umd/429.prod.js new file mode 100644 index 00000000..79874ef3 --- /dev/null +++ b/umd/429.prod.js @@ -0,0 +1,2 @@ +"use strict";(self.webpackChunktinode_webapp=self.webpackChunktinode_webapp||[]).push([[429],{1725:function(e,t,s){var i=s(1594),a=s.n(i),n=s(8181),l=s(4532),r=s(9027),o=s(6110),h=s(5791);const d=a().lazy(e=>Promise.all([s.e(537),s.e(0)]).then(s.bind(s,4e3))),p=(0,n.defineMessages)({messaging_disabled:{id:"messaging_disabled_prompt",defaultMessage:[{type:0,value:"Messaging disabled"}]},type_new_message:{id:"new_message_prompt",defaultMessage:[{type:0,value:"New message"}]},add_image_caption:{id:"image_caption_prompt",defaultMessage:[{type:0,value:"Image caption"}]},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:[{type:0,value:"The file size "},{type:1,value:"size"},{type:0,value:" exceeds the "},{type:1,value:"limit"},{type:0,value:" limit."}]},cannot_initiate_upload:{id:"cannot_initiate_file_upload",defaultMessage:[{type:0,value:"Cannot initiate file upload."}]},icon_title_record_voice:{id:"icon_title_record_voice",defaultMessage:[{type:0,value:"Record voice message"}]},icon_title_attach_file:{id:"icon_title_attach_file",defaultMessage:[{type:0,value:"Attach file"}]},icon_title_add_image:{id:"icon_title_add_image",defaultMessage:[{type:0,value:"Add image"}]},icon_title_send:{id:"icon_title_send",defaultMessage:[{type:0,value:"Send message"}]}});class c extends a().PureComponent{constructor(e){super(e),this.state={quote:null,message:"",audioRec:!1,audioAvailable:!(!navigator.mediaDevices||!navigator.mediaDevices.getUserMedia)},this.keypressTimestamp=0,this.handlePasteEvent=this.handlePasteEvent.bind(this),this.handleAttachImage=this.handleAttachImage.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachAudio=this.handleAttachAudio.bind(this),this.handleSend=this.handleSend.bind(this),this.handleKeyPress=this.handleKeyPress.bind(this),this.handleMessageTyping=this.handleMessageTyping.bind(this),this.handleDropAttach=this.handleDropAttach.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.formatReply=this.formatReply.bind(this)}componentDidMount(){this.messageEditArea&&(this.messageEditArea.addEventListener("paste",this.handlePasteEvent,!1),"all"==window.getComputedStyle(this.messageEditArea).getPropertyValue("transition-property")&&this.messageEditArea.focus()),this.setState({quote:this.formatReply()})}componentWillUnmount(){this.messageEditArea&&this.messageEditArea.removeEventListener("paste",this.handlePasteEvent,!1)}componentDidUpdate(e){if(this.messageEditArea&&("all"==window.getComputedStyle(this.messageEditArea).getPropertyValue("transition-property")&&this.messageEditArea.focus(),this.messageEditArea.style.height="0px",this.messageEditArea.style.height=this.messageEditArea.scrollHeight+"px"),e.topicName!=this.props.topicName)this.setState({message:this.props.initMessage||"",audioRec:!1,quote:null});else if(e.initMessage!=this.props.initMessage){const e=this.props.initMessage||"";this.setState({message:e},t=>{this.messageEditArea.scrollTop=this.messageEditArea.scrollHeight,this.messageEditArea.setSelectionRange(e.length,e.length)})}e.reply!=this.props.reply&&this.setState({quote:this.formatReply()})}formatReply(){return this.props.reply?l.Drafty.format(this.props.reply.content,h.NV,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):null}handlePasteEvent(e){this.props.disabled||(0,o.iJ)(e,e=>{this.props.onAttachImage(e)},e=>{this.props.onAttachFile(e)},this.props.onError)&&e.preventDefault()}handleAttachImage(e){e.target.files&&e.target.files.length>0&&this.props.onAttachImage(e.target.files[0]),e.target.value=""}handleAttachFile(e){e.target.files&&e.target.files.length>0&&this.props.onAttachFile(e.target.files[0]),e.target.value=""}handleDropAttach(e){e&&e.length>0&&this.props.onAttachFile(e[0])}handleAttachAudio(e,t,s){this.setState({audioRec:!1}),this.props.onAttachAudio(e,t,s)}handleSend(e){e.preventDefault();const t=this.state.message.trim();(t||this.props.acceptBlank||this.props.noInput)&&(this.props.onSendMessage(t),this.setState({message:""}))}handleKeyPress(e){if(this.state.audioRec)return e.preventDefault(),void e.stopPropagation();"Enter"===e.key&&("plain"==this.props.sendOnEnter?e.shiftKey||(e.preventDefault(),e.stopPropagation(),this.handleSend(e)):(e.ctrlKey||e.metaKey)&&(e.preventDefault(),e.stopPropagation(),this.handleSend(e)))}handleMessageTyping(e){if(this.setState({message:e.target.value}),this.props.onKeyPress){const e=(new Date).getTime();e-this.keypressTimestamp>r.NR&&(this.props.onKeyPress(),this.keypressTimestamp=e)}}handleQuoteClick(e){if(e.preventDefault(),e.stopPropagation(),this.props.reply&&this.props.onQuoteClick){const e=this.props.reply.seq;this.props.onQuoteClick(e)}}render(){const{formatMessage:e}=this.props.intl,t=this.props.disabled?e(p.messaging_disabled):this.props.messagePrompt?e(p[this.props.messagePrompt]):e(p.type_new_message),s=this.props.reply&&this.props.reply.editing?"check_circle":"send",l=this.state.quote?a().createElement("div",{id:"reply-quote-preview"},a().createElement("div",{className:"cancel"},a().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.props.onCancelReply()}},a().createElement("i",{className:"material-icons gray"},"close"))),this.state.quote):null,r=this.state.audioAvailable&&this.props.onAttachAudio;return a().createElement("div",{id:"send-message-wrapper"},this.props.noInput?null:l,a().createElement("div",{id:"send-message-panel"},this.props.disabled?a().createElement("div",{id:"writing-disabled"},t):a().createElement(a().Fragment,null,this.props.onAttachFile&&!this.state.audioRec?a().createElement(a().Fragment,null,a().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachImage.click()},title:e(p.icon_title_add_image)},a().createElement("i",{className:"material-icons secondary"},"photo")),a().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.attachFile.click()},title:e(p.icon_title_attach_file)},a().createElement("i",{className:"material-icons secondary"},"attach_file"))):null,this.props.noInput?l||a().createElement("div",{className:"hr thin"}):this.state.audioRec?a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(d,{onRecordingProgress:e=>this.props.onKeyPress(!0),onDeleted:e=>this.setState({audioRec:!1}),onFinished:this.handleAttachAudio})):a().createElement("textarea",{id:"send-message-input",placeholder:t,value:this.state.message,onChange:this.handleMessageTyping,onKeyDown:this.handleKeyPress,ref:e=>{this.messageEditArea=e}}),this.state.message||!r?a().createElement("a",{href:"#",onClick:this.handleSend,title:e(p.icon_title_send)},a().createElement("i",{className:"material-icons"},s)):this.state.audioRec?null:a().createElement("a",{href:"#",onClick:e=>{e.preventDefault(),this.setState({audioRec:!0})},title:e(p.icon_title_record_voice)},a().createElement("i",{className:"material-icons"},"mic")),a().createElement("input",{type:"file",ref:e=>{this.attachFile=e},onChange:this.handleAttachFile,style:{display:"none"}}),a().createElement("input",{type:"file",ref:e=>{this.attachImage=e},accept:"image/*, video/*",onChange:this.handleAttachImage,style:{display:"none"}}))))}}t.A=(0,n.injectIntl)(c)},6429:function(e,t,s){s.r(t),s.d(t,{default:function(){return j}});var i=s(1594),a=s.n(i),n=s(8181),l=s(4532),r=s(9895),o=s(8589),h=s(3540);class d extends a().Component{constructor(e){super(e),this.state={downloader:null,progress:0},this.downloadFile=this.downloadFile.bind(this),this.handleCancel=this.handleCancel.bind(this)}downloadFile(e,t,s){if(!e)return void this.props.onError("Invalid download URL '"+e+"'");const i=this.props.tinode.getLargeFileHelper();this.setState({downloader:i}),i.download(e,t,s,e=>this.setState({progress:e/this.props.size}),e=>this.props.onError(e,"err")).then(e=>this.setState({downloader:null,progress:0})).catch(e=>{e&&this.props.onError("Error downloading file: "+e.message,"err"),this.setState({downloader:null,progress:0})})}handleCancel(){this.props.uploading?this.props.onCancelUpload():this.state.downloader&&this.state.downloader.cancel()}render(){let e=this.props.filename||"file_attachment";e.length>36&&(e=e.substr(0,16)+"..."+e.substr(-16));let t,s,i=this.props.size>0?a().createElement("span",{className:"small gray"},"(",(0,o.lX)(this.props.size),")"):null;this.props.uploading||this.state.downloader||!(0,h.YO)(this.props.downloadUrl)?(t=(0,h.Jf)(this.props.downloadUrl),s=null):(t="#",s=e=>{e.preventDefault(),this.downloadFile(this.props.downloadUrl,this.props.filename,this.props.mimetype)});const l=a().createElement(a().Fragment,null,a().createElement("i",{className:"material-icons"},"file_download")," ",a().createElement(n.FormattedMessage,{id:"save_attachment",defaultMessage:[{type:0,value:"save"}]}));return a().createElement("div",{className:"attachment"},a().createElement("div",null,a().createElement("i",{className:"material-icons big gray"},"insert_drive_file")),a().createElement("div",{className:"flex-column"},a().createElement("div",null,e," ",i),this.props.uploading||this.state.downloader?a().createElement(r.A,{progress:this.props.uploading?this.props.progress:this.state.progress,onCancel:this.handleCancel}):a().createElement("div",null,t?a().createElement("a",{href:t,download:this.props.filename,onClick:s},l):a().createElement("span",{className:"light-gray"},l))))}}var p=s(6904);const c=(0,n.defineMessages)({message_sending:{id:"message_sending",defaultMessage:[{type:0,value:"sending..."}]},message_sending_failed:{id:"message_sending_failed",defaultMessage:[{type:0,value:"failed"}]},message_edited_marker:{id:"message_edited_marker",defaultMessage:[{type:0,value:", edited"}]}});class u extends a().PureComponent{render(){const{formatMessage:e}=this.props.intl;let t;t=this.props.received<=l.Tinode.MESSAGE_STATUS_SENDING?e(c.message_sending):this.props.received==l.Tinode.MESSAGE_STATUS_FAILED||this.props.received==l.Tinode.MESSAGE_STATUS_FATAL?e(c.message_sending_failed):this.props.timestamp.toLocaleTimeString(this.props.intl.locale,{timeStyle:"short"});const s=(0,h.LO)(this.props.received),i=s?a().createElement("i",{className:"material-icons small "+s.color},s.name):null,n=this.props.edited?e(c.message_edited_marker):null;return a().createElement("span",{className:"timestamp"},t,n," ",i)}}var m=(0,n.injectIntl)(u),g=s(5791),f=s(7151);function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t{switch(t){case"image":this.handleExpandImage(e);break;case"video":this.handlePlayVideo(e);break;case"form_button":this.handleFormButtonClick(e);break;case"quote":this.handleQuoteClick(e);break;case"contact_chat":e.preventDefault();try{const t=new URL(e.target.dataset.val)?.pathname,s=t.split("/").filter(Boolean);f.A.navigateTo(f.A.setUrlTopic("",s.pop()||""))}catch(e){console.error("Invalid URL:",e)}break;case"contact_find":e.preventDefault();let s=f.A.setUrlSidePanel(window.location.hash,"newtpk");s=f.A.addUrlParam(s,"q",e.target.dataset.val),s=f.A.addUrlParam(s,"tab","find"),f.A.navigateTo(s);break;default:console.info("Unhandled drafty action.",t,e.target.dataset)}};handleExpandImage(e){e.preventDefault(),this.props.onExpandMedia({url:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,size:e.target.dataset.size,type:e.target.dataset.mime})}handlePlayVideo(e){e.preventDefault(),this.props.onExpandMedia({video:!0,url:e.target.dataset.src,preview:e.target.src,filename:e.target.dataset.name,width:e.target.dataset.width,height:e.target.dataset.height,duration:e.target.dataset.duration,size:e.target.dataset.size,type:e.target.dataset.mime})}handleFormButtonClick(e){e.preventDefault();const t={seq:this.props.seq,resp:{}};e.target.dataset.name&&(t.resp[e.target.dataset.name]=e.target.dataset.val?e.target.dataset.val:void 0===e.target.dataset.val?1:""+e.target.dataset.val),"url"==e.target.dataset.act&&(t.ref=(0,h.Jf)(e.target.dataset.ref)||"about:blank");const s=e.target.dataset.title||"unknown";this.props.onFormResponse(e.target.dataset.act,s,t)}handleContextClick(e){e.preventDefault(),e.stopPropagation();const t=[];if(this.props.received==l.Tinode.MESSAGE_STATUS_FAILED&&t.push("menu_item_send_retry"),this.props.received>l.Tinode.MESSAGE_STATUS_FATAL){if(this.props.userIsWriter&&(t.push("menu_item_reply"),!this.props.response)){let e=!1;l.Drafty.entities(this.props.content,(t,s,i)=>(e=["AU","EX","FM","IM","TC","VC","VD"].includes(i),e)),e||l.Drafty.styles(this.props.content,t=>(e=["QQ"].includes(t),e)),e||t.push("menu_item_edit")}this.props.userIsAdmin&&t.push(this.props.pinned?"menu_item_unpin":"menu_item_pin")}t.push("menu_item_forward"),this.props.showContextMenu({seq:this.props.seq,replace:this.props.edited?parseInt(this.props.edited.split(":")[1]):0,content:this.props.content,userFrom:this.props.userFrom,userName:this.props.userName,y:e.pageY,x:e.pageX,pickReply:this.props.pickReply,editMessage:this.props.editMessage,timestamp:this.props.timestamp},t)}handleProgress(e){this.setState({progress:e})}handleCancelUpload(){this.props.onCancelUpload(this.props.seq,this.props.uploader)}handleQuoteClick(e){e.preventDefault(),e.stopPropagation();const t=this.props.replyToSeq;t&&this.props.onQuoteClick(t)}render(){const e=this.props.sequence+" "+(this.props.response?"left":"right"),t="single"==this.props.sequence||"last"==this.props.sequence?"bubble tip":"bubble",s=this.props.userAvatar||!0;let i="message-content";const r=this.props.isGroup&&this.props.response&&("single"==this.props.sequence||"last"==this.props.sequence);let o=this.props.content;const h=[];if(this.props.mimeType==l.Drafty.getContentType()&&l.Drafty.isValid(o)){l.Drafty.attachments(o,(e,t)=>{l.Drafty.isFormResponseType(e.mime)||h.push(a().createElement(d,{tinode:this.props.tinode,downloadUrl:l.Drafty.getDownloadUrl(e),filename:e.name,uploading:l.Drafty.isProcessing(e),mimetype:e.mime,size:l.Drafty.getEntitySize(e),progress:this.state.progress,onCancelUpload:this.handleCancelUpload,onError:this.props.onError,key:t}))},this);const e=l.Drafty.format(o,g.e3,this.formatterContext);o=a().createElement(a().Fragment,null,e)}else"string"==typeof o?new RegExp("^\\p{RGI_Emoji}{1,5}$","v").test(o||"")&&(i+=" emoji-"+(o||"").match(/(?:👨🏻‍❤️‍💋‍👨🏻|👨🏻‍❤️‍💋‍👨🏼|👨🏻‍❤️‍💋‍👨🏽|👨🏻‍❤️‍💋‍👨🏾|👨🏻‍❤️‍💋‍👨🏿|👨🏼‍❤️‍💋‍👨🏻|👨🏼‍❤️‍💋‍👨🏼|👨🏼‍❤️‍💋‍👨🏽|👨🏼‍❤️‍💋‍👨🏾|👨🏼‍❤️‍💋‍👨🏿|👨🏽‍❤️‍💋‍👨🏻|👨🏽‍❤️‍💋‍👨🏼|👨🏽‍❤️‍💋‍👨🏽|👨🏽‍❤️‍💋‍👨🏾|👨🏽‍❤️‍💋‍👨🏿|👨🏾‍❤️‍💋‍👨🏻|👨🏾‍❤️‍💋‍👨🏼|👨🏾‍❤️‍💋‍👨🏽|👨🏾‍❤️‍💋‍👨🏾|👨🏾‍❤️‍💋‍👨🏿|👨🏿‍❤️‍💋‍👨🏻|👨🏿‍❤️‍💋‍👨🏼|👨🏿‍❤️‍💋‍👨🏽|👨🏿‍❤️‍💋‍👨🏾|👨🏿‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👨🏻|👩🏻‍❤️‍💋‍👨🏼|👩🏻‍❤️‍💋‍👨🏽|👩🏻‍❤️‍💋‍👨🏾|👩🏻‍❤️‍💋‍👨🏿|👩🏻‍❤️‍💋‍👩🏻|👩🏻‍❤️‍💋‍👩🏼|👩🏻‍❤️‍💋‍👩🏽|👩🏻‍❤️‍💋‍👩🏾|👩🏻‍❤️‍💋‍👩🏿|👩🏼‍❤️‍💋‍👨🏻|👩🏼‍❤️‍💋‍👨🏼|👩🏼‍❤️‍💋‍👨🏽|👩🏼‍❤️‍💋‍👨🏾|👩🏼‍❤️‍💋‍👨🏿|👩🏼‍❤️‍💋‍👩🏻|👩🏼‍❤️‍💋‍👩🏼|👩🏼‍❤️‍💋‍👩🏽|👩🏼‍❤️‍💋‍👩🏾|👩🏼‍❤️‍💋‍👩🏿|👩🏽‍❤️‍💋‍👨🏻|👩🏽‍❤️‍💋‍👨🏼|👩🏽‍❤️‍💋‍👨🏽|👩🏽‍❤️‍💋‍👨🏾|👩🏽‍❤️‍💋‍👨🏿|👩🏽‍❤️‍💋‍👩🏻|👩🏽‍❤️‍💋‍👩🏼|👩🏽‍❤️‍💋‍👩🏽|👩🏽‍❤️‍💋‍👩🏾|👩🏽‍❤️‍💋‍👩🏿|👩🏾‍❤️‍💋‍👨🏻|👩🏾‍❤️‍💋‍👨🏼|👩🏾‍❤️‍💋‍👨🏽|👩🏾‍❤️‍💋‍👨🏾|👩🏾‍❤️‍💋‍👨🏿|👩🏾‍❤️‍💋‍👩🏻|👩🏾‍❤️‍💋‍👩🏼|👩🏾‍❤️‍💋‍👩🏽|👩🏾‍❤️‍💋‍👩🏾|👩🏾‍❤️‍💋‍👩🏿|👩🏿‍❤️‍💋‍👨🏻|👩🏿‍❤️‍💋‍👨🏼|👩🏿‍❤️‍💋‍👨🏽|👩🏿‍❤️‍💋‍👨🏾|👩🏿‍❤️‍💋‍👨🏿|👩🏿‍❤️‍💋‍👩🏻|👩🏿‍❤️‍💋‍👩🏼|👩🏿‍❤️‍💋‍👩🏽|👩🏿‍❤️‍💋‍👩🏾|👩🏿‍❤️‍💋‍👩🏿|🧑🏻‍❤️‍💋‍🧑🏼|🧑🏻‍❤️‍💋‍🧑🏽|🧑🏻‍❤️‍💋‍🧑🏾|🧑🏻‍❤️‍💋‍🧑🏿|🧑🏼‍❤️‍💋‍🧑🏻|🧑🏼‍❤️‍💋‍🧑🏽|🧑🏼‍❤️‍💋‍🧑🏾|🧑🏼‍❤️‍💋‍🧑🏿|🧑🏽‍❤️‍💋‍🧑🏻|🧑🏽‍❤️‍💋‍🧑🏼|🧑🏽‍❤️‍💋‍🧑🏾|🧑🏽‍❤️‍💋‍🧑🏿|🧑🏾‍❤️‍💋‍🧑🏻|🧑🏾‍❤️‍💋‍🧑🏼|🧑🏾‍❤️‍💋‍🧑🏽|🧑🏾‍❤️‍💋‍🧑🏿|🧑🏿‍❤️‍💋‍🧑🏻|🧑🏿‍❤️‍💋‍🧑🏼|🧑🏿‍❤️‍💋‍🧑🏽|🧑🏿‍❤️‍💋‍🧑🏾|🏴󠁧󠁢󠁥󠁮󠁧󠁿|🏴󠁧󠁢󠁳󠁣󠁴󠁿|🏴󠁧󠁢󠁷󠁬󠁳󠁿|👨🏻‍❤️‍👨🏻|👨🏻‍❤️‍👨🏼|👨🏻‍❤️‍👨🏽|👨🏻‍❤️‍👨🏾|👨🏻‍❤️‍👨🏿|👨🏻‍🐰‍👨🏼|👨🏻‍🐰‍👨🏽|👨🏻‍🐰‍👨🏾|👨🏻‍🐰‍👨🏿|👨🏻‍🤝‍👨🏼|👨🏻‍🤝‍👨🏽|👨🏻‍🤝‍👨🏾|👨🏻‍🤝‍👨🏿|👨🏻‍🫯‍👨🏼|👨🏻‍🫯‍👨🏽|👨🏻‍🫯‍👨🏾|👨🏻‍🫯‍👨🏿|👨🏼‍❤️‍👨🏻|👨🏼‍❤️‍👨🏼|👨🏼‍❤️‍👨🏽|👨🏼‍❤️‍👨🏾|👨🏼‍❤️‍👨🏿|👨🏼‍🐰‍👨🏻|👨🏼‍🐰‍👨🏽|👨🏼‍🐰‍👨🏾|👨🏼‍🐰‍👨🏿|👨🏼‍🤝‍👨🏻|👨🏼‍🤝‍👨🏽|👨🏼‍🤝‍👨🏾|👨🏼‍🤝‍👨🏿|👨🏼‍🫯‍👨🏻|👨🏼‍🫯‍👨🏽|👨🏼‍🫯‍👨🏾|👨🏼‍🫯‍👨🏿|👨🏽‍❤️‍👨🏻|👨🏽‍❤️‍👨🏼|👨🏽‍❤️‍👨🏽|👨🏽‍❤️‍👨🏾|👨🏽‍❤️‍👨🏿|👨🏽‍🐰‍👨🏻|👨🏽‍🐰‍👨🏼|👨🏽‍🐰‍👨🏾|👨🏽‍🐰‍👨🏿|👨🏽‍🤝‍👨🏻|👨🏽‍🤝‍👨🏼|👨🏽‍🤝‍👨🏾|👨🏽‍🤝‍👨🏿|👨🏽‍🫯‍👨🏻|👨🏽‍🫯‍👨🏼|👨🏽‍🫯‍👨🏾|👨🏽‍🫯‍👨🏿|👨🏾‍❤️‍👨🏻|👨🏾‍❤️‍👨🏼|👨🏾‍❤️‍👨🏽|👨🏾‍❤️‍👨🏾|👨🏾‍❤️‍👨🏿|👨🏾‍🐰‍👨🏻|👨🏾‍🐰‍👨🏼|👨🏾‍🐰‍👨🏽|👨🏾‍🐰‍👨🏿|👨🏾‍🤝‍👨🏻|👨🏾‍🤝‍👨🏼|👨🏾‍🤝‍👨🏽|👨🏾‍🤝‍👨🏿|👨🏾‍🫯‍👨🏻|👨🏾‍🫯‍👨🏼|👨🏾‍🫯‍👨🏽|👨🏾‍🫯‍👨🏿|👨🏿‍❤️‍👨🏻|👨🏿‍❤️‍👨🏼|👨🏿‍❤️‍👨🏽|👨🏿‍❤️‍👨🏾|👨🏿‍❤️‍👨🏿|👨🏿‍🐰‍👨🏻|👨🏿‍🐰‍👨🏼|👨🏿‍🐰‍👨🏽|👨🏿‍🐰‍👨🏾|👨🏿‍🤝‍👨🏻|👨🏿‍🤝‍👨🏼|👨🏿‍🤝‍👨🏽|👨🏿‍🤝‍👨🏾|👨🏿‍🫯‍👨🏻|👨🏿‍🫯‍👨🏼|👨🏿‍🫯‍👨🏽|👨🏿‍🫯‍👨🏾|👩🏻‍❤️‍👨🏻|👩🏻‍❤️‍👨🏼|👩🏻‍❤️‍👨🏽|👩🏻‍❤️‍👨🏾|👩🏻‍❤️‍👨🏿|👩🏻‍❤️‍👩🏻|👩🏻‍❤️‍👩🏼|👩🏻‍❤️‍👩🏽|👩🏻‍❤️‍👩🏾|👩🏻‍❤️‍👩🏿|👩🏻‍🐰‍👩🏼|👩🏻‍🐰‍👩🏽|👩🏻‍🐰‍👩🏾|👩🏻‍🐰‍👩🏿|👩🏻‍🤝‍👨🏼|👩🏻‍🤝‍👨🏽|👩🏻‍🤝‍👨🏾|👩🏻‍🤝‍👨🏿|👩🏻‍🤝‍👩🏼|👩🏻‍🤝‍👩🏽|👩🏻‍🤝‍👩🏾|👩🏻‍🤝‍👩🏿|👩🏻‍🫯‍👩🏼|👩🏻‍🫯‍👩🏽|👩🏻‍🫯‍👩🏾|👩🏻‍🫯‍👩🏿|👩🏼‍❤️‍👨🏻|👩🏼‍❤️‍👨🏼|👩🏼‍❤️‍👨🏽|👩🏼‍❤️‍👨🏾|👩🏼‍❤️‍👨🏿|👩🏼‍❤️‍👩🏻|👩🏼‍❤️‍👩🏼|👩🏼‍❤️‍👩🏽|👩🏼‍❤️‍👩🏾|👩🏼‍❤️‍👩🏿|👩🏼‍🐰‍👩🏻|👩🏼‍🐰‍👩🏽|👩🏼‍🐰‍👩🏾|👩🏼‍🐰‍👩🏿|👩🏼‍🤝‍👨🏻|👩🏼‍🤝‍👨🏽|👩🏼‍🤝‍👨🏾|👩🏼‍🤝‍👨🏿|👩🏼‍🤝‍👩🏻|👩🏼‍🤝‍👩🏽|👩🏼‍🤝‍👩🏾|👩🏼‍🤝‍👩🏿|👩🏼‍🫯‍👩🏻|👩🏼‍🫯‍👩🏽|👩🏼‍🫯‍👩🏾|👩🏼‍🫯‍👩🏿|👩🏽‍❤️‍👨🏻|👩🏽‍❤️‍👨🏼|👩🏽‍❤️‍👨🏽|👩🏽‍❤️‍👨🏾|👩🏽‍❤️‍👨🏿|👩🏽‍❤️‍👩🏻|👩🏽‍❤️‍👩🏼|👩🏽‍❤️‍👩🏽|👩🏽‍❤️‍👩🏾|👩🏽‍❤️‍👩🏿|👩🏽‍🐰‍👩🏻|👩🏽‍🐰‍👩🏼|👩🏽‍🐰‍👩🏾|👩🏽‍🐰‍👩🏿|👩🏽‍🤝‍👨🏻|👩🏽‍🤝‍👨🏼|👩🏽‍🤝‍👨🏾|👩🏽‍🤝‍👨🏿|👩🏽‍🤝‍👩🏻|👩🏽‍🤝‍👩🏼|👩🏽‍🤝‍👩🏾|👩🏽‍🤝‍👩🏿|👩🏽‍🫯‍👩🏻|👩🏽‍🫯‍👩🏼|👩🏽‍🫯‍👩🏾|👩🏽‍🫯‍👩🏿|👩🏾‍❤️‍👨🏻|👩🏾‍❤️‍👨🏼|👩🏾‍❤️‍👨🏽|👩🏾‍❤️‍👨🏾|👩🏾‍❤️‍👨🏿|👩🏾‍❤️‍👩🏻|👩🏾‍❤️‍👩🏼|👩🏾‍❤️‍👩🏽|👩🏾‍❤️‍👩🏾|👩🏾‍❤️‍👩🏿|👩🏾‍🐰‍👩🏻|👩🏾‍🐰‍👩🏼|👩🏾‍🐰‍👩🏽|👩🏾‍🐰‍👩🏿|👩🏾‍🤝‍👨🏻|👩🏾‍🤝‍👨🏼|👩🏾‍🤝‍👨🏽|👩🏾‍🤝‍👨🏿|👩🏾‍🤝‍👩🏻|👩🏾‍🤝‍👩🏼|👩🏾‍🤝‍👩🏽|👩🏾‍🤝‍👩🏿|👩🏾‍🫯‍👩🏻|👩🏾‍🫯‍👩🏼|👩🏾‍🫯‍👩🏽|👩🏾‍🫯‍👩🏿|👩🏿‍❤️‍👨🏻|👩🏿‍❤️‍👨🏼|👩🏿‍❤️‍👨🏽|👩🏿‍❤️‍👨🏾|👩🏿‍❤️‍👨🏿|👩🏿‍❤️‍👩🏻|👩🏿‍❤️‍👩🏼|👩🏿‍❤️‍👩🏽|👩🏿‍❤️‍👩🏾|👩🏿‍❤️‍👩🏿|👩🏿‍🐰‍👩🏻|👩🏿‍🐰‍👩🏼|👩🏿‍🐰‍👩🏽|👩🏿‍🐰‍👩🏾|👩🏿‍🤝‍👨🏻|👩🏿‍🤝‍👨🏼|👩🏿‍🤝‍👨🏽|👩🏿‍🤝‍👨🏾|👩🏿‍🤝‍👩🏻|👩🏿‍🤝‍👩🏼|👩🏿‍🤝‍👩🏽|👩🏿‍🤝‍👩🏾|👩🏿‍🫯‍👩🏻|👩🏿‍🫯‍👩🏼|👩🏿‍🫯‍👩🏽|👩🏿‍🫯‍👩🏾|🧑🏻‍❤️‍🧑🏼|🧑🏻‍❤️‍🧑🏽|🧑🏻‍❤️‍🧑🏾|🧑🏻‍❤️‍🧑🏿|🧑🏻‍🐰‍🧑🏼|🧑🏻‍🐰‍🧑🏽|🧑🏻‍🐰‍🧑🏾|🧑🏻‍🐰‍🧑🏿|🧑🏻‍🤝‍🧑🏻|🧑🏻‍🤝‍🧑🏼|🧑🏻‍🤝‍🧑🏽|🧑🏻‍🤝‍🧑🏾|🧑🏻‍🤝‍🧑🏿|🧑🏻‍🫯‍🧑🏼|🧑🏻‍🫯‍🧑🏽|🧑🏻‍🫯‍🧑🏾|🧑🏻‍🫯‍🧑🏿|🧑🏼‍❤️‍🧑🏻|🧑🏼‍❤️‍🧑🏽|🧑🏼‍❤️‍🧑🏾|🧑🏼‍❤️‍🧑🏿|🧑🏼‍🐰‍🧑🏻|🧑🏼‍🐰‍🧑🏽|🧑🏼‍🐰‍🧑🏾|🧑🏼‍🐰‍🧑🏿|🧑🏼‍🤝‍🧑🏻|🧑🏼‍🤝‍🧑🏼|🧑🏼‍🤝‍🧑🏽|🧑🏼‍🤝‍🧑🏾|🧑🏼‍🤝‍🧑🏿|🧑🏼‍🫯‍🧑🏻|🧑🏼‍🫯‍🧑🏽|🧑🏼‍🫯‍🧑🏾|🧑🏼‍🫯‍🧑🏿|🧑🏽‍❤️‍🧑🏻|🧑🏽‍❤️‍🧑🏼|🧑🏽‍❤️‍🧑🏾|🧑🏽‍❤️‍🧑🏿|🧑🏽‍🐰‍🧑🏻|🧑🏽‍🐰‍🧑🏼|🧑🏽‍🐰‍🧑🏾|🧑🏽‍🐰‍🧑🏿|🧑🏽‍🤝‍🧑🏻|🧑🏽‍🤝‍🧑🏼|🧑🏽‍🤝‍🧑🏽|🧑🏽‍🤝‍🧑🏾|🧑🏽‍🤝‍🧑🏿|🧑🏽‍🫯‍🧑🏻|🧑🏽‍🫯‍🧑🏼|🧑🏽‍🫯‍🧑🏾|🧑🏽‍🫯‍🧑🏿|🧑🏾‍❤️‍🧑🏻|🧑🏾‍❤️‍🧑🏼|🧑🏾‍❤️‍🧑🏽|🧑🏾‍❤️‍🧑🏿|🧑🏾‍🐰‍🧑🏻|🧑🏾‍🐰‍🧑🏼|🧑🏾‍🐰‍🧑🏽|🧑🏾‍🐰‍🧑🏿|🧑🏾‍🤝‍🧑🏻|🧑🏾‍🤝‍🧑🏼|🧑🏾‍🤝‍🧑🏽|🧑🏾‍🤝‍🧑🏾|🧑🏾‍🤝‍🧑🏿|🧑🏾‍🫯‍🧑🏻|🧑🏾‍🫯‍🧑🏼|🧑🏾‍🫯‍🧑🏽|🧑🏾‍🫯‍🧑🏿|🧑🏿‍❤️‍🧑🏻|🧑🏿‍❤️‍🧑🏼|🧑🏿‍❤️‍🧑🏽|🧑🏿‍❤️‍🧑🏾|🧑🏿‍🐰‍🧑🏻|🧑🏿‍🐰‍🧑🏼|🧑🏿‍🐰‍🧑🏽|🧑🏿‍🐰‍🧑🏾|🧑🏿‍🤝‍🧑🏻|🧑🏿‍🤝‍🧑🏼|🧑🏿‍🤝‍🧑🏽|🧑🏿‍🤝‍🧑🏾|🧑🏿‍🤝‍🧑🏿|🧑🏿‍🫯‍🧑🏻|🧑🏿‍🫯‍🧑🏼|🧑🏿‍🫯‍🧑🏽|🧑🏿‍🫯‍🧑🏾|👨‍❤️‍💋‍👨|👨‍👨‍👦‍👦|👨‍👨‍👧‍👦|👨‍👨‍👧‍👧|👨‍👩‍👦‍👦|👨‍👩‍👧‍👦|👨‍👩‍👧‍👧|👩‍❤️‍💋‍👨|👩‍❤️‍💋‍👩|👩‍👩‍👦‍👦|👩‍👩‍👧‍👦|👩‍👩‍👧‍👧|🧑‍🧑‍🧒‍🧒|🏃🏻‍♀️‍➡️|🏃🏻‍♂️‍➡️|🏃🏼‍♀️‍➡️|🏃🏼‍♂️‍➡️|🏃🏽‍♀️‍➡️|🏃🏽‍♂️‍➡️|🏃🏾‍♀️‍➡️|🏃🏾‍♂️‍➡️|🏃🏿‍♀️‍➡️|🏃🏿‍♂️‍➡️|👨🏻‍🦯‍➡️|👨🏻‍🦼‍➡️|👨🏻‍🦽‍➡️|👨🏼‍🦯‍➡️|👨🏼‍🦼‍➡️|👨🏼‍🦽‍➡️|👨🏽‍🦯‍➡️|👨🏽‍🦼‍➡️|👨🏽‍🦽‍➡️|👨🏾‍🦯‍➡️|👨🏾‍🦼‍➡️|👨🏾‍🦽‍➡️|👨🏿‍🦯‍➡️|👨🏿‍🦼‍➡️|👨🏿‍🦽‍➡️|👩🏻‍🦯‍➡️|👩🏻‍🦼‍➡️|👩🏻‍🦽‍➡️|👩🏼‍🦯‍➡️|👩🏼‍🦼‍➡️|👩🏼‍🦽‍➡️|👩🏽‍🦯‍➡️|👩🏽‍🦼‍➡️|👩🏽‍🦽‍➡️|👩🏾‍🦯‍➡️|👩🏾‍🦼‍➡️|👩🏾‍🦽‍➡️|👩🏿‍🦯‍➡️|👩🏿‍🦼‍➡️|👩🏿‍🦽‍➡️|🚶🏻‍♀️‍➡️|🚶🏻‍♂️‍➡️|🚶🏼‍♀️‍➡️|🚶🏼‍♂️‍➡️|🚶🏽‍♀️‍➡️|🚶🏽‍♂️‍➡️|🚶🏾‍♀️‍➡️|🚶🏾‍♂️‍➡️|🚶🏿‍♀️‍➡️|🚶🏿‍♂️‍➡️|🧎🏻‍♀️‍➡️|🧎🏻‍♂️‍➡️|🧎🏼‍♀️‍➡️|🧎🏼‍♂️‍➡️|🧎🏽‍♀️‍➡️|🧎🏽‍♂️‍➡️|🧎🏾‍♀️‍➡️|🧎🏾‍♂️‍➡️|🧎🏿‍♀️‍➡️|🧎🏿‍♂️‍➡️|🧑🏻‍🦯‍➡️|🧑🏻‍🦼‍➡️|🧑🏻‍🦽‍➡️|🧑🏼‍🦯‍➡️|🧑🏼‍🦼‍➡️|🧑🏼‍🦽‍➡️|🧑🏽‍🦯‍➡️|🧑🏽‍🦼‍➡️|🧑🏽‍🦽‍➡️|🧑🏾‍🦯‍➡️|🧑🏾‍🦼‍➡️|🧑🏾‍🦽‍➡️|🧑🏿‍🦯‍➡️|🧑🏿‍🦼‍➡️|🧑🏿‍🦽‍➡️|🫱🏻‍🫲🏼|🫱🏻‍🫲🏽|🫱🏻‍🫲🏾|🫱🏻‍🫲🏿|🫱🏼‍🫲🏻|🫱🏼‍🫲🏽|🫱🏼‍🫲🏾|🫱🏼‍🫲🏿|🫱🏽‍🫲🏻|🫱🏽‍🫲🏼|🫱🏽‍🫲🏾|🫱🏽‍🫲🏿|🫱🏾‍🫲🏻|🫱🏾‍🫲🏼|🫱🏾‍🫲🏽|🫱🏾‍🫲🏿|🫱🏿‍🫲🏻|🫱🏿‍🫲🏼|🫱🏿‍🫲🏽|🫱🏿‍🫲🏾|🏃‍♀️‍➡️|🏃‍♂️‍➡️|👨‍❤️‍👨|👨‍👦‍👦|👨‍👧‍👦|👨‍👧‍👧|👨‍👨‍👦|👨‍👨‍👧|👨‍👩‍👦|👨‍👩‍👧|👨‍🦯‍➡️|👨‍🦼‍➡️|👨‍🦽‍➡️|👩‍❤️‍👨|👩‍❤️‍👩|👩‍👦‍👦|👩‍👧‍👦|👩‍👧‍👧|👩‍👩‍👦|👩‍👩‍👧|👩‍🦯‍➡️|👩‍🦼‍➡️|👩‍🦽‍➡️|🚶‍♀️‍➡️|🚶‍♂️‍➡️|🧎‍♀️‍➡️|🧎‍♂️‍➡️|🧑‍🤝‍🧑|🧑‍🦯‍➡️|🧑‍🦼‍➡️|🧑‍🦽‍➡️|🧑‍🧑‍🧒|🧑‍🧒‍🧒|🏃🏻‍♀️|🏃🏻‍♂️|🏃🏻‍➡️|🏃🏼‍♀️|🏃🏼‍♂️|🏃🏼‍➡️|🏃🏽‍♀️|🏃🏽‍♂️|🏃🏽‍➡️|🏃🏾‍♀️|🏃🏾‍♂️|🏃🏾‍➡️|🏃🏿‍♀️|🏃🏿‍♂️|🏃🏿‍➡️|🏄🏻‍♀️|🏄🏻‍♂️|🏄🏼‍♀️|🏄🏼‍♂️|🏄🏽‍♀️|🏄🏽‍♂️|🏄🏾‍♀️|🏄🏾‍♂️|🏄🏿‍♀️|🏄🏿‍♂️|🏊🏻‍♀️|🏊🏻‍♂️|🏊🏼‍♀️|🏊🏼‍♂️|🏊🏽‍♀️|🏊🏽‍♂️|🏊🏾‍♀️|🏊🏾‍♂️|🏊🏿‍♀️|🏊🏿‍♂️|🏋🏻‍♀️|🏋🏻‍♂️|🏋🏼‍♀️|🏋🏼‍♂️|🏋🏽‍♀️|🏋🏽‍♂️|🏋🏾‍♀️|🏋🏾‍♂️|🏋🏿‍♀️|🏋🏿‍♂️|🏌🏻‍♀️|🏌🏻‍♂️|🏌🏼‍♀️|🏌🏼‍♂️|🏌🏽‍♀️|🏌🏽‍♂️|🏌🏾‍♀️|🏌🏾‍♂️|🏌🏿‍♀️|🏌🏿‍♂️|👁️‍🗨️|👨🏻‍⚕️|👨🏻‍⚖️|👨🏻‍✈️|👨🏻‍🌾|👨🏻‍🍳|👨🏻‍🍼|👨🏻‍🎓|👨🏻‍🎤|👨🏻‍🎨|👨🏻‍🏫|👨🏻‍🏭|👨🏻‍💻|👨🏻‍💼|👨🏻‍🔧|👨🏻‍🔬|👨🏻‍🚀|👨🏻‍🚒|👨🏻‍🦯|👨🏻‍🦰|👨🏻‍🦱|👨🏻‍🦲|👨🏻‍🦳|👨🏻‍🦼|👨🏻‍🦽|👨🏼‍⚕️|👨🏼‍⚖️|👨🏼‍✈️|👨🏼‍🌾|👨🏼‍🍳|👨🏼‍🍼|👨🏼‍🎓|👨🏼‍🎤|👨🏼‍🎨|👨🏼‍🏫|👨🏼‍🏭|👨🏼‍💻|👨🏼‍💼|👨🏼‍🔧|👨🏼‍🔬|👨🏼‍🚀|👨🏼‍🚒|👨🏼‍🦯|👨🏼‍🦰|👨🏼‍🦱|👨🏼‍🦲|👨🏼‍🦳|👨🏼‍🦼|👨🏼‍🦽|👨🏽‍⚕️|👨🏽‍⚖️|👨🏽‍✈️|👨🏽‍🌾|👨🏽‍🍳|👨🏽‍🍼|👨🏽‍🎓|👨🏽‍🎤|👨🏽‍🎨|👨🏽‍🏫|👨🏽‍🏭|👨🏽‍💻|👨🏽‍💼|👨🏽‍🔧|👨🏽‍🔬|👨🏽‍🚀|👨🏽‍🚒|👨🏽‍🦯|👨🏽‍🦰|👨🏽‍🦱|👨🏽‍🦲|👨🏽‍🦳|👨🏽‍🦼|👨🏽‍🦽|👨🏾‍⚕️|👨🏾‍⚖️|👨🏾‍✈️|👨🏾‍🌾|👨🏾‍🍳|👨🏾‍🍼|👨🏾‍🎓|👨🏾‍🎤|👨🏾‍🎨|👨🏾‍🏫|👨🏾‍🏭|👨🏾‍💻|👨🏾‍💼|👨🏾‍🔧|👨🏾‍🔬|👨🏾‍🚀|👨🏾‍🚒|👨🏾‍🦯|👨🏾‍🦰|👨🏾‍🦱|👨🏾‍🦲|👨🏾‍🦳|👨🏾‍🦼|👨🏾‍🦽|👨🏿‍⚕️|👨🏿‍⚖️|👨🏿‍✈️|👨🏿‍🌾|👨🏿‍🍳|👨🏿‍🍼|👨🏿‍🎓|👨🏿‍🎤|👨🏿‍🎨|👨🏿‍🏫|👨🏿‍🏭|👨🏿‍💻|👨🏿‍💼|👨🏿‍🔧|👨🏿‍🔬|👨🏿‍🚀|👨🏿‍🚒|👨🏿‍🦯|👨🏿‍🦰|👨🏿‍🦱|👨🏿‍🦲|👨🏿‍🦳|👨🏿‍🦼|👨🏿‍🦽|👩🏻‍⚕️|👩🏻‍⚖️|👩🏻‍✈️|👩🏻‍🌾|👩🏻‍🍳|👩🏻‍🍼|👩🏻‍🎓|👩🏻‍🎤|👩🏻‍🎨|👩🏻‍🏫|👩🏻‍🏭|👩🏻‍💻|👩🏻‍💼|👩🏻‍🔧|👩🏻‍🔬|👩🏻‍🚀|👩🏻‍🚒|👩🏻‍🦯|👩🏻‍🦰|👩🏻‍🦱|👩🏻‍🦲|👩🏻‍🦳|👩🏻‍🦼|👩🏻‍🦽|👩🏼‍⚕️|👩🏼‍⚖️|👩🏼‍✈️|👩🏼‍🌾|👩🏼‍🍳|👩🏼‍🍼|👩🏼‍🎓|👩🏼‍🎤|👩🏼‍🎨|👩🏼‍🏫|👩🏼‍🏭|👩🏼‍💻|👩🏼‍💼|👩🏼‍🔧|👩🏼‍🔬|👩🏼‍🚀|👩🏼‍🚒|👩🏼‍🦯|👩🏼‍🦰|👩🏼‍🦱|👩🏼‍🦲|👩🏼‍🦳|👩🏼‍🦼|👩🏼‍🦽|👩🏽‍⚕️|👩🏽‍⚖️|👩🏽‍✈️|👩🏽‍🌾|👩🏽‍🍳|👩🏽‍🍼|👩🏽‍🎓|👩🏽‍🎤|👩🏽‍🎨|👩🏽‍🏫|👩🏽‍🏭|👩🏽‍💻|👩🏽‍💼|👩🏽‍🔧|👩🏽‍🔬|👩🏽‍🚀|👩🏽‍🚒|👩🏽‍🦯|👩🏽‍🦰|👩🏽‍🦱|👩🏽‍🦲|👩🏽‍🦳|👩🏽‍🦼|👩🏽‍🦽|👩🏾‍⚕️|👩🏾‍⚖️|👩🏾‍✈️|👩🏾‍🌾|👩🏾‍🍳|👩🏾‍🍼|👩🏾‍🎓|👩🏾‍🎤|👩🏾‍🎨|👩🏾‍🏫|👩🏾‍🏭|👩🏾‍💻|👩🏾‍💼|👩🏾‍🔧|👩🏾‍🔬|👩🏾‍🚀|👩🏾‍🚒|👩🏾‍🦯|👩🏾‍🦰|👩🏾‍🦱|👩🏾‍🦲|👩🏾‍🦳|👩🏾‍🦼|👩🏾‍🦽|👩🏿‍⚕️|👩🏿‍⚖️|👩🏿‍✈️|👩🏿‍🌾|👩🏿‍🍳|👩🏿‍🍼|👩🏿‍🎓|👩🏿‍🎤|👩🏿‍🎨|👩🏿‍🏫|👩🏿‍🏭|👩🏿‍💻|👩🏿‍💼|👩🏿‍🔧|👩🏿‍🔬|👩🏿‍🚀|👩🏿‍🚒|👩🏿‍🦯|👩🏿‍🦰|👩🏿‍🦱|👩🏿‍🦲|👩🏿‍🦳|👩🏿‍🦼|👩🏿‍🦽|👮🏻‍♀️|👮🏻‍♂️|👮🏼‍♀️|👮🏼‍♂️|👮🏽‍♀️|👮🏽‍♂️|👮🏾‍♀️|👮🏾‍♂️|👮🏿‍♀️|👮🏿‍♂️|👯🏻‍♀️|👯🏻‍♂️|👯🏼‍♀️|👯🏼‍♂️|👯🏽‍♀️|👯🏽‍♂️|👯🏾‍♀️|👯🏾‍♂️|👯🏿‍♀️|👯🏿‍♂️|👰🏻‍♀️|👰🏻‍♂️|👰🏼‍♀️|👰🏼‍♂️|👰🏽‍♀️|👰🏽‍♂️|👰🏾‍♀️|👰🏾‍♂️|👰🏿‍♀️|👰🏿‍♂️|👱🏻‍♀️|👱🏻‍♂️|👱🏼‍♀️|👱🏼‍♂️|👱🏽‍♀️|👱🏽‍♂️|👱🏾‍♀️|👱🏾‍♂️|👱🏿‍♀️|👱🏿‍♂️|👳🏻‍♀️|👳🏻‍♂️|👳🏼‍♀️|👳🏼‍♂️|👳🏽‍♀️|👳🏽‍♂️|👳🏾‍♀️|👳🏾‍♂️|👳🏿‍♀️|👳🏿‍♂️|👷🏻‍♀️|👷🏻‍♂️|👷🏼‍♀️|👷🏼‍♂️|👷🏽‍♀️|👷🏽‍♂️|👷🏾‍♀️|👷🏾‍♂️|👷🏿‍♀️|👷🏿‍♂️|💁🏻‍♀️|💁🏻‍♂️|💁🏼‍♀️|💁🏼‍♂️|💁🏽‍♀️|💁🏽‍♂️|💁🏾‍♀️|💁🏾‍♂️|💁🏿‍♀️|💁🏿‍♂️|💂🏻‍♀️|💂🏻‍♂️|💂🏼‍♀️|💂🏼‍♂️|💂🏽‍♀️|💂🏽‍♂️|💂🏾‍♀️|💂🏾‍♂️|💂🏿‍♀️|💂🏿‍♂️|💆🏻‍♀️|💆🏻‍♂️|💆🏼‍♀️|💆🏼‍♂️|💆🏽‍♀️|💆🏽‍♂️|💆🏾‍♀️|💆🏾‍♂️|💆🏿‍♀️|💆🏿‍♂️|💇🏻‍♀️|💇🏻‍♂️|💇🏼‍♀️|💇🏼‍♂️|💇🏽‍♀️|💇🏽‍♂️|💇🏾‍♀️|💇🏾‍♂️|💇🏿‍♀️|💇🏿‍♂️|🕵🏻‍♀️|🕵🏻‍♂️|🕵🏼‍♀️|🕵🏼‍♂️|🕵🏽‍♀️|🕵🏽‍♂️|🕵🏾‍♀️|🕵🏾‍♂️|🕵🏿‍♀️|🕵🏿‍♂️|🙅🏻‍♀️|🙅🏻‍♂️|🙅🏼‍♀️|🙅🏼‍♂️|🙅🏽‍♀️|🙅🏽‍♂️|🙅🏾‍♀️|🙅🏾‍♂️|🙅🏿‍♀️|🙅🏿‍♂️|🙆🏻‍♀️|🙆🏻‍♂️|🙆🏼‍♀️|🙆🏼‍♂️|🙆🏽‍♀️|🙆🏽‍♂️|🙆🏾‍♀️|🙆🏾‍♂️|🙆🏿‍♀️|🙆🏿‍♂️|🙇🏻‍♀️|🙇🏻‍♂️|🙇🏼‍♀️|🙇🏼‍♂️|🙇🏽‍♀️|🙇🏽‍♂️|🙇🏾‍♀️|🙇🏾‍♂️|🙇🏿‍♀️|🙇🏿‍♂️|🙋🏻‍♀️|🙋🏻‍♂️|🙋🏼‍♀️|🙋🏼‍♂️|🙋🏽‍♀️|🙋🏽‍♂️|🙋🏾‍♀️|🙋🏾‍♂️|🙋🏿‍♀️|🙋🏿‍♂️|🙍🏻‍♀️|🙍🏻‍♂️|🙍🏼‍♀️|🙍🏼‍♂️|🙍🏽‍♀️|🙍🏽‍♂️|🙍🏾‍♀️|🙍🏾‍♂️|🙍🏿‍♀️|🙍🏿‍♂️|🙎🏻‍♀️|🙎🏻‍♂️|🙎🏼‍♀️|🙎🏼‍♂️|🙎🏽‍♀️|🙎🏽‍♂️|🙎🏾‍♀️|🙎🏾‍♂️|🙎🏿‍♀️|🙎🏿‍♂️|🚣🏻‍♀️|🚣🏻‍♂️|🚣🏼‍♀️|🚣🏼‍♂️|🚣🏽‍♀️|🚣🏽‍♂️|🚣🏾‍♀️|🚣🏾‍♂️|🚣🏿‍♀️|🚣🏿‍♂️|🚴🏻‍♀️|🚴🏻‍♂️|🚴🏼‍♀️|🚴🏼‍♂️|🚴🏽‍♀️|🚴🏽‍♂️|🚴🏾‍♀️|🚴🏾‍♂️|🚴🏿‍♀️|🚴🏿‍♂️|🚵🏻‍♀️|🚵🏻‍♂️|🚵🏼‍♀️|🚵🏼‍♂️|🚵🏽‍♀️|🚵🏽‍♂️|🚵🏾‍♀️|🚵🏾‍♂️|🚵🏿‍♀️|🚵🏿‍♂️|🚶🏻‍♀️|🚶🏻‍♂️|🚶🏻‍➡️|🚶🏼‍♀️|🚶🏼‍♂️|🚶🏼‍➡️|🚶🏽‍♀️|🚶🏽‍♂️|🚶🏽‍➡️|🚶🏾‍♀️|🚶🏾‍♂️|🚶🏾‍➡️|🚶🏿‍♀️|🚶🏿‍♂️|🚶🏿‍➡️|🤦🏻‍♀️|🤦🏻‍♂️|🤦🏼‍♀️|🤦🏼‍♂️|🤦🏽‍♀️|🤦🏽‍♂️|🤦🏾‍♀️|🤦🏾‍♂️|🤦🏿‍♀️|🤦🏿‍♂️|🤵🏻‍♀️|🤵🏻‍♂️|🤵🏼‍♀️|🤵🏼‍♂️|🤵🏽‍♀️|🤵🏽‍♂️|🤵🏾‍♀️|🤵🏾‍♂️|🤵🏿‍♀️|🤵🏿‍♂️|🤷🏻‍♀️|🤷🏻‍♂️|🤷🏼‍♀️|🤷🏼‍♂️|🤷🏽‍♀️|🤷🏽‍♂️|🤷🏾‍♀️|🤷🏾‍♂️|🤷🏿‍♀️|🤷🏿‍♂️|🤸🏻‍♀️|🤸🏻‍♂️|🤸🏼‍♀️|🤸🏼‍♂️|🤸🏽‍♀️|🤸🏽‍♂️|🤸🏾‍♀️|🤸🏾‍♂️|🤸🏿‍♀️|🤸🏿‍♂️|🤹🏻‍♀️|🤹🏻‍♂️|🤹🏼‍♀️|🤹🏼‍♂️|🤹🏽‍♀️|🤹🏽‍♂️|🤹🏾‍♀️|🤹🏾‍♂️|🤹🏿‍♀️|🤹🏿‍♂️|🤼🏻‍♀️|🤼🏻‍♂️|🤼🏼‍♀️|🤼🏼‍♂️|🤼🏽‍♀️|🤼🏽‍♂️|🤼🏾‍♀️|🤼🏾‍♂️|🤼🏿‍♀️|🤼🏿‍♂️|🤽🏻‍♀️|🤽🏻‍♂️|🤽🏼‍♀️|🤽🏼‍♂️|🤽🏽‍♀️|🤽🏽‍♂️|🤽🏾‍♀️|🤽🏾‍♂️|🤽🏿‍♀️|🤽🏿‍♂️|🤾🏻‍♀️|🤾🏻‍♂️|🤾🏼‍♀️|🤾🏼‍♂️|🤾🏽‍♀️|🤾🏽‍♂️|🤾🏾‍♀️|🤾🏾‍♂️|🤾🏿‍♀️|🤾🏿‍♂️|🦸🏻‍♀️|🦸🏻‍♂️|🦸🏼‍♀️|🦸🏼‍♂️|🦸🏽‍♀️|🦸🏽‍♂️|🦸🏾‍♀️|🦸🏾‍♂️|🦸🏿‍♀️|🦸🏿‍♂️|🦹🏻‍♀️|🦹🏻‍♂️|🦹🏼‍♀️|🦹🏼‍♂️|🦹🏽‍♀️|🦹🏽‍♂️|🦹🏾‍♀️|🦹🏾‍♂️|🦹🏿‍♀️|🦹🏿‍♂️|🧍🏻‍♀️|🧍🏻‍♂️|🧍🏼‍♀️|🧍🏼‍♂️|🧍🏽‍♀️|🧍🏽‍♂️|🧍🏾‍♀️|🧍🏾‍♂️|🧍🏿‍♀️|🧍🏿‍♂️|🧎🏻‍♀️|🧎🏻‍♂️|🧎🏻‍➡️|🧎🏼‍♀️|🧎🏼‍♂️|🧎🏼‍➡️|🧎🏽‍♀️|🧎🏽‍♂️|🧎🏽‍➡️|🧎🏾‍♀️|🧎🏾‍♂️|🧎🏾‍➡️|🧎🏿‍♀️|🧎🏿‍♂️|🧎🏿‍➡️|🧏🏻‍♀️|🧏🏻‍♂️|🧏🏼‍♀️|🧏🏼‍♂️|🧏🏽‍♀️|🧏🏽‍♂️|🧏🏾‍♀️|🧏🏾‍♂️|🧏🏿‍♀️|🧏🏿‍♂️|🧑🏻‍⚕️|🧑🏻‍⚖️|🧑🏻‍✈️|🧑🏻‍🌾|🧑🏻‍🍳|🧑🏻‍🍼|🧑🏻‍🎄|🧑🏻‍🎓|🧑🏻‍🎤|🧑🏻‍🎨|🧑🏻‍🏫|🧑🏻‍🏭|🧑🏻‍💻|🧑🏻‍💼|🧑🏻‍🔧|🧑🏻‍🔬|🧑🏻‍🚀|🧑🏻‍🚒|🧑🏻‍🦯|🧑🏻‍🦰|🧑🏻‍🦱|🧑🏻‍🦲|🧑🏻‍🦳|🧑🏻‍🦼|🧑🏻‍🦽|🧑🏻‍🩰|🧑🏼‍⚕️|🧑🏼‍⚖️|🧑🏼‍✈️|🧑🏼‍🌾|🧑🏼‍🍳|🧑🏼‍🍼|🧑🏼‍🎄|🧑🏼‍🎓|🧑🏼‍🎤|🧑🏼‍🎨|🧑🏼‍🏫|🧑🏼‍🏭|🧑🏼‍💻|🧑🏼‍💼|🧑🏼‍🔧|🧑🏼‍🔬|🧑🏼‍🚀|🧑🏼‍🚒|🧑🏼‍🦯|🧑🏼‍🦰|🧑🏼‍🦱|🧑🏼‍🦲|🧑🏼‍🦳|🧑🏼‍🦼|🧑🏼‍🦽|🧑🏼‍🩰|🧑🏽‍⚕️|🧑🏽‍⚖️|🧑🏽‍✈️|🧑🏽‍🌾|🧑🏽‍🍳|🧑🏽‍🍼|🧑🏽‍🎄|🧑🏽‍🎓|🧑🏽‍🎤|🧑🏽‍🎨|🧑🏽‍🏫|🧑🏽‍🏭|🧑🏽‍💻|🧑🏽‍💼|🧑🏽‍🔧|🧑🏽‍🔬|🧑🏽‍🚀|🧑🏽‍🚒|🧑🏽‍🦯|🧑🏽‍🦰|🧑🏽‍🦱|🧑🏽‍🦲|🧑🏽‍🦳|🧑🏽‍🦼|🧑🏽‍🦽|🧑🏽‍🩰|🧑🏾‍⚕️|🧑🏾‍⚖️|🧑🏾‍✈️|🧑🏾‍🌾|🧑🏾‍🍳|🧑🏾‍🍼|🧑🏾‍🎄|🧑🏾‍🎓|🧑🏾‍🎤|🧑🏾‍🎨|🧑🏾‍🏫|🧑🏾‍🏭|🧑🏾‍💻|🧑🏾‍💼|🧑🏾‍🔧|🧑🏾‍🔬|🧑🏾‍🚀|🧑🏾‍🚒|🧑🏾‍🦯|🧑🏾‍🦰|🧑🏾‍🦱|🧑🏾‍🦲|🧑🏾‍🦳|🧑🏾‍🦼|🧑🏾‍🦽|🧑🏾‍🩰|🧑🏿‍⚕️|🧑🏿‍⚖️|🧑🏿‍✈️|🧑🏿‍🌾|🧑🏿‍🍳|🧑🏿‍🍼|🧑🏿‍🎄|🧑🏿‍🎓|🧑🏿‍🎤|🧑🏿‍🎨|🧑🏿‍🏫|🧑🏿‍🏭|🧑🏿‍💻|🧑🏿‍💼|🧑🏿‍🔧|🧑🏿‍🔬|🧑🏿‍🚀|🧑🏿‍🚒|🧑🏿‍🦯|🧑🏿‍🦰|🧑🏿‍🦱|🧑🏿‍🦲|🧑🏿‍🦳|🧑🏿‍🦼|🧑🏿‍🦽|🧑🏿‍🩰|🧔🏻‍♀️|🧔🏻‍♂️|🧔🏼‍♀️|🧔🏼‍♂️|🧔🏽‍♀️|🧔🏽‍♂️|🧔🏾‍♀️|🧔🏾‍♂️|🧔🏿‍♀️|🧔🏿‍♂️|🧖🏻‍♀️|🧖🏻‍♂️|🧖🏼‍♀️|🧖🏼‍♂️|🧖🏽‍♀️|🧖🏽‍♂️|🧖🏾‍♀️|🧖🏾‍♂️|🧖🏿‍♀️|🧖🏿‍♂️|🧗🏻‍♀️|🧗🏻‍♂️|🧗🏼‍♀️|🧗🏼‍♂️|🧗🏽‍♀️|🧗🏽‍♂️|🧗🏾‍♀️|🧗🏾‍♂️|🧗🏿‍♀️|🧗🏿‍♂️|🧘🏻‍♀️|🧘🏻‍♂️|🧘🏼‍♀️|🧘🏼‍♂️|🧘🏽‍♀️|🧘🏽‍♂️|🧘🏾‍♀️|🧘🏾‍♂️|🧘🏿‍♀️|🧘🏿‍♂️|🧙🏻‍♀️|🧙🏻‍♂️|🧙🏼‍♀️|🧙🏼‍♂️|🧙🏽‍♀️|🧙🏽‍♂️|🧙🏾‍♀️|🧙🏾‍♂️|🧙🏿‍♀️|🧙🏿‍♂️|🧚🏻‍♀️|🧚🏻‍♂️|🧚🏼‍♀️|🧚🏼‍♂️|🧚🏽‍♀️|🧚🏽‍♂️|🧚🏾‍♀️|🧚🏾‍♂️|🧚🏿‍♀️|🧚🏿‍♂️|🧛🏻‍♀️|🧛🏻‍♂️|🧛🏼‍♀️|🧛🏼‍♂️|🧛🏽‍♀️|🧛🏽‍♂️|🧛🏾‍♀️|🧛🏾‍♂️|🧛🏿‍♀️|🧛🏿‍♂️|🧜🏻‍♀️|🧜🏻‍♂️|🧜🏼‍♀️|🧜🏼‍♂️|🧜🏽‍♀️|🧜🏽‍♂️|🧜🏾‍♀️|🧜🏾‍♂️|🧜🏿‍♀️|🧜🏿‍♂️|🧝🏻‍♀️|🧝🏻‍♂️|🧝🏼‍♀️|🧝🏼‍♂️|🧝🏽‍♀️|🧝🏽‍♂️|🧝🏾‍♀️|🧝🏾‍♂️|🧝🏿‍♀️|🧝🏿‍♂️|⛹🏻‍♀️|⛹🏻‍♂️|⛹🏼‍♀️|⛹🏼‍♂️|⛹🏽‍♀️|⛹🏽‍♂️|⛹🏾‍♀️|⛹🏾‍♂️|⛹🏿‍♀️|⛹🏿‍♂️|🏋️‍♀️|🏋️‍♂️|🏌️‍♀️|🏌️‍♂️|🏳️‍⚧️|🏳️‍🌈|🕵️‍♀️|🕵️‍♂️|😶‍🌫️|⛓️‍💥|⛹️‍♀️|⛹️‍♂️|❤️‍🔥|❤️‍🩹|🍄‍🟫|🍋‍🟩|🏃‍♀️|🏃‍♂️|🏃‍➡️|🏄‍♀️|🏄‍♂️|🏊‍♀️|🏊‍♂️|🏴‍☠️|🐕‍🦺|🐦‍🔥|🐻‍❄️|👨‍⚕️|👨‍⚖️|👨‍✈️|👨‍🌾|👨‍🍳|👨‍🍼|👨‍🎓|👨‍🎤|👨‍🎨|👨‍🏫|👨‍🏭|👨‍👦|👨‍👧|👨‍💻|👨‍💼|👨‍🔧|👨‍🔬|👨‍🚀|👨‍🚒|👨‍🦯|👨‍🦰|👨‍🦱|👨‍🦲|👨‍🦳|👨‍🦼|👨‍🦽|👩‍⚕️|👩‍⚖️|👩‍✈️|👩‍🌾|👩‍🍳|👩‍🍼|👩‍🎓|👩‍🎤|👩‍🎨|👩‍🏫|👩‍🏭|👩‍👦|👩‍👧|👩‍💻|👩‍💼|👩‍🔧|👩‍🔬|👩‍🚀|👩‍🚒|👩‍🦯|👩‍🦰|👩‍🦱|👩‍🦲|👩‍🦳|👩‍🦼|👩‍🦽|👮‍♀️|👮‍♂️|👯‍♀️|👯‍♂️|👰‍♀️|👰‍♂️|👱‍♀️|👱‍♂️|👳‍♀️|👳‍♂️|👷‍♀️|👷‍♂️|💁‍♀️|💁‍♂️|💂‍♀️|💂‍♂️|💆‍♀️|💆‍♂️|💇‍♀️|💇‍♂️|😮‍💨|😵‍💫|🙂‍↔️|🙂‍↕️|🙅‍♀️|🙅‍♂️|🙆‍♀️|🙆‍♂️|🙇‍♀️|🙇‍♂️|🙋‍♀️|🙋‍♂️|🙍‍♀️|🙍‍♂️|🙎‍♀️|🙎‍♂️|🚣‍♀️|🚣‍♂️|🚴‍♀️|🚴‍♂️|🚵‍♀️|🚵‍♂️|🚶‍♀️|🚶‍♂️|🚶‍➡️|🤦‍♀️|🤦‍♂️|🤵‍♀️|🤵‍♂️|🤷‍♀️|🤷‍♂️|🤸‍♀️|🤸‍♂️|🤹‍♀️|🤹‍♂️|🤼‍♀️|🤼‍♂️|🤽‍♀️|🤽‍♂️|🤾‍♀️|🤾‍♂️|🦸‍♀️|🦸‍♂️|🦹‍♀️|🦹‍♂️|🧍‍♀️|🧍‍♂️|🧎‍♀️|🧎‍♂️|🧎‍➡️|🧏‍♀️|🧏‍♂️|🧑‍⚕️|🧑‍⚖️|🧑‍✈️|🧑‍🌾|🧑‍🍳|🧑‍🍼|🧑‍🎄|🧑‍🎓|🧑‍🎤|🧑‍🎨|🧑‍🏫|🧑‍🏭|🧑‍💻|🧑‍💼|🧑‍🔧|🧑‍🔬|🧑‍🚀|🧑‍🚒|🧑‍🦯|🧑‍🦰|🧑‍🦱|🧑‍🦲|🧑‍🦳|🧑‍🦼|🧑‍🦽|🧑‍🧒|🧑‍🩰|🧔‍♀️|🧔‍♂️|🧖‍♀️|🧖‍♂️|🧗‍♀️|🧗‍♂️|🧘‍♀️|🧘‍♂️|🧙‍♀️|🧙‍♂️|🧚‍♀️|🧚‍♂️|🧛‍♀️|🧛‍♂️|🧜‍♀️|🧜‍♂️|🧝‍♀️|🧝‍♂️|🧞‍♀️|🧞‍♂️|🧟‍♀️|🧟‍♂️|\*️⃣|🇦🇨|🇦🇩|🇦🇪|🇦🇫|🇦🇬|🇦🇮|🇦🇱|🇦🇲|🇦🇴|🇦🇶|🇦🇷|🇦🇸|🇦🇹|🇦🇺|🇦🇼|🇦🇽|🇦🇿|🇧🇦|🇧🇧|🇧🇩|🇧🇪|🇧🇫|🇧🇬|🇧🇭|🇧🇮|🇧🇯|🇧🇱|🇧🇲|🇧🇳|🇧🇴|🇧🇶|🇧🇷|🇧🇸|🇧🇹|🇧🇻|🇧🇼|🇧🇾|🇧🇿|🇨🇦|🇨🇨|🇨🇩|🇨🇫|🇨🇬|🇨🇭|🇨🇮|🇨🇰|🇨🇱|🇨🇲|🇨🇳|🇨🇴|🇨🇵|🇨🇶|🇨🇷|🇨🇺|🇨🇻|🇨🇼|🇨🇽|🇨🇾|🇨🇿|🇩🇪|🇩🇬|🇩🇯|🇩🇰|🇩🇲|🇩🇴|🇩🇿|🇪🇦|🇪🇨|🇪🇪|🇪🇬|🇪🇭|🇪🇷|🇪🇸|🇪🇹|🇪🇺|🇫🇮|🇫🇯|🇫🇰|🇫🇲|🇫🇴|🇫🇷|🇬🇦|🇬🇧|🇬🇩|🇬🇪|🇬🇫|🇬🇬|🇬🇭|🇬🇮|🇬🇱|🇬🇲|🇬🇳|🇬🇵|🇬🇶|🇬🇷|🇬🇸|🇬🇹|🇬🇺|🇬🇼|🇬🇾|🇭🇰|🇭🇲|🇭🇳|🇭🇷|🇭🇹|🇭🇺|🇮🇨|🇮🇩|🇮🇪|🇮🇱|🇮🇲|🇮🇳|🇮🇴|🇮🇶|🇮🇷|🇮🇸|🇮🇹|🇯🇪|🇯🇲|🇯🇴|🇯🇵|🇰🇪|🇰🇬|🇰🇭|🇰🇮|🇰🇲|🇰🇳|🇰🇵|🇰🇷|🇰🇼|🇰🇾|🇰🇿|🇱🇦|🇱🇧|🇱🇨|🇱🇮|🇱🇰|🇱🇷|🇱🇸|🇱🇹|🇱🇺|🇱🇻|🇱🇾|🇲🇦|🇲🇨|🇲🇩|🇲🇪|🇲🇫|🇲🇬|🇲🇭|🇲🇰|🇲🇱|🇲🇲|🇲🇳|🇲🇴|🇲🇵|🇲🇶|🇲🇷|🇲🇸|🇲🇹|🇲🇺|🇲🇻|🇲🇼|🇲🇽|🇲🇾|🇲🇿|🇳🇦|🇳🇨|🇳🇪|🇳🇫|🇳🇬|🇳🇮|🇳🇱|🇳🇴|🇳🇵|🇳🇷|🇳🇺|🇳🇿|🇴🇲|🇵🇦|🇵🇪|🇵🇫|🇵🇬|🇵🇭|🇵🇰|🇵🇱|🇵🇲|🇵🇳|🇵🇷|🇵🇸|🇵🇹|🇵🇼|🇵🇾|🇶🇦|🇷🇪|🇷🇴|🇷🇸|🇷🇺|🇷🇼|🇸🇦|🇸🇧|🇸🇨|🇸🇩|🇸🇪|🇸🇬|🇸🇭|🇸🇮|🇸🇯|🇸🇰|🇸🇱|🇸🇲|🇸🇳|🇸🇴|🇸🇷|🇸🇸|🇸🇹|🇸🇻|🇸🇽|🇸🇾|🇸🇿|🇹🇦|🇹🇨|🇹🇩|🇹🇫|🇹🇬|🇹🇭|🇹🇯|🇹🇰|🇹🇱|🇹🇲|🇹🇳|🇹🇴|🇹🇷|🇹🇹|🇹🇻|🇹🇼|🇹🇿|🇺🇦|🇺🇬|🇺🇲|🇺🇳|🇺🇸|🇺🇾|🇺🇿|🇻🇦|🇻🇨|🇻🇪|🇻🇬|🇻🇮|🇻🇳|🇻🇺|🇼🇫|🇼🇸|🇽🇰|🇾🇪|🇾🇹|🇿🇦|🇿🇲|🇿🇼|🎅🏻|🎅🏼|🎅🏽|🎅🏾|🎅🏿|🏂🏻|🏂🏼|🏂🏽|🏂🏾|🏂🏿|🏃🏻|🏃🏼|🏃🏽|🏃🏾|🏃🏿|🏄🏻|🏄🏼|🏄🏽|🏄🏾|🏄🏿|🏇🏻|🏇🏼|🏇🏽|🏇🏾|🏇🏿|🏊🏻|🏊🏼|🏊🏽|🏊🏾|🏊🏿|🏋🏻|🏋🏼|🏋🏽|🏋🏾|🏋🏿|🏌🏻|🏌🏼|🏌🏽|🏌🏾|🏌🏿|🐈‍⬛|🐦‍⬛|👂🏻|👂🏼|👂🏽|👂🏾|👂🏿|👃🏻|👃🏼|👃🏽|👃🏾|👃🏿|👆🏻|👆🏼|👆🏽|👆🏾|👆🏿|👇🏻|👇🏼|👇🏽|👇🏾|👇🏿|👈🏻|👈🏼|👈🏽|👈🏾|👈🏿|👉🏻|👉🏼|👉🏽|👉🏾|👉🏿|👊🏻|👊🏼|👊🏽|👊🏾|👊🏿|👋🏻|👋🏼|👋🏽|👋🏾|👋🏿|👌🏻|👌🏼|👌🏽|👌🏾|👌🏿|👍🏻|👍🏼|👍🏽|👍🏾|👍🏿|👎🏻|👎🏼|👎🏽|👎🏾|👎🏿|👏🏻|👏🏼|👏🏽|👏🏾|👏🏿|👐🏻|👐🏼|👐🏽|👐🏾|👐🏿|👦🏻|👦🏼|👦🏽|👦🏾|👦🏿|👧🏻|👧🏼|👧🏽|👧🏾|👧🏿|👨🏻|👨🏼|👨🏽|👨🏾|👨🏿|👩🏻|👩🏼|👩🏽|👩🏾|👩🏿|👫🏻|👫🏼|👫🏽|👫🏾|👫🏿|👬🏻|👬🏼|👬🏽|👬🏾|👬🏿|👭🏻|👭🏼|👭🏽|👭🏾|👭🏿|👮🏻|👮🏼|👮🏽|👮🏾|👮🏿|👯🏻|👯🏼|👯🏽|👯🏾|👯🏿|👰🏻|👰🏼|👰🏽|👰🏾|👰🏿|👱🏻|👱🏼|👱🏽|👱🏾|👱🏿|👲🏻|👲🏼|👲🏽|👲🏾|👲🏿|👳🏻|👳🏼|👳🏽|👳🏾|👳🏿|👴🏻|👴🏼|👴🏽|👴🏾|👴🏿|👵🏻|👵🏼|👵🏽|👵🏾|👵🏿|👶🏻|👶🏼|👶🏽|👶🏾|👶🏿|👷🏻|👷🏼|👷🏽|👷🏾|👷🏿|👸🏻|👸🏼|👸🏽|👸🏾|👸🏿|👼🏻|👼🏼|👼🏽|👼🏾|👼🏿|💁🏻|💁🏼|💁🏽|💁🏾|💁🏿|💂🏻|💂🏼|💂🏽|💂🏾|💂🏿|💃🏻|💃🏼|💃🏽|💃🏾|💃🏿|💅🏻|💅🏼|💅🏽|💅🏾|💅🏿|💆🏻|💆🏼|💆🏽|💆🏾|💆🏿|💇🏻|💇🏼|💇🏽|💇🏾|💇🏿|💏🏻|💏🏼|💏🏽|💏🏾|💏🏿|💑🏻|💑🏼|💑🏽|💑🏾|💑🏿|💪🏻|💪🏼|💪🏽|💪🏾|💪🏿|🕴🏻|🕴🏼|🕴🏽|🕴🏾|🕴🏿|🕵🏻|🕵🏼|🕵🏽|🕵🏾|🕵🏿|🕺🏻|🕺🏼|🕺🏽|🕺🏾|🕺🏿|🖐🏻|🖐🏼|🖐🏽|🖐🏾|🖐🏿|🖕🏻|🖕🏼|🖕🏽|🖕🏾|🖕🏿|🖖🏻|🖖🏼|🖖🏽|🖖🏾|🖖🏿|🙅🏻|🙅🏼|🙅🏽|🙅🏾|🙅🏿|🙆🏻|🙆🏼|🙆🏽|🙆🏾|🙆🏿|🙇🏻|🙇🏼|🙇🏽|🙇🏾|🙇🏿|🙋🏻|🙋🏼|🙋🏽|🙋🏾|🙋🏿|🙌🏻|🙌🏼|🙌🏽|🙌🏾|🙌🏿|🙍🏻|🙍🏼|🙍🏽|🙍🏾|🙍🏿|🙎🏻|🙎🏼|🙎🏽|🙎🏾|🙎🏿|🙏🏻|🙏🏼|🙏🏽|🙏🏾|🙏🏿|🚣🏻|🚣🏼|🚣🏽|🚣🏾|🚣🏿|🚴🏻|🚴🏼|🚴🏽|🚴🏾|🚴🏿|🚵🏻|🚵🏼|🚵🏽|🚵🏾|🚵🏿|🚶🏻|🚶🏼|🚶🏽|🚶🏾|🚶🏿|🛀🏻|🛀🏼|🛀🏽|🛀🏾|🛀🏿|🛌🏻|🛌🏼|🛌🏽|🛌🏾|🛌🏿|🤌🏻|🤌🏼|🤌🏽|🤌🏾|🤌🏿|🤏🏻|🤏🏼|🤏🏽|🤏🏾|🤏🏿|🤘🏻|🤘🏼|🤘🏽|🤘🏾|🤘🏿|🤙🏻|🤙🏼|🤙🏽|🤙🏾|🤙🏿|🤚🏻|🤚🏼|🤚🏽|🤚🏾|🤚🏿|🤛🏻|🤛🏼|🤛🏽|🤛🏾|🤛🏿|🤜🏻|🤜🏼|🤜🏽|🤜🏾|🤜🏿|🤝🏻|🤝🏼|🤝🏽|🤝🏾|🤝🏿|🤞🏻|🤞🏼|🤞🏽|🤞🏾|🤞🏿|🤟🏻|🤟🏼|🤟🏽|🤟🏾|🤟🏿|🤦🏻|🤦🏼|🤦🏽|🤦🏾|🤦🏿|🤰🏻|🤰🏼|🤰🏽|🤰🏾|🤰🏿|🤱🏻|🤱🏼|🤱🏽|🤱🏾|🤱🏿|🤲🏻|🤲🏼|🤲🏽|🤲🏾|🤲🏿|🤳🏻|🤳🏼|🤳🏽|🤳🏾|🤳🏿|🤴🏻|🤴🏼|🤴🏽|🤴🏾|🤴🏿|🤵🏻|🤵🏼|🤵🏽|🤵🏾|🤵🏿|🤶🏻|🤶🏼|🤶🏽|🤶🏾|🤶🏿|🤷🏻|🤷🏼|🤷🏽|🤷🏾|🤷🏿|🤸🏻|🤸🏼|🤸🏽|🤸🏾|🤸🏿|🤹🏻|🤹🏼|🤹🏽|🤹🏾|🤹🏿|🤼🏻|🤼🏼|🤼🏽|🤼🏾|🤼🏿|🤽🏻|🤽🏼|🤽🏽|🤽🏾|🤽🏿|🤾🏻|🤾🏼|🤾🏽|🤾🏾|🤾🏿|🥷🏻|🥷🏼|🥷🏽|🥷🏾|🥷🏿|🦵🏻|🦵🏼|🦵🏽|🦵🏾|🦵🏿|🦶🏻|🦶🏼|🦶🏽|🦶🏾|🦶🏿|🦸🏻|🦸🏼|🦸🏽|🦸🏾|🦸🏿|🦹🏻|🦹🏼|🦹🏽|🦹🏾|🦹🏿|🦻🏻|🦻🏼|🦻🏽|🦻🏾|🦻🏿|🧍🏻|🧍🏼|🧍🏽|🧍🏾|🧍🏿|🧎🏻|🧎🏼|🧎🏽|🧎🏾|🧎🏿|🧏🏻|🧏🏼|🧏🏽|🧏🏾|🧏🏿|🧑🏻|🧑🏼|🧑🏽|🧑🏾|🧑🏿|🧒🏻|🧒🏼|🧒🏽|🧒🏾|🧒🏿|🧓🏻|🧓🏼|🧓🏽|🧓🏾|🧓🏿|🧔🏻|🧔🏼|🧔🏽|🧔🏾|🧔🏿|🧕🏻|🧕🏼|🧕🏽|🧕🏾|🧕🏿|🧖🏻|🧖🏼|🧖🏽|🧖🏾|🧖🏿|🧗🏻|🧗🏼|🧗🏽|🧗🏾|🧗🏿|🧘🏻|🧘🏼|🧘🏽|🧘🏾|🧘🏿|🧙🏻|🧙🏼|🧙🏽|🧙🏾|🧙🏿|🧚🏻|🧚🏼|🧚🏽|🧚🏾|🧚🏿|🧛🏻|🧛🏼|🧛🏽|🧛🏾|🧛🏿|🧜🏻|🧜🏼|🧜🏽|🧜🏾|🧜🏿|🧝🏻|🧝🏼|🧝🏽|🧝🏾|🧝🏿|🫃🏻|🫃🏼|🫃🏽|🫃🏾|🫃🏿|🫄🏻|🫄🏼|🫄🏽|🫄🏾|🫄🏿|🫅🏻|🫅🏼|🫅🏽|🫅🏾|🫅🏿|🫰🏻|🫰🏼|🫰🏽|🫰🏾|🫰🏿|🫱🏻|🫱🏼|🫱🏽|🫱🏾|🫱🏿|🫲🏻|🫲🏼|🫲🏽|🫲🏾|🫲🏿|🫳🏻|🫳🏼|🫳🏽|🫳🏾|🫳🏿|🫴🏻|🫴🏼|🫴🏽|🫴🏾|🫴🏿|🫵🏻|🫵🏼|🫵🏽|🫵🏾|🫵🏿|🫶🏻|🫶🏼|🫶🏽|🫶🏾|🫶🏿|🫷🏻|🫷🏼|🫷🏽|🫷🏾|🫷🏿|🫸🏻|🫸🏼|🫸🏽|🫸🏾|🫸🏿|#️⃣|0️⃣|1️⃣|2️⃣|3️⃣|4️⃣|5️⃣|6️⃣|7️⃣|8️⃣|9️⃣|☝🏻|☝🏼|☝🏽|☝🏾|☝🏿|⛹🏻|⛹🏼|⛹🏽|⛹🏾|⛹🏿|✊🏻|✊🏼|✊🏽|✊🏾|✊🏿|✋🏻|✋🏼|✋🏽|✋🏾|✋🏿|✌🏻|✌🏼|✌🏽|✌🏾|✌🏿|✍🏻|✍🏼|✍🏽|✍🏾|✍🏿|🅰️|🅱️|🅾️|🅿️|🈂️|🈷️|🌡️|🌤️|🌥️|🌦️|🌧️|🌨️|🌩️|🌪️|🌫️|🌬️|🌶️|🍽️|🎖️|🎗️|🎙️|🎚️|🎛️|🎞️|🎟️|🏋️|🏌️|🏍️|🏎️|🏔️|🏕️|🏖️|🏗️|🏘️|🏙️|🏚️|🏛️|🏜️|🏝️|🏞️|🏟️|🏳️|🏵️|🏷️|🐿️|👁️|📽️|🕉️|🕊️|🕯️|🕰️|🕳️|🕴️|🕵️|🕶️|🕷️|🕸️|🕹️|🖇️|🖊️|🖋️|🖌️|🖍️|🖐️|🖥️|🖨️|🖱️|🖲️|🖼️|🗂️|🗃️|🗄️|🗑️|🗒️|🗓️|🗜️|🗝️|🗞️|🗡️|🗣️|🗨️|🗯️|🗳️|🗺️|🛋️|🛍️|🛎️|🛏️|🛠️|🛡️|🛢️|🛣️|🛤️|🛥️|🛩️|🛰️|🛳️|©️|®️|‼️|⁉️|™️|ℹ️|↔️|↕️|↖️|↗️|↘️|↙️|↩️|↪️|⌨️|⏏️|⏭️|⏮️|⏯️|⏱️|⏲️|⏸️|⏹️|⏺️|Ⓜ️|▪️|▫️|▶️|◀️|◻️|◼️|☀️|☁️|☂️|☃️|☄️|☎️|☑️|☘️|☝️|☠️|☢️|☣️|☦️|☪️|☮️|☯️|☸️|☹️|☺️|♀️|♂️|♟️|♠️|♣️|♥️|♦️|♨️|♻️|♾️|⚒️|⚔️|⚕️|⚖️|⚗️|⚙️|⚛️|⚜️|⚠️|⚧️|⚰️|⚱️|⛈️|⛏️|⛑️|⛓️|⛩️|⛰️|⛱️|⛴️|⛷️|⛸️|⛹️|✂️|✈️|✉️|✌️|✍️|✏️|✒️|✔️|✖️|✝️|✡️|✳️|✴️|❄️|❇️|❣️|❤️|➡️|⤴️|⤵️|⬅️|⬆️|⬇️|〰️|〽️|㊗️|㊙️|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55\u{1F004}\u{1F0CF}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F236}\u{1F238}-\u{1F23A}\u{1F250}\u{1F251}\u{1F300}-\u{1F320}\u{1F32D}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F37E}-\u{1F393}\u{1F3A0}-\u{1F3CA}\u{1F3CF}-\u{1F3D3}\u{1F3E0}-\u{1F3F0}\u{1F3F4}\u{1F3F8}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4FC}\u{1F4FF}-\u{1F53D}\u{1F54B}-\u{1F54E}\u{1F550}-\u{1F567}\u{1F57A}\u{1F595}\u{1F596}\u{1F5A4}\u{1F5FB}-\u{1F64F}\u{1F680}-\u{1F6C5}\u{1F6CC}\u{1F6D0}-\u{1F6D2}\u{1F6D5}-\u{1F6D8}\u{1F6DC}-\u{1F6DF}\u{1F6EB}\u{1F6EC}\u{1F6F4}-\u{1F6FC}\u{1F7E0}-\u{1F7EB}\u{1F7F0}\u{1F90C}-\u{1F93A}\u{1F93C}-\u{1F945}\u{1F947}-\u{1F9FF}\u{1FA70}-\u{1FA7C}\u{1FA80}-\u{1FA8A}\u{1FA8E}-\u{1FAC6}\u{1FAC8}\u{1FACD}-\u{1FADC}\u{1FADF}-\u{1FAEA}\u{1FAEF}-\u{1FAF8}])/gu).length):o=a().createElement(a().Fragment,null,a().createElement("i",{className:"material-icons gray"},"warning_amber")," ",a().createElement("i",{className:"gray"},a().createElement(n.FormattedMessage,{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]})));return a().createElement("li",{ref:this.props.innerRef,className:e},this.props.isGroup&&this.props.response?a().createElement("div",{className:"avatar-box"},r?a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:this.props.userFrom,title:this.props.userName,avatar:s}):null):null,a().createElement("div",null,a().createElement("div",{className:t},a().createElement("div",{className:"content-meta"},a().createElement("div",{className:i},o,h),this.props.timestamp?a().createElement(m,{edited:this.props.edited,timestamp:this.props.timestamp,received:this.props.received}):null),this.props.showContextMenu?a().createElement("span",{className:"menuTrigger"},a().createElement("a",{href:"#",onClick:this.handleContextClick},a().createElement("i",{className:"material-icons"},"expand_more"))):null),r?a().createElement("div",{className:"author"},this.props.userName||a().createElement("i",null,a().createElement(n.FormattedMessage,{id:"user_not_found",defaultMessage:[{type:0,value:"Not found"}]}))):null))}}const E=(0,n.injectIntl)(y);var b=a().forwardRef((e,t)=>a().createElement(E,v({innerRef:t},e))),M=s(504),S=s(1334),C=s(9027),_=s(6110);class w extends a().Component{constructor(e){super(e)}render(){const e=[],t=(this.props.subscribers||[]).length,s=Math.min(C.DT,t);return(this.props.subscribers||[]).some(t=>(e.push(a().createElement("div",{className:"avatar-box",key:t.user},a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,topic:t.user,avatar:(0,_.to)(t.public?t.public.photo:null)||!0,title:t.public?t.public.fn:null}))),e.length==s)),0==e.length?null:a().createElement("div",{id:"topic-users"},e," ",t>s?a().createElement("span",null,a().createElement(n.FormattedMessage,{id:"more_online_members",defaultMessage:[{type:0,value:"+"},{type:1,value:"overflow"},{type:0,value:" more"}],values:{overflow:t-s}})):null)}}class A extends a().PureComponent{constructor(e){super(e),this.handleButtonAction=this.handleButtonAction.bind(this)}handleButtonAction(e,t){e.preventDefault(),this.props.onAction(t)}render(){return a().createElement("div",{className:"accept-invite-panel"},a().createElement("div",{className:"title"},a().createElement(n.FormattedMessage,{id:"chat_invitation",defaultMessage:[{type:0,value:"You are invited to start a new chat. What would you like to do?"}]})),a().createElement("div",{className:"footer"},a().createElement("button",{className:"primary",onClick:e=>{this.handleButtonAction(e,"accept")}},a().createElement(n.FormattedMessage,{id:"chat_invitation_accept",defaultMessage:[{type:0,value:"Accept"}]})),a().createElement("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"delete")}},a().createElement(n.FormattedMessage,{id:"chat_invitation_ignore",defaultMessage:[{type:0,value:"Ignore"}]})),a().createElement("button",{className:"secondary",onClick:e=>{this.handleButtonAction(e,"block")}},a().createElement(n.FormattedMessage,{id:"chat_invitation_block",defaultMessage:[{type:0,value:"Block"}]}))))}}var F=s(1013);class D extends a().PureComponent{render(){const e=C.C3+" ("+l.Tinode.getLibrary()+")";return a().createElement("div",{id:"dummy-view"},a().createElement("div",null,a().createElement("a",{href:"https://github.com/tinode/chat/"},a().createElement("img",{id:"logo",alt:"logo",src:"img/logo.svg"}),a().createElement("h2",null,"Tinode Web")),a().createElement("p",null,a().createElement(n.FormattedMessage,{id:"label_client",defaultMessage:[{type:0,value:"Client:"}]})," ",e),a().createElement("p",null,a().createElement(n.FormattedMessage,{id:"label_server",defaultMessage:[{type:0,value:"Server:"}]})," ",this.props.serverVersion," (",this.props.serverAddress,")")))}}class P extends a().PureComponent{constructor(e){super(e)}render(){let e=null,t="bubble";return this.props.date&&(e=a().createElement(a().Fragment,null,this.props.date),t+=" date"),e?a().createElement("li",{className:"meta"},a().createElement("div",{className:t},a().createElement("div",{className:"message-content"},e))):a().createElement(a().Fragment,null,null)}}const T=(0,n.defineMessages)({message_not_found:{id:"message_not_found",defaultMessage:[{type:0,value:"message not found"}]},message_deleted:{id:"message_deleted",defaultMessage:[{type:0,value:"message deleted"}]}});class R extends a().PureComponent{constructor(e){super(e),this.touchX=null,this.touchY=null,this.touchSurface=a().createRef(),this.getSelectedIndex=this.getSelectedIndex.bind(this),this.handleCancel=this.handleCancel.bind(this),this.handleSelected=this.handleSelected.bind(this),this.handleMoveNext=this.handleMoveNext.bind(this),this.handleMovePrev=this.handleMovePrev.bind(this),this.handleTouchEventStart=this.handleTouchEventStart.bind(this),this.handleTouchEventEnd=this.handleTouchEventEnd.bind(this),this.handleTouchCancel=this.handleTouchCancel.bind(this)}componentDidMount(){this.touchSurface.current.addEventListener("touchstart",this.handleTouchEventStart,{passive:!0}),this.touchSurface.current.addEventListener("touchend",this.handleTouchEventEnd,{passive:!0}),this.touchSurface.current.addEventListener("touchcancel",this.handleTouchCancel,{passive:!0})}componentWillUnmount(){this.touchSurface.current.removeEventListener("touchstart",this.handleTouchEventStart),this.touchSurface.current.removeEventListener("touchend",this.handleTouchEventEnd),this.touchSurface.current.removeEventListener("touchcancel",this.handleTouchCancel)}getSelectedIndex(){return(this.props.pins||[]).length-this.props.selected-1}handleCancel(e){e.preventDefault(),this.props.onCancel(this.props.pins[this.getSelectedIndex()])}handleSelected(e){e.preventDefault(),this.props.onSelected(this.props.pins[this.getSelectedIndex()])}handleMoveNext(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.max(this.props.selected-1,0);s!=this.props.selected&&this.props.setSelected(s)}handleMovePrev(e,t){t||e.preventDefault(),e.stopPropagation();const s=Math.min(this.props.selected+1,(this.props.pins||[]).length-1);s!=this.props.selected&&this.props.setSelected(s)}handleTouchEventStart(e){1==e.touches.length&&(this.touchX=e.touches[0].clientX,this.touchY=e.touches[0].clientY)}handleTouchEventEnd(e){if(null===this.touchX||1!=e.changedTouches.length)return void(this.touchX=null);const t=this.touchX-e.changedTouches[0].clientX,s=this.touchY-e.changedTouches[0].clientY;this.touchX=null,Math.abs(t)>Math.abs(s)||Math.abs(s)0?this.handleMovePrev(e,!0):this.handleMoveNext(e,!0))}handleTouchCancel(){this.touchX=null}render(){const e=this.getSelectedIndex();let t=(this.props.messages||[])[e];t=t?t._deleted?a().createElement("i",{className:"gray"},this.props.intl.formatMessage(T.message_deleted)):l.Drafty.format(t.content,g.TU,{formatMessage:this.props.intl.formatMessage.bind(this.props.intl),authorizeURL:this.props.tinode.authorizeURL.bind(this.props.tinode)}):a().createElement("i",{className:"gray"},this.props.intl.formatMessage(T.message_not_found));const s=[];return this.props.pins.forEach(t=>{const i=s.length==e?"adot":"dot";s.push(a().createElement("div",{key:t,className:i}))}),a().createElement("div",{id:"pinned-wrapper",ref:this.touchSurface},this.props.isAdmin?a().createElement("div",{className:"cancel"},a().createElement("a",{href:"#",onClick:this.handleCancel},a().createElement("i",{className:"material-icons gray"},"close"))):a().createElement("div",null,a().createElement("i",{className:"material-icons gray"},"push_pin")),a().createElement("div",{className:"pinned-scroll"},s),a().createElement("div",{className:"pinned",onClick:this.handleSelected},a().createElement("p",null,t)),a().createElement("div",{className:"pinned-menu"},a().createElement("span",{className:"menuTrigger upper"},e>0?a().createElement("a",{href:"#",onClick:this.handleMovePrev},a().createElement("i",{className:"material-icons"},"expand_less")):null),a().createElement("span",{className:"menuTrigger lower"},this.props.selected>0?a().createElement("a",{href:"#",onClick:this.handleMoveNext},a().createElement("i",{className:"material-icons"},"expand_more")):null)))}}var k=(0,n.injectIntl)(R),N=s(1725),I=s(3832);const x=a().lazy(e=>s.e(836).then(s.bind(s,6836))),L=a().lazy(e=>s.e(472).then(s.bind(s,4472))),U=a().lazy(e=>s.e(889).then(s.bind(s,8889))),z=a().lazy(e=>Promise.all([s.e(892),s.e(942)]).then(s.bind(s,8942))),q=a().lazy(e=>s.e(371).then(s.bind(s,6371))),B=(0,n.defineMessages)({online_now:{id:"online_now",defaultMessage:[{type:0,value:"online now"}]},last_seen:{id:"last_seen_timestamp",defaultMessage:[{type:0,value:"Last seen: "},{type:1,value:"timestamp"}]},not_found:{id:"title_not_found",defaultMessage:[{type:0,value:"Not found"}]},channel:{id:"channel",defaultMessage:[{type:0,value:"channel"}]},file_attachment_too_large:{id:"file_attachment_too_large",defaultMessage:[{type:0,value:"The file size "},{type:1,value:"size"},{type:0,value:" exceeds the "},{type:1,value:"limit"},{type:0,value:" limit."}]},invalid_content:{id:"invalid_content",defaultMessage:[{type:0,value:"invalid content"}]},editing_message:{id:"editing_message",defaultMessage:[{type:0,value:"Editing"}]},drag_file:{id:"drag_file",defaultMessage:[{type:0,value:"Drag file here"}]},self_topic_name:{id:"self_topic_name",defaultMessage:[{type:0,value:"Saved messages"}]},subscriber_count:{id:"subscriber_count",defaultMessage:[{type:6,value:"count",options:{one:{value:[{type:2,value:"count",style:null},{type:0,value:" subscriber"}]},two:{value:[{type:2,value:"count",style:null},{type:0,value:" subscribers"}]},three:{value:[{type:2,value:"count",style:null},{type:0,value:" subscribers"}]},few:{value:[{type:2,value:"count",style:null},{type:0,value:" subscribers"}]},many:{value:[{type:2,value:"count",style:null},{type:0,value:" subscribers"}]},other:{value:[{type:2,value:"count",style:null},{type:0,value:" subscribers"}]}},offset:0,pluralType:"cardinal"}]},member_count:{id:"member_count",defaultMessage:[{type:6,value:"count",options:{one:{value:[{type:2,value:"count",style:null},{type:0,value:" member"}]},two:{value:[{type:2,value:"count",style:null},{type:0,value:" members"}]},three:{value:[{type:2,value:"count",style:null},{type:0,value:" members"}]},few:{value:[{type:2,value:"count",style:null},{type:0,value:" members"}]},many:{value:[{type:2,value:"count",style:null},{type:0,value:" members"}]},other:{value:[{type:2,value:"count",style:null},{type:0,value:" members"}]}},offset:0,pluralType:"cardinal"}]},cannot_parse_vcard:{id:"cannot_parse_vcard",defaultMessage:[{type:0,value:"Cannot parse vCard file."}]}});function O(e){if(e){const t=e.getExcessive()||"";return e.isJoiner("given")&&(t.includes("R")||t.includes("W"))}return!1}function Q(e){if(e){const t=e.getMissing()||"";return e.isJoiner("want")&&(t.includes("R")||t.includes("W"))}return!1}function V(e){return e==I.No||e==I.d1}class H extends a().Component{constructor(e){super(e),this.state=H.getDerivedStateFromProps(e,{}),this.componentSetup=this.componentSetup.bind(this),this.leave=this.leave.bind(this),this.sendMessage=this.sendMessage.bind(this),this.retrySend=this.retrySend.bind(this),this.sendImageAttachment=this.sendImageAttachment.bind(this),this.sendVideoAttachment=this.sendVideoAttachment.bind(this),this.sendFileAttachment=this.sendFileAttachment.bind(this),this.sendAudioAttachment=this.sendAudioAttachment.bind(this),this.sendTheCardAttachment=this.sendTheCardAttachment.bind(this),this.sendKeyPress=this.sendKeyPress.bind(this),this.subscribe=this.subscribe.bind(this),this.handleScrollReference=this.handleScrollReference.bind(this),this.mountDnDEvents=this.mountDnDEvents.bind(this),this.handleScrollEvent=this.handleScrollEvent.bind(this),this.handleDescChange=this.handleDescChange.bind(this),this.handleSubsUpdated=this.handleSubsUpdated.bind(this),this.handleMessageUpdate=this.handleMessageUpdate.bind(this),this.handleAuxUpdate=this.handleAuxUpdate.bind(this),this.handleAllMessagesReceived=this.handleAllMessagesReceived.bind(this),this.handleInfoReceipt=this.handleInfoReceipt.bind(this),this.handleExpandMedia=this.handleExpandMedia.bind(this),this.handleClosePreview=this.handleClosePreview.bind(this),this.handleCallPanelToggle=this.handleCallPanelToggle.bind(this),this.handleFormResponse=this.handleFormResponse.bind(this),this.handleContextClick=this.handleContextClick.bind(this),this.handleShowMessageContextMenu=this.handleShowMessageContextMenu.bind(this),this.handleNewChatAcceptance=this.handleNewChatAcceptance.bind(this),this.handleEnablePeer=this.handleEnablePeer.bind(this),this.handleAttachFile=this.handleAttachFile.bind(this),this.handleAttachImageOrVideo=this.handleAttachImageOrVideo.bind(this),this.handleCancelUpload=this.handleCancelUpload.bind(this),this.postReadNotification=this.postReadNotification.bind(this),this.clearNotificationQueue=this.clearNotificationQueue.bind(this),this.goToLatestMessage=this.goToLatestMessage.bind(this),this.handleFileDrop=this.handleFileDrop.bind(this),this.handlePickReply=this.handlePickReply.bind(this),this.handleEditMessage=this.handleEditMessage.bind(this),this.handleCancelReply=this.handleCancelReply.bind(this),this.handleQuoteClick=this.handleQuoteClick.bind(this),this.handleUnpinMessage=this.handleUnpinMessage.bind(this),this.handleCallHangup=this.handleCallHangup.bind(this),this.isDragEnabled=this.isDragEnabled.bind(this),this.handleDragStart=this.handleDragStart.bind(this),this.handleDragIn=this.handleDragIn.bind(this),this.handleDragOut=this.handleDragOut.bind(this),this.handleDrag=this.handleDrag.bind(this),this.handleDrop=this.handleDrop.bind(this),this.chatMessageRefs=[],this.getOrCreateMessageRef=this.getOrCreateMessageRef.bind(this),this.getVisibleMessageRange=this.getVisibleMessageRange.bind(this),this.dragCounter=0,this.dndRef=null,this.readNotificationQueue=[],this.readNotificationTimer=null,this.keyPressTimer=null}getOrCreateMessageRef(e){if(this.chatMessageRefs[e])return this.chatMessageRefs[e];const t=a().createRef();return this.chatMessageRefs[e]=t,t}getVisibleMessageRange(e){let t=Number.MAX_SAFE_INTEGER,s=-1,i=!1;return this.chatMessageRefs.every((a,n)=>{if(a.current){const{top:l,bottom:r,height:o}=a.current.getBoundingClientRect();if(l<=e.top?e.top-l<=o:r-e.bottom<=o)i=!0,t=Math.min(t,n),s=Math.max(s,n);else if(i)return!1}return!0}),s>=t?{min:t,max:s}:{min:0,max:0}}componentDidMount(){this.messagesScroller&&this.messagesScroller.addEventListener("scroll",this.handleScrollEvent),this.mountDnDEvents(this.dndRef),this.componentSetup({},{})}componentWillUnmount(){this.messagesScroller&&this.messagesScroller.removeEventListener("scroll",this.handleScrollEvent),this.clearNotificationQueue(),this.dndRef&&(this.dndRef.removeEventListener("dragstart",this.handleDragStart),this.dndRef.removeEventListener("dragenter",this.handleDragIn),this.dndRef.removeEventListener("dragleave",this.handleDragOut),this.dndRef.removeEventListener("dragover",this.handleDrag),this.dndRef.removeEventListener("drop",this.handleDrop))}componentDidUpdate(e,t){!this.messagesScroller||t.topic==this.state.topic&&t.maxSeqId==this.state.maxSeqId&&t.minSeqId==this.state.minSeqId||this.state.scrollPosition<100&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight),this.props.applicationVisible?this.postReadNotification(0):this.clearNotificationQueue(),this.componentSetup(e,t)}componentSetup(e,t){const s=this.props.tinode?this.props.tinode.getTopic(this.state.topic):void 0;if(this.state.topic!=t.topic&&(t.topic&&!l.Tinode.isNewGroupTopicName(t.topic)&&(this.leave(t.topic),t.rtcPanel&&this.handleCallHangup(t.topic,e.callSeq)),s&&(s.onData=this.handleMessageUpdate,s.onAllMessagesReceived=this.handleAllMessagesReceived,s.onInfo=this.handleInfoReceipt,s.onMetaDesc=this.handleDescChange,s.onSubsUpdated=this.handleSubsUpdated,s.onPres=this.handleSubsUpdated,s.onAuxUpdated=this.handleAuxUpdate)),s)if(this.state.topic!=t.topic||this.props.myUserId&&!e.myUserId){const e=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;s.isP2PType()&&e&&!C.rl?s.getMeta(s.startMetaQuery().withDesc().build()):this.props.myUserId&&this.subscribe(s)}else s.isSubscribed()&&this.state.isReader&&!t.isReader?s.getMeta(s.startMetaQuery().withLaterData().build()):s.isSubscribed()||!this.props.ready||e.ready||this.subscribe(s)}static getDerivedStateFromProps(e,t){let s={};if(e.topic)if(e.topic!=t.topic){const i=e.tinode.getTopic(e.topic);if(s={topic:e.topic,deleted:i._deleted,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,showGoToLastButton:!1,contentToEdit:null,dragging:!1,selectedPin:0},e.forwardMessage)if(e.forwardMessage.content){const t=e.forwardMessage.content,i=t?.length||t?.size||0;s.docPreview={object:t,type:e.forwardMessage.type,size:i}}else s.reply={content:e.forwardMessage.preview,seq:null};else s.reply=null;if(i){const a=[];e.connected&&i.subscribers(t=>{t.online&&t.user!=e.myUserId&&a.push(t)}),Object.assign(s,{onlineSubs:a}),i.isSelfType()?Object.assign(s,{title:e.intl.formatMessage(B.self_topic_name),avatar:!0}):i.public?Object.assign(s,{title:i.public.fn,avatar:(0,_.to)(i.public.photo)}):Object.assign(s,{title:"",avatar:null});const n=i.p2pPeerDesc();n?Object.assign(s,{peerMessagingDisabled:Q(n.acs)}):t.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),Object.assign(s,{minSeqId:i.minMsgSeq(),maxSeqId:i.maxMsgSeq(),latestClearId:i.maxClearId(),channel:i.isChannelType(),pins:(i.aux("pins")||[]).slice(),pinsLoaded:!1}),e.callTopic==i.name&&V(e.callState)&&(s.rtcPanel=e.callTopic)}else Object.assign(s,{minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],title:"",avatar:null,peerMessagingDisabled:!1,channel:!1,pins:[],pinsLoaded:!1})}else e.callTopic==t.topic&&!t.rtcPanel&&V(e.callState)&&(s.rtcPanel=e.callTopic);else s={minSeqId:-1,maxSeqId:-1,latestClearId:-1,onlineSubs:[],topic:null,title:"",avatar:null,isVerified:!1,isStaff:!1,isDangerous:!1,deleted:!1,docPreview:null,imagePreview:null,imagePostview:null,videoPreview:null,videoPostview:null,rtcPanel:null,minimizedCallPanel:!1,typingIndicator:!1,scrollPosition:0,fetchingMessages:!1,peerMessagingDisabled:!1,channel:!1,reply:null,contentToEdit:null,showGoToLastButton:!1,dragging:!1,pins:[],pinsLoaded:!1,selectedPin:0,subsVersion:0};return e.acs?(e.acs.isWriter()!=t.isWriter&&(s.isWriter=!t.isWriter),e.acs.isReader()!=t.isReader&&(s.isReader=!t.isReader),e.acs.isAdmin()!=t.isAdmin&&(s.isAdmin=!t.isAdmin),!e.acs.isReader("given")!=t.readingBlocked&&(s.readingBlocked=!t.readingBlocked),e.acs.isSharer()!=t.isSharer&&(s.isSharer=!t.isSharer)):(t.isWriter&&(s.isWriter=!1),t.isReader&&(s.isReader=!1),t.isAdmin&&(s.isAdmin=!1),t.readingBlocked||(t.readingBlocked=!0),t.isSharer&&(s.isSharer=!1)),O(e.acs)==!t.unconformed&&(s.unconfirmed=!t.unconformed),!e.connected&&t.onlineSubs&&t.onlineSubs.length>0&&(s.onlineSubs=[]),s}subscribe(e){if(e.isSubscribed()||!this.props.ready)return;const t=this.props.newTopicParams&&this.props.newTopicParams._topicName==this.props.topic;let s=e.startMetaQuery().withLaterDesc().withLaterSub().withAux();(this.state.isReader||t)&&(s=s.withLaterData(C.H1),this.state.isReader&&(s=s.withLaterDel()),this.setState({fetchingMessages:!0}));const i=t?this.props.newTopicParams:void 0;e.subscribe(s.build(),i).then(t=>{if(303==t.code)return void f.A.navigateTo(f.A.setUrlTopic("",t.params.topic));this.state.topic!=t.topic&&this.setState({topic:t.topic}),this.state.deleted&&this.setState({deleted:!1}),this.props.onNewTopicCreated(this.props.topic,t.topic);let s=[];e.queuedMessages(t=>{t._sending||(t._fatal||t.head&&t.head.webrtc?s.push(t.seq):e.isSubscribed()&&this.retrySend(t))}),s.length>0&&e.delMessagesList(s,!0)}).catch(e=>{console.error("Failed subscription to",this.state.topic,e),this.props.onError(e.message,"err");const t=H.getDerivedStateFromProps({},{});t.title=this.props.intl.formatMessage(B.not_found),this.setState(t)})}leave(e){if(!e||!this.props.tinode.isTopicCached(e))return;const t=this.props.tinode.getTopic(e);t&&t.isSubscribed()&&t.leave(!1).catch(e=>{}).finally(e=>{this.setState({fetchingMessages:!1}),t.onData=void 0,t.onAllMessagesReceived=void 0,t.onInfo=void 0,t.onMetaDesc=void 0,t.onSubsUpdated=void 0,t.onPres=void 0,t.onAuxUpdated=void 0})}handleScrollReference(e){e&&(e.addEventListener("scroll",this.handleScrollEvent),this.messagesScroller=e,this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)}handleScrollEvent(e){const t=e.target.scrollHeight-e.target.scrollTop-e.target.offsetHeight;if(this.setState({scrollPosition:t,showGoToLastButton:t>100&&t0&&this.setState({fetchingMessages:!0},e=>{t.getMessagesPage(C.H1,a,s,i).catch(e=>this.props.onError(e.message,"err")).finally(e=>this.setState({fetchingMessages:!1}))})}}this.processingScrollEvent=!1}}mountDnDEvents(e){e&&(e.addEventListener("dragstart",this.handleDragStart),e.addEventListener("dragenter",this.handleDragIn),e.addEventListener("dragleave",this.handleDragOut),e.addEventListener("dragover",this.handleDrag),e.addEventListener("drop",this.handleDrop),this.dndRef=e)}goToLatestMessage(){this.setState({scrollPosition:0}),this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.messagesScroller.offsetHeight)}handleDescChange(e){l.Tinode.isSelfTopicName(this.props.topic)?this.setState({title:this.props.intl.formatMessage(B.self_topic_name),avatar:!0}):e.public?this.setState({title:e.public.fn,avatar:(0,_.to)(e.public.photo)}):this.setState({title:"",avatar:null}),e.acs&&this.setState({isWriter:e.acs.isWriter(),isReader:e.acs.isReader(),isAdmin:e.acs.isAdmin(),readingBlocked:!e.acs.isReader("given"),unconfirmed:O(e.acs)})}postReadNotification(e){if(!this.props.applicationVisible||!this.state.topic)return;this.readNotificationTimer||(this.readNotificationTimer=setInterval(e=>{if(0==this.readNotificationQueue.length)return clearInterval(this.readNotificationTimer),void(this.readNotificationTimer=null);let t=-1;for(;this.readNotificationQueue.length>0;){const e=this.readNotificationQueue[0];if(e.topicName!=this.state.topic){this.readNotificationQueue.shift();continue}const s=new Date;if(!(e.sendAt<=s))break;this.readNotificationQueue.shift(),(0==e.seq||l.Tinode.isServerAssignedSeq(e.seq))&&(t=Math.max(t,e.seq))}if(t>=0){const e=this.props.tinode.getTopic(this.state.topic);if(e)try{e.noteRead(t)}catch(e){console.error("Failed to send read notification",e)}}},300));const t=new Date;this.readNotificationQueue.push({topicName:this.state.topic,seq:e,sendAt:t.setMilliseconds(t.getMilliseconds()+C.J)})}clearNotificationQueue(){this.readNotificationQueue=[],this.readNotificationTimer&&(clearInterval(this.readNotificationTimer),this.readNotificationTimer=null)}handleSubsUpdated(){if(this.state.topic){const e=[],t=this.props.tinode.getTopic(this.state.topic);t.subscribers(t=>{t.online&&t.user!=this.props.myUserId&&e.push(t)});const s={onlineSubs:e,subsVersion:this.state.subsVersion+1},i=t.p2pPeerDesc();i?Object.assign(s,{peerMessagingDisabled:Q(i.acs)}):this.state.peerMessagingDisabled&&Object.assign(s,{peerMessagingDisabled:!1}),this.setState(s)}}handleMessageUpdate(e){if(!this.state.topic)return;const t=this.props.tinode.getTopic(this.state.topic);if(!e)return void this.setState({latestClearId:t.maxClearId()});clearTimeout(this.keyPressTimer),this.setState({maxSeqId:t.maxMsgSeq(),minSeqId:t.minMsgSeq(),typingIndicator:!1},s=>{t.isNewMessage(e.seq)?this.state.scrollPosition>100?this.setState({showGoToLastButton:!0}):this.goToLatestMessage():this.messagesScroller&&(this.messagesScroller.scrollTop=this.messagesScroller.scrollHeight-this.state.scrollPosition-this.messagesScroller.offsetHeight)});t.msgStatus(e,!0)>=l.Tinode.MESSAGE_STATUS_SENT&&e.from!=this.props.myUserId&&this.postReadNotification(e.seq)}handleAllMessagesReceived(e){if(this.setState({fetchingMessages:!1}),!e){const e=this.props.tinode.getTopic(this.state.topic);return void(e&&this.postReadNotification(e.seq))}if(this.state.pinsLoaded)this.setState({pinsLoaded:!1});else{const e=this.props.tinode.getTopic(this.state.topic);this.setState({pinsLoaded:!0},t=>{e.getPinnedMessages()})}}handleAuxUpdate(e){const t=(e.pins||[]).slice();let s=this.state.selectedPin;t.length>this.state.pins.length?s=0:s>=t.length&&(s=Math.max(0,t.length-1)),this.setState({pins:t,selectedPin:s})}handleInfoReceipt(e){switch(e.what){case"kp":clearTimeout(this.keyPressTimer),this.keyPressTimer=setTimeout(e=>this.setState({typingIndicator:!1}),C.NR+1e3),this.state.typingIndicator||this.setState({typingIndicator:!0});break;case"read":case"recv":this.forceUpdate();break;default:console.info("Other change in topic: ",e.what)}}handleExpandMedia(e){e&&(e.video?this.setState({videoPostview:e}):this.setState({imagePostview:e}))}handleClosePreview(){this.state.imagePreview&&this.state.imagePreview.url&&URL.revokeObjectURL(this.state.imagePreview.url),this.state.videoPreview&&this.state.videoPreview.url&&URL.revokeObjectURL(this.state.videoPreview.url),this.setState({imagePostview:null,imagePreview:null,docPreview:null,videoPreview:null,videoPostview:null}),this.props.onCancelForwardMessage()}handleFormResponse(e,t,s){if("pub"==e)this.sendMessage(l.Drafty.attachJSON(l.Drafty.parse(t),s));else if("url"==e){const e=new URL(s.ref),t=e.searchParams;for(let e in s.resp)s.resp.hasOwnProperty(e)&&t.set(e,s.resp[e]);["name","seq"].forEach(e=>{s[e]&&t.set(e,s[e])}),t.set("uid",this.props.myUserId),t.set("topic",this.state.topic),e.search=t,window.open(e,"_blank")}else console.info("Unknown action in form",e)}handleContextClick(e){e.preventDefault(),e.stopPropagation(),this.props.showContextMenu({topicName:this.state.topic,y:e.pageY,x:e.pageX})}handleShowMessageContextMenu(e,t){"chan"==e.userFrom&&(e.userFrom=this.state.topic,e.userName=this.state.title),e.topicName=this.state.topic;const s=t||[],i=this.props.tinode.getTopic(e.topicName);if(i)if(i.isSelfType())s.push("message_delete_generic");else{i.isChannelType()||s.push("message_delete");const t=i.getAccessMode();if(t&&t.isDeleter()){let i=t.isOwner();if(!i){const t=0|this.props.tinode.getServerParam(l.Tinode.MSG_DELETE_AGE,0);i=0==t||!!(t>0&&e.timestamp)&&e.timestamp.getTime()>(new Date).getTime()-1e3*t}i&&s.push("message_delete_hard")}}this.props.showContextMenu(e,s)}handleNewChatAcceptance(e){this.props.onNewChat(this.state.topic,e)}handleEnablePeer(e){e.preventDefault(),this.props.onChangePermissions(this.state.topic,C.cZ,this.state.topic)}sendKeyPress(e){const t=this.props.tinode.getTopic(this.state.topic);t.isSubscribed()&&(e?t.noteRecording(!0):t.noteKeyPress())}sendMessage(e,t,s){let i;if(!e&&this.props.forwardMessage)e=this.props.forwardMessage.msg,i=this.props.forwardMessage.head,this.handleCancelReply();else if(this.state.reply){if(this.state.reply.editing){if(e==this.state.contentToEdit)return void this.handleCancelReply();i={replace:":"+this.state.reply.seq}}else this.state.reply.content&&(i={reply:""+this.state.reply.seq},"string"==typeof e&&(e=l.Drafty.parse(e)),e=l.Drafty.append(l.Drafty.sanitizeEntities(this.state.reply.content),e));this.handleCancelReply()}this.props.sendMessage(e,t,s,i)}retrySend(e){this.props.sendMessage(e.content,void 0,void 0,e.head).then(t=>{this.props.tinode.getTopic(this.state.topic).delMessagesList([e.seq],!0)})}sendFileAttachment(e){const t=.75*this.props.tinode.getServerParam("maxMessageSize",C.mp)-1024|0;if((l.TheCard.isFileSupported(e.type,e.name)||e.type==l.TheCard.contentType)&&this.sendTheCardAttachment(e,t))return;const s=e=>e===C.Uv?"application/octet-stream":e;if(e.size>t){const t=this.props.tinode.getLargeFileHelper();if(!t)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const i=t.upload(e),a=l.Drafty.attachFile(null,{mime:s(e.type),filename:e.name,size:e.size,urlPromise:i});this.sendMessage(a,i,t)}else(0,_.bB)(e).then(t=>this.sendMessage(l.Drafty.attachFile(null,{mime:s(t.mime),data:t.bits,filename:t.name,size:e.size}))).catch(e=>this.props.onError(e.message,"err"))}sendTheCardAttachment(e,t){return!(e.size>t)&&(e.type==l.TheCard.contentType?(this.sendMessage(l.Drafty.appendTheCard(null,e.object)),!0):((0,_.QJ)(e).then(e=>{this.sendMessage(l.Drafty.appendTheCard(null,e))}).catch(e=>{this.props.onError(this.props.intl.formatMessage(B.cannot_parse_vcard,{error:e.message}),"err")}),!0))}handleAttachFile(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",C.qy);e.size>t?this.props.onError(this.props.intl.formatMessage(B.file_attachment_too_large,{size:(0,o.lX)(e.size),limit:(0,o.lX)(t)}),"err"):this.setState({docPreview:{file:e,name:e.name,size:e.size,type:e.type}})}handleCallHangup(e,t){this.props.onVideoCallClosed(),this.setState({rtcPanel:null}),this.props.onCallHangup(e,t)}handleCallPanelToggle(){this.setState({minimizedCallPanel:!this.state.minimizedCallPanel})}sendImageAttachment(e,t){const s=this.state.imagePreview.mime,i=this.state.imagePreview.width,a=this.state.imagePreview.height,n=this.state.imagePreview.filename,r=.75*this.props.tinode.getServerParam("maxMessageSize",C.mp)-1024|0;if(t.size>r){const r=this.props.tinode.getLargeFileHelper();if(!r)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const o=r.upload(t);return void(0,_.ag)(t,C.wj,C.wj,-1,!1).then(e=>(0,_.Sk)(e.blob)).then(h=>{let d=l.Drafty.insertImage(null,0,{mime:s,_tempPreview:h.bits,bits:h.bits,width:i,height:a,filename:n,size:t.size,urlPromise:o});e&&(d=l.Drafty.appendLineBreak(d),d=l.Drafty.append(d,l.Drafty.parse(e))),this.sendMessage(d,o,r)}).catch(e=>this.props.onError(e,"err"))}(0,_.Sk)(t).then(s=>{let r=l.Drafty.insertImage(null,0,{mime:s.mime,bits:s.bits,width:i,height:a,filename:n,size:t.size});e&&(r=l.Drafty.appendLineBreak(r),r=l.Drafty.append(r,l.Drafty.parse(e))),this.sendMessage(r)})}sendVideoAttachment(e,t,s,i){const a=i.width,n=i.height,r=.75*this.props.tinode.getServerParam("maxMessageSize",C.mp)-1024|0,o=[];let h;if(t.size+s.size>r){if(h=this.props.tinode.getLargeFileHelper(),!h)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));o[0]=t.size>.675*r?h.upload(t):null,o[1]=s.size>.275*r?h.upload(s):null}if(0==o.length)return void Promise.all([(0,_.Sk)(t),(0,_.Sk)(s)]).then(s=>{const[r,o]=s;let h=l.Drafty.insertVideo(null,0,{mime:r.mime,bits:r.bits,preview:o.bits,premime:o.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size});e&&(h=l.Drafty.appendLineBreak(h),h=l.Drafty.append(h,l.Drafty.parse(e))),this.sendMessage(h)});const d=Promise.all(o),p=[];p[0]=o[0]?null:(0,_.Sk)(t),p[1]=o[1]?null:(0,_.ag)(s,C.QG,C.QG,-1,!1).then(e=>(0,_.Sk)(e.blob)),p[2]=(0,_.ag)(s,C.Cx,C.Cx,-1,!1).then(e=>(0,_.Sk)(e.blob)),Promise.all(p).then(s=>{const[r,o,p]=s;let c=l.Drafty.insertVideo(null,0,{mime:i.mime,bits:r?r.bits:null,_tempPreview:p.bits,preview:o?o.bits:p.bits,premime:o?o.mime:p.mime,width:a,height:n,duration:i.duration,filename:i.name,size:t.size,urlPromise:d});e&&(c=l.Drafty.appendLineBreak(c),c=l.Drafty.append(c,l.Drafty.parse(e))),this.sendMessage(c,d,h)}).catch(e=>this.props.onError(e.message,"err"))}handleAttachImageOrVideo(e){const t=this.props.tinode.getServerParam("maxFileUploadSize",C.qy);e.type.startsWith("video/")?this.setState({videoPreview:{url:URL.createObjectURL(e),blob:e,filename:e.name,size:e.size,mime:e.type}}):(0,_.ag)(e,C.QG,C.QG,t,!1).then(e=>{this.setState({imagePreview:{url:URL.createObjectURL(e.blob),blob:e.blob,filename:e.name,width:e.width,height:e.height,size:e.blob.size,mime:e.mime}})}).catch(e=>{this.props.onError(e.message,"err")})}handleFileDrop(e){if(!e||0==e.length)return;const t=e[0];t.type&&t.type.startsWith("image/")?this.handleAttachImageOrVideo(t):this.handleAttachFile(t)}sendAudioAttachment(e,t,s){fetch(e).then(e=>e.blob()).then(e=>{const i=.75*this.props.tinode.getServerParam("maxMessageSize",C.mp)-1024;if(e.size>i){const i=this.props.tinode.getLargeFileHelper();if(!i)return void this.props.onError(this.props.intl.formatMessage(B.cannot_initiate_upload));const a=i.upload(e),n=l.Drafty.appendAudio(null,{mime:e.type,size:e.size,duration:s,preview:t,urlPromise:a});this.sendMessage(n,a,i)}else(0,_.Sk)(e).then(i=>{this.sendMessage(l.Drafty.appendAudio(null,{mime:i.mime,bits:i.bits,size:e.size,duration:s,preview:t}))})}).catch(e=>{this.props.onError(e.message,"err")})}handleCancelUpload(e,t){const s=this.props.tinode.getTopic(this.state.topic).findMessage(e);s&&(s._cancelled=!0),t.cancel()}handlePickReply(e,t,s,i){e&&t?(t="string"==typeof t?l.Drafty.init(t):t,t=l.Drafty.isValid(t)?l.Drafty.replyContent(t,C.Rz):l.Drafty.append(l.Drafty.init("⚠ "),l.Drafty.wrapInto(this.props.intl.formatMessage(B.invalid_content),"EM")),this.setState({reply:{content:l.Drafty.quote(i,s,t),seq:e}}),this.props.onCancelForwardMessage()):this.setState({reply:null})}handleEditMessage(e,t){if(!e||!t)return void this.setState({reply:null});t="string"==typeof t?l.Drafty.init(t):t;const s=l.Drafty.toMarkdown(t);t=l.Drafty.isValid(t)?l.Drafty.replyContent(t,C.hB):l.Drafty.append(l.Drafty.init("⚠ "),l.Drafty.wrapInto(this.props.intl.formatMessage(B.invalid_content),"EM")),this.setState({reply:{content:l.Drafty.quote(this.props.intl.formatMessage(B.editing_message),null,t),seq:e,editing:!0},contentToEdit:s}),this.props.onCancelForwardMessage()}handleCancelReply(){this.setState({reply:null,contentToEdit:null}),this.props.onCancelForwardMessage()}handleQuoteClick(e){const t=this.getOrCreateMessageRef(e);t&&t.current?(t.current.scrollIntoView({block:"center",behavior:"smooth"}),t.current.classList.add("flash"),setTimeout(e=>{t.current.classList.remove("flash")},1e3)):console.error("Unresolved message ref",e)}handleUnpinMessage(e){this.props.tinode.getTopic(this.state.topic).pinMessage(e,!1)}isDragEnabled(){return this.state.isWriter&&!this.state.unconfirmed&&!this.props.forwardMessage&&!this.state.peerMessagingDisabled}handleDragStart(e){e.preventDefault(),e.stopPropagation(),e.dataTransfer.clearData()}handleDragIn(e){e.preventDefault(),e.stopPropagation(),this.dragCounter++,e.dataTransfer.items&&e.dataTransfer.items.length>0&&this.setState({dragging:!0})}handleDragOut(e){e.preventDefault(),e.stopPropagation(),this.dragCounter--,this.dragCounter<=0&&this.setState({dragging:!1})}handleDrag(e){e.preventDefault(),e.stopPropagation()}handleDrop(e){e.preventDefault(),e.stopPropagation(),this.setState({dragging:!1}),this.isDragEnabled()&&e.dataTransfer.files&&e.dataTransfer.files.length>0&&(this.handleFileDrop(e.dataTransfer.files),this.dragCounter=0)}render(){const{formatMessage:e}=this.props.intl,t=this.state.rtcPanel&&a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(x,{topic:this.state.topic,seq:this.props.callSeq,callState:this.props.callState,callAudioOnly:this.props.callAudioOnly,tinode:this.props.tinode,title:this.state.title,avatar:this.state.avatar||!0,minimized:this.state.minimizedCallPanel,onError:this.props.onError,onHangup:this.handleCallHangup,onToggleMinimize:this.handleCallPanelToggle,onInvite:this.props.onCallInvite,onSendOffer:this.props.onCallSendOffer,onIceCandidate:this.props.onCallIceCandidate,onSendAnswer:this.props.onCallSendAnswer}));let s;if(this.state.topic){let r;if(this.state.imagePreview)r=a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(U,{content:this.state.imagePreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendImageAttachment}));else if(this.state.videoPreview)r=a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(q,{content:this.state.videoPreview,tinode:this.props.tinode,reply:this.state.reply,onError:this.props.onError,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendVideoAttachment}));else if(this.state.imagePostview)r=a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(U,{content:this.state.imagePostview,onClose:this.handleClosePreview}));else if(this.state.videoPostview)r=a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(q,{content:this.state.videoPostview,tinode:this.props.tinode,onError:this.props.onError,onClose:this.handleClosePreview}));else if(this.state.docPreview)r=l.TheCard.isFileSupported(this.state.docPreview.type,this.state.docPreview.name)||this.state.docPreview.type==l.TheCard.contentType?a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(z,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment})):a().createElement(i.Suspense,{fallback:a().createElement("div",null,a().createElement(n.FormattedMessage,{id:"loading_note",defaultMessage:[{type:0,value:"Loading..."}]}))},a().createElement(L,{content:this.state.docPreview,tinode:this.props.tinode,reply:this.state.reply,onCancelReply:this.handleCancelReply,onClose:this.handleClosePreview,onSendMessage:this.sendFileAttachment}));else{const t=this.props.tinode.getTopic(this.state.topic),s=t.isChannelType()||t.chan,i=t.isGroupType()&&!s,h=[];t.trusted&&(t.trusted.verified&&h.push({icon:"verified",color:"badge-inv"}),t.trusted.staff&&h.push({icon:"staff",color:"badge-inv"}),t.trusted.danger&&h.push({icon:"dangerous",color:"badge-inv"}));const d=[];this.state.pins.forEach(e=>d.push(t.latestMsgVersion(e)||t.findMessage(e)));const c=[];let u=null,m=null,g=null;t.messages((e,s,n,l)=>{let r=n?n.from||"chan":null,h="single",d=e.from||"chan";d==u?h=d==r?"middle":"last":d==r&&(h="first"),u=d;const p=!(d==this.props.myUserId),f=t.msgStatus(e,!0);let v,y,E=d;const M=t.userDesc(d);M&&M.public&&(v=M.public.fn,y=(0,_.to)(M.public.photo)),g=i?"chat-box group":"chat-box";const S=this.getOrCreateMessageRef(e.seq);let C=e.head?parseInt(e.head.reply):null;if(C&&!isNaN(C)||(C=null),e.hi)c.push(a().createElement(P,{deleted:!0,key:e.seq}));else{const t=new Date(e.ts);m&&m.toDateString()==t.toDateString()||(c.push(a().createElement(P,{date:(0,o.mf)(e.ts),locale:this.props.intl.locale,key:"date-"+e.seq})),m=t),c.push(a().createElement(b,{tinode:this.props.tinode,topic:this.state.topic,content:e.content,mimeType:e.head&&e.head.mime,replyToSeq:C,edited:e.head&&!e.head.webrtc&&e.head.replace,timestamp:e.ts,response:p,seq:e.seq,isGroup:i,isChan:this.state.channel,userFrom:E,userName:v,userAvatar:y,sequence:h,received:f,uploader:e._uploader,userIsWriter:this.state.isWriter,userIsAdmin:this.state.isAdmin,pinned:this.state.pins.includes(e.seq),viewportWidth:this.props.viewportWidth,showContextMenu:this.handleShowMessageContextMenu,onExpandMedia:this.handleExpandMedia,onFormResponse:this.handleFormResponse,onCancelUpload:this.handleCancelUpload,pickReply:this.handlePickReply,editMessage:this.handleEditMessage,onQuoteClick:this.handleQuoteClick,onAcceptCall:this.props.onAcceptCall,onError:this.props.onError,ref:S,key:e.seq}))}});let f=null;if(s)t.subcnt&&(f=e(B.subscriber_count,{count:t.subcnt}));else{const s=this.props.tinode.getMeTopic().getContact(this.state.topic);s&&(l.Tinode.isP2PTopicName(s.topic)?s.online?f=e(B.online_now):s.seen&&(f=e(B.last_seen,{timestamp:(0,o.cq)(s.seen.when,this.props.intl.locale)})):l.Tinode.isGroupTopicName(s.topic)&&t.subcnt&&(f=e(B.member_count,{count:t.subcnt})))}const v=this.state.avatar||!0,y=this.state.deleted||t.isSelfType()?null:this.props.online?"online"+(this.state.typingIndicator?" typing":""):"offline",E="panel-title"+(this.state.deleted?" deleted":""),C="dark"==this.props.colorSchema?"dark":"";let D=a().createElement(a().Fragment,null,a().createElement("div",{id:"messages-container",className:C},a().createElement("button",{id:"go-to-latest",className:"action-button"+(this.state.showGoToLastButton?"":" hidden"),onClick:this.goToLatestMessage},a().createElement("i",{className:"material-icons"},"arrow_downward")),a().createElement("div",{id:"messages-panel",ref:this.handleScrollReference},a().createElement("ul",{id:"scroller",className:g},c)),this.state.isReader?null:a().createElement("div",{id:"write-only-background"},this.state.readingBlocked?a().createElement("div",{id:"write-only-note"},a().createElement(n.FormattedMessage,{id:"messages_not_readable",defaultMessage:[{type:0,value:"no access to messages"}]})):null)),this.state.peerMessagingDisabled&&!this.state.unconfirmed?a().createElement("div",{id:"peer-messaging-disabled-note"},a().createElement("i",{className:"material-icons secondary"},"block")," ",a().createElement(n.FormattedMessage,{id:"peers_messaging_disabled",defaultMessage:[{type:0,value:"Peer's messaging is disabled."}]})," ",a().createElement("a",{href:"#",onClick:this.handleEnablePeer},a().createElement(n.FormattedMessage,{id:"enable_peers_messaging",defaultMessage:[{type:0,value:"Enable"}]})),"."):null,this.state.unconfirmed?a().createElement(A,{onAction:this.handleNewChatAcceptance}):a().createElement(N.A,{tinode:this.props.tinode,topicName:this.state.topic,noInput:!!this.props.forwardMessage,disabled:!this.state.isWriter||this.state.deleted,reply:this.state.reply,initMessage:this.state.contentToEdit,sendOnEnter:this.props.sendOnEnter,onKeyPress:this.sendKeyPress,onRecordingProgress:this.sendKeyPress,onSendMessage:this.sendMessage,onAttachFile:this.props.forwardMessage?null:this.handleAttachFile,onAttachImage:this.props.forwardMessage?null:this.handleAttachImageOrVideo,onAttachAudio:this.props.forwardMessage?null:this.sendAudioAttachment,onError:this.props.onError,onQuoteClick:this.handleQuoteClick,onCancelReply:this.handleCancelReply}));r=a().createElement(a().Fragment,null,a().createElement("div",{id:"topic-caption-panel",className:"caption-panel"},this.props.displayMobile?a().createElement("a",{href:"#",id:"hide-message-view",onClick:e=>{e.preventDefault(),this.leave(this.state.topic),this.props.onHideMessagesView()}},a().createElement("i",{className:"material-icons"},"arrow_back")):null,a().createElement("div",{className:"avatar-box"},a().createElement(p.A,{authorizeURL:this.props.tinode.authorizeURL,avatar:v,topic:this.state.topic,title:this.state.title,deleted:this.state.deleted}),s?null:a().createElement("span",{className:y})),a().createElement("div",{id:"topic-title-group"},a().createElement("div",{id:"topic-title",className:E},this.state.title||a().createElement("i",null,a().createElement(n.FormattedMessage,{id:"unnamed_topic",defaultMessage:[{type:0,value:"Unnamed"}]})),a().createElement(M.A,{badges:h})),a().createElement("div",{id:"topic-last-seen"},f)),a().createElement("div",{style:{marginLeft:"auto"}}),!this.props.displayMobile&&this.state.pins.length>0?a().createElement(k,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,i?a().createElement(w,{tinode:this.props.tinode,subscribers:this.state.onlineSubs}):null,a().createElement("div",null,a().createElement("a",{href:"#",onClick:this.handleContextClick},a().createElement("i",{className:"material-icons"},"more_vert")))),this.props.displayMobile?a().createElement(a().Fragment,null,this.state.pins.length>0?a().createElement(k,{tinode:this.props.tinode,pins:this.state.pins,messages:d,selected:this.state.selectedPin,isAdmin:this.state.isAdmin,setSelected:e=>this.setState({selectedPin:e}),onSelected:this.handleQuoteClick,onCancel:this.handleUnpinMessage}):null,a().createElement(S.A,{level:this.props.errorLevel,text:this.props.errorText,onClearError:this.props.onError})):null,a().createElement(F.A,{show:this.state.fetchingMessages}),D,this.state.dragging&&this.isDragEnabled()?a().createElement("div",{className:"drag-n-drop"},e(B.drag_file)):null)}s=a().createElement("div",{id:"topic-view",ref:this.mountDnDEvents},r,t)}else s=a().createElement(D,{serverVersion:this.props.serverVersion,serverAddress:this.props.serverAddress});return s}}var j=(0,n.injectIntl)(H)}}]); +//# sourceMappingURL=429.prod.js.map \ No newline at end of file diff --git a/umd/429.prod.js.map b/umd/429.prod.js.map new file mode 100644 index 00000000..ff2535c5 --- /dev/null +++ b/umd/429.prod.js.map @@ -0,0 +1 @@ +{"version":3,"file":"429.prod.js","mappings":"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","sources":["webpack://tinode-webapp/./src/widgets/send-message.jsx","webpack://tinode-webapp/./src/widgets/attachment.jsx","webpack://tinode-webapp/./src/widgets/received-marker.jsx","webpack://tinode-webapp/./src/widgets/chat-message.jsx","webpack://tinode-webapp/./src/widgets/group-subs.jsx","webpack://tinode-webapp/./src/widgets/invitation.jsx","webpack://tinode-webapp/./src/views/logo-view.jsx","webpack://tinode-webapp/./src/widgets/meta-message.jsx","webpack://tinode-webapp/./src/widgets/pinned-messages.jsx","webpack://tinode-webapp/./src/views/messages-view.jsx"],"sourcesContent":["// Send message form.\nimport React, { Suspense } from 'react';\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\nimport { Drafty } from 'tinode-sdk';\n\n// Lazy-loading AudioRecorder because it's quite large due to\n// a dependency on webm-duration-fix.\nconst AudioRecorder = React.lazy(_ => import('./audio-recorder.jsx'));\n\nimport { KEYPRESS_DELAY } from '../config.js';\nimport { filePasted } from '../lib/blob-helpers.js';\nimport { replyFormatter } from '../lib/formatters.js';\n\nconst messages = defineMessages({\n messaging_disabled: {\n id: 'messaging_disabled_prompt',\n defaultMessage: 'Messaging disabled',\n description: 'Prompt in SendMessage in read-only topic'\n },\n type_new_message: {\n id: 'new_message_prompt',\n defaultMessage: 'New message',\n description: 'Prompt in send message field'\n },\n add_image_caption: {\n id: 'image_caption_prompt',\n defaultMessage: 'Image caption',\n description: 'Prompt in SendMessage for attached image'\n },\n file_attachment_too_large: {\n id: 'file_attachment_too_large',\n defaultMessage: 'The file size {size} exceeds the {limit} limit.',\n description: 'Error message when attachment is too large'\n },\n cannot_initiate_upload: {\n id: 'cannot_initiate_file_upload',\n defaultMessage: 'Cannot initiate file upload.',\n description: 'Generic error messagewhen attachment fails'\n },\n icon_title_record_voice: {\n id: 'icon_title_record_voice',\n defaultMessage: 'Record voice message',\n description: 'Icon tool tip for recording a voice message'\n },\n icon_title_attach_file: {\n id: 'icon_title_attach_file',\n defaultMessage: 'Attach file',\n description: 'Icon tool tip for attaching a file'\n },\n icon_title_add_image: {\n id: 'icon_title_add_image',\n defaultMessage: 'Add image',\n description: 'Icon tool tip for attaching an image'\n },\n icon_title_send: {\n id: 'icon_title_send',\n defaultMessage: 'Send message',\n description: 'Icon tool tip for sending a message'\n },\n});\n\nclass SendMessage extends React.PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n quote: null,\n message: '',\n audioRec: false,\n audioAvailable: !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),\n };\n\n // Timestamp when the previous key press was sent to the server.\n this.keypressTimestamp = 0;\n\n this.handlePasteEvent = this.handlePasteEvent.bind(this);\n this.handleAttachImage = this.handleAttachImage.bind(this);\n this.handleAttachFile = this.handleAttachFile.bind(this);\n this.handleAttachAudio = this.handleAttachAudio.bind(this);\n this.handleSend = this.handleSend.bind(this);\n this.handleKeyPress = this.handleKeyPress.bind(this);\n this.handleMessageTyping = this.handleMessageTyping.bind(this);\n this.handleDropAttach = this.handleDropAttach.bind(this);\n\n this.handleQuoteClick = this.handleQuoteClick.bind(this);\n\n this.formatReply = this.formatReply.bind(this);\n }\n\n componentDidMount() {\n if (this.messageEditArea) {\n this.messageEditArea.addEventListener('paste', this.handlePasteEvent, false);\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n }\n\n this.setState({quote: this.formatReply()});\n }\n\n componentWillUnmount() {\n if (this.messageEditArea) {\n this.messageEditArea.removeEventListener('paste', this.handlePasteEvent, false);\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.messageEditArea) {\n if (window.getComputedStyle(this.messageEditArea).getPropertyValue('transition-property') == 'all') {\n // Set focus on desktop, but not on mobile: focus causes soft keyboard to pop up.\n this.messageEditArea.focus();\n }\n\n // Adjust height of the message area for the amount of text.\n this.messageEditArea.style.height = '0px';\n this.messageEditArea.style.height = this.messageEditArea.scrollHeight + 'px';\n }\n\n if (prevProps.topicName != this.props.topicName) {\n this.setState({message: this.props.initMessage || '', audioRec: false, quote: null});\n } else if (prevProps.initMessage != this.props.initMessage) {\n const msg = this.props.initMessage || '';\n this.setState({message: msg}, _ => {\n // If there is text, scroll to bottom and set caret to the end.\n this.messageEditArea.scrollTop = this.messageEditArea.scrollHeight;\n this.messageEditArea.setSelectionRange(msg.length, msg.length);\n });\n }\n if (prevProps.reply != this.props.reply) {\n this.setState({quote: this.formatReply()});\n }\n }\n\n formatReply() {\n return this.props.reply ?\n Drafty.format(this.props.reply.content, replyFormatter, {\n formatMessage: this.props.intl.formatMessage.bind(this.props.intl),\n authorizeURL: this.props.tinode.authorizeURL.bind(this.props.tinode)\n }) : null;\n }\n\n handlePasteEvent(e) {\n if (this.props.disabled) {\n return;\n }\n // FIXME: handle large files too.\n if (filePasted(e,\n file => { this.props.onAttachImage(file); },\n file => { this.props.onAttachFile(file); },\n this.props.onError)) {\n\n // If a file was pasted, don't paste base64 data into input field.\n e.preventDefault();\n }\n }\n\n handleAttachImage(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachImage(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleAttachFile(e) {\n if (e.target.files && e.target.files.length > 0) {\n this.props.onAttachFile(e.target.files[0]);\n }\n // Clear the value so the same file can be uploaded again.\n e.target.value = '';\n }\n\n handleDropAttach(files) {\n if (files && files.length > 0) {\n this.props.onAttachFile(files[0]);\n }\n }\n\n handleAttachAudio(url, preview, duration) {\n this.setState({audioRec: false});\n this.props.onAttachAudio(url, preview, duration);\n }\n\n handleSend(e) {\n e.preventDefault();\n const message = this.state.message.trim();\n if (message || this.props.acceptBlank || this.props.noInput) {\n this.props.onSendMessage(message);\n this.setState({message: ''});\n }\n }\n\n /* Send on Enter key */\n handleKeyPress(e) {\n if (this.state.audioRec) {\n // Ignore key presses while audio is being recorded.\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n\n // Enter pressed: either send, or enter a new line.\n if (e.key === 'Enter') {\n if (this.props.sendOnEnter == 'plain') {\n // Have Shift-Enter insert a line break instead\n if (!e.shiftKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n } else {\n if (e.ctrlKey || e.metaKey) {\n e.preventDefault();\n e.stopPropagation();\n\n this.handleSend(e);\n }\n }\n }\n }\n\n handleMessageTyping(e) {\n this.setState({message: e.target.value});\n if (this.props.onKeyPress) {\n const now = new Date().getTime();\n if (now - this.keypressTimestamp > KEYPRESS_DELAY) {\n this.props.onKeyPress();\n this.keypressTimestamp = now;\n }\n }\n }\n\n handleQuoteClick(e) {\n e.preventDefault();\n e.stopPropagation();\n if (this.props.reply && this.props.onQuoteClick) {\n const replyToSeq = this.props.reply.seq;\n this.props.onQuoteClick(replyToSeq);\n }\n }\n\n render() {\n const { formatMessage } = this.props.intl;\n const prompt = this.props.disabled ?\n formatMessage(messages.messaging_disabled) :\n (this.props.messagePrompt ?\n formatMessage(messages[this.props.messagePrompt]) :\n formatMessage(messages.type_new_message));\n\n const sendIcon = (this.props.reply && this.props.reply.editing) ?\n 'check_circle' : 'send';\n\n const quote = this.state.quote ?\n () : null;\n const audioEnabled = this.state.audioAvailable && this.props.onAttachAudio;\n return (\n
    \n {!this.props.noInput ? quote : null}\n
    \n {!this.props.disabled ?\n <>\n {this.props.onAttachFile && !this.state.audioRec ?\n <>\n {e.preventDefault(); this.attachImage.click();}} title={formatMessage(messages.icon_title_add_image)}>\n photo\n \n {e.preventDefault(); this.attachFile.click();}} title={formatMessage(messages.icon_title_attach_file)}>\n attach_file\n \n \n :\n null}\n {this.props.noInput ?\n (quote ||
    ) :\n (this.state.audioRec ?\n (
    }>\n this.props.onKeyPress(true)}\n onDeleted={_ => this.setState({audioRec: false})}\n onFinished={this.handleAttachAudio}/>\n ) :\n