Skip to content

Commit 224d17f

Browse files
authored
Merge pull request #2420 from umbraco/v14/fix/dictionary-xss
V14: Add sanitization to dictionary
2 parents c372c15 + 6d3844f commit 224d17f

27 files changed

+67
-51
lines changed

src/assets/lang/bs.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -566,9 +566,9 @@ export default {
566566
createNew: 'Kreirajte stavku iz rječnika',
567567
},
568568
dictionaryItem: {
569-
description: "\n Uredite različite jezičke verzije za stavku rječnika '<em>%0%</em>' ispod\n ",
569+
description: "Uredite različite jezičke verzije za stavku rječnika '%0%' ispod",
570570
displayName: 'Kultura',
571-
changeKeyError: "\n Ključ '%0%' već postoji.\n ",
571+
changeKeyError: "Ključ '%0%' već postoji.",
572572
overviewTitle: 'Pregled riječnika',
573573
},
574574
examineManagement: {

src/assets/lang/cs-cz.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -498,9 +498,9 @@ export default {
498498
},
499499
dictionaryItem: {
500500
description:
501-
"\n Editujte různé jazykové verze pro položku slovníku '<em>%0%</em>' níže.<br/>Můžete přidat další jazyky v nabídce 'jazyky' nalevo.",
501+
"Editujte různé jazykové verze pro položku slovníku '%0%' níže.<br/>Můžete přidat další jazyky v nabídce 'jazyky' nalevo.",
502502
displayName: 'Název jazyka',
503-
changeKeyError: "\n Klíč '%0%' již existuje.\n ",
503+
changeKeyError: "Klíč '%0%' již existuje.",
504504
overviewTitle: 'Přehled slovníku',
505505
},
506506
examineManagement: {

src/assets/lang/cy-gb.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -591,9 +591,9 @@ export default {
591591
},
592592
dictionaryItem: {
593593
description:
594-
"\n Golygwch y fersiynau iaith gwahanol ar gyfer yr eitem geiriadur '<em>%0%</em>' islaw<br/>Gallwch ychwanegu ieithoedd ychwanegol o dan 'ieithoedd' yn y ddewislen ar y chwith\n ",
594+
"Golygwch y fersiynau iaith gwahanol ar gyfer yr eitem geiriadur '%0%' islaw<br/>Gallwch ychwanegu ieithoedd ychwanegol o dan 'ieithoedd' yn y ddewislen ar y chwith",
595595
displayName: 'Enw Diwylliant',
596-
changeKeyError: "\n Mae'r allwedd '%0%' yn bodoli eisoes.\n ",
596+
changeKeyError: "Mae'r allwedd '%0%' yn bodoli eisoes.",
597597
overviewTitle: 'Trosolwg Geiriadur',
598598
},
599599
examineManagement: {

src/assets/lang/da-dk.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -585,9 +585,9 @@ export default {
585585
},
586586
dictionaryItem: {
587587
description:
588-
"\n Rediger de forskellige sprogversioner for ordbogselementet '%0%' herunder.<br />Du tilføjer flere sprog under 'sprog' i menuen til venstre </key>\n ",
588+
"Rediger de forskellige sprogversioner for ordbogselementet '%0%' herunder. Du tilføjer flere sprog under 'sprog' i menuen til venstre.",
589589
displayName: 'Kulturnavn',
590-
changeKeyError: "\n Navnet '%0%' eksisterer allerede.\n ",
590+
changeKeyError: "Navnet '%0%' eksisterer allerede.",
591591
overviewTitle: 'Ordbogsoversigt',
592592
},
593593
examineManagement: {

src/assets/lang/de-de.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -590,9 +590,9 @@ export default {
590590
},
591591
dictionaryItem: {
592592
description:
593-
"\n Bearbeiten Sie nachfolgend die verschiedenen Sprachversionen für den Wörterbucheintrag '<em>%0%</em>'.\n <br/>Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen.",
593+
"Bearbeiten Sie nachfolgend die verschiedenen Sprachversionen für den Wörterbucheintrag '%0%'.<br/>Unter dem links angezeigten Menüpunkt 'Sprachen' können Sie weitere hinzufügen.",
594594
displayName: 'Name der Kultur',
595-
changeKeyError: "\n Der Wert '%0%' ist bereits vorhanden.\n ",
595+
changeKeyError: "Der Wert '%0%' ist bereits vorhanden.",
596596
overviewTitle: 'Wörterbuch Übersicht',
597597
},
598598
examineManagement: {

src/assets/lang/en-us.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -595,9 +595,9 @@ export default {
595595
createNew: 'Create dictionary item',
596596
},
597597
dictionaryItem: {
598-
description: "\n Edit the different language versions for the dictionary item '<em>%0%</em>' below\n ",
598+
description: "Edit the different language versions for the dictionary item '%0%' below",
599599
displayName: 'Culture Name',
600-
changeKeyError: "\n The key '%0%' already exists.\n ",
600+
changeKeyError: "The key '%0%' already exists.",
601601
overviewTitle: 'Dictionary overview',
602602
},
603603
examineManagement: {

src/assets/lang/en.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -606,9 +606,9 @@ export default {
606606
createNew: 'Create dictionary item',
607607
},
608608
dictionaryItem: {
609-
description: "\n Edit the different language versions for the dictionary item '<em>%0%</em>' below\n ",
609+
description: "Edit the different language versions for the dictionary item '%0%' below",
610610
displayName: 'Culture Name',
611-
changeKeyError: "\n The key '%0%' already exists.\n ",
611+
changeKeyError: "The key '%0%' already exists.",
612612
overviewTitle: 'Dictionary overview',
613613
},
614614
examineManagement: {

src/assets/lang/es-es.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -370,9 +370,9 @@ export default {
370370
createNew: 'Crear elemento de diccionario',
371371
},
372372
dictionaryItem: {
373-
description: "Editar las diferentes versiones lingüísticas para la entrada en el diccionario '% 0%' debajo",
374-
displayName: 'nombre de la cultura\n',
375-
changeKeyError: "\n La clave '%0%' ya existe.\n ",
373+
description: "Editar las diferentes versiones lingüísticas para la entrada en el diccionario '%0%' debajo",
374+
displayName: 'nombre de la cultura',
375+
changeKeyError: "La clave '%0%' ya existe.",
376376
},
377377
placeholders: {
378378
username: 'Escribe tu nombre de usuario',

src/assets/lang/fr-fr.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -517,10 +517,9 @@ export default {
517517
createNew: 'Créer un élément de dictionnaire',
518518
},
519519
dictionaryItem: {
520-
description:
521-
"\n Editez les différentes versions de langues pour l'élément de dictionnaire '<em>%0%</em>' ci-dessous.\n ",
520+
description: "Editez les différentes versions de langues pour l'élément de dictionnaire '%0%' ci-dessous.",
522521
displayName: 'Nom de Culture',
523-
changeKeyError: "\n La clé '%0%' existe déjà.\n ",
522+
changeKeyError: "La clé '%0%' existe déjà.",
524523
overviewTitle: 'Aperçu du dictionaire',
525524
},
526525
examineManagement: {

src/assets/lang/he-il.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export default {
204204
},
205205
dictionaryItem: {
206206
description:
207-
'\n ערוך את גרסאות השפות השונות לפריט המילון \'<em>%0%</em>\' למטה<br/>ניתן להוסיף שפות נוספות תחת "שפות" בתפריט בצד שמאל\n ',
207+
'ערוך את גרסאות השפות השונות לפריט המילון \'%0%\' למטה ניתן להוסיף שפות נוספות תחת "שפות" בתפריט בצד שמאל',
208208
displayName: 'שם התצוגה לשפה',
209209
},
210210
editdatatype: {

src/assets/lang/hr-hr.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -568,9 +568,9 @@ export default {
568568
createNew: 'Kreirajte stavku iz rječnika',
569569
},
570570
dictionaryItem: {
571-
description: "\n Uredite različite jezičke varijante za stavku rječnika '<em>%0%</em>' ispod\n ",
571+
description: "Uredite različite jezičke varijante za stavku rječnika '%0%' ispod",
572572
displayName: 'Kultura',
573-
changeKeyError: "\n Stavka '%0%' već postoji.\n ",
573+
changeKeyError: "Stavka '%0%' već postoji.",
574574
overviewTitle: 'Pregled riječnika',
575575
},
576576
examineManagement: {

src/assets/lang/it-it.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,7 @@ export default {
569569
noItems: 'Non ci sono oggetti nel Dizionario.',
570570
},
571571
dictionaryItem: {
572-
description: "Modifica le lingue per l'elemento '<em>%0%</em>' qui sotto.",
572+
description: "Modifica le lingue per l'elemento '%0%' qui sotto.",
573573
displayName: 'Nome della cultura',
574574
changeKeyError: "La chiave '%0%' esiste già.",
575575
overviewTitle: 'Panoramica del Dizionario',

src/assets/lang/ja-jp.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -275,7 +275,7 @@ export default {
275275
},
276276
dictionaryItem: {
277277
description:
278-
"\n ディクショナリのアイテム '<em>%0%</em>' の別の言語版を編集するには、左側のメニューの'言語'でその言語を追加します\n ",
278+
"ディクショナリのアイテム '%0%' の別の言語版を編集するには、左側のメニューの'言語'でその言語を追加します",
279279
displayName: 'カルチャ名',
280280
},
281281
placeholders: {

src/assets/lang/ko-kr.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ export default {
204204
},
205205
dictionaryItem: {
206206
description:
207-
"\n '<em>%0%</em>'사전 항목 아래에 다른 언어버전들을 편집하세요<br/>왼쪽 '언어'메뉴를 사용하여 추가 언어들을 설정할 수 있습니다.\n ",
207+
"'%0%'사전 항목 아래에 다른 언어버전들을 편집하세요<br/>왼쪽 '언어'메뉴를 사용하여 추가 언어들을 설정할 수 있습니다.",
208208
displayName: '국가명',
209209
},
210210
editdatatype: {

src/assets/lang/nb-no.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,10 @@ export default {
250250
},
251251
dictionaryItem: {
252252
description:
253-
"Rediger de forskjellige språkversjonene for ordbokelementet '<em>%0%</em>' under.<br/>Du kan legge til flere språk under 'språk' i menyen til venstre.",
253+
"Rediger de forskjellige språkversjonene for ordbokelementet '%0%' under. Du kan legge til flere språk under 'språk' i menyen til venstre.",
254254
displayName: 'Språk',
255+
changeKeyError: "Kan ikke endre nøkkel for '%0%' fordi det allerede finnes en oversettelse for denne nøkkelen",
256+
overviewTitle: 'Ordbok',
255257
},
256258
placeholders: {
257259
username: 'Skriv inn ditt brukernavn',

src/assets/lang/nl-nl.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -529,9 +529,9 @@ export default {
529529
},
530530
dictionaryItem: {
531531
description:
532-
"\n Wijzig de verschillende taalversies voor het woordenboek item '%0%'. Je kunt extra talen toevoegen bij 'talen' in het menu links\n ",
532+
"Wijzig de verschillende taalversies voor het woordenboek item '%0%'. Je kunt extra talen toevoegen bij 'talen' in het menu links",
533533
displayName: 'Cultuurnaam',
534-
changeKeyError: "\n De key '%0%' bestaat al.\n ",
534+
changeKeyError: "De key '%0%' bestaat al.",
535535
overviewTitle: 'Woordenboek overzicht',
536536
},
537537
examineManagement: {

src/assets/lang/pl-pl.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -364,9 +364,9 @@ export default {
364364
},
365365
dictionaryItem: {
366366
description:
367-
'\n Edytuj różne wersje językowe dla elementu słownika \'<em>%0%</em>\' poniżej.<br/>\n Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.',
367+
'Edytuj różne wersje językowe dla elementu słownika \'%0%\' poniżej. Możesz dodać dodatkowe języki w menu "Języki" po lewej stronie.',
368368
displayName: 'Nazwa języka',
369-
changeKeyError: "\n Klucz '%0%' już istnieje.\n ",
369+
changeKeyError: "Klucz '%0%' już istnieje.",
370370
},
371371
placeholders: {
372372
username: 'Wpisz nazwę użytkownika',

src/assets/lang/pt-br.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export default {
206206
},
207207
dictionaryItem: {
208208
description:
209-
"Editar as diferente versões de linguagem para o item de dicionário '<em>%0%</em>' abaixo <br /> Você pode adicionar mais linguagens sob 'linguagens' no menu à esquerda",
209+
"Editar as diferente versões de linguagem para o item de dicionário '%0%' abaixo. Você pode adicionar mais linguagens sob 'linguagens' no menu à esquerda.",
210210
displayName: 'Nome da Cultura',
211211
},
212212
editdatatype: {

src/assets/lang/ru-ru.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,9 @@ export default {
423423
},
424424
dictionaryItem: {
425425
description:
426-
"\n\t\tНиже Вы можете указать различные переводы данной статьи словаря '<em>%0%</em>'<br/>Добавить другие языки можно, воспользовавшись пунктом 'Языки' в меню слева\n\t\t",
426+
"Ниже Вы можете указать различные переводы данной статьи словаря '%0%'. Добавить другие языки можно, воспользовавшись пунктом 'Языки' в меню слева.",
427427
displayName: 'Название языка (культуры)',
428-
changeKeyError: "\n Ключ '%0%' уже существует в словаре.\n ",
428+
changeKeyError: "Ключ '%0%' уже существует в словаре.",
429429
overviewTitle: 'Обзор словаря',
430430
},
431431
editcontenttype: {

src/assets/lang/tr-tr.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -510,9 +510,9 @@ export default {
510510
noItems: 'Sözlük öğesi yok.',
511511
},
512512
dictionaryItem: {
513-
description: "\n Aşağıdaki sözlük öğesi '<em>%0%</em>' için farklı dil sürümlerini düzenleyin\n ",
513+
description: "Aşağıdaki sözlük öğesi '%0%' için farklı dil sürümlerini düzenleyin",
514514
displayName: 'Kültür Adı',
515-
changeKeyError: "\n '%0%' anahtarı zaten var.\n ",
515+
changeKeyError: "'%0%' anahtarı zaten var.",
516516
overviewTitle: 'Sözlüğe genel bakış',
517517
},
518518
examineManagement: {

src/assets/lang/uk-ua.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -422,9 +422,9 @@ export default {
422422
},
423423
dictionaryItem: {
424424
description:
425-
"\n\t\tНиже Ви можете вказати різні переклади даної статті словника '<em>%0%</em>'<br/>Додати інші мови можна, скориставшись пунктом 'Мови' в меню зліва\n\t\t",
425+
"Ниже Ви можете вказати різні переклади даної статті словника '%0%'. Додати інші мови можна, скориставшись пунктом 'Мови' в меню зліва.",
426426
displayName: 'Назва мови (культури)',
427-
changeKeyError: "\n Ключ '%0%' вже існує у словнику.\n ",
427+
changeKeyError: "Ключ '%0%' вже існує у словнику.",
428428
overviewTitle: 'Огляд словника',
429429
},
430430
editcontenttype: {

src/assets/lang/zh-cn.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,9 @@ export default {
280280
selectEditor: '选择编辑器',
281281
},
282282
dictionaryItem: {
283-
description: '\n 为字典项编辑不同语言的版本‘<em>%0%</em>’<br/>您可以在左侧的“语言”中添加一种语言\n ',
283+
description: '为字典项编辑不同语言的版本‘%0%’, 您可以在左侧的“语言”中添加一种语言',
284284
displayName: '语言名称',
285-
changeKeyError: "\n 关键字 '%0%' 已经存在。\n ",
285+
changeKeyError: "关键字 '%0%' 已经存在。",
286286
},
287287
placeholders: {
288288
username: '输入您的用户名',

src/assets/lang/zh-tw.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,7 @@ export default {
278278
selectEditor: '選擇編輯器',
279279
},
280280
dictionaryItem: {
281-
description:
282-
"\n 為此字典項目 '<em>%0%</em>' 編輯不同語言版本,<br />您可以在左方選單「語言」中增添新的語言\n ",
281+
description: "為此字典項目 '%0%' 編輯不同語言版本,您可以在左方選單「語言」中增添新的語言",
283282
displayName: '語言名稱',
284283
},
285284
placeholders: {

src/packages/core/utils/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export * from './path/stored-path.function.js';
1717
export * from './path/transform-server-path-to-client-path.function.js';
1818
export * from './path/umbraco-path.function.js';
1919
export * from './path/url-pattern-to-string.function.js';
20+
export * from './sanitize/sanitize-html.function.js';
2021
export * from './selection-manager/selection.manager.js';
2122
export * from './state-manager/index.js';
2223
export * from './string/from-camel-case.function.js';
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify';
2+
3+
/**
4+
* Sanitize a HTML string by removing any potentially harmful content such as scripts.
5+
* @param {string} html The HTML string to sanitize.
6+
* @returns The sanitized HTML string.
7+
*/
8+
export function sanitizeHTML(html: string): string {
9+
return DOMPurify.sanitize(html);
10+
}

src/packages/dictionary/workspace/views/workspace-view-dictionary-editor.element.ts

+12-7
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ import { UMB_DICTIONARY_WORKSPACE_CONTEXT } from '../dictionary-workspace.contex
22
import type { UmbDictionaryDetailModel } from '../../types.js';
33
import type { UUITextareaElement } from '@umbraco-cms/backoffice/external/uui';
44
import { UUITextareaEvent } from '@umbraco-cms/backoffice/external/uui';
5-
import { css, html, customElement, state, repeat, ifDefined, unsafeHTML } from '@umbraco-cms/backoffice/external/lit';
5+
import { css, html, customElement, state, repeat } from '@umbraco-cms/backoffice/external/lit';
66
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
77
import { UmbLanguageCollectionRepository, type UmbLanguageDetailModel } from '@umbraco-cms/backoffice/language';
88
import { UMB_CURRENT_USER_CONTEXT } from '@umbraco-cms/backoffice/current-user';
9+
import { sanitizeHTML } from '@umbraco-cms/backoffice/utils';
910

1011
@customElement('umb-workspace-view-dictionary-editor')
1112
export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
@@ -21,8 +22,12 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
2122
@state()
2223
private _currentUserHasAccessToAllLanguages?: boolean = false;
2324

24-
#languageCollectionRepository = new UmbLanguageCollectionRepository(this);
25-
#workspaceContext!: typeof UMB_DICTIONARY_WORKSPACE_CONTEXT.TYPE;
25+
get #dictionaryName() {
26+
return typeof this._dictionary?.name !== 'undefined' ? sanitizeHTML(this._dictionary.name) : '...';
27+
}
28+
29+
readonly #languageCollectionRepository = new UmbLanguageCollectionRepository(this);
30+
#workspaceContext?: typeof UMB_DICTIONARY_WORKSPACE_CONTEXT.TYPE;
2631
#currentUserContext?: typeof UMB_CURRENT_USER_CONTEXT.TYPE;
2732

2833
constructor() {
@@ -59,7 +64,7 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
5964
}
6065

6166
#observeDictionary() {
62-
this.observe(this.#workspaceContext.dictionary, (dictionary) => {
67+
this.observe(this.#workspaceContext?.dictionary, (dictionary) => {
6368
this._dictionary = dictionary;
6469
});
6570
}
@@ -77,14 +82,14 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
7782
const translation = (target.value as string).toString();
7883
const isoCode = target.getAttribute('name')!;
7984

80-
this.#workspaceContext.setPropertyValue(isoCode, translation);
85+
this.#workspaceContext?.setPropertyValue(isoCode, translation);
8186
}
8287
}
8388

8489
override render() {
8590
return html`
8691
<uui-box>
87-
${unsafeHTML(this.localize.term('dictionaryItem_description', this._dictionary?.name || '&#8203;'))}
92+
${this.localize.term('dictionaryItem_description', this.#dictionaryName)}
8893
${repeat(
8994
this._languages,
9095
(item) => item.unique,
@@ -105,7 +110,7 @@ export class UmbWorkspaceViewDictionaryEditorElement extends UmbLitElement {
105110
name=${language.unique}
106111
label="translation"
107112
@change=${this.#onTextareaChange}
108-
value=${ifDefined(translation?.translation)}
113+
.value=${translation?.translation ?? ''}
109114
?readonly=${this.#isReadOnly(language.unique)}></uui-textarea>
110115
</umb-property-layout>`;
111116
}

src/packages/markdown-editor/components/input-markdown-editor/input-markdown.element.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import { createExtensionApi } from '@umbraco-cms/backoffice/extension-api';
1212
import { marked } from '@umbraco-cms/backoffice/external/marked';
1313
import { monaco } from '@umbraco-cms/backoffice/external/monaco-editor';
1414
import { umbExtensionsRegistry } from '@umbraco-cms/backoffice/extension-registry';
15-
import { DOMPurify } from '@umbraco-cms/backoffice/external/dompurify';
1615
import { UmbChangeEvent, type UmbInputEvent } from '@umbraco-cms/backoffice/event';
1716
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
1817
import { UmbTextStyles } from '@umbraco-cms/backoffice/style';
@@ -22,6 +21,7 @@ import { UmbCodeEditorLoadedEvent } from '@umbraco-cms/backoffice/code-editor';
2221
import type { UmbCodeEditorController, UmbCodeEditorElement } from '@umbraco-cms/backoffice/code-editor';
2322
import type { UUIModalSidebarSize } from '@umbraco-cms/backoffice/external/uui';
2423
import { UmbFormControlMixin } from '@umbraco-cms/backoffice/validation';
24+
import { sanitizeHTML } from '@umbraco-cms/backoffice/utils';
2525

2626
const elementName = 'umb-input-markdown';
2727

@@ -560,7 +560,7 @@ export class UmbInputMarkdownElement extends UmbFormControlMixin(UmbLitElement,
560560
#renderPreview() {
561561
if (!this.preview || !this.value) return;
562562
const markdownAsHtml = marked.parse(this.value as string) as string;
563-
const sanitizedHtml = markdownAsHtml ? DOMPurify.sanitize(markdownAsHtml) : '';
563+
const sanitizedHtml = markdownAsHtml ? sanitizeHTML(markdownAsHtml) : '';
564564
return html`<uui-scroll-container id="preview">${unsafeHTML(sanitizedHtml)}</uui-scroll-container>`;
565565
}
566566

0 commit comments

Comments
 (0)