@designcrowd/library.brand-page 5.10.20 → 5.10.30
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/lib/src/brand-page/models/index.d.ts +5 -0
- package/lib/src/brand-page/models/index.js +4 -0
- package/lib/src/brand-page/utils/style.util.d.ts +8 -1
- package/lib/src/brand-page/utils/style.util.js +58 -5
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +1 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.js +1 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/page-content-items.d.ts +1 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/page-content-items.js +2 -1
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +33 -0
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +35 -1
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +1 -0
- package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +17 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.d.ts +19 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.js +31 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/AutoLink.d.ts +2 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/AutoLink.js +161 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/MaxLength.js +3 -3
- package/lib/src/brand-page-maker/composables/rich-text-editor/font.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/font.js +0 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.js +0 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.d.ts +19 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.js +87 -0
- package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.js +0 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/textAlign.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/textAlign.js +0 -1
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +24 -3
- package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +214 -33
- package/lib/src/brand-page-maker/models/button-group.model.d.ts +2 -0
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +19 -2
- package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +340 -8
- package/lib/src/{bundled-translations.de-DE-O4sKkzBX.js → bundled-translations.de-DE-DjQFwukR.js} +1 -1
- package/lib/src/{bundled-translations.es-ES-C4lGaf08.js → bundled-translations.es-ES--EbGRI7e.js} +1 -1
- package/lib/src/bundled-translations.fr-FR-BS3Kia5y.js +117 -0
- package/lib/src/{bundled-translations.fr-FR-CIy8KjAV.js → bundled-translations.fr-FR-VtC2JYUC.js} +1 -1
- package/lib/src/{bundled-translations.pt-PT-C8EcSdyX.js → bundled-translations.pt-PT-l9cEldEo.js} +1 -1
- package/lib/src/bundles/bundled-translations.fr-FR.json +2 -2
- package/lib/src/css/library.brand-page-brandCrowd.min.css +96 -70
- package/lib/src/css/library.brand-page-brandPage.min.css +96 -70
- package/lib/src/css/library.brand-page-designCom.min.css +96 -70
- package/lib/src/css/library.brand-page-preview.min.css +96 -70
- package/lib/src/index.d.ts +1 -0
- package/lib/src/index.mjs +29673 -27225
- package/lib/src/lib.js +1 -0
- package/lib/src/mockServiceWorker.js +91 -54
- package/lib/src/shared/content-settings/components/color-field/ColorField.mixin.d.ts +11 -0
- package/lib/src/shared/content-settings/components/color-field/ColorField.mixin.js +5 -0
- package/lib/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.d.ts +11 -1
- package/lib/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.js +4 -0
- package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +2 -0
- package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.js +12 -7
- package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +2 -0
- package/package.json +6 -3
- package/src/brand-page/components/banner-section/BannerSection.vue +6 -0
- package/src/brand-page/components/text/Text.vue +2 -0
- package/src/brand-page/components/text-wrapper/TextWrapper.vue +31 -11
- package/src/brand-page/models/index.ts +6 -0
- package/src/brand-page/utils/style.util.ts +105 -5
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +1 -1
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.ts +1 -0
- package/src/brand-page-maker/components/brand-page-maker/__fixtures__/page-content-items.ts +2 -0
- package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +44 -1
- package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
- package/src/brand-page-maker/components/brandpage-settings/i18n/brand-page-settings.fr-FR.json +1 -1
- package/src/brand-page-maker/components/google-analytics/i18n/google-analytics.fr-FR.json +1 -1
- package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +539 -50
- package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -0
- package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.ts +42 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/AutoLink.ts +227 -0
- package/src/brand-page-maker/composables/rich-text-editor/extensions/MaxLength.test.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/extensions/MaxLength.ts +4 -15
- package/src/brand-page-maker/composables/rich-text-editor/font.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/formatting.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/hyperlink.ts +114 -0
- package/src/brand-page-maker/composables/rich-text-editor/spacing.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/textAlign.ts +1 -1
- package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +299 -41
- package/src/brand-page-maker/models/button-group.model.ts +2 -0
- package/src/brand-page-maker/stores/brandpage-maker/__snapshots__/brandpage-maker-store.test.ts.snap +1 -0
- package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +418 -0
- package/src/brand-page-maker/utils/rich-text-editor.util.ts +470 -25
- package/src/bundles/bundled-translations.fr-FR.json +2 -2
- package/src/lib.ts +1 -0
- package/src/shared/content-settings/components/color-field/ColorField.mixin.ts +5 -0
- package/src/shared/content-settings/components/color-field/ColorField.vue +1 -1
- package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.ts +4 -0
- package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +2 -2
- package/src/shared/content-settings/components/text-field/TextField.vue +1 -1
- package/src/shared/content-settings/components/text-items-field/TextItemsField.vue +2 -2
- package/src/shared/content-settings/components/textarea-field/TextareaField.vue +3 -3
- package/src/shared/content-settings/components/url-field/UrlField.mixin.ts +15 -10
- package/src/shared/content-settings/components/url-field/UrlField.vue +1 -0
- package/lib/src/bundled-translations.fr-FR-CTnDppmf.js +0 -117
|
@@ -1,6 +1,94 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { STYLE_THEME_KEYS, } from '../../brand-page';
|
|
2
2
|
import { ESCAPED_NEWLINE_CHARACTER } from '../../constants/ui';
|
|
3
3
|
import { getRenderText } from '../../brand-page/utils';
|
|
4
|
+
import createDomPurify, {} from 'dompurify';
|
|
5
|
+
// Only allow tags used by the enabled Tiptap extensions
|
|
6
|
+
const allowedTags = [
|
|
7
|
+
'p',
|
|
8
|
+
'span',
|
|
9
|
+
'strong',
|
|
10
|
+
'em',
|
|
11
|
+
'u',
|
|
12
|
+
's',
|
|
13
|
+
'mark',
|
|
14
|
+
'div',
|
|
15
|
+
'br',
|
|
16
|
+
'ul',
|
|
17
|
+
'ol',
|
|
18
|
+
'li',
|
|
19
|
+
'h1',
|
|
20
|
+
'h2',
|
|
21
|
+
'h3',
|
|
22
|
+
'h4',
|
|
23
|
+
'h5',
|
|
24
|
+
'h6',
|
|
25
|
+
'blockquote',
|
|
26
|
+
'code',
|
|
27
|
+
'pre',
|
|
28
|
+
'hr',
|
|
29
|
+
'a',
|
|
30
|
+
];
|
|
31
|
+
// Block javascript: and data: protocols and other dangerous schemes
|
|
32
|
+
const dangerousProtocols = [
|
|
33
|
+
'javascript:',
|
|
34
|
+
'data:',
|
|
35
|
+
'vbscript:',
|
|
36
|
+
'file:',
|
|
37
|
+
'about:',
|
|
38
|
+
'chrome:',
|
|
39
|
+
'chrome-extension:',
|
|
40
|
+
'moz-extension:',
|
|
41
|
+
];
|
|
42
|
+
// Allow specific attributes used by TipTap extensions and href for links
|
|
43
|
+
const allowedAttributes = ['style', 'data-color', 'href', 'target', 'rel'];
|
|
44
|
+
const forbiddenTags = [
|
|
45
|
+
'script',
|
|
46
|
+
'img',
|
|
47
|
+
'iframe',
|
|
48
|
+
'object',
|
|
49
|
+
'embed',
|
|
50
|
+
'link',
|
|
51
|
+
'style',
|
|
52
|
+
'meta',
|
|
53
|
+
'form',
|
|
54
|
+
'input',
|
|
55
|
+
'button',
|
|
56
|
+
'svg',
|
|
57
|
+
'math',
|
|
58
|
+
];
|
|
59
|
+
const forbiddenAttributes = [
|
|
60
|
+
'onerror',
|
|
61
|
+
'onclick',
|
|
62
|
+
'onload',
|
|
63
|
+
'onmouseover',
|
|
64
|
+
'onfocus',
|
|
65
|
+
'onblur',
|
|
66
|
+
'src',
|
|
67
|
+
'srcdoc',
|
|
68
|
+
'formaction',
|
|
69
|
+
'form',
|
|
70
|
+
'action',
|
|
71
|
+
'download',
|
|
72
|
+
'class',
|
|
73
|
+
'id',
|
|
74
|
+
'data-type',
|
|
75
|
+
'data-placeholder',
|
|
76
|
+
'data-align',
|
|
77
|
+
'data-text-align',
|
|
78
|
+
];
|
|
79
|
+
// Only allow CSS properties used by TipTap extensions
|
|
80
|
+
const allowedCSSProperties = [
|
|
81
|
+
'font-size',
|
|
82
|
+
'font-family',
|
|
83
|
+
'color',
|
|
84
|
+
'line-height',
|
|
85
|
+
'letter-spacing',
|
|
86
|
+
'text-align',
|
|
87
|
+
'background-color',
|
|
88
|
+
'font-weight',
|
|
89
|
+
'font-style',
|
|
90
|
+
'text-decoration',
|
|
91
|
+
];
|
|
4
92
|
export const isStyleChanged = (tr) => {
|
|
5
93
|
if (tr.getMeta('skipStyleDetection'))
|
|
6
94
|
return false;
|
|
@@ -107,6 +195,28 @@ export const transformToRTE = (uiPageSettingStore, externalEditor, uiStyleSettin
|
|
|
107
195
|
}
|
|
108
196
|
}
|
|
109
197
|
}
|
|
198
|
+
if ((!textContent.textItems || textContent.textItems.length === 0) &&
|
|
199
|
+
textContent.textStyle) {
|
|
200
|
+
const textStyleType = textContent.textStyle.textStyleType;
|
|
201
|
+
if (textStyleType &&
|
|
202
|
+
(textStyleType === type || uiStyleSettingsStore)) {
|
|
203
|
+
let globalContentStyle = uiStyleSettingsStore
|
|
204
|
+
? uiStyleSettingsStore.textStyles.textStyleOptions[textStyleType].style
|
|
205
|
+
: newStyle ?? {};
|
|
206
|
+
globalContentStyle = {
|
|
207
|
+
...globalContentStyle,
|
|
208
|
+
textAlign: textContent.textStyle.textAlign,
|
|
209
|
+
};
|
|
210
|
+
textContent.text = getUpdatedHTMLFromEditor(externalEditor, textContent.text, globalContentStyle);
|
|
211
|
+
}
|
|
212
|
+
else if (!textStyleType &&
|
|
213
|
+
newContent &&
|
|
214
|
+
newContent.id === textContent.id &&
|
|
215
|
+
!hasRTEContent(textContent.text)) {
|
|
216
|
+
const newContentStyle = newContent.textStyle;
|
|
217
|
+
textContent.text = getUpdatedHTMLFromEditor(externalEditor, textContent.text, newContentStyle);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
110
220
|
break;
|
|
111
221
|
}
|
|
112
222
|
}
|
|
@@ -129,7 +239,8 @@ export const switchAllContentToRTE = (uiPageSettingStore, externalEditor, uiStyl
|
|
|
129
239
|
...globalContentStyle,
|
|
130
240
|
textAlign: bannerContent.titleStyle.textAlign,
|
|
131
241
|
};
|
|
132
|
-
|
|
242
|
+
if (!hasRTEContent(bannerContent.title))
|
|
243
|
+
bannerContent.title = getUpdatedHTMLFromEditor(externalEditor, bannerContent.title, globalContentStyle);
|
|
133
244
|
}
|
|
134
245
|
else if (!titleTextStyleType &&
|
|
135
246
|
!hasRTEContent(bannerContent.title)) {
|
|
@@ -144,7 +255,8 @@ export const switchAllContentToRTE = (uiPageSettingStore, externalEditor, uiStyl
|
|
|
144
255
|
...globalContentStyle,
|
|
145
256
|
textAlign: bannerContent.descriptionStyle.textAlign,
|
|
146
257
|
};
|
|
147
|
-
|
|
258
|
+
if (!hasRTEContent(bannerContent.description))
|
|
259
|
+
bannerContent.description = getUpdatedHTMLFromEditor(externalEditor, bannerContent.description, globalContentStyle);
|
|
148
260
|
}
|
|
149
261
|
else if (!descriptionTextStyleType &&
|
|
150
262
|
!hasRTEContent(bannerContent.description)) {
|
|
@@ -165,7 +277,8 @@ export const switchAllContentToRTE = (uiPageSettingStore, externalEditor, uiStyl
|
|
|
165
277
|
...globalContentStyle,
|
|
166
278
|
textAlign: textItemContent.textStyle.textAlign,
|
|
167
279
|
};
|
|
168
|
-
|
|
280
|
+
if (!hasRTEContent(textItemContent.text))
|
|
281
|
+
textItemContent.text = getUpdatedHTMLFromEditor(externalEditor, textItemContent.text, globalContentStyle);
|
|
169
282
|
}
|
|
170
283
|
else if (!textItemStyleType &&
|
|
171
284
|
!hasRTEContent(textItemContent.text)) {
|
|
@@ -174,6 +287,24 @@ export const switchAllContentToRTE = (uiPageSettingStore, externalEditor, uiStyl
|
|
|
174
287
|
}
|
|
175
288
|
}
|
|
176
289
|
}
|
|
290
|
+
if ((!textContent.textItems || textContent.textItems.length === 0) &&
|
|
291
|
+
textContent.textStyle) {
|
|
292
|
+
const textStyleType = textContent.textStyle.textStyleType;
|
|
293
|
+
if (textStyleType && uiStyleSettingsStore) {
|
|
294
|
+
let globalContentStyle = uiStyleSettingsStore.textStyles
|
|
295
|
+
.textStyleOptions[textStyleType].style;
|
|
296
|
+
globalContentStyle = {
|
|
297
|
+
...globalContentStyle,
|
|
298
|
+
textAlign: textContent.textStyle.textAlign,
|
|
299
|
+
};
|
|
300
|
+
if (!hasRTEContent(textContent.text))
|
|
301
|
+
textContent.text = getUpdatedHTMLFromEditor(externalEditor, textContent.text, globalContentStyle);
|
|
302
|
+
}
|
|
303
|
+
else if (!textStyleType && !hasRTEContent(textContent.text)) {
|
|
304
|
+
const newContentStyle = textContent.textStyle;
|
|
305
|
+
textContent.text = getUpdatedHTMLFromEditor(externalEditor, textContent.text, newContentStyle);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
177
308
|
break;
|
|
178
309
|
}
|
|
179
310
|
}
|
|
@@ -199,7 +330,14 @@ export const getUpdatedHTMLFromEditor = (externalEditor, contentText, newContent
|
|
|
199
330
|
chain = chain.setLineHeight(newContentStyle.lineHeight);
|
|
200
331
|
}
|
|
201
332
|
if (newContentStyle?.color) {
|
|
202
|
-
chain = chain.setMark('textStyle', {
|
|
333
|
+
chain = chain.setMark('textStyle', {
|
|
334
|
+
color: getRTEColor(newContentStyle.color, 'text'),
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
if (newContentStyle?.backgroundColor) {
|
|
338
|
+
chain = chain.setMark('highlight', {
|
|
339
|
+
color: getRTEColor(newContentStyle.backgroundColor, 'background'),
|
|
340
|
+
});
|
|
203
341
|
}
|
|
204
342
|
if (!currentAlignment.textAlign && newContentStyle?.textAlign) {
|
|
205
343
|
chain = chain.setTextAlign(newContentStyle.textAlign);
|
|
@@ -227,15 +365,18 @@ export const buildInitialMarks = (state, style) => {
|
|
|
227
365
|
textStyleAttrs.fontFamily = fontFamily;
|
|
228
366
|
if (fontSize)
|
|
229
367
|
textStyleAttrs.fontSize = fontSize;
|
|
230
|
-
if (color)
|
|
231
|
-
textStyleAttrs.color = color;
|
|
368
|
+
if (color) {
|
|
369
|
+
textStyleAttrs.color = getRTEColor(color, 'text');
|
|
370
|
+
}
|
|
232
371
|
if (letterSpacing)
|
|
233
372
|
textStyleAttrs.letterSpacing = letterSpacing;
|
|
234
373
|
if (lineHeight)
|
|
235
374
|
textStyleAttrs.lineHeight = lineHeight;
|
|
236
375
|
marks.push(state.schema.marks.textStyle.create(textStyleAttrs));
|
|
237
376
|
if (backgroundColor) {
|
|
238
|
-
marks.push(state.schema.marks.highlight.create({
|
|
377
|
+
marks.push(state.schema.marks.highlight.create({
|
|
378
|
+
color: getRTEColor(backgroundColor, 'background'),
|
|
379
|
+
}));
|
|
239
380
|
}
|
|
240
381
|
// Bold and italic
|
|
241
382
|
if (fontWeight) {
|
|
@@ -278,3 +419,194 @@ export const retainStyleOnEmptyLine = (editor, selection) => {
|
|
|
278
419
|
}
|
|
279
420
|
}
|
|
280
421
|
};
|
|
422
|
+
let rteDomPurifyInstance = null;
|
|
423
|
+
const getRTEDomPurifyInstance = () => {
|
|
424
|
+
if (!rteDomPurifyInstance) {
|
|
425
|
+
rteDomPurifyInstance = createDomPurify;
|
|
426
|
+
}
|
|
427
|
+
return rteDomPurifyInstance;
|
|
428
|
+
};
|
|
429
|
+
export const sanitiseClientSideRTE = (html) => {
|
|
430
|
+
return sanitizeRTEHtml(html, getRTEDomPurifyInstance());
|
|
431
|
+
};
|
|
432
|
+
/**
|
|
433
|
+
* Validates if an href value is safe and returns a sanitized version
|
|
434
|
+
*/
|
|
435
|
+
const validateAndSanitizeHref = (href) => {
|
|
436
|
+
if (!href || typeof href !== 'string')
|
|
437
|
+
return null;
|
|
438
|
+
// Trim whitespace and decode entities
|
|
439
|
+
const trimmedHref = href.trim();
|
|
440
|
+
if (!trimmedHref)
|
|
441
|
+
return null;
|
|
442
|
+
const lowerHref = trimmedHref.toLowerCase();
|
|
443
|
+
for (const protocol of dangerousProtocols) {
|
|
444
|
+
if (lowerHref.startsWith(protocol))
|
|
445
|
+
return null;
|
|
446
|
+
}
|
|
447
|
+
// Allow relative paths, absolute paths, and safe protocols
|
|
448
|
+
if (trimmedHref.startsWith('/') ||
|
|
449
|
+
trimmedHref.startsWith('./') ||
|
|
450
|
+
trimmedHref.startsWith('../')) {
|
|
451
|
+
return trimmedHref;
|
|
452
|
+
}
|
|
453
|
+
// Allow http and https URLs
|
|
454
|
+
if (lowerHref.startsWith('http://') || lowerHref.startsWith('https://')) {
|
|
455
|
+
try {
|
|
456
|
+
const url = new URL(trimmedHref);
|
|
457
|
+
// Additional validation for malformed URLs
|
|
458
|
+
if (url.hostname.includes('..') || url.hostname === '') {
|
|
459
|
+
return null;
|
|
460
|
+
}
|
|
461
|
+
return trimmedHref;
|
|
462
|
+
}
|
|
463
|
+
catch {
|
|
464
|
+
return null;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
// Allow mailto links
|
|
468
|
+
if (lowerHref.startsWith('mailto:')) {
|
|
469
|
+
// Basic email validation
|
|
470
|
+
const emailPart = trimmedHref.substring(7);
|
|
471
|
+
if (/^[^\s@]+@[^\s@]+\.[^\s@]+/.test(emailPart)) {
|
|
472
|
+
return trimmedHref;
|
|
473
|
+
}
|
|
474
|
+
return null;
|
|
475
|
+
}
|
|
476
|
+
// Allow tel links
|
|
477
|
+
if (lowerHref.startsWith('tel:')) {
|
|
478
|
+
const telPart = trimmedHref.substring(4);
|
|
479
|
+
if (/^[\d\s\-\+\(\)]+$/.test(telPart)) {
|
|
480
|
+
return trimmedHref;
|
|
481
|
+
}
|
|
482
|
+
return null;
|
|
483
|
+
}
|
|
484
|
+
// For any other format, treat as relative path if it doesn't contain dangerous characters
|
|
485
|
+
if (!/[<>'"\\]/.test(trimmedHref)) {
|
|
486
|
+
return trimmedHref;
|
|
487
|
+
}
|
|
488
|
+
return null;
|
|
489
|
+
};
|
|
490
|
+
/**
|
|
491
|
+
* Sanitize HTML string using DOMPurify.
|
|
492
|
+
* Only allow tags and attributes that correspond to the enabled Tiptap extensions.
|
|
493
|
+
* Forbid dangerous tags and attributes.
|
|
494
|
+
* @param html HTML string to sanitize
|
|
495
|
+
* @returns sanitization result with sanitized HTML and removed elements info
|
|
496
|
+
*/
|
|
497
|
+
export const sanitizeRTEHtml = (html, domPurify) => {
|
|
498
|
+
const removedElements = [];
|
|
499
|
+
// Use DOMPurify hook to handle href validation and external link attributes
|
|
500
|
+
domPurify.addHook('afterSanitizeAttributes', (node) => {
|
|
501
|
+
if (node.tagName === 'A' && node.hasAttribute('href')) {
|
|
502
|
+
const href = node.getAttribute('href');
|
|
503
|
+
const sanitizedHref = validateAndSanitizeHref(href || '');
|
|
504
|
+
if (sanitizedHref === null) {
|
|
505
|
+
node.removeAttribute('href');
|
|
506
|
+
removedElements.push(`href="${href}"`);
|
|
507
|
+
}
|
|
508
|
+
else if (sanitizedHref !== href) {
|
|
509
|
+
node.setAttribute('href', sanitizedHref);
|
|
510
|
+
}
|
|
511
|
+
// Add security attributes for external links
|
|
512
|
+
const finalHref = node.getAttribute('href');
|
|
513
|
+
if (finalHref &&
|
|
514
|
+
(finalHref.startsWith('http://') || finalHref.startsWith('https://'))) {
|
|
515
|
+
node.setAttribute('target', '_blank');
|
|
516
|
+
node.setAttribute('rel', 'noopener noreferrer');
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
});
|
|
520
|
+
try {
|
|
521
|
+
// Main DOMPurify sanitization
|
|
522
|
+
const sanitized = domPurify.sanitize(html, {
|
|
523
|
+
ALLOWED_TAGS: allowedTags,
|
|
524
|
+
ALLOWED_ATTR: allowedAttributes,
|
|
525
|
+
FORBID_TAGS: forbiddenTags,
|
|
526
|
+
FORBID_ATTR: forbiddenAttributes,
|
|
527
|
+
KEEP_CONTENT: true,
|
|
528
|
+
});
|
|
529
|
+
// Track elements/attributes removed by DOMPurify
|
|
530
|
+
if (domPurify.removed && Array.isArray(domPurify.removed)) {
|
|
531
|
+
domPurify.removed.forEach((removed) => {
|
|
532
|
+
if (removed.element) {
|
|
533
|
+
const tagName = removed.element.tagName?.toLowerCase();
|
|
534
|
+
if (tagName &&
|
|
535
|
+
tagName !== 'body' &&
|
|
536
|
+
!removedElements.includes(tagName)) {
|
|
537
|
+
removedElements.push(tagName);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
if (removed.attribute) {
|
|
541
|
+
const attrInfo = `${removed.attribute.name}="${removed.attribute.value}"`;
|
|
542
|
+
if (!removedElements.includes(attrInfo)) {
|
|
543
|
+
removedElements.push(attrInfo);
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
// Post-process: sanitize CSS properties in style attributes
|
|
549
|
+
const finalHtml = sanitizeStyleAttributes(sanitized, removedElements);
|
|
550
|
+
return {
|
|
551
|
+
sanitizedHtml: finalHtml,
|
|
552
|
+
removedElements,
|
|
553
|
+
};
|
|
554
|
+
}
|
|
555
|
+
finally {
|
|
556
|
+
// Always remove the hook to prevent memory leaks
|
|
557
|
+
domPurify.removeHook('afterSanitizeAttributes');
|
|
558
|
+
}
|
|
559
|
+
};
|
|
560
|
+
/**
|
|
561
|
+
* Sanitize CSS properties within style attributes to only allow TipTap extension properties
|
|
562
|
+
*/
|
|
563
|
+
const sanitizeStyleAttributes = (html, removedElements) => {
|
|
564
|
+
return html
|
|
565
|
+
.replace(/\s*style="([^"]*)"/g, (match, styleValue) => {
|
|
566
|
+
// Parse and validate individual CSS properties
|
|
567
|
+
const declarations = styleValue
|
|
568
|
+
.split('; ')
|
|
569
|
+
.filter((decl) => decl.trim());
|
|
570
|
+
const validDeclarations = declarations.filter((declaration) => {
|
|
571
|
+
const [property] = declaration.split(':').map((s) => s.trim());
|
|
572
|
+
return allowedCSSProperties.includes(property);
|
|
573
|
+
});
|
|
574
|
+
// Track removed CSS properties
|
|
575
|
+
const removedDeclarations = declarations.filter((declaration) => {
|
|
576
|
+
const [property] = declaration.split(':').map((s) => s.trim());
|
|
577
|
+
return !allowedCSSProperties.includes(property);
|
|
578
|
+
});
|
|
579
|
+
// Add removed CSS properties to the removed elements array
|
|
580
|
+
removedDeclarations.forEach((removedDecl) => {
|
|
581
|
+
const trimmedDecl = removedDecl.trim();
|
|
582
|
+
if (trimmedDecl && !removedElements.includes(trimmedDecl)) {
|
|
583
|
+
removedElements.push(trimmedDecl);
|
|
584
|
+
}
|
|
585
|
+
});
|
|
586
|
+
if (validDeclarations.length === 0) {
|
|
587
|
+
return '';
|
|
588
|
+
}
|
|
589
|
+
return ` style="${validDeclarations.join(';')}"`;
|
|
590
|
+
})
|
|
591
|
+
.replace(/\s+>/g, '>'); // Clean up any extra spaces before closing tags
|
|
592
|
+
};
|
|
593
|
+
// Helper function to check if color is a logo theme color
|
|
594
|
+
export const isLogoColor = (color) => {
|
|
595
|
+
return Object.values(STYLE_THEME_KEYS).some((themeKey) => color.startsWith(themeKey));
|
|
596
|
+
};
|
|
597
|
+
export const getRTEColor = (color, colorType = 'text', defaultValue) => {
|
|
598
|
+
if (!color) {
|
|
599
|
+
if (defaultValue)
|
|
600
|
+
return defaultValue;
|
|
601
|
+
return colorType === 'text' ? '#000000' : 'transparent';
|
|
602
|
+
}
|
|
603
|
+
const themeKey = Object.values(STYLE_THEME_KEYS).find((key) => color.startsWith(key));
|
|
604
|
+
if (themeKey) {
|
|
605
|
+
return `var(--${themeKey})`;
|
|
606
|
+
}
|
|
607
|
+
return color;
|
|
608
|
+
};
|
|
609
|
+
// Helper function to check if color is a logo theme color
|
|
610
|
+
export const hasLogoColorVar = (color) => {
|
|
611
|
+
return Object.values(STYLE_THEME_KEYS).some((themeKey) => color.includes(themeKey));
|
|
612
|
+
};
|
package/lib/src/{bundled-translations.de-DE-O4sKkzBX.js → bundled-translations.de-DE-DjQFwukR.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e = { firstTimePublishHeaderLabel: "Legen Sie die URL für {{brandPageDisplayName}} fest", sitePublishedLabel: "Seite veröffentlicht!", publishSuccessLabel: "Ihr {{brandPageDisplayName}} ist live! Beginnen Sie mit der Nutzung Ihres Links:", freePublishCardTitleLabel: "Freie Adresse", freePublishCardDescriptionLabel: "Wählen Sie jetzt eine kostenlose Adresse zur Veröffentlichung aus. Sie können die URL später jederzeit bearbeiten", slugInputPlaceholderYourNameLabel: "ihr-name", slugInputPlaceholderYourBusinessNameLabel: "ihr-firmen-name", freeDomainLabel: "Kostenlose Domain", purchasedDomainLabel: "Erworbene Domain", setUrlLabel: "URL festlegen", publishLabel: "Veröffentlichen", viewMoreDomainLabel: "WEITERE DOMAINS ANZEIGEN", viewMyWebsiteLabel: "{{brandPageDisplayName}} anzeigen", copyLabel: "Kopieren", copySuccessLabel: "Kopiert!", publishedSuccessDescriptionLabel: "Kaufen Sie eine passende Domain für Ihre Marke", hasAlreadyPurchasedDomainCloseButtonLabel: "Nein, danke, vielleicht später", selectDomainDropdownPlaceholder: "Domain auswählen" }, a = { freeDomainButtonLabel: "Kostenlose Domain", buyNowButtonLabel: "Jetzt kaufen", pricePerYearLabel: "/
|
|
1
|
+
const e = { firstTimePublishHeaderLabel: "Legen Sie die URL für {{brandPageDisplayName}} fest", sitePublishedLabel: "Seite veröffentlicht!", publishSuccessLabel: "Ihr {{brandPageDisplayName}} ist live! Beginnen Sie mit der Nutzung Ihres Links:", freePublishCardTitleLabel: "Freie Adresse", freePublishCardDescriptionLabel: "Wählen Sie jetzt eine kostenlose Adresse zur Veröffentlichung aus. Sie können die URL später jederzeit bearbeiten", slugInputPlaceholderYourNameLabel: "ihr-name", slugInputPlaceholderYourBusinessNameLabel: "ihr-firmen-name", freeDomainLabel: "Kostenlose Domain", purchasedDomainLabel: "Erworbene Domain", setUrlLabel: "URL festlegen", publishLabel: "Veröffentlichen", viewMoreDomainLabel: "WEITERE DOMAINS ANZEIGEN", viewMyWebsiteLabel: "{{brandPageDisplayName}} anzeigen", copyLabel: "Kopieren", copySuccessLabel: "Kopiert!", publishedSuccessDescriptionLabel: "Kaufen Sie eine passende Domain für Ihre Marke", hasAlreadyPurchasedDomainCloseButtonLabel: "Nein, danke, vielleicht später", selectDomainDropdownPlaceholder: "Domain auswählen" }, a = { freeDomainButtonLabel: "Kostenlose Domain", buyNowButtonLabel: "Jetzt kaufen", pricePerYearLabel: "/yr", costPriceLabel: "Kostenpreis:" }, n = { domainSearchHeaderTitle: "Domainname suchen", domainSearchHeaderSubtitle: "Kaufen Sie eine passende Domain für Ihre Marke" }, i = { domainSearchHeaderTitle: "Domainname suchen", domainSearchHeaderSubtitle: "Kaufen Sie eine passende Domain für Ihre Marke" }, r = { searchButtonLabel: "Suche", searchBarLabel: "Suche", searchBarPlaceholder: "Domainnamen suchen", searchBarPreText: "Domainname" }, s = { domainSearchEmptyMessage: "Leider konnten wir keine Domain für „{{domainNameSearchTerm}}“ finden.", searchAnotherDomainMessage: "Versuchen Sie, mit einer anderen Domain zu suchen." }, l = { searchButtonLabel: "Suche", searchBarLabel: "Suche", searchBarPlaceholder: "Domainnamen suchen", domainSearchOrConnectHeaderSubtitle: "Kaufen Sie passende Domains für Ihre Marke oder verknüpfen Sie Ihre bestehende Domain" }, o = {
|
|
2
2
|
publishBrandPageModal: e,
|
|
3
3
|
sellDomainNameList: a,
|
|
4
4
|
sellDomainNameListModal: n,
|
package/lib/src/{bundled-translations.es-ES-C4lGaf08.js → bundled-translations.es-ES--EbGRI7e.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e = { firstTimePublishHeaderLabel: "Establece la URL para {{brandPageDisplayName}}", sitePublishedLabel: "¡Sitio publicado!", publishSuccessLabel: "¡Tu {{brandPageDisplayName}} está activo! Comienza a usar tu enlace:", freePublishCardTitleLabel: "Dirección gratuita", freePublishCardDescriptionLabel: "Elige una dirección gratuita para publicar ahora. Siempre puedes editar la URL más tarde", slugInputPlaceholderYourNameLabel: "tu-nombre", slugInputPlaceholderYourBusinessNameLabel: "nombre-de-tu-negocio", freeDomainLabel: "Dominio gratis", purchasedDomainLabel: "Dominio adquirido", setUrlLabel: "Establece URL", publishLabel: "Publicar", viewMoreDomainLabel: "VER MÁS DOMINIOS", viewMyWebsiteLabel: "Ver {{brandPageDisplayName}}", copyLabel: "Copiar", copySuccessLabel: "¡Copiado!", publishedSuccessDescriptionLabel: "Compra un nombre de dominio que coincida con tu marca", hasAlreadyPurchasedDomainCloseButtonLabel: "No gracias, quizás más tarde", selectDomainDropdownPlaceholder: "Selecciona un nombre de dominio" }, a = { freeDomainButtonLabel: "Dominio gratis", buyNowButtonLabel: "Comprar ahora", pricePerYearLabel: "/
|
|
1
|
+
const e = { firstTimePublishHeaderLabel: "Establece la URL para {{brandPageDisplayName}}", sitePublishedLabel: "¡Sitio publicado!", publishSuccessLabel: "¡Tu {{brandPageDisplayName}} está activo! Comienza a usar tu enlace:", freePublishCardTitleLabel: "Dirección gratuita", freePublishCardDescriptionLabel: "Elige una dirección gratuita para publicar ahora. Siempre puedes editar la URL más tarde", slugInputPlaceholderYourNameLabel: "tu-nombre", slugInputPlaceholderYourBusinessNameLabel: "nombre-de-tu-negocio", freeDomainLabel: "Dominio gratis", purchasedDomainLabel: "Dominio adquirido", setUrlLabel: "Establece URL", publishLabel: "Publicar", viewMoreDomainLabel: "VER MÁS DOMINIOS", viewMyWebsiteLabel: "Ver {{brandPageDisplayName}}", copyLabel: "Copiar", copySuccessLabel: "¡Copiado!", publishedSuccessDescriptionLabel: "Compra un nombre de dominio que coincida con tu marca", hasAlreadyPurchasedDomainCloseButtonLabel: "No gracias, quizás más tarde", selectDomainDropdownPlaceholder: "Selecciona un nombre de dominio" }, a = { freeDomainButtonLabel: "Dominio gratis", buyNowButtonLabel: "Comprar ahora", pricePerYearLabel: "/yr", costPriceLabel: "Precio de coste:" }, o = { domainSearchHeaderTitle: "Busca un nombre de dominio", domainSearchHeaderSubtitle: "Compra un nombre de dominio que coincida con tu marca" }, i = { domainSearchHeaderTitle: "Busca un nombre de dominio", domainSearchHeaderSubtitle: "Compra un nombre de dominio que coincida con tu marca" }, r = { searchButtonLabel: "Buscar", searchBarLabel: "Buscar", searchBarPlaceholder: "Busca nombres de dominio", searchBarPreText: "Nombre de dominio" }, n = { domainSearchEmptyMessage: 'Lo siento, no hemos podido encontrar ningún dominio para "{{domainNameSearchTerm}}".', searchAnotherDomainMessage: "Prueba a buscar con otro nombre de dominio." }, c = { searchButtonLabel: "Buscar", searchBarLabel: "Buscar", searchBarPlaceholder: "Busca nombres de dominio", domainSearchOrConnectHeaderSubtitle: "Compra un nombre de dominio que coincida con tu marca o conecta tu dominio existente" }, s = {
|
|
2
2
|
publishBrandPageModal: e,
|
|
3
3
|
sellDomainNameList: a,
|
|
4
4
|
sellDomainNameListModal: o,
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const e = { consentText: "Nous utilisons des cookies afin d'optimiser votre expérience sur notre site web. En acceptant, vous consentez à ce que nous utilisions ces cookies.", accept: "Accepter" }, t = { productName: "{{PAYMENT_OPTIONS_LENGTH}} produits", defaultPaymentSuccessMessage: "Merci pour votre demande ! Nous vous contacterons dès que possible.", yourMessage: "Votre message", provideDetails: "Fournissez les détails de la demande", selectAnAmount: "Sélectionnez un montant {{CURRENCY_CODE}}", customAmountLabelOr: "ou montant personnalisé {{CURRENCY_CODE}}", customAmountLabel: "Montant personnalisé {{CURRENCY_CODE}}" }, o = { noProducts: "Aucun produit n’est répertorié pour le moment", viewCart: "Voir le panier" }, a = { image: "Image", shape: "Forme" }, i = { saveProgress: "Enregistrer", saveTemplate: "Enregistrer le modèle", publish: "Publier" }, r = { userImageUpgradeText: "Avec BrandPage Premium, vous pouvez télécharger vos propres images comme arrière-plan.", libraryImageUpgradeText: "Avec BrandPage Premium, vous pouvez ajouter des images d'arrière-plan fournies par Unsplash." }, s = { favicon: "Favicon", icon: "Icône", seoSettings: "Paramètres SEO", cookieCollection: "Collection de cookies", faviconDescription: "Un favicon est une petite icône placée à côté du titre de votre site dans l'onglet du navigateur.", socialShareTitle: "Partage sur les réseaux sociaux", paymentProvidersTitle: "Prestataires de paiement", paymentProvidersDescription: "Activez ou inscrivez-vous auprès d'un fournisseur pris en charge. Commencez à collecter des dons et des paiements, ou vendez des produits, des services et bien plus encore !", paymentProvidersAddProviderLabel: "Ajouter des prestataires de paiement" }, l = { newColor: "Nouvelle couleur" }, n = { cookieInfo: "Certaines lois régionales obligent les propriétaires de sites web à informer les visiteurs du suivi des cookies.", enableCookie: "Activer la bannière de collecte de cookies", showPreview: "Afficher l’aperçu" }, u = { analyticsIntegrations: "Intégrations aux outils d'analyse", googleAnalyticsLabel: "Google Analytics : GA4", googleAnalyticsInfo: "Ajoutez votre identifiant de mesure Google Analytics : GA4 pour suivre vos visiteurs avec GA4, utilisez le format G-XXXXXXXXX ou AW-XXXXXXXXX" }, d = { mobile: "Mobile", desktop: "Ordinateur" }, c = { defaultBackButtonLabel: "Retour", prePurchaseBackButtonLabel: "Retour", postPurchaseBackButtonLabel: "Retour à mes Sites Web" }, m = { myWebPageLabel: "Ma page Web :", copyButton: "Copier", copiedButton: "Copié !" }, p = { sensitiveContentInfo: "Afficher un avertissement de contenu sensible avant que les visiteurs ne puissent consulter votre profil", offSetting: "Désactivé", sensitiveContentSetting: "Contenu sensible" }, g = { title: "Utilisez votre domaine existant", description: "Choisissez parmi vos noms de domaine achetés ou saisissez votre nom de domaine existant", purchasedDomainRadio: "Utilisez mes noms de domaine achetés", selectDomainPlaceholder: "Sélectionner un nom de domaine", submitButton: "Soumettre", registrationInProgress: "Enregistrement en cours", noPurchasedDomains: "Vous n’avez pas encore acheté de nom de domaine.", existingDomainRadio: "Utiliser mon nom de domaine existant", existingDomainPlaceholder: "example.com", connectButton: "Nous", errorMessage: "Une erreur s'est produite, veuillez contacter l'assistance." }, h = { seo: "SEO", customDomain: "Domaine personnalisé", addCustomDomain: "Ajouter un domaine personnalisé", useExistingDomain: "Ou utiliser un domaine existant", pageUrl: "URL de la page", connected: "Connecté", type: "Type", host: "Hôte", target: "Cible", changeUrl: "Modifier l'URL", setupInProgress: "Configuration en cours", pending: "Vérification en attente", failed: "Échec", failedToRenew: "Échec du renouvellement", dnsExpired: "La demande a expiré. Veuillez supprimer et configurer un nouveau domaine personnalisé.", dnsMissing: "Les enregistrements DNS attendus sont absents. Veuillez ajouter les enregistrements DNS manquants.", dnsInvalid: "Il existe des enregistrements DNS invalides. Veuillez supprimer les enregistrements DNS invalides.", dnsError: "Il existe des enregistrements DNS invalides. Veuillez supprimer l’enregistrement DNS « AAAA ».", checkStatus: "Vérifiez le statut", resetDomain: "Êtes-vous sûr de vouloir réinitialiser ce nom de domaine ?", webDescription: "Brève description de votre page web", websiteDescription: "Brève description de votre site web de marque", customDomainError: "Une erreur s'est produite, veuillez contacter l'assistance.", customDomainNote: "Remarque : veuillez prévoir jusqu'à 72 heures pour que votre domaine soit entièrement initialisé", customDomainInfo: "Utilisez l'URL de votre domaine existant. Vous devez acheter un nom de domaine auprès d'un bureau d'enregistrement de noms de domaine pour utiliser cette fonctionnalité.", customDomainSettingInfo: "Accédez aux paramètres de votre domaine (sur le site Web de votre fournisseur de domaine) et apportez les modifications ci-dessous à vos enregistrements :" }, v = { customizeSocial: "Personnalisez l'apparence de votre site web lorsqu'il est partagé sur les réseaux sociaux", thumbnail: "Vignette", recommendedSize: "taille recommandée", enterTitle: "Entrez le titre", enterDescription: "Entrez la description", addOgImage: "Ajouter une image OG", replaceOgImage: "Remplacer l’image OG" }, b = { previewDisplayName: "Aperçu", templatesDisplayName: "Modèles", contentDisplayName: "Contenu", backgroundDisplayName: "Arrière-plan", logoDisplayName: "Logo", styleDisplayName: "Style", settingsDisplayName: "Paramètres", classicDisplayName: "Classique", modernDisplayName: "Moderne", uniqueDisplayName: "Unique" }, C = { centered: "Centré", leftAligned: "Aligné à gauche", url: "URL", page: "PAGE", emailAddress: "Adresse e-mail", phoneNumber: "Numéro de téléphone", preview: "Aperçu", collapsed: "Réduit", grid: "Grille", carousel: "Carousel", masonry: "Maçonnerie", original: "Original", circle: "Cercle", default: "Défaut", textOnly: "Texte uniquement", thumbnail: "Vignette", featured: "En vedette", small: "Petit", medium: "Moyen", large: "Large", bigImage: "Grande Image", columns: "Colonnes" }, y = { defaultBackgroundColor: "Couleur d’arrière-plan par défaut", defaultBorderColor: "Couleur de bordure par défaut", defaultTextStyle: "Style de texte par défaut", selectedBackgroundColor: "Couleur d’arrière-plan sélectionnée", selectedBorderColor: "Couleur de bordure sélectionnée", selectedTextColor: "Couleur de texte sélectionnée", iconColor: "Couleur de l'icône", iconBackgroundColor: "Couleur d’arrière-plan de l’icône", allDisplayName: "Tous", generalDisplayName: "Général", socialLinksDisplayName: "RÉSEAUX SOCIAUX", monetizeDisplayName: "Monétiser", sectionsDisplayName: "Sections" }, T = { emptyStringMessage: "Veuillez entrer une valeur", invalidAddressMessage: "Veuillez entrer une adresse", invalidEmailMessage: "Veuillez entrer une adresse e-mail valide", invalidTelMessage: "Veuillez entrer un numéro de téléphone valide", invalidUrlMessage: "Veuillez entrer une URL valide", invalidYoutubeUrlMessage: "Veuillez entrer une URL YouTube valide", selectAPage: "Veuillez sélectionner une page" }, S = { recommendedColors: "Couleurs recommandées", logoColors: "Couleurs du logo", background: "Arrière-plan", other: "Autre", shapes: "Formes", color: "Couleur", imageLibrary: "Bibliothèque d’images", myUploads: "Mes importations" }, D = { newColor: "Nouvelle couleur", defaultColors: "Couleurs par défaut", gradientColors: "Dégradés de couleurs", selectThisColor: "Sélectionner cette couleur" }, f = { desktop: "Ordinateur", mobile: "Mobile", back: "Retour", none: "Aucune", logo: "Logo", upload: "Télécharger", yes: "Oui", no: "Non", all: "Tous", categories: "Catégories", search: "Rechercher", pageTitle: "Titre de la page", title: "Titre", description: "Description", settings: "Paramètres", domains: "Domaines", sensitiveContent: "Contenu sensible", displayStyle: "Style d'affichage", colorMatched: "Couleur assortie", iconColor: "Couleur de l'icône", backgroundColor: "Couleur d’arrière-plan", centered: "Centré", justified: "Justifié", fontSettings: "Paramètres de police", defaultTextStyle: "Style de texte par défaut", emptySearchLabel: "Désolé, nous n’avons pas trouvé ce que vous cherchez.", small: "Petit", medium: "Moyen", large: "Large", wide: "large", default: "Défaut", replace: "Remplacer", save: "Enregistrer", remove: "Supprimer", addShapeLabel: "Ajouter une forme", addImageLabel: "Ajouter une image", addFaviconLabel: "Ajouter un favicon", replaceFaviconLabel: "Remplacer le favicon", updateSettings: "Mettre à jour les paramètres", upgradeToPremium: "Passer à la version Premium", done: "Terminé", copyrightTextPlaceholder: "Texte de copyright ici", continue: "Continuer", defaultSaveDescription: "N’oubliez pas de publier vos modifications une fois que votre design vous convient.", saveSuccess: "Enregistrement réussi !" }, L = { maxCharacters: "Vous avez atteint la limite maximale de caractères autorisés", maxCharactersDescription: "Vous avez atteint la limite maximale de caractères autorisés pour votre description", maxCharactersTitle: "Vous avez atteint la limite maximale de caractères autorisés pour votre titre", invalidUrlMessage: "Veuillez entrer une URL valide", testimonialEmpty: "Veuillez entrer un témoignage", textEmpty: "Veuillez entrer un texte", invalidGoogleId: "ID de mesure Google invalide", paymentMethodDescription: "Veuillez entrer une description pour votre mode de paiement", maxTitleLength: "Le titre de la page ne doit pas dépasser {{MAX_PAGE_TITLE_LENGTH}} caractères.", acceptedTypesMessage: "Nous acceptons les {{ACCEPTED_IMAGE_TYPES}} jusqu’à {{FILE_SIZE_LIMIT}}", fileTooLargeMessage: "Le fichier est trop volumineux. Veuillez importer un fichier de moins de {{MAX_FILE_SIZE}} Mo.", incorrectDimensionsMessage: "Dimensions incorrectes pour {{MEDIA_TYPE}}. La dimension recommandée est : {{DESIRED_WIDTH}}x{{DESIRED_HEIGHT}}", titleLengthError: "Le titre dépasse {{BRANDPAGE_TITLE_CHARACTER_LIMIT}} caractères.", descriptionLengthError: "La description dépasse {{BRANDPAGE_DESCRIPTION_CHARACTER_LIMIT}} caractères.", metaKeywordsError: "Veuillez entrer un maximum de 100 mots-clés", invalidSlugError: "L’URL de la page de votre marque contient des caractères non valides. Elle ne peut contenir que des caractères alphanumériques et le caractère « - ».", slugCharacterLimitError: "L’URL de la page de votre marque dépasse le nombre maximal de {{BRANDPAGE_SLUG_CHARACTER_LIMIT}} caractères", brandPageDescriptionLimitError: "La description dépasse 158 caractères.", brandPageTitleLimitError: "Le titre dépasse 60 caractères.", brandPageDefaultDescriptionError: "Une erreur s’est produite. Veuillez réessayer plus tard.", contentHasErrors: "« Il y a {{CONTENT_ERROR_COUNT}} erreurs de contenu. Veuillez consulter l’onglet Contenu pour plus d’informations. »", pageTitleError: "Le titre de la page ne peut pas être vide.", genericBrandPagePublishError: "Une erreur inattendue s'est produite lors de la publication de la page de la marque. Veuillez réessayer." }, A = { recommendedColors: "Couleurs recommandées", logoColors: "Couleurs du logo", transparent: "Transparent" }, P = { colorMatchShape: "Correspondance couleur et forme" }, x = { sideBarHeaderTitle: "Modifier le contenu", managePagesButtonText: "Gérer les pages", addNewPageButtonText: "Ajouter une nouvelle page", addContentButtonText: "Ajouter du contenu", addContentHeaderTitle: "Ajouter du contenu", getStartedButtonText: "Commencez", logoDisplayName: "Logo", generalLinkDisplayName: "Lien général", profileDisplayName: "Profil", websiteDisplayName: "Site Web", emailDisplayName: "E-mail", phoneDisplayName: "Téléphone", textDisplayName: "Texte", imageDisplayName: "Image", imageSectionDisplayName: "Images", imageGalleryDisplayName: "Galerie d’images", videoDisplayName: "Vidéo", mapDisplayName: "Carte", mailingListDisplayName: "Liste de diffusion", facebookDisplayName: "Facebook", twitterDisplayName: "Twitter", instagramDisplayName: "Instagram", youtubeDisplayName: "Youtube", linkedinDisplayName: "LinkedIn", pinterestDisplayName: "Pinterest", twitchDisplayName: "Twitch", tiktokDisplayName: "Tiktok", supportMeDisplayName: "Don", requestPaymentDisplayName: "Paiements", contactFormDisplayName: "Formulaire de contact", bannerSectionDisplayName: "Bannière", testimonialSectionDisplayName: "Témoignages", aboutSectionDisplayName: "À propos", socialLinksDisplayName: "Liens vers les réseaux sociaux", dividerSectionDisplayName: "Séparateur", shapesSectionDisplayName: "Formes", shopSectionDisplayName: "Boutique", settingsDisplayName: "Paramètres", styleDisplayName: "Style", titleStyleLabel: "Style de titre", descriptionStyleLabel: "Style de description", nameStyleLabel: "Style de nom", buttonTextStyleLabel: "Style de texte des boutons", addImageButtonTitle: "Ajouter une image", addImageHeaderTitle: "Ajouter une image", imageReplaceTitle: "Remplacer l'image", imageGalleryAddButtonTitle: "Ajoutez des images", imageGalleryReplaceTitle: "Ajouter une image", iconReplaceTitle: "Remplacer la vignette", addIconHeaderTitle: "Ajouter une vignette", buttonModalAddButtonTitle: "Ajouter un design", buttonModalTitleHeader: "Ajouter un design", buttonModalReplaceTitle: "Remplacer le design", addShapeButtonTitle: "Ajouter une forme", addShapeHeaderTitle: "Ajouter une forme", addShapeReplaceTitle: "Remplacer la forme", linkDisplayName: "Lien", openDesignDisplayName: "Ouvrir le design", pageDisplayName: "PAGE", productsAndServicesDisplayName: "Produits et Services", emailOnlyDisplayName: "E-mail uniquement", nameAndEmailDisplayName: "Nom et adresse e-mail", logoTitle: "Logo", logoSizeTitle: "Taille du logo", backgroundColorTitle: "Couleur d’arrière-plan", thumbnailTitle: "Vignette", shapeColorsTitle: "Couleurs des formes", displayStyleTitle: "Style d'affichage", urlTitle: "URL", fontSettingsTitle: "Paramètres de police", emailTitle: "E-mail", imageTitle: "Image", titleTitle: "Titre", aspectRatioTitle: "Rapport d’aspect", pluralImagesTitle: "Images", styleTitle: "Style", phoneNumberTitle: "Numéro de téléphone", textTitle: "Texte", pluralAddItemsTitle: "Ajouter des articles", sizeTitle: "Taille", alignmentTitle: "Alignement", colorTitle: "Couleur", columnsTitle: "Colonnes", addressTitle: "Adresse", buttonTitle: "Bouton", linkStyleTitle: "Style de lien", descriptionTitle: "Description", successMessageTitle: "Message de succès", sendResponsesToTitle: "Envoyez les réponses à", cardColorTitle: "Couleur de la carte", successMessageTextColorTitle: "Couleur du texte du message de succès", overlayColorTitle: "Couleur de superposition", overlayTitle: "Superposition", buttonLinkTitle: "Lien de bouton", paragraphTitle: "Paragraphe", cardFillColorTitle: "Couleur de remplissage de la carte", iconFillColorTitle: "Couleur de remplissage de l’icône", iconBackgroundColorTitle: "Couleur d’arrière-plan de l’icône", paddingTitle: "Marges intérieures", dividerStyleTitle: "Style de séparateur", dividerColorTitle: "Couleur du séparateur", addItemTitle: "Ajouter un article", buyNowTitle: "Acheter", shopTitle: "ACHETEZ", supportMeTitle: "Soutenez-moi", contactUsTitle: "Contactez-nous", thisIsABannerTitle: "Ceci est une bannière", imagesTitle: "Images", testimonialsTitle: "Témoignages", aboutSectionTitle: "Ceci est la section À propos", homeTitle: "Accueil", followUsOnTitle: "Suivez-nous sur", shapesTitle: "Formes", defaultTextValue: "Ceci est un texte d'exemple", titlePlaceholder: "Titre", successMessagePlaceholder: "Message de succès", successThanksPlaceholder: "Merci pour votre demande !", successSupportPlaceholder: "Merci pour votre soutien !", descriptionPlaceholder: "Description", recipientEmailPlaceholder: "Adresse e-mail du destinataire", getStartedPlaceholder: "Commencez", paragraphPlaceholder: "Paragraphe", selectAPagePlaceholder: "Sélectionnez une page", yourNamePlaceholder: "Votre nom", websitePlaceholder: "Site Web", exampleWebsitePlaceholder: "https://example.com", addImageTitlePlaceholder: "Ajouter un titre à l'image", joinMailingListPlaceholder: "Rejoindre la liste de diffusion", subscribePlaceholder: "s'abonner", optionalDescriptionPlaceholder: "Description (facultatif)", textAreaDescriptionPlaceholder: "Rédigez une brève description de vous-même ou de votre marque", textAreaSamplePlaceholder: "Ceci est un texte d'exemple", emailPlaceholder: "me@website.com", youtubeUrlPlaceholder: "Coller l’URL de la vidéo YouTube", sendPlaceholder: "ENVOYER", formSuccessMessage: "Merci ! Nous vous contacterons dès que possible.", fullWidthLabel: "Pleine largeur", autoplayLabel: "Lecture automatique", muteLabel: "Muet", headingStyleLabel: "Style de titre", testimonialStyleLabel: "Style de témoignage", paragraphStyleLabel: "Style de paragraphe", positionStyleLabel: "Style de position", itemStyleLabel: "Style de l'article", defaultFillColorLabel: "Couleur de remplissage par défaut", defaultBorderColorLabel: "Couleur de bordure par défaut", selectedBorderColorLabel: "Couleur de bordure sélectionnée", textColorLabel: "Couleur du texte", multiProductSelectionLabel: "Permettre la sélection de plusieurs produits", optionalDetailsLabel: "Possibilité de fournir les détails de leur demande", mailingListPromptText: "Rejoindre la liste de diffusion", defaultDescription: "Description", makeADonationDescription: "Faites un don", thickLineDivider: "Ligne épaisse", thinLineDivider: "Ligne fine", noneDivider: "Aucune", styleNoneOption: "Aucune", styleSquareOption: "Carré", styleCircleOption: "Cercle", mediaTypeImage: "Image", mediaTypeShape: "Forme", firstNameLabel: "Prénom", lastNameLabel: "Nom de famille", emailAddressLabel: "Adresse e-mail", phoneNumberLabel: "Numéro de téléphone", messageLabel: "Message" }, N = { field: "Champ", required: "Nécessaire" }, I = { addressPlaceholder: "Entrez une adresse" }, z = { sampleText: "Ceci est un texte d'exemple" }, E = { shapePrefix: "Forme", imagePrefix: "Image", placeholderSuffix: " Titre", addShapeLabel: "Ajouter une forme", addImageLabel: "Ajouter une image" }, M = { linkPlaceholderPrefix: "https://example.com", buttonLabel: "Ajouter un élément" }, R = { logoVariations: "Variations du logo", logoVersions: "Versions du logo", editLogo: "Modifier le logo", uploadLogo: "Télécharger un logo" }, B = { paymentSetup: "Configuration des paiements", inactiveMessage: "Veuillez activer un fournisseur de paiement en cliquant sur le bouton ci-dessous pour commencer à accepter les paiements sur votre page web.", pendingPreOnboardingLabel: "Inscription incomplète", pendingPostOnboardingLabel: "Validation requise", defaultLabel: "État non pris en charge", pendingPreOnboardingDescription: "Veuillez terminer l'inscription via Stripe avant de continuer.", pendingPostOnboardingDescription: "Stripe doit encore vérifier certaines informations. Vérifiez la progression via le tableau de bord Stripe.", requiredActionCtaLabel: "Allez à ", paymentImageAspectRatio: "Rapport d'aspect", supportMeAmount: "MONTANT", supportMeDescription: "Faites un don", supportMeCustomAmount: " Option d’ajout d'un montant personnalisé ", supportMeCustomMessage: " Inclure un message pour vous ", addItem: "Ajouter un article", price: "Prix" }, k = { icon: "Icône", myUploads: "Mes importations", myDesigns: "Mes créations", imageLibrary: "Bibliothèque d’images", shapeLibrary: "Bibliothèque de formes" }, j = { shapeColors: "Couleurs de forme", shapeColor: "Couleur de forme", addItemLabel: "Ajouter un élément" }, V = { testimonial: "Témoignage", avatar: "Avatar", shapeColors: "Couleurs des formes", shapeColor: "Couleur de forme", position: "Poste", name: "Nom", ceoPlaceholder: "PDG de Company Name", addItem: "Ajouter un article" }, U = { maxReached: "Vous avez atteint la limite maximale de caractères autorisés" }, q = { shapeColors: "Couleurs de forme", shapeColor: "Couleur de forme", imageCaptionPlaceholder: "Ajouter une légende d'image", imageLink: "Lien d'image", imageCaption: "Légende d'image", addTitlePlaceholder: "Ajouter un titre", title: "Titre", addParagraphPlaceholder: "Ajouter un paragraphe", paragraph: "Paragraphe", addItemLabel: "Ajouter un élément", image: "Image", shape: "Forme" }, w = { fontSettings: "Paramètres de police", addItem: "Ajouter un article" }, F = { textStyle: "Style de texte", font: "Police", size: "Taille", letterSpacing: "Espacement des lettres", lineHeight: "Hauteur de ligne", style: "Style", alignment: "Alignement", color: "Couleur", backgroundColor: "Couleur d’arrière-plan" }, O = { maxLimitReached: "Vous avez atteint la limite maximale de caractères autorisés" }, _ = { loadingMessage: "Chargement en cours…", dropToUpload: "Déposez vos fichiers ici ou cliquez pour les importer.", acceptText: "Nous acceptons les fichiers .jpg, .jpeg, .png jusqu'à 25 Mo", maxFiles: "(5 fichiers max. à la fois)", check: "Vérifiez", error: "Erreur" }, G = { addItem: "Ajouter un élément" }, X = { loginPrompt: "Veuillez vous connecter ou vous inscrire pour commencer à utiliser l'outil de téléchargement d'images.", loginOrRegister: "Se connecter ou s'inscrire" }, H = { logoText: "Logo", headerLogoDesign: "Design de logo", headerUploadLogo: "Télécharger un logo", subHeaderLogoPreview: "Aperçu du logo", subHeaderLogoColors: "Couleurs du logo", subHeaderLogoText: "Texte du logo", subHeaderSupportingText: "Texte de soutien", uploadNewLogo: "Télécharger un nouveau logo", noUploadedLogoText: "Vous n'avez pas de logo téléchargé, téléchargez un logo pour commencer à modifier" }, W = { searchPlaceholder: "Rechercher vos designs", createNewDesign: "Créer un nouveau design", allDesigns: "Tous les designs", allLogos: "Tous les logos" }, Y = { fileUploadLabel: "Déposez vos fichiers ici ou cliquez pour les importer.", emptyMediaLabel: "Il n'y a pas d'images dans votre bibliothèque de médias. Importez une nouvelle image pour commencer.", areyouSureLabel: "Êtes-vous sûr ?", deleteInfoLabel: "Remarque : la suppression des images sur l'ensemble du contenu de votre site web peut prendre 24 heures.", maxOneFile: "({{MAX_UPLOADED_FILES}} fichier max. à la fois)", maxMultipleFiles: "(Max {{MAX_UPLOADED_FILES}} fichiers à la fois)" }, Z = { headerSettings: "Paramètres d'en-tête", footerSettings: "Paramètres de pied de page", managePages: "Gérer les pages", pages: "Pages", addPage: "Ajouter une page", addPages: "Ajouter des Pages", addPagesDescription: "Ajoutez des pages pour mieux organiser votre contenu. Votre page d'accueil sera toujours active et sera votre première page. Faites glisser et déposez vos autres pages pour les réorganiser.", upgradeBtn: "Mettre à niveau pour ajouter des pages supplémentaires", copyrightStyle: "Style des droits d'auteur" }, J = { showNavigationBelow: "Afficher la navigation sous le logo", previewDescription: "L'aperçu n'est pas disponible pour cette taille d'écran.", navigationStyle: "Style de navigation", logoSize: "Taille du logo", socialLinks: "Liens vers les réseaux sociaux", copyright: "Droits d’auteur" }, K = { domainSearchButtonLabel: "Rechercher", customDomainCardDescription: "Permettez aux clients de vous trouver facilement grâce à un nom de domaine qui correspond à votre entreprise", customDomainLabel: "Domaine personnalisé", recommendedLabel: "Recommandé" }, Q = { loadMoreShapes: "Charger plus de formes" }, $ = { titles: "Titres", headings: "En-têtes", paragraphs: "Paragraphes", buttons: "Boutons", premium: "Premium", logoBackgroundColor: "Couleur d'arrière-plan du logo", buttonBorderColor: "Couleur de bordure du bouton", buttonFillColor: "Couleur de remplissage du bouton", buttonShadowColor: "Couleur de l'ombre du bouton", buttonSoftShadowColor: "Couleur de l'ombre du bouton", buttonIconColor: "Couleur de l'icône", defaultTextColor: "Couleur de texte par défaut", customizeInfo: "Personnalisez l'apparence du texte sur votre site", hideDesignLogo: "Masquer le logo Design.com", hideBrandCrowdLogo: "Cacher le logo BrandCrowd", styleTitle: "Style", buttonStyleTitle: "Style de bouton", textStyleTitle: "Style de texte" }, ee = { searchPlaceholder: "Rechercher", templatePreview: "Aperçu du modèle", loadMoreTemplatesButtonText: "Charger plus de modèles", headerAll: "Tous", headerCategories: "Catégories", headerAi: "AI" }, te = { loadMoreImages: "Charger plus d’images", poweredBy: "Alimenté par" }, oe = {
|
|
2
|
+
cookie: e,
|
|
3
|
+
payment: t,
|
|
4
|
+
shop: o,
|
|
5
|
+
index: a,
|
|
6
|
+
actionBar: i,
|
|
7
|
+
brandpageBackgroundSettings: r,
|
|
8
|
+
brandPageSettings: s,
|
|
9
|
+
colorPalette: l,
|
|
10
|
+
cookieSettings: n,
|
|
11
|
+
googleAnalytics: u,
|
|
12
|
+
layoutSwitcher: d,
|
|
13
|
+
navigation: c,
|
|
14
|
+
quickLinkBar: m,
|
|
15
|
+
sensitiveContentSettings: p,
|
|
16
|
+
existingDomainModal: g,
|
|
17
|
+
seoSettings: h,
|
|
18
|
+
socialShare: v,
|
|
19
|
+
constants: b,
|
|
20
|
+
converter: C,
|
|
21
|
+
model: y,
|
|
22
|
+
validator: T,
|
|
23
|
+
backgroundSettings: S,
|
|
24
|
+
colorPicker: D,
|
|
25
|
+
common: f,
|
|
26
|
+
error: L,
|
|
27
|
+
colorField: A,
|
|
28
|
+
colorReplacementField: P,
|
|
29
|
+
contentSettings: x,
|
|
30
|
+
formFields: N,
|
|
31
|
+
googleAddressField: I,
|
|
32
|
+
genericTextInput: z,
|
|
33
|
+
imagesField: E,
|
|
34
|
+
linksField: M,
|
|
35
|
+
logoSelectionSettings: R,
|
|
36
|
+
paymentConfig: B,
|
|
37
|
+
replaceImageSetting: k,
|
|
38
|
+
shapeField: j,
|
|
39
|
+
testimonialItemsField: V,
|
|
40
|
+
textField: U,
|
|
41
|
+
textImageField: q,
|
|
42
|
+
textItemsField: w,
|
|
43
|
+
textStyleField: F,
|
|
44
|
+
textAreaField: O,
|
|
45
|
+
dropzoneUploader: _,
|
|
46
|
+
productConfigOption: G,
|
|
47
|
+
loginMessage: X,
|
|
48
|
+
editLogoSettings: H,
|
|
49
|
+
myDesigns: W,
|
|
50
|
+
myUploadSettings: Y,
|
|
51
|
+
pageSettings: Z,
|
|
52
|
+
pageSettingsSection: J,
|
|
53
|
+
publishBrandPageModalWithState: K,
|
|
54
|
+
shapeLibrary: Q,
|
|
55
|
+
styleSettingsSection: $,
|
|
56
|
+
templateSettings: ee,
|
|
57
|
+
unsplashLibrary: te
|
|
58
|
+
};
|
|
59
|
+
export {
|
|
60
|
+
i as actionBar,
|
|
61
|
+
S as backgroundSettings,
|
|
62
|
+
s as brandPageSettings,
|
|
63
|
+
r as brandpageBackgroundSettings,
|
|
64
|
+
A as colorField,
|
|
65
|
+
l as colorPalette,
|
|
66
|
+
D as colorPicker,
|
|
67
|
+
P as colorReplacementField,
|
|
68
|
+
f as common,
|
|
69
|
+
b as constants,
|
|
70
|
+
x as contentSettings,
|
|
71
|
+
C as converter,
|
|
72
|
+
e as cookie,
|
|
73
|
+
n as cookieSettings,
|
|
74
|
+
oe as default,
|
|
75
|
+
_ as dropzoneUploader,
|
|
76
|
+
H as editLogoSettings,
|
|
77
|
+
L as error,
|
|
78
|
+
g as existingDomainModal,
|
|
79
|
+
N as formFields,
|
|
80
|
+
z as genericTextInput,
|
|
81
|
+
I as googleAddressField,
|
|
82
|
+
u as googleAnalytics,
|
|
83
|
+
E as imagesField,
|
|
84
|
+
a as index,
|
|
85
|
+
d as layoutSwitcher,
|
|
86
|
+
M as linksField,
|
|
87
|
+
X as loginMessage,
|
|
88
|
+
R as logoSelectionSettings,
|
|
89
|
+
y as model,
|
|
90
|
+
W as myDesigns,
|
|
91
|
+
Y as myUploadSettings,
|
|
92
|
+
c as navigation,
|
|
93
|
+
Z as pageSettings,
|
|
94
|
+
J as pageSettingsSection,
|
|
95
|
+
t as payment,
|
|
96
|
+
B as paymentConfig,
|
|
97
|
+
G as productConfigOption,
|
|
98
|
+
K as publishBrandPageModalWithState,
|
|
99
|
+
m as quickLinkBar,
|
|
100
|
+
k as replaceImageSetting,
|
|
101
|
+
p as sensitiveContentSettings,
|
|
102
|
+
h as seoSettings,
|
|
103
|
+
j as shapeField,
|
|
104
|
+
Q as shapeLibrary,
|
|
105
|
+
o as shop,
|
|
106
|
+
v as socialShare,
|
|
107
|
+
$ as styleSettingsSection,
|
|
108
|
+
ee as templateSettings,
|
|
109
|
+
V as testimonialItemsField,
|
|
110
|
+
O as textAreaField,
|
|
111
|
+
U as textField,
|
|
112
|
+
q as textImageField,
|
|
113
|
+
w as textItemsField,
|
|
114
|
+
F as textStyleField,
|
|
115
|
+
te as unsplashLibrary,
|
|
116
|
+
T as validator
|
|
117
|
+
};
|
package/lib/src/{bundled-translations.fr-FR-CIy8KjAV.js → bundled-translations.fr-FR-VtC2JYUC.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e = { firstTimePublishHeaderLabel: "Définissez l'URL pour {{brandPageDisplayName}}", sitePublishedLabel: "Site publié !", publishSuccessLabel: "Votre {{brandPageDisplayName}} est en ligne ! Commencez à utiliser votre lien :", freePublishCardTitleLabel: "Adresse libre", freePublishCardDescriptionLabel: "Choisissez une adresse gratuite pour publier maintenant. Vous pouvez toujours modifier l'URL plus tard", slugInputPlaceholderYourNameLabel: "your-name", slugInputPlaceholderYourBusinessNameLabel: "nom-de-votre-entreprise", freeDomainLabel: "Domaine gratuit", purchasedDomainLabel: "Domaine acheté", setUrlLabel: "Définir l'URL", publishLabel: "Publier", viewMoreDomainLabel: "VOIR PLUS DE NOMS DE DOMAINE", viewMyWebsiteLabel: "Voir {{brandPageDisplayName}}", copyLabel: "Copier", copySuccessLabel: "Copié !", publishedSuccessDescriptionLabel: "Achetez un nom de domaine correspondant à votre marque", hasAlreadyPurchasedDomainCloseButtonLabel: "Non merci, peut-être plus tard", selectDomainDropdownPlaceholder: "Sélectionner un nom de domaine" }, a = { freeDomainButtonLabel: "Domaine gratuit", buyNowButtonLabel: "Acheter", pricePerYearLabel: "/
|
|
1
|
+
const e = { firstTimePublishHeaderLabel: "Définissez l'URL pour {{brandPageDisplayName}}", sitePublishedLabel: "Site publié !", publishSuccessLabel: "Votre {{brandPageDisplayName}} est en ligne ! Commencez à utiliser votre lien :", freePublishCardTitleLabel: "Adresse libre", freePublishCardDescriptionLabel: "Choisissez une adresse gratuite pour publier maintenant. Vous pouvez toujours modifier l'URL plus tard", slugInputPlaceholderYourNameLabel: "your-name", slugInputPlaceholderYourBusinessNameLabel: "nom-de-votre-entreprise", freeDomainLabel: "Domaine gratuit", purchasedDomainLabel: "Domaine acheté", setUrlLabel: "Définir l'URL", publishLabel: "Publier", viewMoreDomainLabel: "VOIR PLUS DE NOMS DE DOMAINE", viewMyWebsiteLabel: "Voir {{brandPageDisplayName}}", copyLabel: "Copier", copySuccessLabel: "Copié !", publishedSuccessDescriptionLabel: "Achetez un nom de domaine correspondant à votre marque", hasAlreadyPurchasedDomainCloseButtonLabel: "Non merci, peut-être plus tard", selectDomainDropdownPlaceholder: "Sélectionner un nom de domaine" }, a = { freeDomainButtonLabel: "Domaine gratuit", buyNowButtonLabel: "Acheter", pricePerYearLabel: "/yr", costPriceLabel: "Prix de revient :" }, r = { domainSearchHeaderTitle: "Rechercher un nom de domaine", domainSearchHeaderSubtitle: "Achetez un nom de domaine correspondant à votre marque" }, o = { domainSearchHeaderTitle: "Rechercher un nom de domaine", domainSearchHeaderSubtitle: "Achetez un nom de domaine correspondant à votre marque" }, n = { searchButtonLabel: "Rechercher", searchBarLabel: "Rechercher", searchBarPlaceholder: "Rechercher des noms de domaine", searchBarPreText: "Nom de domaine" }, i = { domainSearchEmptyMessage: "Désolé, nous n’avons pas trouvé de nom de domaine pour « {{domainNameSearchTerm}} ».", searchAnotherDomainMessage: "Essayez de faire une recherche avec un autre nom de domaine." }, s = { searchButtonLabel: "Rechercher", searchBarLabel: "Rechercher", searchBarPlaceholder: "Rechercher des noms de domaine", domainSearchOrConnectHeaderSubtitle: "Achetez un nom de domaine correspondant à votre marque ou connectez votre domaine existant" }, l = {
|
|
2
2
|
publishBrandPageModal: e,
|
|
3
3
|
sellDomainNameList: a,
|
|
4
4
|
sellDomainNameListModal: r,
|
package/lib/src/{bundled-translations.pt-PT-C8EcSdyX.js → bundled-translations.pt-PT-l9cEldEo.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const e = { firstTimePublishHeaderLabel: "Defina o URL para {{brandPageDisplayName}}", sitePublishedLabel: "Site publicado!", publishSuccessLabel: "A sua página {{brandPageDisplayName}} está ativa! Comece a utilizar o link:", freePublishCardTitleLabel: "Endereço gratuito", freePublishCardDescriptionLabel: "Escolha um endereço gratuito para publicar agora. Pode sempre editar o URL mais tarde", slugInputPlaceholderYourNameLabel: "o-seu-nome", slugInputPlaceholderYourBusinessNameLabel: "nome-da-sua-empresa", freeDomainLabel: "Domínio gratuito", purchasedDomainLabel: "Domínio comprado", setUrlLabel: "Definir URL", publishLabel: "Publicar", viewMoreDomainLabel: "VER MAIS DOMÍNIOS", viewMyWebsiteLabel: "Ver {{brandPageDisplayName}}", copyLabel: "Copiar", copySuccessLabel: "Copiado!", publishedSuccessDescriptionLabel: "Compre um nome de domínio que corresponda à sua marca", hasAlreadyPurchasedDomainCloseButtonLabel: "Não, obrigado, talvez mais tarde", selectDomainDropdownPlaceholder: "Selecionar nome de domínio" }, a = { freeDomainButtonLabel: "Domínio gratuito", buyNowButtonLabel: "Comprar Agora", pricePerYearLabel: "/
|
|
1
|
+
const e = { firstTimePublishHeaderLabel: "Defina o URL para {{brandPageDisplayName}}", sitePublishedLabel: "Site publicado!", publishSuccessLabel: "A sua página {{brandPageDisplayName}} está ativa! Comece a utilizar o link:", freePublishCardTitleLabel: "Endereço gratuito", freePublishCardDescriptionLabel: "Escolha um endereço gratuito para publicar agora. Pode sempre editar o URL mais tarde", slugInputPlaceholderYourNameLabel: "o-seu-nome", slugInputPlaceholderYourBusinessNameLabel: "nome-da-sua-empresa", freeDomainLabel: "Domínio gratuito", purchasedDomainLabel: "Domínio comprado", setUrlLabel: "Definir URL", publishLabel: "Publicar", viewMoreDomainLabel: "VER MAIS DOMÍNIOS", viewMyWebsiteLabel: "Ver {{brandPageDisplayName}}", copyLabel: "Copiar", copySuccessLabel: "Copiado!", publishedSuccessDescriptionLabel: "Compre um nome de domínio que corresponda à sua marca", hasAlreadyPurchasedDomainCloseButtonLabel: "Não, obrigado, talvez mais tarde", selectDomainDropdownPlaceholder: "Selecionar nome de domínio" }, a = { freeDomainButtonLabel: "Domínio gratuito", buyNowButtonLabel: "Comprar Agora", pricePerYearLabel: "/yr", costPriceLabel: "Preço de Custo:" }, o = { domainSearchHeaderTitle: "Pesquisar um nome de domínio", domainSearchHeaderSubtitle: "Compre um nome de domínio que corresponda à sua marca" }, r = { domainSearchHeaderTitle: "Pesquisar um nome de domínio", domainSearchHeaderSubtitle: "Compre um nome de domínio que corresponda à sua marca" }, s = { searchButtonLabel: "Pesquisar", searchBarLabel: "Pesquisar", searchBarPlaceholder: "Pesquisar nomes de domínio", searchBarPreText: "Nome de domínio" }, i = { domainSearchEmptyMessage: 'Não conseguimos encontrar nenhum domínio para "{{domainNameSearchTerm}}".', searchAnotherDomainMessage: "Experimente pesquisar outro nome de domínio." }, n = { searchButtonLabel: "Pesquisar", searchBarLabel: "Pesquisar", searchBarPlaceholder: "Pesquisar nomes de domínio", domainSearchOrConnectHeaderSubtitle: "Compre um nome de domínio que corresponda à sua marca ou associe ao domínio que já tem" }, m = {
|
|
2
2
|
publishBrandPageModal: e,
|
|
3
3
|
sellDomainNameList: a,
|
|
4
4
|
sellDomainNameListModal: o,
|