) {
const tokensTexts = tokens.filter(token => token.selected).map(token => token.text).join("\r\n");
@@ -953,8 +990,8 @@ class Tokenizer extends UI5Element {
* @protected
*/
scrollToStart() {
- if (this._scrollEnablement.scrollContainer) {
- this._scrollEnablement.scrollTo(0, 0);
+ if (this._scrollEnablement?.scrollContainer) {
+ this._scrollEnablement?.scrollTo(0, 0);
}
}
@@ -965,8 +1002,8 @@ class Tokenizer extends UI5Element {
*/
scrollToEnd() {
const expandedTokenizerScrollWidth = this.contentDom && (this.effectiveDir !== "rtl" ? this.contentDom.scrollWidth : -this.contentDom.scrollWidth);
- if (this._scrollEnablement.scrollContainer) {
- this._scrollEnablement.scrollTo(expandedTokenizerScrollWidth, 0, 5, 10);
+ if (this._scrollEnablement?.scrollContainer) {
+ this._scrollEnablement?.scrollTo(expandedTokenizerScrollWidth, 0, 5, 10);
}
}
@@ -984,9 +1021,9 @@ class Tokenizer extends UI5Element {
const tokenContainerRect = this.contentDom.getBoundingClientRect();
if (tokenRect.left < tokenContainerRect.left) {
- this._scrollEnablement.scrollTo(this.contentDom.scrollLeft - (tokenContainerRect.left - tokenRect.left + 5), 0);
+ this._scrollEnablement?.scrollTo(this.contentDom.scrollLeft - (tokenContainerRect.left - tokenRect.left + 5), 0);
} else if (tokenRect.right > tokenContainerRect.right) {
- this._scrollEnablement.scrollTo(this.contentDom.scrollLeft + (tokenRect.right - tokenContainerRect.right + 5), 0);
+ this._scrollEnablement?.scrollTo(this.contentDom.scrollLeft + (tokenRect.right - tokenContainerRect.right + 5), 0);
}
}
diff --git a/packages/main/src/themes/Tokenizer.css b/packages/main/src/themes/Tokenizer.css
index ba08b89f3fe6..064d9010c7bc 100644
--- a/packages/main/src/themes/Tokenizer.css
+++ b/packages/main/src/themes/Tokenizer.css
@@ -7,6 +7,27 @@
height: 2.25rem;
}
+:host([multi-line]) {
+ height: auto;
+
+ .ui5-tokenizer--content {
+ flex-wrap: wrap;
+ padding: .25rem;
+ box-sizing: border-box;
+ row-gap: .5rem;
+ column-gap: .25rem;
+ overflow-y: auto;
+ overflow-x: hidden;
+ }
+
+ ::slotted(ui5-token) {
+ margin: 0;
+ white-space: nowrap;
+ text-overflow: ellipsis;
+ max-width: 100%;
+ }
+}
+
:host([disabled]) {
opacity: 40%;
pointer-events: none;
@@ -77,3 +98,21 @@
.ui5-tokenizer-more-text:active {
text-decoration: none;
}
+
+.ui5-tokenizer--clear-all {
+ color: var(--sapLinkColor);
+ font-family: var(--sapFontFamily);
+ font-size: var(--sapFontSize);
+ cursor: pointer;
+ outline: none;
+}
+
+.ui5-tokenizer--clear-all:hover {
+ color: var(--sapLink_Hover_Color);
+ text-decoration: var(--_ui5_link_hover_text_decoration);
+}
+
+.ui5-tokenizer--clear-all:active {
+ color: var(--sapLink_Active_Color);
+ text-decoration: var(--_ui5_link_active_text_decoration);
+}
\ No newline at end of file
diff --git a/packages/main/test/pages/Tokenizer-multi-line.html b/packages/main/test/pages/Tokenizer-multi-line.html
new file mode 100644
index 000000000000..b9a11f6f6638
--- /dev/null
+++ b/packages/main/test/pages/Tokenizer-multi-line.html
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+ Tokenizer
+
+
+
+
+
+
+
+
+
+
+
Multi Line
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi Line with long token
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi Line with long token and restricted height
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi Line with clear all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Multi Line with clear all
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file