@wexio/messenger-widget-react 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +133 -0
- package/dist/widget-react-AgErOR36.js +325 -0
- package/dist/widget-react-AgErOR36.js.map +1 -0
- package/dist/widget-react-BAOIDvhV.js +4250 -0
- package/dist/widget-react-BAOIDvhV.js.map +1 -0
- package/dist/widget-react-BfPdgAQ-.js +5767 -0
- package/dist/widget-react-BfPdgAQ-.js.map +1 -0
- package/dist/widget-react-BxvW64LH.js +4429 -0
- package/dist/widget-react-BxvW64LH.js.map +1 -0
- package/dist/widget-react-C5COLy3m.js +23847 -0
- package/dist/widget-react-C5COLy3m.js.map +1 -0
- package/dist/widget-react-CAWxn8I0.js +247 -0
- package/dist/widget-react-CAWxn8I0.js.map +1 -0
- package/dist/widget-react-CDPzwV1i.js +11685 -0
- package/dist/widget-react-CDPzwV1i.js.map +1 -0
- package/dist/widget-react-CPYwD6FR.js +498 -0
- package/dist/widget-react-CPYwD6FR.js.map +1 -0
- package/dist/widget-react-CUBFPjaV.js +23 -0
- package/dist/widget-react-CUBFPjaV.js.map +1 -0
- package/dist/widget-react-CUuKGDZN.js +355 -0
- package/dist/widget-react-CUuKGDZN.js.map +1 -0
- package/dist/widget-react-CZs0xRrr.js +1336 -0
- package/dist/widget-react-CZs0xRrr.js.map +1 -0
- package/dist/widget-react-Cj_zbk_F.js +325 -0
- package/dist/widget-react-Cj_zbk_F.js.map +1 -0
- package/dist/widget-react-D-QrEVpv.js +125 -0
- package/dist/widget-react-D-QrEVpv.js.map +1 -0
- package/dist/widget-react-D8TPnM9r.js +26 -0
- package/dist/widget-react-D8TPnM9r.js.map +1 -0
- package/dist/widget-react-DE7AVrCo.js +5737 -0
- package/dist/widget-react-DE7AVrCo.js.map +1 -0
- package/dist/widget-react-DOX6j7_Q.js +30 -0
- package/dist/widget-react-DOX6j7_Q.js.map +1 -0
- package/dist/widget-react-DSw03RG7.js +262 -0
- package/dist/widget-react-DSw03RG7.js.map +1 -0
- package/dist/widget-react-Dew7YaLU.js +16 -0
- package/dist/widget-react-Dew7YaLU.js.map +1 -0
- package/dist/widget-react-DtOeNw5z.js +325 -0
- package/dist/widget-react-DtOeNw5z.js.map +1 -0
- package/dist/widget-react-DwL_rsx_.js +630 -0
- package/dist/widget-react-DwL_rsx_.js.map +1 -0
- package/dist/widget-react.d.ts +301 -0
- package/dist/widget-react.js +22285 -0
- package/dist/widget-react.js.map +1 -0
- package/package.json +41 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Wexio
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# @wexio/messenger-widget-react
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@wexio/messenger-widget-react)
|
|
4
|
+
[](./LICENSE)
|
|
5
|
+
|
|
6
|
+
Native React component for the [Wexio](https://wexio.io) web messenger. Renders inside a Shadow DOM portal so widget styles never collide with the host React app. Same widget runtime as the script-injected iframe and the `<wexio-widget>` web component — your visitors see the same widget regardless of which delivery flavour you embed.
|
|
7
|
+
|
|
8
|
+
## Install
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
yarn add @wexio/messenger-widget-react
|
|
12
|
+
# or
|
|
13
|
+
npm install @wexio/messenger-widget-react
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`react >= 18` and `react-dom >= 18` are peer dependencies — the widget uses the host's React tree.
|
|
17
|
+
|
|
18
|
+
## Quick start
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
import { WexioWidget } from "@wexio/messenger-widget-react";
|
|
22
|
+
|
|
23
|
+
export default function App() {
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
{/* your app */}
|
|
27
|
+
<WexioWidget publicKey="pk_live_..." />
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
That's it — the widget mounts a floating launcher in the bottom-right corner of the viewport and handles the rest (theme, locale, panel open/close, identity handshake, real-time chat).
|
|
34
|
+
|
|
35
|
+
## Identifying users
|
|
36
|
+
|
|
37
|
+
Pass a verified `user` to log a known visitor in (the Wexio equivalent of Intercom's `boot({ user_id, ... })`). Provide ONE proof — a Google FedCM `id_token`, a host-signed `jwt`, or a legacy `userId` + `userHash` HMAC pair:
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
<WexioWidget
|
|
41
|
+
publicKey="pk_live_..."
|
|
42
|
+
user={{
|
|
43
|
+
jwt: serverSignedJwt,
|
|
44
|
+
name: "Ada Lovelace",
|
|
45
|
+
email: "ada@example.com",
|
|
46
|
+
}}
|
|
47
|
+
/>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
For an unverified pre-fill (skip the prechat form when the visitor's email is already known but you can't sign it), use `prefill` instead:
|
|
51
|
+
|
|
52
|
+
```tsx
|
|
53
|
+
<WexioWidget publicKey="pk_live_..." prefill={{ email: "ada@example.com" }} />
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
> **Memoise `user` and `prefill`.** Fresh object literals every render churn the env (the handshake is internally guarded against re-firing unless the proof actually changes, but it's tidier to avoid).
|
|
57
|
+
|
|
58
|
+
## Props
|
|
59
|
+
|
|
60
|
+
| Prop | Type | Description |
|
|
61
|
+
| ------------------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
62
|
+
| `publicKey` | `string` | Wexio integration public key (`pk_live_...`). Omit to render in demo mode (bundled mock content for landing pages or Storybook). |
|
|
63
|
+
| `locale` | `"en" \| "uk"` | UI locale. Defaults to the visitor's browser language. Extend by contributing a new bundle to the source repo. |
|
|
64
|
+
| `mode` | `"production"` | Always `"production"` on the public package. (Preview + demo modes are dashboard-only.) |
|
|
65
|
+
| `user` | [`VisitorIdentity`](#visitoridentity) | Verified identity. See [Identifying users](#identifying-users). |
|
|
66
|
+
| `prefill` | [`VisitorPrefill`](#visitorprefill) | Unverified pre-fill for the prechat form. |
|
|
67
|
+
| `config` | [`InjectableWidgetConfig`](#injectablewidgetconfig) | Pre-resolved widget config. Set this if you already have the config server-rendered or fetched app-wide — skips the bootstrap fetch. |
|
|
68
|
+
| `lightboxViewport` | `boolean` | Render the media lightbox (image / video gallery) as a viewport-fixed overlay. Set `true` when the widget's host box is very small. |
|
|
69
|
+
| `onResize` | `(size: { width: number; height: number }) => void` | Fired whenever the widget's intended dimensions change (open ↔ closed ↔ expanded). |
|
|
70
|
+
| `onClose` | `() => void` | Fired when the visitor taps the close chip. |
|
|
71
|
+
| `className` | `string` | Pass-through class on the outer host `<div>`. Style this with normal layout CSS. |
|
|
72
|
+
| `style` | `React.CSSProperties` | Pass-through inline styles for the outer host `<div>`. |
|
|
73
|
+
|
|
74
|
+
### Imperative API
|
|
75
|
+
|
|
76
|
+
The visitor- and operator-facing imperative methods (`show`, `hide`, `update`, `shutdown`, `showSpace`, `showMessages`, `whoami`, `onUnreadCountChange`, etc.) live on `window.WexioWidget` once the component has mounted, mirroring the script loader's surface. A typed React hook (`useWexioWidget()`) is in progress and ships in a future minor — until then, reach for the global from `useEffect`:
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
window.WexioWidget?.onUnreadCountChange?.((count) => {
|
|
81
|
+
document.title = count > 0 ? `(${count}) Inbox` : "Inbox";
|
|
82
|
+
});
|
|
83
|
+
}, []);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
See the [full method reference](https://github.com/wexiohub/messenger-widget-react#api) on GitHub.
|
|
87
|
+
|
|
88
|
+
## Types
|
|
89
|
+
|
|
90
|
+
### `VisitorIdentity`
|
|
91
|
+
|
|
92
|
+
```ts
|
|
93
|
+
interface VisitorIdentity {
|
|
94
|
+
googleIdToken?: string; // Google FedCM id_token (preferred)
|
|
95
|
+
jwt?: string; // Host-signed JWT
|
|
96
|
+
userId?: string; // Legacy HMAC pair…
|
|
97
|
+
userHash?: string; // …(HMAC-SHA256(userId, integrationSecret))
|
|
98
|
+
name?: string;
|
|
99
|
+
email?: string;
|
|
100
|
+
phone?: string;
|
|
101
|
+
attributes?: Record<string, unknown>;
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `VisitorPrefill`
|
|
106
|
+
|
|
107
|
+
```ts
|
|
108
|
+
interface VisitorPrefill {
|
|
109
|
+
name?: string;
|
|
110
|
+
email?: string;
|
|
111
|
+
phone?: string;
|
|
112
|
+
}
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### `InjectableWidgetConfig`
|
|
116
|
+
|
|
117
|
+
The pre-resolved widget config shape (theme, features, blocks, prechat, messenger chrome, sounds, locale strategy). It deliberately excludes `status`, `branding`, and `security.allowedOrigins` — those are server-owned and not host-overridable. Pull the full type from the package:
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
import type { InjectableWidgetConfig } from "@wexio/messenger-widget-react";
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## SSR
|
|
124
|
+
|
|
125
|
+
The component renders `null` on the server. The Shadow-DOM portal target mounts on the first `useEffect`, so the widget is invisible during SSR/hydration and appears on first paint. Wrap in `<Suspense fallback={null}>` if you need to defer hydration in RSC-heavy apps.
|
|
126
|
+
|
|
127
|
+
## Browser support
|
|
128
|
+
|
|
129
|
+
Modern evergreen browsers — anything that supports Shadow DOM and ES2020. Internet Explorer is not supported.
|
|
130
|
+
|
|
131
|
+
## License
|
|
132
|
+
|
|
133
|
+
[MIT](./LICENSE) © Wexio
|
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
import "react";
|
|
2
|
+
import "react-dom";
|
|
3
|
+
import "react/jsx-runtime";
|
|
4
|
+
import "react-dom/client";
|
|
5
|
+
import { x as e } from "./widget-react-DE7AVrCo.js";
|
|
6
|
+
//#region messages/uk.json
|
|
7
|
+
var t = /* @__PURE__ */ e({
|
|
8
|
+
article: () => m,
|
|
9
|
+
branding: () => f,
|
|
10
|
+
default: () => v,
|
|
11
|
+
header: () => r,
|
|
12
|
+
help: () => c,
|
|
13
|
+
home: () => a,
|
|
14
|
+
languageSelector: () => d,
|
|
15
|
+
launcher: () => i,
|
|
16
|
+
lightbox: () => g,
|
|
17
|
+
messages: () => o,
|
|
18
|
+
news: () => l,
|
|
19
|
+
peek: () => h,
|
|
20
|
+
prechat: () => s,
|
|
21
|
+
profile: () => _,
|
|
22
|
+
reactions: () => u,
|
|
23
|
+
sound: () => p,
|
|
24
|
+
tabs: () => n
|
|
25
|
+
}), n = {
|
|
26
|
+
home: "Головна",
|
|
27
|
+
messages: "Повідомлення",
|
|
28
|
+
help: "Допомога",
|
|
29
|
+
news: "Новини",
|
|
30
|
+
profile: "Профіль"
|
|
31
|
+
}, r = {
|
|
32
|
+
close: "Закрити",
|
|
33
|
+
back: "Назад",
|
|
34
|
+
conversationSubtitle: "Наші фахівці також можуть допомогти",
|
|
35
|
+
helpTitle: "Допомога",
|
|
36
|
+
newsTitle: "Новини",
|
|
37
|
+
expand: "Розгорнути віджет",
|
|
38
|
+
collapse: "Згорнути віджет"
|
|
39
|
+
}, i = {
|
|
40
|
+
open: "Відкрити чат",
|
|
41
|
+
close: "Закрити чат"
|
|
42
|
+
}, a = {
|
|
43
|
+
greetingHeadline: "Як справи? 👋",
|
|
44
|
+
greetingSubheadline: "Чим вам допомогти?",
|
|
45
|
+
askTitle: "Поставити запитання",
|
|
46
|
+
askSubtitle: "Вам допоможуть наш бот і наші фахівці",
|
|
47
|
+
recentMessageLabel: "Нещодавнє повідомлення",
|
|
48
|
+
recentMessageTitle: "Нещодавнє повідомлення",
|
|
49
|
+
recentMessageFromFallback: "Gaia",
|
|
50
|
+
recentMessageAgo: "4 год",
|
|
51
|
+
recentMessageSample: "Привіт 👋 Дякуємо, що звернулися - ми скоро повернемося до вас.",
|
|
52
|
+
featuredArticleLoading: "Рекомендована стаття",
|
|
53
|
+
featuredArticleTap: "Натисніть, щоб читати",
|
|
54
|
+
featuredArticleEmpty: "Виберіть статтю",
|
|
55
|
+
featuredArticleSetUp: "Налаштуйте цей блок у панелі",
|
|
56
|
+
featuredArticleDemoEyebrow: "Pioneer · Save the date",
|
|
57
|
+
featuredArticleDemoHeadline: "8 жовтня 2026",
|
|
58
|
+
featuredArticleDemoSubline: "Сан-Франциско · офлайн + онлайн",
|
|
59
|
+
featuredArticleDemoCta: "Переглянути програму запуску",
|
|
60
|
+
seeAgenda: "Переглянути програму запуску",
|
|
61
|
+
browseHelp: "Довідка",
|
|
62
|
+
whatsNew: "Що нового",
|
|
63
|
+
searchPlaceholder: "Пошук у довідці",
|
|
64
|
+
pinnedArticlesTitle: "Почніть із цього",
|
|
65
|
+
popularArticlesTitle: "Популярні статті",
|
|
66
|
+
pinnedArticleRow: "Закріплена стаття {n}",
|
|
67
|
+
newsPreviewTitle: "Останні новини",
|
|
68
|
+
newsPreviewRow: "Новина {n}",
|
|
69
|
+
myConversationsTitle: "Ваші розмови",
|
|
70
|
+
myConversationsEmpty: "Переглянути ваші розмови",
|
|
71
|
+
teamStatusOnline: "Ми онлайн",
|
|
72
|
+
teamStatusReplyTime: "Зазвичай відповідаємо за кілька хвилин"
|
|
73
|
+
}, o = {
|
|
74
|
+
today: "Сьогодні",
|
|
75
|
+
yesterday: "Вчора",
|
|
76
|
+
unreadMessages: "Непрочитані повідомлення",
|
|
77
|
+
emptyTitle: "Ще немає повідомлень",
|
|
78
|
+
emptyBody: "Розпочніть розмову - ми відповімо тут.",
|
|
79
|
+
sendCta: "Надіслати повідомлення",
|
|
80
|
+
attach: "Прикріпити файл",
|
|
81
|
+
commands: "Швидкі команди",
|
|
82
|
+
record: "Записати голосове повідомлення",
|
|
83
|
+
stopRecording: "Зупинити запис",
|
|
84
|
+
recording: "Запис…",
|
|
85
|
+
uploading: "Завантаження…",
|
|
86
|
+
uploadFailed: "Не вдалося завантажити",
|
|
87
|
+
voiceDenied: "Доступ до мікрофона заборонено",
|
|
88
|
+
voiceUnsupported: "Браузер не підтримує запис голосу",
|
|
89
|
+
fileTooLarge: "Файл завеликий (максимум 10 МБ)",
|
|
90
|
+
fileMimeNotAllowed: "Цей тип файлу не підтримується",
|
|
91
|
+
emoji: "Вставити емодзі",
|
|
92
|
+
cancelRecording: "Скасувати запис",
|
|
93
|
+
pauseRecording: "Призупинити запис",
|
|
94
|
+
resumeRecording: "Продовжити запис",
|
|
95
|
+
playPreview: "Прослухати запис",
|
|
96
|
+
emojiPicker: "Вибір емодзі",
|
|
97
|
+
emojiSearch: "Пошук…",
|
|
98
|
+
playAudio: "Відтворити",
|
|
99
|
+
pauseAudio: "Пауза",
|
|
100
|
+
openAudio: "Відкрити аудіо",
|
|
101
|
+
removeAttachment: "Видалити",
|
|
102
|
+
aiAssistant: "ШІ-помічник",
|
|
103
|
+
operator: "Оператор",
|
|
104
|
+
openImage: "Відкрити зображення",
|
|
105
|
+
openPreview: "Відкрити перегляд",
|
|
106
|
+
play: "Відтворити",
|
|
107
|
+
pause: "Призупинити",
|
|
108
|
+
typing: "друкує…",
|
|
109
|
+
aiThinking: "думає…",
|
|
110
|
+
aiSearching: "переглядає…",
|
|
111
|
+
typingSomeone: "Хтось",
|
|
112
|
+
signInToChat: "Будь ласка, увійдіть, щоб почати розмову.",
|
|
113
|
+
signInUnavailable: "Вхід наразі недоступний.",
|
|
114
|
+
googleSignIn: "Вхід через аккаунт Google",
|
|
115
|
+
passkeySignIn: "Увійти за допомогою passkey",
|
|
116
|
+
passkeyRegister: "Вперше? Створіть passkey",
|
|
117
|
+
passkeyError: "Не вдалося увійти. Спробуйте ще раз.",
|
|
118
|
+
passkeyNoCredential: "На цьому пристрої ще немає passkey — натисніть «Створіть passkey», щоб додати.",
|
|
119
|
+
googleSignInDemo: "Продовжити з Google"
|
|
120
|
+
}, s = {
|
|
121
|
+
title: "Перш ніж почати",
|
|
122
|
+
subtitle: "Кілька деталей, щоб наша команда могла швидше допомогти.",
|
|
123
|
+
labelName: "Імʼя",
|
|
124
|
+
labelEmail: "Електронна пошта",
|
|
125
|
+
labelPhone: "Телефон",
|
|
126
|
+
labelCustom: "Деталі",
|
|
127
|
+
required: "Обовʼязкове поле",
|
|
128
|
+
invalidEmail: "Введіть дійсну адресу електронної пошти",
|
|
129
|
+
invalidPhone: "Введіть дійсний номер телефону",
|
|
130
|
+
submit: "Продовжити",
|
|
131
|
+
submitFailed: "Не вдалося надіслати - спробуйте ще раз."
|
|
132
|
+
}, c = {
|
|
133
|
+
searchPlaceholder: "Шукати в довідці",
|
|
134
|
+
emptyTitle: "Ще немає статей",
|
|
135
|
+
emptyBody: "Оператор ще не опублікував жодної статті.",
|
|
136
|
+
back: "Назад",
|
|
137
|
+
helpful: "Чи була ця стаття корисною?",
|
|
138
|
+
yes: "Так",
|
|
139
|
+
no: "Ні",
|
|
140
|
+
thanks: "Дякуємо за відгук.",
|
|
141
|
+
unresolvedCta: "Усе ще потрібна допомога? Напишіть нам",
|
|
142
|
+
noResults: "Нічого не знайдено",
|
|
143
|
+
articleNotFound: "Статтю не знайдено",
|
|
144
|
+
writtenBy: "Автор: {names}",
|
|
145
|
+
relatedTitle: "Схожі статті",
|
|
146
|
+
collectionsCount: "{count, plural, =0 {Без колекцій} one {# колекція} few {# колекції} many {# колекцій} other {# колекцій}}",
|
|
147
|
+
articlesCount: "{count, plural, =0 {Без статей} one {Статей: #} few {Статей: #} many {Статей: #} other {Статей: #}}",
|
|
148
|
+
authorsByline: "Автори {first}{remaining, plural, =0 {} one { та ще #} few { та ще #} many { та ще #} other { та ще #}}"
|
|
149
|
+
}, l = {
|
|
150
|
+
emptyTitle: "Поки що нічого нового",
|
|
151
|
+
emptyBody: "Заходьте сюди за продуктовими новинами й оголошеннями.",
|
|
152
|
+
helpful: "Чи була ця стаття корисною?",
|
|
153
|
+
yes: "Так",
|
|
154
|
+
no: "Ні",
|
|
155
|
+
thanks: "Дякуємо за відгук.",
|
|
156
|
+
searchPlaceholder: "Пошук у новинах",
|
|
157
|
+
noResults: "Нічого не знайдено",
|
|
158
|
+
editedAt: "редаговано {when}",
|
|
159
|
+
articleNotFound: "Статтю не знайдено.",
|
|
160
|
+
readOriginal: "Читати оригінал",
|
|
161
|
+
relatedTitle: "Схоже",
|
|
162
|
+
writtenBy: "Автор: {names}"
|
|
163
|
+
}, u = {
|
|
164
|
+
ariaLabel: "Реакції",
|
|
165
|
+
tapAria: "Поставити {emoji}"
|
|
166
|
+
}, d = {
|
|
167
|
+
title: "Читати іншою мовою",
|
|
168
|
+
ariaLabel: "Мови статті"
|
|
169
|
+
}, f = {
|
|
170
|
+
poweredBy: "Працює на",
|
|
171
|
+
wexio: "Wexio"
|
|
172
|
+
}, p = {
|
|
173
|
+
mute: "Вимкнути звуки сповіщень",
|
|
174
|
+
unmute: "Увімкнути звуки сповіщень"
|
|
175
|
+
}, m = {
|
|
176
|
+
tableOfContents: "Зміст",
|
|
177
|
+
tabFallback: "Вкладка {n}"
|
|
178
|
+
}, h = {
|
|
179
|
+
newMessage: "Нове повідомлення",
|
|
180
|
+
dismiss: "Закрити",
|
|
181
|
+
aiAssistant: "ШІ-помічник",
|
|
182
|
+
operator: "Оператор"
|
|
183
|
+
}, g = {
|
|
184
|
+
mediaPreview: "Перегляд медіа",
|
|
185
|
+
close: "Закрити перегляд",
|
|
186
|
+
previous: "Попереднє",
|
|
187
|
+
next: "Наступне"
|
|
188
|
+
}, _ = {
|
|
189
|
+
title: "Ваш профіль",
|
|
190
|
+
subtitle: "Оновіть свої дані та налаштування віджета.",
|
|
191
|
+
uploadAvatar: "Змінити фото",
|
|
192
|
+
removeAvatar: "Видалити фото",
|
|
193
|
+
avatarUploading: "Завантаження…",
|
|
194
|
+
preferencesHeading: "Налаштування",
|
|
195
|
+
preferenceLanguage: "Мова",
|
|
196
|
+
preferenceDesktopNotifications: "Сповіщення на робочому столі",
|
|
197
|
+
preferenceDesktopNotificationsHint: "Отримуйте системне сповіщення, коли віджет неактивний.",
|
|
198
|
+
preferenceThemeMode: "Тема",
|
|
199
|
+
themeAuto: "Як у системі",
|
|
200
|
+
themeLight: "Світла",
|
|
201
|
+
themeDark: "Темна",
|
|
202
|
+
themeLocked: "Тема задана оператором.",
|
|
203
|
+
pinnedHint: "Задано оператором — не редагується.",
|
|
204
|
+
requiredHint: "Обов'язкове",
|
|
205
|
+
invalidEmail: "Введіть коректну адресу електронної пошти.",
|
|
206
|
+
invalidPhone: "Використовуйте міжнародний формат, напр. +380441234567.",
|
|
207
|
+
noFields: "Тут поки що нема що редагувати.",
|
|
208
|
+
save: "Зберегти",
|
|
209
|
+
saving: "Збереження…",
|
|
210
|
+
cancel: "Скасувати",
|
|
211
|
+
saved: "Зміни збережено.",
|
|
212
|
+
loading: "Завантаження профілю…",
|
|
213
|
+
loadError: "Не вдалося завантажити профіль. Спробуйте ще раз.",
|
|
214
|
+
retry: "Повторити",
|
|
215
|
+
errorFieldNotAllowed: "Це поле не редагується в цьому віджеті. Спробуйте оновити сторінку.",
|
|
216
|
+
errorFieldPinned: "Це поле заблоковане вашим обліковим записом.",
|
|
217
|
+
errorFieldInvalid: "Деякі значення некоректні. Перевірте підсвічені поля.",
|
|
218
|
+
errorThemeLocked: "Тема заблокована оператором.",
|
|
219
|
+
errorFeatureDisabled: "Редагування профілю вимкнено оператором.",
|
|
220
|
+
errorGeneric: "Не вдалося зберегти зміни. Спробуйте ще раз.",
|
|
221
|
+
notificationsBlocked: "Сповіщення заблоковано браузером. Оновіть дозволи сайту, щоб увімкнути.",
|
|
222
|
+
notificationsRequest: "Дозвольте сповіщення в підказці браузера, щоб увімкнути.",
|
|
223
|
+
systemFields: {
|
|
224
|
+
avatar: "Фото",
|
|
225
|
+
wexioId: "Wexio ID",
|
|
226
|
+
telegramId: "Telegram ID",
|
|
227
|
+
whatsappId: "WhatsApp ID",
|
|
228
|
+
viberId: "Viber ID",
|
|
229
|
+
instagramId: "Instagram ID",
|
|
230
|
+
optInWhatsapp: "Дозвіл на WhatsApp",
|
|
231
|
+
webVerified: "Підтверджений відвідувач",
|
|
232
|
+
firstName: "Ім'я",
|
|
233
|
+
lastName: "Прізвище",
|
|
234
|
+
username: "Юзернейм",
|
|
235
|
+
language: "Мова",
|
|
236
|
+
email: "Email",
|
|
237
|
+
phone: "Телефон",
|
|
238
|
+
company: "Компанія",
|
|
239
|
+
location: "Місцезнаходження",
|
|
240
|
+
isValid: "Активний акаунт",
|
|
241
|
+
chatStatus: "Статус чату",
|
|
242
|
+
chatCategory: "Категорія чату",
|
|
243
|
+
priority: "Пріоритет",
|
|
244
|
+
leadSource: "Джерело ліда",
|
|
245
|
+
leadStatus: "Статус ліда",
|
|
246
|
+
interestLevel: "Рівень зацікавленості",
|
|
247
|
+
productInterest: "Інтерес до продукту",
|
|
248
|
+
budgetRange: "Бюджет",
|
|
249
|
+
purchaseTimeline: "Терміни покупки",
|
|
250
|
+
lastMessageSentAt: "Останнє надіслане",
|
|
251
|
+
lastMessageReceivedAt: "Останнє отримане",
|
|
252
|
+
lastSeenAt: "Останній візит",
|
|
253
|
+
firstMessageReceivedAt: "Перший контакт",
|
|
254
|
+
isBlocked: "Заблоковано",
|
|
255
|
+
registrationDate: "Дата реєстрації",
|
|
256
|
+
aiAvailable: "AI-допомога",
|
|
257
|
+
totalMessagesSent: "Надіслано повідомлень",
|
|
258
|
+
totalMessagesReceived: "Отримано повідомлень",
|
|
259
|
+
totalAiMessagesSent: "AI-повідомлень",
|
|
260
|
+
totalBotMessagesSent: "Бот-повідомлень",
|
|
261
|
+
totalUserMessagesSent: "Операторських повідомлень",
|
|
262
|
+
flowCompletionRate: "Завершеність флоу",
|
|
263
|
+
lastFlowCompleted: "Останній завершений флоу",
|
|
264
|
+
totalFlowsStarted: "Розпочато флоу",
|
|
265
|
+
totalFlowsCompleted: "Завершено флоу"
|
|
266
|
+
},
|
|
267
|
+
systemFieldOptions: {
|
|
268
|
+
chatStatus: {
|
|
269
|
+
ISSUE: "Проблема",
|
|
270
|
+
RESOLVED: "Вирішено",
|
|
271
|
+
PENDING: "Очікує",
|
|
272
|
+
IN_PROGRESS: "В процесі",
|
|
273
|
+
CLOSED: "Закрито"
|
|
274
|
+
},
|
|
275
|
+
chatCategory: {
|
|
276
|
+
SALES: "Продажі",
|
|
277
|
+
SUPPORT: "Підтримка",
|
|
278
|
+
BILLING: "Оплата",
|
|
279
|
+
FEEDBACK: "Відгук",
|
|
280
|
+
GENERAL: "Загальне",
|
|
281
|
+
OTHER: "Інше"
|
|
282
|
+
},
|
|
283
|
+
priority: {
|
|
284
|
+
LOW: "Низький",
|
|
285
|
+
MEDIUM: "Середній",
|
|
286
|
+
HIGH: "Високий",
|
|
287
|
+
URGENT: "Терміновий"
|
|
288
|
+
},
|
|
289
|
+
leadStatus: {
|
|
290
|
+
NEW: "Новий",
|
|
291
|
+
CONTACTED: "Зв'язалися",
|
|
292
|
+
QUALIFIED: "Кваліфікований",
|
|
293
|
+
NEGOTIATING: "Переговори",
|
|
294
|
+
WON: "Виграно",
|
|
295
|
+
LOST: "Втрачено"
|
|
296
|
+
},
|
|
297
|
+
interestLevel: {
|
|
298
|
+
LOW: "Низький",
|
|
299
|
+
MEDIUM: "Середній",
|
|
300
|
+
HIGH: "Високий",
|
|
301
|
+
VERY_HIGH: "Дуже високий"
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}, v = {
|
|
305
|
+
tabs: n,
|
|
306
|
+
header: r,
|
|
307
|
+
launcher: i,
|
|
308
|
+
home: a,
|
|
309
|
+
messages: o,
|
|
310
|
+
prechat: s,
|
|
311
|
+
help: c,
|
|
312
|
+
news: l,
|
|
313
|
+
reactions: u,
|
|
314
|
+
languageSelector: d,
|
|
315
|
+
branding: f,
|
|
316
|
+
sound: p,
|
|
317
|
+
article: m,
|
|
318
|
+
peek: h,
|
|
319
|
+
lightbox: g,
|
|
320
|
+
profile: _
|
|
321
|
+
};
|
|
322
|
+
//#endregion
|
|
323
|
+
export { t as n, v as t };
|
|
324
|
+
|
|
325
|
+
//# sourceMappingURL=widget-react-AgErOR36.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"widget-react-AgErOR36.js","names":[],"sources":["../messages/uk.json"],"sourcesContent":["{\n \"tabs\": {\n \"home\": \"Головна\",\n \"messages\": \"Повідомлення\",\n \"help\": \"Допомога\",\n \"news\": \"Новини\",\n \"profile\": \"Профіль\"\n },\n \"header\": {\n \"close\": \"Закрити\",\n \"back\": \"Назад\",\n \"conversationSubtitle\": \"Наші фахівці також можуть допомогти\",\n \"helpTitle\": \"Допомога\",\n \"newsTitle\": \"Новини\",\n \"expand\": \"Розгорнути віджет\",\n \"collapse\": \"Згорнути віджет\"\n },\n \"launcher\": {\n \"open\": \"Відкрити чат\",\n \"close\": \"Закрити чат\"\n },\n \"home\": {\n \"greetingHeadline\": \"Як справи? 👋\",\n \"greetingSubheadline\": \"Чим вам допомогти?\",\n \"askTitle\": \"Поставити запитання\",\n \"askSubtitle\": \"Вам допоможуть наш бот і наші фахівці\",\n \"recentMessageLabel\": \"Нещодавнє повідомлення\",\n \"recentMessageTitle\": \"Нещодавнє повідомлення\",\n \"recentMessageFromFallback\": \"Gaia\",\n \"recentMessageAgo\": \"4 год\",\n \"recentMessageSample\": \"Привіт 👋 Дякуємо, що звернулися - ми скоро повернемося до вас.\",\n \"featuredArticleLoading\": \"Рекомендована стаття\",\n \"featuredArticleTap\": \"Натисніть, щоб читати\",\n \"featuredArticleEmpty\": \"Виберіть статтю\",\n \"featuredArticleSetUp\": \"Налаштуйте цей блок у панелі\",\n \"featuredArticleDemoEyebrow\": \"Pioneer · Save the date\",\n \"featuredArticleDemoHeadline\": \"8 жовтня 2026\",\n \"featuredArticleDemoSubline\": \"Сан-Франциско · офлайн + онлайн\",\n \"featuredArticleDemoCta\": \"Переглянути програму запуску\",\n \"seeAgenda\": \"Переглянути програму запуску\",\n \"browseHelp\": \"Довідка\",\n \"whatsNew\": \"Що нового\",\n \"searchPlaceholder\": \"Пошук у довідці\",\n \"pinnedArticlesTitle\": \"Почніть із цього\",\n \"popularArticlesTitle\": \"Популярні статті\",\n \"pinnedArticleRow\": \"Закріплена стаття {n}\",\n \"newsPreviewTitle\": \"Останні новини\",\n \"newsPreviewRow\": \"Новина {n}\",\n \"myConversationsTitle\": \"Ваші розмови\",\n \"myConversationsEmpty\": \"Переглянути ваші розмови\",\n \"teamStatusOnline\": \"Ми онлайн\",\n \"teamStatusReplyTime\": \"Зазвичай відповідаємо за кілька хвилин\"\n },\n \"messages\": {\n \"today\": \"Сьогодні\",\n \"yesterday\": \"Вчора\",\n \"unreadMessages\": \"Непрочитані повідомлення\",\n \"emptyTitle\": \"Ще немає повідомлень\",\n \"emptyBody\": \"Розпочніть розмову - ми відповімо тут.\",\n \"sendCta\": \"Надіслати повідомлення\",\n \"attach\": \"Прикріпити файл\",\n \"commands\": \"Швидкі команди\",\n \"record\": \"Записати голосове повідомлення\",\n \"stopRecording\": \"Зупинити запис\",\n \"recording\": \"Запис…\",\n \"uploading\": \"Завантаження…\",\n \"uploadFailed\": \"Не вдалося завантажити\",\n \"voiceDenied\": \"Доступ до мікрофона заборонено\",\n \"voiceUnsupported\": \"Браузер не підтримує запис голосу\",\n \"fileTooLarge\": \"Файл завеликий (максимум 10 МБ)\",\n \"fileMimeNotAllowed\": \"Цей тип файлу не підтримується\",\n \"emoji\": \"Вставити емодзі\",\n \"cancelRecording\": \"Скасувати запис\",\n \"pauseRecording\": \"Призупинити запис\",\n \"resumeRecording\": \"Продовжити запис\",\n \"playPreview\": \"Прослухати запис\",\n \"emojiPicker\": \"Вибір емодзі\",\n \"emojiSearch\": \"Пошук…\",\n \"playAudio\": \"Відтворити\",\n \"pauseAudio\": \"Пауза\",\n \"openAudio\": \"Відкрити аудіо\",\n \"removeAttachment\": \"Видалити\",\n \"aiAssistant\": \"ШІ-помічник\",\n \"operator\": \"Оператор\",\n \"openImage\": \"Відкрити зображення\",\n \"openPreview\": \"Відкрити перегляд\",\n \"play\": \"Відтворити\",\n \"pause\": \"Призупинити\",\n \"typing\": \"друкує…\",\n \"aiThinking\": \"думає…\",\n \"aiSearching\": \"переглядає…\",\n \"typingSomeone\": \"Хтось\",\n \"signInToChat\": \"Будь ласка, увійдіть, щоб почати розмову.\",\n \"signInUnavailable\": \"Вхід наразі недоступний.\",\n \"googleSignIn\": \"Вхід через аккаунт Google\",\n \"passkeySignIn\": \"Увійти за допомогою passkey\",\n \"passkeyRegister\": \"Вперше? Створіть passkey\",\n \"passkeyError\": \"Не вдалося увійти. Спробуйте ще раз.\",\n \"passkeyNoCredential\": \"На цьому пристрої ще немає passkey — натисніть «Створіть passkey», щоб додати.\",\n \"googleSignInDemo\": \"Продовжити з Google\"\n },\n \"prechat\": {\n \"title\": \"Перш ніж почати\",\n \"subtitle\": \"Кілька деталей, щоб наша команда могла швидше допомогти.\",\n \"labelName\": \"Імʼя\",\n \"labelEmail\": \"Електронна пошта\",\n \"labelPhone\": \"Телефон\",\n \"labelCustom\": \"Деталі\",\n \"required\": \"Обовʼязкове поле\",\n \"invalidEmail\": \"Введіть дійсну адресу електронної пошти\",\n \"invalidPhone\": \"Введіть дійсний номер телефону\",\n \"submit\": \"Продовжити\",\n \"submitFailed\": \"Не вдалося надіслати - спробуйте ще раз.\"\n },\n \"help\": {\n \"searchPlaceholder\": \"Шукати в довідці\",\n \"emptyTitle\": \"Ще немає статей\",\n \"emptyBody\": \"Оператор ще не опублікував жодної статті.\",\n \"back\": \"Назад\",\n \"helpful\": \"Чи була ця стаття корисною?\",\n \"yes\": \"Так\",\n \"no\": \"Ні\",\n \"thanks\": \"Дякуємо за відгук.\",\n \"unresolvedCta\": \"Усе ще потрібна допомога? Напишіть нам\",\n \"noResults\": \"Нічого не знайдено\",\n \"articleNotFound\": \"Статтю не знайдено\",\n \"writtenBy\": \"Автор: {names}\",\n \"relatedTitle\": \"Схожі статті\",\n \"collectionsCount\": \"{count, plural, =0 {Без колекцій} one {# колекція} few {# колекції} many {# колекцій} other {# колекцій}}\",\n \"articlesCount\": \"{count, plural, =0 {Без статей} one {Статей: #} few {Статей: #} many {Статей: #} other {Статей: #}}\",\n \"authorsByline\": \"Автори {first}{remaining, plural, =0 {} one { та ще #} few { та ще #} many { та ще #} other { та ще #}}\"\n },\n \"news\": {\n \"emptyTitle\": \"Поки що нічого нового\",\n \"emptyBody\": \"Заходьте сюди за продуктовими новинами й оголошеннями.\",\n \"helpful\": \"Чи була ця стаття корисною?\",\n \"yes\": \"Так\",\n \"no\": \"Ні\",\n \"thanks\": \"Дякуємо за відгук.\",\n \"searchPlaceholder\": \"Пошук у новинах\",\n \"noResults\": \"Нічого не знайдено\",\n \"editedAt\": \"редаговано {when}\",\n \"articleNotFound\": \"Статтю не знайдено.\",\n \"readOriginal\": \"Читати оригінал\",\n \"relatedTitle\": \"Схоже\",\n \"writtenBy\": \"Автор: {names}\"\n },\n \"reactions\": {\n \"ariaLabel\": \"Реакції\",\n \"tapAria\": \"Поставити {emoji}\"\n },\n \"languageSelector\": {\n \"title\": \"Читати іншою мовою\",\n \"ariaLabel\": \"Мови статті\"\n },\n \"branding\": {\n \"poweredBy\": \"Працює на\",\n \"wexio\": \"Wexio\"\n },\n \"sound\": {\n \"mute\": \"Вимкнути звуки сповіщень\",\n \"unmute\": \"Увімкнути звуки сповіщень\"\n },\n \"article\": {\n \"tableOfContents\": \"Зміст\",\n \"tabFallback\": \"Вкладка {n}\"\n },\n \"peek\": {\n \"newMessage\": \"Нове повідомлення\",\n \"dismiss\": \"Закрити\",\n \"aiAssistant\": \"ШІ-помічник\",\n \"operator\": \"Оператор\"\n },\n \"lightbox\": {\n \"mediaPreview\": \"Перегляд медіа\",\n \"close\": \"Закрити перегляд\",\n \"previous\": \"Попереднє\",\n \"next\": \"Наступне\"\n },\n \"profile\": {\n \"title\": \"Ваш профіль\",\n \"subtitle\": \"Оновіть свої дані та налаштування віджета.\",\n \"uploadAvatar\": \"Змінити фото\",\n \"removeAvatar\": \"Видалити фото\",\n \"avatarUploading\": \"Завантаження…\",\n \"preferencesHeading\": \"Налаштування\",\n \"preferenceLanguage\": \"Мова\",\n \"preferenceDesktopNotifications\": \"Сповіщення на робочому столі\",\n \"preferenceDesktopNotificationsHint\": \"Отримуйте системне сповіщення, коли віджет неактивний.\",\n \"preferenceThemeMode\": \"Тема\",\n \"themeAuto\": \"Як у системі\",\n \"themeLight\": \"Світла\",\n \"themeDark\": \"Темна\",\n \"themeLocked\": \"Тема задана оператором.\",\n \"pinnedHint\": \"Задано оператором — не редагується.\",\n \"requiredHint\": \"Обов'язкове\",\n \"invalidEmail\": \"Введіть коректну адресу електронної пошти.\",\n \"invalidPhone\": \"Використовуйте міжнародний формат, напр. +380441234567.\",\n \"noFields\": \"Тут поки що нема що редагувати.\",\n \"save\": \"Зберегти\",\n \"saving\": \"Збереження…\",\n \"cancel\": \"Скасувати\",\n \"saved\": \"Зміни збережено.\",\n \"loading\": \"Завантаження профілю…\",\n \"loadError\": \"Не вдалося завантажити профіль. Спробуйте ще раз.\",\n \"retry\": \"Повторити\",\n \"errorFieldNotAllowed\": \"Це поле не редагується в цьому віджеті. Спробуйте оновити сторінку.\",\n \"errorFieldPinned\": \"Це поле заблоковане вашим обліковим записом.\",\n \"errorFieldInvalid\": \"Деякі значення некоректні. Перевірте підсвічені поля.\",\n \"errorThemeLocked\": \"Тема заблокована оператором.\",\n \"errorFeatureDisabled\": \"Редагування профілю вимкнено оператором.\",\n \"errorGeneric\": \"Не вдалося зберегти зміни. Спробуйте ще раз.\",\n \"notificationsBlocked\": \"Сповіщення заблоковано браузером. Оновіть дозволи сайту, щоб увімкнути.\",\n \"notificationsRequest\": \"Дозвольте сповіщення в підказці браузера, щоб увімкнути.\",\n \"systemFields\": {\n \"avatar\": \"Фото\",\n \"wexioId\": \"Wexio ID\",\n \"telegramId\": \"Telegram ID\",\n \"whatsappId\": \"WhatsApp ID\",\n \"viberId\": \"Viber ID\",\n \"instagramId\": \"Instagram ID\",\n \"optInWhatsapp\": \"Дозвіл на WhatsApp\",\n \"webVerified\": \"Підтверджений відвідувач\",\n \"firstName\": \"Ім'я\",\n \"lastName\": \"Прізвище\",\n \"username\": \"Юзернейм\",\n \"language\": \"Мова\",\n \"email\": \"Email\",\n \"phone\": \"Телефон\",\n \"company\": \"Компанія\",\n \"location\": \"Місцезнаходження\",\n \"isValid\": \"Активний акаунт\",\n \"chatStatus\": \"Статус чату\",\n \"chatCategory\": \"Категорія чату\",\n \"priority\": \"Пріоритет\",\n \"leadSource\": \"Джерело ліда\",\n \"leadStatus\": \"Статус ліда\",\n \"interestLevel\": \"Рівень зацікавленості\",\n \"productInterest\": \"Інтерес до продукту\",\n \"budgetRange\": \"Бюджет\",\n \"purchaseTimeline\": \"Терміни покупки\",\n \"lastMessageSentAt\": \"Останнє надіслане\",\n \"lastMessageReceivedAt\": \"Останнє отримане\",\n \"lastSeenAt\": \"Останній візит\",\n \"firstMessageReceivedAt\": \"Перший контакт\",\n \"isBlocked\": \"Заблоковано\",\n \"registrationDate\": \"Дата реєстрації\",\n \"aiAvailable\": \"AI-допомога\",\n \"totalMessagesSent\": \"Надіслано повідомлень\",\n \"totalMessagesReceived\": \"Отримано повідомлень\",\n \"totalAiMessagesSent\": \"AI-повідомлень\",\n \"totalBotMessagesSent\": \"Бот-повідомлень\",\n \"totalUserMessagesSent\": \"Операторських повідомлень\",\n \"flowCompletionRate\": \"Завершеність флоу\",\n \"lastFlowCompleted\": \"Останній завершений флоу\",\n \"totalFlowsStarted\": \"Розпочато флоу\",\n \"totalFlowsCompleted\": \"Завершено флоу\"\n },\n \"systemFieldOptions\": {\n \"chatStatus\": {\n \"ISSUE\": \"Проблема\",\n \"RESOLVED\": \"Вирішено\",\n \"PENDING\": \"Очікує\",\n \"IN_PROGRESS\": \"В процесі\",\n \"CLOSED\": \"Закрито\"\n },\n \"chatCategory\": {\n \"SALES\": \"Продажі\",\n \"SUPPORT\": \"Підтримка\",\n \"BILLING\": \"Оплата\",\n \"FEEDBACK\": \"Відгук\",\n \"GENERAL\": \"Загальне\",\n \"OTHER\": \"Інше\"\n },\n \"priority\": {\n \"LOW\": \"Низький\",\n \"MEDIUM\": \"Середній\",\n \"HIGH\": \"Високий\",\n \"URGENT\": \"Терміновий\"\n },\n \"leadStatus\": {\n \"NEW\": \"Новий\",\n \"CONTACTED\": \"Зв'язалися\",\n \"QUALIFIED\": \"Кваліфікований\",\n \"NEGOTIATING\": \"Переговори\",\n \"WON\": \"Виграно\",\n \"LOST\": \"Втрачено\"\n },\n \"interestLevel\": {\n \"LOW\": \"Низький\",\n \"MEDIUM\": \"Середній\",\n \"HIGH\": \"Високий\",\n \"VERY_HIGH\": \"Дуже високий\"\n }\n }\n }\n}\n"],"mappings":""}
|