@chat21/chat21-web-widget 5.1.32-rc8 → 5.1.33-rc8
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/.angular-mcp-cache/package.json +1 -0
- package/.cursor/angular18-accessibility-auditor-skill.md +442 -0
- package/.cursor/mcp.json +15 -0
- package/.github/workflows/playwright.yml +27 -0
- package/.playwright-mcp/console-2026-05-08T15-31-09-000Z.log +17 -0
- package/.playwright-mcp/console-2026-05-08T15-32-19-412Z.log +89 -0
- package/.playwright-mcp/console-2026-05-08T16-18-48-424Z.log +133 -0
- package/.playwright-mcp/console-2026-05-11T12-54-06-869Z.log +13 -0
- package/.playwright-mcp/console-2026-05-11T12-54-56-229Z.log +147 -0
- package/.playwright-mcp/console-2026-05-11T12-55-47-174Z.log +183 -0
- package/.playwright-mcp/console-2026-05-11T15-34-03-590Z.log +210 -0
- package/.playwright-mcp/console-2026-05-12T15-07-31-880Z.log +118 -0
- package/.playwright-mcp/page-2026-05-08T15-32-19-900Z.yml +851 -0
- package/.playwright-mcp/page-2026-05-08T15-32-47-264Z.yml +857 -0
- package/.playwright-mcp/page-2026-05-08T15-33-17-089Z.yml +1110 -0
- package/.playwright-mcp/page-2026-05-08T15-33-23-486Z.yml +1069 -0
- package/.playwright-mcp/page-2026-05-08T15-33-45-390Z.yml +1076 -0
- package/.playwright-mcp/page-2026-05-08T15-33-52-666Z.yml +1072 -0
- package/.playwright-mcp/page-2026-05-08T15-34-01-338Z.yml +1085 -0
- package/.playwright-mcp/page-2026-05-08T15-34-07-227Z.yml +1072 -0
- package/.playwright-mcp/page-2026-05-08T15-34-13-875Z.yml +1072 -0
- package/.playwright-mcp/page-2026-05-08T15-34-21-885Z.yml +1109 -0
- package/.playwright-mcp/page-2026-05-08T15-34-32-755Z.yml +1109 -0
- package/.playwright-mcp/page-2026-05-08T15-35-09-607Z.yml +1119 -0
- package/.playwright-mcp/page-2026-05-08T15-35-14-242Z.yml +1109 -0
- package/.playwright-mcp/page-2026-05-08T16-18-48-671Z.yml +44 -0
- package/.playwright-mcp/page-2026-05-08T16-18-52-753Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-19-13-919Z.yml +68 -0
- package/.playwright-mcp/page-2026-05-08T16-19-17-977Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-19-25-733Z.yml +120 -0
- package/.playwright-mcp/page-2026-05-08T16-19-29-252Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-19-39-269Z.yml +80 -0
- package/.playwright-mcp/page-2026-05-08T16-19-43-915Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-20-04-407Z.yml +81 -0
- package/.playwright-mcp/page-2026-05-08T16-20-08-984Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-20-32-397Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-20-58-658Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-21-12-320Z.yml +86 -0
- package/.playwright-mcp/page-2026-05-08T16-21-39-154Z.yml +91 -0
- package/.playwright-mcp/page-2026-05-08T16-21-45-420Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-22-21-062Z.yml +0 -0
- package/.playwright-mcp/page-2026-05-08T16-22-58-232Z.yml +91 -0
- package/.playwright-mcp/page-2026-05-08T16-23-36-520Z.yml +0 -0
- package/.playwright-mcp/page-2026-05-08T16-23-46-805Z.yml +100 -0
- package/.playwright-mcp/page-2026-05-08T16-23-55-169Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-24-26-574Z.yml +91 -0
- package/.playwright-mcp/page-2026-05-08T16-25-34-414Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-25-59-831Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-26-21-809Z.yml +91 -0
- package/.playwright-mcp/page-2026-05-08T16-26-47-443Z.yml +105 -0
- package/.playwright-mcp/page-2026-05-08T16-26-56-136Z.png +0 -0
- package/.playwright-mcp/page-2026-05-08T16-27-59-610Z.yml +48 -0
- package/.playwright-mcp/page-2026-05-11T12-54-07-180Z.yml +44 -0
- package/.playwright-mcp/page-2026-05-11T12-54-56-946Z.yml +4 -0
- package/.playwright-mcp/page-2026-05-11T12-55-47-503Z.yml +24 -0
- package/.playwright-mcp/page-2026-05-11T12-56-00-766Z.yml +28 -0
- package/.playwright-mcp/page-2026-05-11T12-56-06-438Z.yml +90 -0
- package/.playwright-mcp/page-2026-05-11T12-57-56-838Z.yml +106 -0
- package/.playwright-mcp/page-2026-05-11T12-58-00-124Z.yml +106 -0
- package/.playwright-mcp/page-2026-05-11T12-59-08-836Z.yml +61 -0
- package/.playwright-mcp/page-2026-05-11T12-59-12-088Z.yml +61 -0
- package/.playwright-mcp/page-2026-05-11T12-59-26-215Z.yml +69 -0
- package/.playwright-mcp/page-2026-05-11T12-59-29-519Z.yml +69 -0
- package/.playwright-mcp/page-2026-05-11T12-59-37-309Z.yml +0 -0
- package/.playwright-mcp/page-2026-05-11T12-59-39-968Z.yml +79 -0
- package/.playwright-mcp/page-2026-05-11T12-59-45-983Z.yml +78 -0
- package/.playwright-mcp/page-2026-05-11T12-59-49-951Z.yml +78 -0
- package/.playwright-mcp/page-2026-05-11T15-34-04-515Z.yml +0 -0
- package/.playwright-mcp/page-2026-05-12T15-07-32-171Z.yml +44 -0
- package/.playwright-mcp/page-2026-05-12T15-08-09-820Z.yml +119 -0
- package/CHANGELOG.md +61 -3
- package/angular.json +20 -3
- package/deploy_amazon_beta.sh +7 -17
- package/deploy_amazon_prod.sh +41 -0
- package/docs/TILEDESK_WIDGET_ACCESSIBILITY_STATEMENT_COMPLETE.md +379 -0
- package/env.sample +3 -2
- package/mocks/voice-websocket-mock/server.cjs +245 -0
- package/package.json +7 -3
- package/playwright-report/index.html +90 -0
- package/playwright.config.ts +41 -0
- package/src/app/app.component.html +2 -2
- package/src/app/app.component.scss +25 -14
- package/src/app/app.component.spec.ts +21 -6
- package/src/app/app.module.ts +4 -0
- package/src/app/component/conversation-detail/conversation/conversation.component.html +19 -11
- package/src/app/component/conversation-detail/conversation/conversation.component.scss +28 -0
- package/src/app/component/conversation-detail/conversation/conversation.component.spec.ts +644 -75
- package/src/app/component/conversation-detail/conversation/conversation.component.ts +61 -17
- package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.html +25 -13
- package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.spec.ts +123 -5
- package/src/app/component/conversation-detail/conversation-audio-recorder/conversation-audio-recorder.component.ts +1 -0
- package/src/app/component/conversation-detail/conversation-content/conversation-content.component.html +22 -9
- package/src/app/component/conversation-detail/conversation-content/conversation-content.component.scss +23 -1
- package/src/app/component/conversation-detail/conversation-content/conversation-content.component.spec.ts +249 -149
- package/src/app/component/conversation-detail/conversation-content/conversation-content.component.ts +0 -1
- package/src/app/component/conversation-detail/conversation-emojii/conversation-emojii.component.spec.ts +53 -3
- package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component copy.html +172 -0
- package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.html +112 -62
- package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.scss +133 -7
- package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.spec.ts +452 -78
- package/src/app/component/conversation-detail/conversation-footer/conversation-footer.component.ts +193 -79
- package/src/app/component/conversation-detail/conversation-header/conversation-header.component.html +113 -53
- package/src/app/component/conversation-detail/conversation-header/conversation-header.component.scss +12 -4
- package/src/app/component/conversation-detail/conversation-header/conversation-header.component.spec.ts +274 -29
- package/src/app/component/conversation-detail/conversation-internal-frame/conversation-internal-frame.component.html +23 -9
- package/src/app/component/conversation-detail/conversation-internal-frame/conversation-internal-frame.component.spec.ts +80 -8
- package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.html +29 -23
- package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.spec.ts +185 -16
- package/src/app/component/conversation-detail/conversation-preview/conversation-preview.component.ts +34 -14
- package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.html +43 -19
- package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.scss +63 -10
- package/src/app/component/conversation-detail/stream-audio-spectrum/stream-audio-spectrum.component.ts +142 -12
- package/src/app/component/error-alert/error-alert.component.spec.ts +65 -5
- package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.html +16 -7
- package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.scss +21 -0
- package/src/app/component/eyeeye-catcher-card/eyeeye-catcher-card.component.spec.ts +89 -7
- package/src/app/component/form/form-builder/form-builder.component.html +1 -1
- package/src/app/component/form/form-builder/form-builder.component.spec.ts +163 -21
- package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.html +8 -4
- package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.scss +10 -5
- package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.spec.ts +90 -16
- package/src/app/component/form/inputs/form-checkbox/form-checkbox.component.ts +26 -0
- package/src/app/component/form/inputs/form-label/form-label.component.spec.ts +45 -11
- package/src/app/component/form/inputs/form-radio-button/form-radio-button.component.spec.ts +24 -6
- package/src/app/component/form/inputs/form-select/form-select.component.spec.ts +14 -5
- package/src/app/component/form/inputs/form-text/form-text.component.html +14 -12
- package/src/app/component/form/inputs/form-text/form-text.component.scss +11 -1
- package/src/app/component/form/inputs/form-text/form-text.component.spec.ts +113 -17
- package/src/app/component/form/inputs/form-text/form-text.component.ts +26 -0
- package/src/app/component/form/inputs/form-textarea/form-textarea.component.html +13 -11
- package/src/app/component/form/inputs/form-textarea/form-textarea.component.scss +6 -5
- package/src/app/component/form/inputs/form-textarea/form-textarea.component.spec.ts +149 -13
- package/src/app/component/form/inputs/form-textarea/form-textarea.component.ts +26 -0
- package/src/app/component/form/prechat-form/prechat-form.component.html +14 -11
- package/src/app/component/form/prechat-form/prechat-form.component.spec.ts +102 -10
- package/src/app/component/form/prechat-form/prechat-form.component.ts +8 -1
- package/src/app/component/form/prechat-form-test-mock.ts +35 -0
- package/src/app/component/home/home.component.html +38 -31
- package/src/app/component/home/home.component.scss +4 -2
- package/src/app/component/home/home.component.spec.ts +226 -11
- package/src/app/component/home-conversations/home-conversations.component.html +30 -26
- package/src/app/component/home-conversations/home-conversations.component.scss +3 -0
- package/src/app/component/home-conversations/home-conversations.component.spec.ts +212 -36
- package/src/app/component/last-message/last-message.component.html +15 -9
- package/src/app/component/last-message/last-message.component.scss +16 -2
- package/src/app/component/last-message/last-message.component.spec.ts +204 -23
- package/src/app/component/launcher-button/launcher-button.component.html +8 -13
- package/src/app/component/launcher-button/launcher-button.component.spec.ts +104 -8
- package/src/app/component/list-all-conversations/list-all-conversations.component.html +12 -17
- package/src/app/component/list-all-conversations/list-all-conversations.component.scss +2 -0
- package/src/app/component/list-conversations/list-conversations.component.html +22 -22
- package/src/app/component/menu-options/menu-options.component.html +30 -20
- package/src/app/component/menu-options/menu-options.component.spec.ts +125 -9
- package/src/app/component/message/audio/audio.component.html +13 -15
- package/src/app/component/message/audio/audio.component.spec.ts +140 -5
- package/src/app/component/message/audio/audio.component.ts +1 -0
- package/src/app/component/message/audio-sync/audio-sync.component.scss +1 -1
- package/src/app/component/message/audio-sync/audio-sync.component.spec.ts +81 -1
- package/src/app/component/message/audio-sync/audio-sync.component.ts +134 -24
- package/src/app/component/message/avatar/avatar.component.html +2 -2
- package/src/app/component/message/avatar/avatar.component.spec.ts +99 -7
- package/src/app/component/message/bubble-message/bubble-message.component.html +39 -52
- package/src/app/component/message/bubble-message/bubble-message.component.scss +54 -1
- package/src/app/component/message/bubble-message/bubble-message.component.spec.ts +154 -57
- package/src/app/component/message/bubble-message/bubble-message.component.ts +138 -110
- package/src/app/component/message/buttons/action-button/action-button.component.html +3 -4
- package/src/app/component/message/buttons/action-button/action-button.component.spec.ts +49 -5
- package/src/app/component/message/buttons/link-button/link-button.component.scss +5 -8
- package/src/app/component/message/buttons/link-button/link-button.component.spec.ts +50 -5
- package/src/app/component/message/buttons/text-button/text-button.component.spec.ts +44 -5
- package/src/app/component/message/carousel/carousel.component.html +29 -16
- package/src/app/component/message/carousel/carousel.component.scss +20 -8
- package/src/app/component/message/carousel/carousel.component.spec.ts +80 -3
- package/src/app/component/message/carousel/carousel.component.ts +16 -0
- package/src/app/component/message/frame/frame.component.html +9 -4
- package/src/app/component/message/frame/frame.component.spec.ts +34 -15
- package/src/app/component/message/frame/frame.component.ts +7 -2
- package/src/app/component/message/html/html.component.html +1 -1
- package/src/app/component/message/html/html.component.scss +1 -1
- package/src/app/component/message/html/html.component.spec.ts +24 -7
- package/src/app/component/message/image/image.component.html +12 -10
- package/src/app/component/message/image/image.component.scss +16 -0
- package/src/app/component/message/image/image.component.spec.ts +101 -15
- package/src/app/component/message/image/image.component.ts +90 -51
- package/src/app/component/message/info-message/info-message.component.spec.ts +26 -14
- package/src/app/component/message/json-sources/json-sources.component.html +38 -0
- package/src/app/component/message/json-sources/json-sources.component.scss +197 -0
- package/src/app/component/message/json-sources/json-sources.component.ts +89 -0
- package/src/app/component/message/like-unlike/like-unlike.component.html +7 -9
- package/src/app/component/message/like-unlike/like-unlike.component.spec.ts +31 -3
- package/src/app/component/message/return-receipt/return-receipt.component.spec.ts +38 -17
- package/src/app/component/message/text/text.component.html +3 -3
- package/src/app/component/message/text/text.component.scss +80 -86
- package/src/app/component/message/text/text.component.spec.ts +106 -13
- package/src/app/component/message-attachment/message-attachment.component.spec.ts +134 -13
- package/src/app/component/selection-department/selection-department.component.html +21 -23
- package/src/app/component/selection-department/selection-department.component.spec.ts +159 -14
- package/src/app/component/selection-department/selection-department.component.ts +8 -1
- package/src/app/component/send-button/send-button.component.html +5 -13
- package/src/app/component/send-button/send-button.component.spec.ts +2 -2
- package/src/app/component/star-rating-widget/star-rating-widget.component.html +51 -81
- package/src/app/directives/tooltip.directive.spec.ts +8 -4
- package/src/app/modals/confirm-close/confirm-close.component.html +20 -8
- package/src/app/modals/confirm-close/confirm-close.component.scss +3 -0
- package/src/app/modals/confirm-close/confirm-close.component.spec.ts +13 -4
- package/src/app/modals/confirm-close/confirm-close.component.ts +8 -1
- package/src/app/pipe/html-entites-encode.pipe.spec.ts +35 -2
- package/src/app/pipe/marked.pipe.spec.ts +38 -2
- package/src/app/providers/app-config.service.ts +4 -2
- package/src/app/providers/brand.service.spec.ts +23 -2
- package/src/app/providers/brand.service.ts +1 -1
- package/src/app/providers/global-settings.service.spec.ts +1009 -14
- package/src/app/providers/global-settings.service.ts +30 -2
- package/src/app/providers/json-sources-parser.service.ts +182 -0
- package/src/app/providers/translator.service.ts +24 -6
- package/src/app/providers/tts-audio-playback-coordinator.service.spec.ts +117 -0
- package/src/app/providers/tts-audio-playback-coordinator.service.ts +45 -7
- package/src/app/providers/url-preview.service.ts +82 -0
- package/src/app/providers/voice/audio.types.ts +6 -0
- package/src/app/providers/voice/voice-streaming.service.spec.ts +23 -0
- package/src/app/providers/voice/voice-streaming.service.ts +710 -0
- package/src/app/providers/voice/voice-streaming.types.ts +113 -0
- package/src/app/providers/voice/voice.service.spec.ts +203 -3
- package/src/app/providers/voice/voice.service.ts +521 -12
- package/src/app/sass/_variables.scss +1 -1
- package/src/app/sass/animations.scss +19 -1
- package/src/app/utils/globals.ts +4 -0
- package/src/app/utils/json-sources-utils.ts +27 -0
- package/src/app/utils/url-utils.ts +98 -0
- package/src/app/utils/utils-resources.ts +1 -1
- package/src/assets/i18n/en.json +26 -1
- package/src/assets/i18n/es.json +106 -101
- package/src/assets/i18n/fr.json +106 -101
- package/src/assets/i18n/it.json +106 -99
- package/src/assets/twp/index-dev.html +18 -0
- package/src/assets/twp/tiledesk_widget_files/widget-css-override-example.css +14 -0
- package/src/chat21-core/providers/chat-manager.spec.ts +72 -0
- package/src/chat21-core/providers/scripts/script.service.spec.ts +12 -2
- package/src/chat21-core/utils/constants.ts +4 -0
- package/src/chat21-core/utils/utils-message.ts +23 -1
- package/src/widget-config-template.json +3 -1
- package/src/widget-config.json +28 -27
- package/test-results/.last-run.json +4 -0
- package/tests/widget-form-rich.spec.ts +67 -0
- package/tests/widget-index-dev-settings.spec.ts +52 -0
- package/tests/widget-twp-iframe.spec.ts +39 -0
package/src/app/utils/globals.ts
CHANGED
|
@@ -117,6 +117,7 @@ export class Globals {
|
|
|
117
117
|
WAITING_TIME_NOT_FOUND: string;
|
|
118
118
|
CLOSED: string;
|
|
119
119
|
LABEL_PREVIEW: string;
|
|
120
|
+
BUTTON_OPEN_CHAT: string;
|
|
120
121
|
|
|
121
122
|
// ============ BEGIN: EXTERNAL PARAMETERS ==============//
|
|
122
123
|
autoStart: boolean;
|
|
@@ -226,6 +227,7 @@ export class Globals {
|
|
|
226
227
|
hasCalloutInWidgetConfig: boolean; // ******* new ********
|
|
227
228
|
|
|
228
229
|
fontFamilySource: string; // ******* new ********
|
|
230
|
+
cssSource: string; // ******* new ********
|
|
229
231
|
|
|
230
232
|
size: 'min' | 'max' | 'top'; // ******* new ********
|
|
231
233
|
|
|
@@ -448,6 +450,8 @@ export class Globals {
|
|
|
448
450
|
this.hasCalloutInWidgetConfig = false;
|
|
449
451
|
/** set widget size from 3 different positions: min, max, top */
|
|
450
452
|
this.size = 'min';
|
|
453
|
+
/** remote CSS override URL (from window.tiledeskSettings.cssSource only) */
|
|
454
|
+
this.cssSource = '';
|
|
451
455
|
/** enable to close the chat in conversation */
|
|
452
456
|
this.closeChatInConversation = false;
|
|
453
457
|
// ============ END: SET EXTERNAL PARAMETERS ==============//
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { JsonSourceItem } from 'src/app/component/message/json-sources/json-sources.component';
|
|
2
|
+
|
|
3
|
+
export function extractUrlsFromJsonSources(sources: JsonSourceItem[] | null | undefined): string[] {
|
|
4
|
+
return (sources || [])
|
|
5
|
+
.map((s) => (s?.link || '').trim())
|
|
6
|
+
.filter(Boolean);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function mergeJsonSourcesMissingFields(
|
|
10
|
+
base: JsonSourceItem[],
|
|
11
|
+
previews: JsonSourceItem[]
|
|
12
|
+
): JsonSourceItem[] {
|
|
13
|
+
const byUrl = new Map(previews.map((p) => [p.link, p]));
|
|
14
|
+
return base.map((cur) => {
|
|
15
|
+
const p = cur?.link ? byUrl.get(cur.link) : undefined;
|
|
16
|
+
if (!p) return cur;
|
|
17
|
+
return {
|
|
18
|
+
...cur,
|
|
19
|
+
title: cur.title || p.title,
|
|
20
|
+
description: cur.description || p.description,
|
|
21
|
+
image: cur.image || p.image,
|
|
22
|
+
favicon: cur.favicon || p.favicon,
|
|
23
|
+
favicon_hd: cur.favicon_hd || p.favicon_hd
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
export function extractUrlsFromText(text?: string, maxUrls = 20): string[] {
|
|
2
|
+
if (!text) return [];
|
|
3
|
+
const input = text.toString();
|
|
4
|
+
// Match candidates:
|
|
5
|
+
// - https?://...
|
|
6
|
+
// - www....
|
|
7
|
+
// - naked domains like google.it/path
|
|
8
|
+
// We later normalize + validate.
|
|
9
|
+
const candidateRegex =
|
|
10
|
+
/\b(?:https?:\/\/[^\s<>"'`)\]]+|www\.[^\s<>"'`)\]]+|[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+[^\s<>"'`)\]]*)/gi;
|
|
11
|
+
const matches = input.match(candidateRegex) || [];
|
|
12
|
+
|
|
13
|
+
const seen = new Set<string>();
|
|
14
|
+
const out: string[] = [];
|
|
15
|
+
for (const raw of matches) {
|
|
16
|
+
const normalized = normalizeAndValidateUrlCandidate(raw);
|
|
17
|
+
if (!normalized) continue;
|
|
18
|
+
if (seen.has(normalized)) continue;
|
|
19
|
+
seen.add(normalized);
|
|
20
|
+
out.push(normalized);
|
|
21
|
+
if (out.length >= maxUrls) break;
|
|
22
|
+
}
|
|
23
|
+
return out;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function normalizeAndValidateUrlCandidate(candidate: string): string | null {
|
|
27
|
+
if (!candidate) return null;
|
|
28
|
+
let s = candidate.trim();
|
|
29
|
+
|
|
30
|
+
// Drop surrounding punctuation/brackets commonly attached in text
|
|
31
|
+
s = s.replace(/^[("'<\[]+/, '').replace(/[)"'>\]]+$/, '');
|
|
32
|
+
// Drop trailing punctuation
|
|
33
|
+
s = s.replace(/[.,;:!?]+$/g, '').trim();
|
|
34
|
+
if (!s) return null;
|
|
35
|
+
|
|
36
|
+
// Reject emails quickly
|
|
37
|
+
if (s.includes('@')) return null;
|
|
38
|
+
|
|
39
|
+
// Add scheme if missing
|
|
40
|
+
if (/^www\./i.test(s)) {
|
|
41
|
+
s = `https://${s}`;
|
|
42
|
+
} else if (!/^https?:\/\//i.test(s)) {
|
|
43
|
+
s = `https://${s}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
try {
|
|
47
|
+
const url = new URL(s);
|
|
48
|
+
const hostname = url.hostname.toLowerCase();
|
|
49
|
+
|
|
50
|
+
// must look like a real domain: contain a dot and a plausible TLD
|
|
51
|
+
if (!hostname.includes('.')) return null;
|
|
52
|
+
const tld = hostname.split('.').pop() || '';
|
|
53
|
+
if (tld.length < 2) return null;
|
|
54
|
+
if (!/^[a-z0-9-]+$/.test(tld)) return null;
|
|
55
|
+
|
|
56
|
+
// normalize: remove default port and trailing slash when path is '/'
|
|
57
|
+
url.hash = ''; // do not include fragments in "identity"
|
|
58
|
+
if (url.pathname === '/') url.pathname = '';
|
|
59
|
+
return url.toString();
|
|
60
|
+
} catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Best-effort "registrable domain" extractor.
|
|
67
|
+
* Examples:
|
|
68
|
+
* - "docs.example.com" -> "example.com"
|
|
69
|
+
* - "www.example.co.uk" -> "example.co.uk"
|
|
70
|
+
*
|
|
71
|
+
* This is a heuristic (no publicsuffix list) but works well for common cases.
|
|
72
|
+
*/
|
|
73
|
+
export function getTopLevelDomainFromHostname(hostname: string): string {
|
|
74
|
+
const host = (hostname || '').trim().toLowerCase().replace(/\.+$/, '');
|
|
75
|
+
const parts = host.split('.').filter(Boolean);
|
|
76
|
+
if (parts.length <= 2) return host;
|
|
77
|
+
|
|
78
|
+
const tld = parts[parts.length - 1];
|
|
79
|
+
const sld = parts[parts.length - 2];
|
|
80
|
+
|
|
81
|
+
// Heuristic for common ccTLD second-level domains (co.uk, com.au, etc.)
|
|
82
|
+
const commonSecondLevel = new Set(['co', 'com', 'org', 'net', 'gov', 'ac', 'edu']);
|
|
83
|
+
const isCcTld = tld.length === 2;
|
|
84
|
+
if (isCcTld && commonSecondLevel.has(sld) && parts.length >= 3) {
|
|
85
|
+
return parts.slice(-3).join('.');
|
|
86
|
+
}
|
|
87
|
+
return parts.slice(-2).join('.');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export function getTopLevelDomainFromUrl(url: string): string {
|
|
91
|
+
try {
|
|
92
|
+
const hostname = new URL(url).hostname.replace(/^www\./, '');
|
|
93
|
+
return getTopLevelDomainFromHostname(hostname);
|
|
94
|
+
} catch {
|
|
95
|
+
return '';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
@@ -7,7 +7,7 @@ export const BRAND_BASE_INFO: { [key: string] : string} ={
|
|
|
7
7
|
FAVICON: "https://tiledesk.com/wp-content/uploads/2022/07/tiledesk_v13-300x300.png",
|
|
8
8
|
META_TITLE:"Design Studio",
|
|
9
9
|
LOGO_CHAT:"https://widget.tiledesk.com/v2/assets/images/tiledesk_logo_white_small.svg",
|
|
10
|
-
POWERED_BY:"<a
|
|
10
|
+
POWERED_BY:"<a target='_blank' rel='noopener noreferrer' href='https://www.tiledesk.com/?utm_source=widget'><img src='https://support-pre.tiledesk.com/dashboard/assets/img/logos/tiledesk-solo_logo_new_gray.svg' alt=''/><span>Powered by Tiledesk</span></a>",
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export const LOGOS_ITEMS: { [key: string] : { label: string, icon: string }} ={
|
package/src/assets/i18n/en.json
CHANGED
|
@@ -97,6 +97,31 @@
|
|
|
97
97
|
"EMOJI_NOT_ELLOWED":"Emoji not allowed",
|
|
98
98
|
"DOMAIN_NOT_ALLOWED":"URL contains a non-allowed domain",
|
|
99
99
|
"MAX_ATTACHMENT": "Max allowed size {{FILE_SIZE_LIMIT}}Mb",
|
|
100
|
+
"EMOJI": "Emoji",
|
|
101
|
+
"BUTTON_ATTACH_FILE": "Attach file",
|
|
102
|
+
"BUTTON_SEND_MESSAGE": "Send message",
|
|
103
|
+
"BUTTON_RECORD_AUDIO": "Hold to record an audio message",
|
|
104
|
+
"BUTTON_DELETE_AUDIO": "Delete recording",
|
|
105
|
+
"BUTTON_SEND_AUDIO": "Send audio message",
|
|
106
|
+
"BUTTON_PLAY_AUDIO": "Play audio",
|
|
107
|
+
"BUTTON_PAUSE_AUDIO": "Pause audio",
|
|
108
|
+
"BUTTON_LIKE_MESSAGE": "Like message",
|
|
109
|
+
"BUTTON_UNLIKE_MESSAGE": "Dislike message",
|
|
110
|
+
"BUTTON_OPEN_CHAT": "Open chat",
|
|
111
|
+
"BUTTON_CLOSE_PANEL": "Close panel",
|
|
112
|
+
"CONVERSATION_LOG_LABEL": "Conversation messages",
|
|
113
|
+
"BUTTON_OPEN_DETAIL": "Open conversation detail",
|
|
114
|
+
"BUTTON_ALL_CONVERSATIONS": "All conversations",
|
|
115
|
+
"BUTTON_SCROLL_TO_BOTTOM": "Scroll to last message",
|
|
116
|
+
"BUTTON_CLOSE_PREVIEW": "Close preview",
|
|
117
|
+
"CAROUSEL_PREVIOUS": "Previous slide",
|
|
118
|
+
"CAROUSEL_NEXT": "Next slide",
|
|
119
|
+
"CAROUSEL_LABEL": "Cards carousel",
|
|
120
|
+
"CAROUSEL_SLIDE_LABEL": "Slide {current} of {total}",
|
|
121
|
+
"SKIP_TO_COMPOSER": "Skip to message composer",
|
|
100
122
|
"MAX_ATTACHMENT_ERROR": "The file exceeds the maximum allowed size",
|
|
101
|
-
"
|
|
123
|
+
"STREAM_AUDIO": "Voice input",
|
|
124
|
+
"VOICE_CONNECTING": "Connecting...",
|
|
125
|
+
"VOICE_LISTENING": "Listening...",
|
|
126
|
+
"VOICE_PROCESSING": "Processing..."
|
|
102
127
|
}
|
package/src/assets/i18n/es.json
CHANGED
|
@@ -1,102 +1,107 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
2
|
+
"LABEL_PLACEHOLDER": "escribe tu mensaje..",
|
|
3
|
+
"LABEL_START_NW_CONV": "Nueva conversación",
|
|
4
|
+
"LABEL_WHATSAPP": "Envíanos un mensaje",
|
|
5
|
+
"LABEL_SELECT_TOPIC": "Elige un tema",
|
|
6
|
+
"LABEL_COMPLETE_FORM": "Complete el formulario para iniciar una conversación con el próximo agente disponible.",
|
|
7
|
+
"LABEL_FIELD_NAME": "Nombre",
|
|
8
|
+
"LABEL_ERROR_FIELD_NAME": "Campo obligatorio (mínimo 5 caracteres).",
|
|
9
|
+
"LABEL_FIELD_EMAIL": "Email",
|
|
10
|
+
"LABEL_ERROR_FIELD_EMAIL": "Introduzca una dirección de correo electrónico válida.",
|
|
11
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Campo obligatorio",
|
|
12
|
+
"LABEL_WRITING": "esta escribiendo...",
|
|
13
|
+
"LABEL_SEND_NEW_MESSAGE": "Enviar un mensaje nuevo",
|
|
14
|
+
"AGENT_NOT_AVAILABLE": " Fuera de línea",
|
|
15
|
+
"AGENT_AVAILABLE": " En línea",
|
|
16
|
+
"GUEST_LABEL": "Huésped",
|
|
17
|
+
"ALL_AGENTS_OFFLINE_LABEL": "Todos los operadores están desconectados en este momento.",
|
|
18
|
+
"LABEL_LOADING": "Cargando...",
|
|
19
|
+
"LABEL_THINKING": "pensando",
|
|
20
|
+
"CALLOUT_TITLE_PLACEHOLDER": "🖐 ¿Necesitas ayuda?",
|
|
21
|
+
"CALLOUT_MSG_PLACEHOLDER": "¡Haz clic aquí y comienza a chatear con nosotros!",
|
|
22
|
+
"CUSTOMER_SATISFACTION": "La satisfacción del cliente",
|
|
23
|
+
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "su opinión sobre nuestro servicio al cliente",
|
|
24
|
+
"DOWNLOAD_TRANSCRIPT": "Descargar transcripción",
|
|
25
|
+
"BACK": "Atrás",
|
|
26
|
+
"CONTINUE": "Continuar",
|
|
27
|
+
"YOUR_RATING": "tu clasificación",
|
|
28
|
+
"WRITE_YOUR_OPINION": "Escribe tu opinión ... (opcional)",
|
|
29
|
+
"SUBMIT": "Enviar",
|
|
30
|
+
"THANK_YOU_FOR_YOUR_EVALUATION": "Gracias por tu evaluación",
|
|
31
|
+
"YOUR_RATING_HAS_BEEN_RECEIVED": "su voto ha sido recibido",
|
|
32
|
+
"ALERT_LEAVE_CHAT": "quieres salir del chat?",
|
|
33
|
+
"YES": "Si",
|
|
34
|
+
"NO": "No",
|
|
35
|
+
"BUTTON_CLOSE_TO_ICON": "Minimiza el chat",
|
|
36
|
+
"BUTTON_EDIT_PROFILE": "Actualización del perfil",
|
|
37
|
+
"RATE_CHAT": "Califica el chat",
|
|
38
|
+
"WELCOME_TITLE": "Hola, bienvenido a Tiledesk 👋",
|
|
39
|
+
"WELCOME_MSG": "¿Cómo podemos ayudar?",
|
|
40
|
+
"WELCOME": "Podemos",
|
|
41
|
+
"OPTIONS": "opciones",
|
|
42
|
+
"SOUND_OFF": "Sonido apagado",
|
|
43
|
+
"SOUND_ON": "Sonido encendido",
|
|
44
|
+
"LOGOUT": "Cerrar sesión",
|
|
45
|
+
"CLOSE": "cerca",
|
|
46
|
+
"RESTART": "Reiniciar",
|
|
47
|
+
"PREV_CONVERSATIONS": "Tus conversaciones",
|
|
48
|
+
"YOU": "Tú",
|
|
49
|
+
"SHOW_ALL_CONV": "mostrar todo",
|
|
50
|
+
"START_A_CONVERSATION": "Iniciar una conversación",
|
|
51
|
+
"NO_CONVERSATION": "Sin conversación",
|
|
52
|
+
"SEE_PREVIOUS": "ver anterior",
|
|
53
|
+
"WAITING_TIME_FOUND": "El equipo típicamente responde en $reply_time",
|
|
54
|
+
"WAITING_TIME_NOT_FOUND": "El equipo responderá lo antes posible",
|
|
55
|
+
"CLOSED": "CERRADA",
|
|
56
|
+
"CLOSE_CHAT": "Cerrar chat",
|
|
57
|
+
"MINIMIZE": " Minimizar ventana",
|
|
58
|
+
"MAXIMIZE": "Expandir ventana",
|
|
59
|
+
"CENTER": "Centrar",
|
|
60
|
+
"CONFIRM_CLOSE_CHAT": "¿Estás seguro de que quieres cerrar este chat?",
|
|
61
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "tú",
|
|
62
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "han sido agregados a ",
|
|
63
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "joined",
|
|
64
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "el chat",
|
|
65
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Chat reabierto",
|
|
66
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Chat cerrada",
|
|
67
|
+
"INFO_SUPPORT_LEAD_UPDATED": "Cliente potencial actualizado",
|
|
68
|
+
"INFO_SUPPORT_MEMBER_LEFT_GROUP": "eliminado del grupo",
|
|
69
|
+
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP": "abandonó la conversación",
|
|
70
|
+
"INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Se le ha asignado una nueva solicitud de soporte",
|
|
71
|
+
"LABEL_PRECHAT_USER_FULLNAME": "Nombre completo",
|
|
72
|
+
"LABEL_PRECHAT_USER_EMAIL": "Correo electrónico",
|
|
73
|
+
"LABEL_PRECHAT_USER_EMAIL_ERROR": "Dirección de correo electrónico no válida",
|
|
74
|
+
"LABEL_PRECHAT_USER_PHONE": "Teléfono",
|
|
75
|
+
"LABEL_PRECHAT_USER_PHONE_ERROR": "Se requiere teléfono",
|
|
76
|
+
"LABEL_PRECHAT_FIRST_MESSAGE": "Tu mensaje para el equipo de soporte",
|
|
77
|
+
"LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Antes de continuar con la conversación, acepte nuestros <a href='https://tiledesk.com/termsofservice/' target='_blank'>Términos</a> y <a href='https://tiledesk.com/privacy.html' target='_blank'>Política de privacidad</a>",
|
|
78
|
+
"LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "Acepto",
|
|
79
|
+
"PRECHAT_REQUIRED_ERROR": "Este campo es obligatorio",
|
|
80
|
+
"TICKET_TAKING": "La solicitud ha sido recibida y el personal de asistencia está tratando con ella. \nPara agregar más comentarios, responda a este correo electrónico.",
|
|
81
|
+
"LABEL_TODAY": "hoy",
|
|
82
|
+
"LABEL_TOMORROW": "ayer",
|
|
83
|
+
"LABEL_LAST_ACCESS": "ultimo acceso",
|
|
84
|
+
"LABEL_TO": "a",
|
|
85
|
+
"ARRAY_DAYS": [
|
|
86
|
+
"Lunes",
|
|
87
|
+
"Martes",
|
|
88
|
+
"Miércoles",
|
|
89
|
+
"Jueves",
|
|
90
|
+
"Viernes",
|
|
91
|
+
"Sábado",
|
|
92
|
+
"Domingo"
|
|
93
|
+
],
|
|
94
|
+
"SENT_AN_ATTACHMENT": "envió un archivo adjunto",
|
|
95
|
+
"SENT_AN_IMAGE": "envió una imagen",
|
|
96
|
+
"LABEL_PREVIEW": "Avance",
|
|
97
|
+
"SWITCH_TO": "O cambiar a:",
|
|
98
|
+
"CONNECTION_NETWORK_ERROR": "Nuestras disculpas. Hubo algunos problemas para conectarse a la red",
|
|
99
|
+
"EMOJI_NOT_ELLOWED": "Emoji no permitido",
|
|
100
|
+
"DOMAIN_NOT_ALLOWED": "La URL contiene un dominio no permitido",
|
|
101
|
+
"MAX_ATTACHMENT": "Tamaño máximo permitido {{FILE_SIZE_LIMIT}}Mb",
|
|
102
|
+
"MAX_ATTACHMENT_ERROR": "El archivo supera el tamaño máximo permitido",
|
|
103
|
+
"EMOJI": "Emoji",
|
|
104
|
+
"VOICE_CONNECTING": "Conectando...",
|
|
105
|
+
"VOICE_LISTENING": "Escuchando...",
|
|
106
|
+
"VOICE_PROCESSING": "Procesando..."
|
|
107
|
+
}
|
package/src/assets/i18n/fr.json
CHANGED
|
@@ -1,102 +1,107 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
|
|
91
|
-
"
|
|
92
|
-
"
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
2
|
+
"LABEL_PLACEHOLDER": "Écrivez votre question ...",
|
|
3
|
+
"LABEL_START_NW_CONV": "Nouvelle conversation",
|
|
4
|
+
"LABEL_WHATSAPP": "Contactez-nous",
|
|
5
|
+
"LABEL_SELECT_TOPIC": "Sélectionnez un sujet",
|
|
6
|
+
"LABEL_COMPLETE_FORM": "Remplissez le formulaire pour démarrer une conversation avec le prochain agent disponible.",
|
|
7
|
+
"LABEL_FIELD_NAME": "Prenom",
|
|
8
|
+
"LABEL_ERROR_FIELD_NAME": "Nom demandé (minimum 2 caractères).",
|
|
9
|
+
"LABEL_FIELD_EMAIL": "Email",
|
|
10
|
+
"LABEL_ERROR_FIELD_EMAIL": "Entrer une adresse email valide.",
|
|
11
|
+
"LABEL_ERROR_FIELD_REQUIRED": "Champ obligatoire",
|
|
12
|
+
"LABEL_WRITING": "écrit ...",
|
|
13
|
+
"LABEL_SEND_NEW_MESSAGE": "Envoyez un nouveau message",
|
|
14
|
+
"AGENT_NOT_AVAILABLE": " Hors ligne",
|
|
15
|
+
"AGENT_AVAILABLE": " En ligne",
|
|
16
|
+
"GUEST_LABEL": "Hôte",
|
|
17
|
+
"ALL_AGENTS_OFFLINE_LABEL": "Tous les opérateurs sont actuellement hors ligne",
|
|
18
|
+
"LABEL_LOADING": "Chargement en cours ...",
|
|
19
|
+
"LABEL_THINKING": "en train de reflechir",
|
|
20
|
+
"CALLOUT_TITLE_PLACEHOLDER": "🖐 Besoin d'aide?",
|
|
21
|
+
"CALLOUT_MSG_PLACEHOLDER": "Cliquez ici et commencez à discuter avec nous!",
|
|
22
|
+
"CUSTOMER_SATISFACTION": "Évaluation des services",
|
|
23
|
+
"YOUR_OPINION_ON_OUR_CUSTOMER_SERVICE": "votre avis sur notre service client",
|
|
24
|
+
"DOWNLOAD_TRANSCRIPT": "Télécharger la transcription",
|
|
25
|
+
"BACK": "En arrière",
|
|
26
|
+
"CONTINUE": "Continue",
|
|
27
|
+
"YOUR_RATING": "votre vote",
|
|
28
|
+
"WRITE_YOUR_OPINION": "Écrivez votre opinion ... (facultatif)",
|
|
29
|
+
"SUBMIT": "Soumettre",
|
|
30
|
+
"THANK_YOU_FOR_YOUR_EVALUATION": "Merci pour votre évaluation",
|
|
31
|
+
"YOUR_RATING_HAS_BEEN_RECEIVED": "votre vote a été reçu",
|
|
32
|
+
"ALERT_LEAVE_CHAT": "Voulez-vous quitter la conversation?",
|
|
33
|
+
"YES": "Oui",
|
|
34
|
+
"NO": "Non",
|
|
35
|
+
"BUTTON_CLOSE_TO_ICON": "Minimisez la discussion",
|
|
36
|
+
"BUTTON_EDIT_PROFILE": "Modifier le profil",
|
|
37
|
+
"RATE_CHAT": "évaluer la conversation",
|
|
38
|
+
"WELCOME_TITLE": "Salut, bienvenue à Tiledesk 👋",
|
|
39
|
+
"WELCOME_MSG": "Comment pouvons-nous vous aider?",
|
|
40
|
+
"WELCOME": "Bienvenue",
|
|
41
|
+
"OPTIONS": "options",
|
|
42
|
+
"SOUND_OFF": "Sound off",
|
|
43
|
+
"SOUND_ON": "Sound on",
|
|
44
|
+
"LOGOUT": "Connectez-out",
|
|
45
|
+
"CLOSE": "Fermer",
|
|
46
|
+
"RESTART": "Redémarrer",
|
|
47
|
+
"PREV_CONVERSATIONS": "Vos conversations",
|
|
48
|
+
"YOU": "Tu",
|
|
49
|
+
"SHOW_ALL_CONV": "voir tout",
|
|
50
|
+
"START_A_CONVERSATION": "Démarrer une conversation",
|
|
51
|
+
"NO_CONVERSATION": "Aucune conversation active",
|
|
52
|
+
"SEE_PREVIOUS": "voir les conversations précédentes",
|
|
53
|
+
"WAITING_TIME_FOUND": "L'équipe répond généralement en $reply_time",
|
|
54
|
+
"WAITING_TIME_NOT_FOUND": "Nous vous répondrons dans les plus brefs délais",
|
|
55
|
+
"CLOSED": "Fermé",
|
|
56
|
+
"CLOSE_CHAT": "Fermer la discussion",
|
|
57
|
+
"MINIMIZE": "Réduire la fenêtre",
|
|
58
|
+
"MAXIMIZE": "Agrandir la fenêtre",
|
|
59
|
+
"CENTER": "Centrer",
|
|
60
|
+
"CONFIRM_CLOSE_CHAT": "Etes-vous sûr de vouloir fermer cette discussion?",
|
|
61
|
+
"INFO_SUPPORT_USER_ADDED_SUBJECT": "tu",
|
|
62
|
+
"INFO_SUPPORT_USER_ADDED_YOU_VERB": "ont été ajoutés à ",
|
|
63
|
+
"INFO_SUPPORT_USER_ADDED_COMPLEMENT": "rejointe",
|
|
64
|
+
"INFO_SUPPORT_USER_ADDED_VERB": "la discussion",
|
|
65
|
+
"INFO_SUPPORT_CHAT_REOPENED": "Discussion rouvert",
|
|
66
|
+
"INFO_SUPPORT_CHAT_CLOSED": "Discussion fermé",
|
|
67
|
+
"INFO_SUPPORT_LEAD_UPDATED": "Prospect mis à jour",
|
|
68
|
+
"INFO_SUPPORT_MEMBER_LEFT_GROUP": "supprimé du groupe",
|
|
69
|
+
"INFO_SUPPORT_MEMBER_ABANDONED_GROUP": "a quitté la conversation",
|
|
70
|
+
"INFO_A_NEW_SUPPORT_REQUEST_HAS_BEEN_ASSIGNED_TO_YOU": "Une nouvelle demande de support vous a été attribuée",
|
|
71
|
+
"LABEL_PRECHAT_USER_FULLNAME": "Nom complet",
|
|
72
|
+
"LABEL_PRECHAT_USER_EMAIL": "E-mail",
|
|
73
|
+
"LABEL_PRECHAT_USER_EMAIL_ERROR": "Adresse e-mail invalide",
|
|
74
|
+
"LABEL_PRECHAT_USER_PHONE": "Téléphone",
|
|
75
|
+
"LABEL_PRECHAT_USER_PHONE_ERROR": "Le téléphone est requis",
|
|
76
|
+
"LABEL_PRECHAT_FIRST_MESSAGE": "Votre message pour l'équipe d'assistance",
|
|
77
|
+
"LABEL_PRECHAT_STATIC_TERMS_PRIVACY": "Avant de poursuivre la conversation, veuillez accepter nos <a href='https://tiledesk.com/termsofservice/' target='_blank'>Conditions</a> et <a href='https://tiledesk.com/privacy.html' target='_blank'>Politique de confidentialité</a>",
|
|
78
|
+
"LABEL_PRECHAT_ACCEPT_TERMS_PRIVACY": "Je suis d'accord",
|
|
79
|
+
"PRECHAT_REQUIRED_ERROR": "Ce champ est obligatoire",
|
|
80
|
+
"TICKET_TAKING": "La demande a été reçue et le personnel d'assistance la traite.\nPour ajouter d'autres commentaires, répondez à cet e-mail.",
|
|
81
|
+
"LABEL_TODAY": "aujourd'hui",
|
|
82
|
+
"LABEL_TOMORROW": "hier",
|
|
83
|
+
"LABEL_LAST_ACCESS": "dernier accès",
|
|
84
|
+
"LABEL_TO": "à",
|
|
85
|
+
"ARRAY_DAYS": [
|
|
86
|
+
"Lundi",
|
|
87
|
+
"Mardi",
|
|
88
|
+
"Mercredi",
|
|
89
|
+
"Jeudi",
|
|
90
|
+
"Vendredi",
|
|
91
|
+
"Samedi",
|
|
92
|
+
"Dimanche"
|
|
93
|
+
],
|
|
94
|
+
"SENT_AN_ATTACHMENT": "envoyé une pièce jointe",
|
|
95
|
+
"SENT_AN_IMAGE": "envoyé une image",
|
|
96
|
+
"LABEL_PREVIEW": "Aperçu",
|
|
97
|
+
"SWITCH_TO": "Ou passer à:",
|
|
98
|
+
"CONNECTION_NETWORK_ERROR": "Nos excuses. Il y a eu des problèmes de connexion au réseau",
|
|
99
|
+
"EMOJI_NOT_ELLOWED": "Emoji non autorisé",
|
|
100
|
+
"DOMAIN_NOT_ALLOWED": "L'URL contient un domaine non autorisé",
|
|
101
|
+
"MAX_ATTACHMENT": "Taille maximale autorisée {{FILE_SIZE_LIMIT}}Mo",
|
|
102
|
+
"MAX_ATTACHMENT_ERROR": "Le fichier dépasse la taille maximale autorisée",
|
|
103
|
+
"EMOJI": "Emoji",
|
|
104
|
+
"VOICE_CONNECTING": "Connexion...",
|
|
105
|
+
"VOICE_LISTENING": "Écoute...",
|
|
106
|
+
"VOICE_PROCESSING": "Traitement..."
|
|
107
|
+
}
|