Browse Source

Merge pull request #16049 from thingsboard/rc

Merge rc into master
pull/16060/head
Vladyslav Prykhodko 1 week ago
committed by GitHub
parent
commit
7f46e6a6a5
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 18
      msa/js-executor/yarn.lock
  2. 18
      msa/web-ui/yarn.lock
  3. 4
      ui-ngx/angular.json
  4. 43
      ui-ngx/package.json
  5. 0
      ui-ngx/patches/@angular+build+20.3.34.patch
  6. 4
      ui-ngx/patches/@angular+core+20.3.28.patch
  7. 2
      ui-ngx/src/app/modules/home/pages/mobile/common/editor-panel.component.html
  8. 53
      ui-ngx/src/app/modules/home/pages/mobile/common/editor-panel.component.ts
  9. 2
      ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html
  10. 13
      ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts
  11. 2
      ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.html
  12. 47
      ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts
  13. 34
      ui-ngx/src/app/shared/models/hugerte/hugerte.models.ts
  14. 7
      ui-ngx/src/app/shared/shared.module.ts
  15. 31
      ui-ngx/src/styles.scss
  16. 1217
      ui-ngx/yarn.lock

18
msa/js-executor/yarn.lock

@ -507,9 +507,9 @@ body-parser@^2.2.0:
type-is "^2.0.0"
brace-expansion@^1.1.7:
version "1.1.13"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6"
integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==
version "1.1.18"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.18.tgz#3ce74d89885136be1535341f8c3d4425c29a5cab"
integrity sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
@ -1108,9 +1108,9 @@ joi@^17.6.4:
"@sideway/pinpoint" "^2.0.0"
js-yaml@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
version "4.3.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.1.tgz#01216c001d67f48e2cd560d708c7af21090a3848"
integrity sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==
dependencies:
argparse "^2.0.1"
@ -1742,9 +1742,9 @@ tar-stream@^2.1.4:
readable-stream "^3.1.1"
tar@>=7.5.8, tar@^7.4.3:
version "7.5.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.11.tgz#1250fae45d98806b36d703b30973fa8e0a6d8868"
integrity sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==
version "7.5.22"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.22.tgz#a696f998136e71487dc3f869a85bba2c67971ba9"
integrity sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
chownr "^3.0.0"

18
msa/web-ui/yarn.lock

@ -379,9 +379,9 @@ body-parser@^2.2.0:
type-is "^2.0.0"
brace-expansion@^1.1.7:
version "1.1.13"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.13.tgz#d37875c01dc9eff988dd49d112a57cb67b54efe6"
integrity sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==
version "1.1.18"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.18.tgz#3ce74d89885136be1535341f8c3d4425c29a5cab"
integrity sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
@ -1018,9 +1018,9 @@ isarray@~1.0.0:
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
js-yaml@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.1.tgz#854c292467705b699476e1a2decc0c8a3458806b"
integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==
version "4.3.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.3.1.tgz#01216c001d67f48e2cd560d708c7af21090a3848"
integrity sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==
dependencies:
argparse "^2.0.1"
@ -1631,9 +1631,9 @@ tar-stream@^2.1.4:
readable-stream "^3.1.1"
tar@>=7.5.8, tar@^7.4.3:
version "7.5.11"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.11.tgz#1250fae45d98806b36d703b30973fa8e0a6d8868"
integrity sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==
version "7.5.22"
resolved "https://registry.yarnpkg.com/tar/-/tar-7.5.22.tgz#a696f998136e71487dc3f869a85bba2c67971ba9"
integrity sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==
dependencies:
"@isaacs/fs-minipass" "^4.0.0"
chownr "^3.0.0"

4
ui-ngx/angular.json

@ -74,8 +74,8 @@
},
{
"glob": "**/*",
"input": "node_modules/tinymce",
"output": "/assets/tinymce/"
"input": "node_modules/hugerte",
"output": "/assets/hugerte/"
},
{
"glob": "marker-icon-2x.png",

43
ui-ngx/package.json

@ -9,24 +9,25 @@
"build:types": "node generate-types.js",
"build:icon-metadata": "node generate-icon-metadata.js",
"lint": "ng lint",
"prepare": "patch-package"
"prepare": "patch-package --error-on-fail"
},
"private": true,
"dependencies": {
"@angular/animations": "20.3.25",
"@angular/animations": "20.3.28",
"@angular/cdk": "20.2.14",
"@angular/common": "20.3.25",
"@angular/compiler": "20.3.25",
"@angular/core": "20.3.25",
"@angular/forms": "20.3.25",
"@angular/common": "20.3.28",
"@angular/compiler": "20.3.28",
"@angular/core": "20.3.28",
"@angular/forms": "20.3.28",
"@angular/material": "20.2.14",
"@angular/platform-browser": "20.3.25",
"@angular/platform-browser-dynamic": "20.3.25",
"@angular/router": "20.3.25",
"@angular/platform-browser": "20.3.28",
"@angular/platform-browser-dynamic": "20.3.28",
"@angular/router": "20.3.28",
"@auth0/angular-jwt": "^5.2.0",
"@flowjs/flow.js": "^2.14.1",
"@flowjs/ngx-flow": "20.0.2",
"@geoman-io/leaflet-geoman-free": "2.19.3",
"@hugerte/hugerte-angular": "~1.1.1",
"@iplab/ngx-color-picker": "^20.0.0",
"@mat-datetimepicker/core": "~16.0.1",
"@mdi/svg": "^7.4.47",
@ -38,7 +39,6 @@
"@svgdotjs/svg.filter.js": "^3.0.9",
"@svgdotjs/svg.js": "3.2.4",
"@svgdotjs/svg.panzoom.js": "^2.1.2",
"@tinymce/tinymce-angular": "^8.0.1",
"ace-builds": "1.43.6",
"ace-diff": "^3.3.0",
"angular-gridster2": "~20.2.4",
@ -51,6 +51,7 @@
"flot.curvedlines": "https://github.com/MichaelZinsmaier/CurvedLines.git#master",
"font-awesome": "^4.7.0",
"html2canvas": "^1.4.1",
"hugerte": "~1.0.12",
"jquery": "^3.7.1",
"jquery.terminal": "^2.45.2",
"js-beautify": "1.15.4",
@ -87,7 +88,6 @@
"split.js": "^1.6.5",
"systemjs": "6.15.1",
"tinycolor2": "^1.6.0",
"tinymce": "~6.8.6",
"tooltipster": "^4.2.8",
"tslib": "^2.8.1",
"typeface-roboto": "^1.1.13",
@ -95,13 +95,13 @@
},
"devDependencies": {
"@angular-builders/custom-esbuild": "20.0.0",
"@angular-devkit/build-angular": "20.3.25",
"@angular-devkit/core": "20.3.25",
"@angular-devkit/schematics": "20.3.25",
"@angular/build": "20.3.25",
"@angular/cli": "20.3.25",
"@angular/compiler-cli": "20.3.25",
"@angular/language-service": "20.3.25",
"@angular-devkit/build-angular": "20.3.34",
"@angular-devkit/core": "20.3.34",
"@angular-devkit/schematics": "20.3.34",
"@angular/build": "20.3.34",
"@angular/cli": "20.3.34",
"@angular/compiler-cli": "20.3.28",
"@angular/language-service": "20.3.28",
"@types/ace-diff": "^2.1.4",
"@types/canvas-gauges": "^2.1.8",
"@types/flot": "^0.0.36",
@ -137,13 +137,10 @@
"typescript-eslint": "^8.54.0"
},
"resolutions": {
"ace-builds": "1.43.6",
"tinymce": "6.8.6",
"@babel/core": "7.28.3",
"@babel/core": "7.29.7",
"esbuild": "0.28.1",
"vite": "7.3.5",
"rollup": "4.59.0",
"jquery.terminal/**/form-data": ">=4.0.4",
"less": ">=4.9.0",
"js-beautify/**/minimatch": "^9.0.7"
}
}

0
ui-ngx/patches/@angular+build+20.3.25.patch → ui-ngx/patches/@angular+build+20.3.34.patch

4
ui-ngx/patches/@angular+core+20.3.25.patch → ui-ngx/patches/@angular+core+20.3.28.patch

@ -1,8 +1,8 @@
diff --git a/node_modules/@angular/core/fesm2022/debug_node.mjs b/node_modules/@angular/core/fesm2022/debug_node.mjs
index be43067..079f100 100755
index be00d4e..8d7ed1a 100755
--- a/node_modules/@angular/core/fesm2022/debug_node.mjs
+++ b/node_modules/@angular/core/fesm2022/debug_node.mjs
@@ -9599,13 +9599,13 @@ function findDirectiveDefMatches(tView, tNode) {
@@ -9488,13 +9488,13 @@ function findDirectiveDefMatches(tView, tNode) {
if (isNodeMatchingSelectorList(tNode, def.selectors, /* isProjectionMode */ false)) {
matches ??= [];
if (isComponentDef(def)) {

2
ui-ngx/src/app/modules/home/pages/mobile/common/editor-panel.component.html

@ -17,7 +17,7 @@
-->
<div class="tb-editor-panel">
<div class="tb-editor-title">{{ title | translate }}</div>
<editor class="tb-editor" [init]="tinyMceOptions" [formControl]="editorControl"></editor>
<editor class="tb-editor" [init]="hugeRteOptions" [formControl]="editorControl"></editor>
<div class="tb-editor-buttons">
<button mat-button
color="primary"

53
ui-ngx/src/app/modules/home/pages/mobile/common/editor-panel.component.ts

@ -17,7 +17,8 @@
import { Component, EventEmitter, Input, OnInit, Output, ViewEncapsulation } from '@angular/core';
import { FormBuilder, FormControl } from '@angular/forms';
import { TbPopoverComponent } from '@shared/components/popover.component';
import { EditorOptions } from 'tinymce';
import { EditorOptions } from 'hugerte';
import { defaultHugeRteOptions } from '@shared/models/hugerte/hugerte.models';
@Component({
selector: 'tb-release-notes-panel',
@ -45,53 +46,15 @@ export class EditorPanelComponent implements OnInit {
editorControl: FormControl<string>;
tinyMceOptions: Partial<EditorOptions> = {
base_url: '/assets/tinymce',
suffix: '.min',
hugeRteOptions: Partial<EditorOptions> = defaultHugeRteOptions({
plugins: ['link', 'table', 'image', 'lists', 'fullscreen'],
menubar: 'edit insert view format',
toolbar: ['fontfamily fontsize | bold italic underline strikethrough forecolor backcolor',
'alignleft aligncenter alignright alignjustify | bullist | link table image | fullscreen'],
toolbar_mode: 'sliding',
height: 400,
autofocus: false,
branding: false,
promotion: false,
resize: false,
setup: (editor) => {
editor.on('PostRender', function() {
const container = document.querySelector('.tox.tox-tinymce-aux');
const styleSheet = document.createElement('style');
styleSheet.innerText = `
.tox-tiered-menu .tox-menu {
width: fit-content;
max-width: min(80%, 440px);
@media screen and (max-width: 510px) {
max-width: calc(100% - 64px);
}
media screen and (min-width: 511px) and (max-width: 548px) {
max-width: calc(100% - 84px);
}
media screen and (min-width: 549px) and (max-width: 599px) {
max-width: calc(100% - 104px);
}
}
.tox-tiered-menu .tox-menu .tox-collection__item-label {
word-break: normal;
}
@media screen and (max-width: 890px) {
.tox-tiered-menu > .tox-collection--list:not(:first-child) {
left: auto !important;
right: 0 !important;
}
}
`;
container.prepend(styleSheet);
});
},
relative_urls: false,
urlconverter_callback: (url) => url
};
resize: false
});
constructor(private fb: FormBuilder) {
}
@ -100,9 +63,9 @@ export class EditorPanelComponent implements OnInit {
this.editorControl = this.fb.control(this.content);
if (this.disabled) {
this.editorControl.disable({emitEvent: false});
this.tinyMceOptions.toolbar = false;
this.tinyMceOptions.menubar = false;
this.tinyMceOptions.statusbar = false;
this.hugeRteOptions.toolbar = false;
this.hugeRteOptions.menubar = false;
this.hugeRteOptions.statusbar = false;
}
}

2
ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.component.html

@ -242,7 +242,7 @@
<div class="notification-content">
<div class="subject">{{ preview.processedTemplates.EMAIL.subject }}</div>
<mat-divider></mat-divider>
<editor [init]="tinyMceOptions" [initialValue]="preview.processedTemplates.EMAIL.body"></editor>
<editor [init]="hugeRteOptions" [initialValue]="preview.processedTemplates.EMAIL.body"></editor>
</div>
</section>
}

13
ui-ngx/src/app/modules/home/pages/notification/sent/sent-notification-dialog.componet.ts

@ -47,6 +47,8 @@ import { AuthUser } from '@shared/models/user.model';
import { getCurrentAuthUser } from '@core/auth/auth.selectors';
import { TranslateService } from '@ngx-translate/core';
import { Router } from '@angular/router';
import { EditorOptions } from 'hugerte';
import { defaultHugeRteOptions, HUGERTE_BODY_ID } from '@shared/models/hugerte/hugerte.models';
export interface RequestNotificationDialogData {
request?: NotificationRequest;
@ -78,9 +80,7 @@ export class SentNotificationDialogComponent extends
showRefresh = false;
tinyMceOptions: Record<string, any> = {
base_url: '/assets/tinymce',
suffix: '.min',
hugeRteOptions: Partial<EditorOptions> = defaultHugeRteOptions({
plugins: ['autoresize'],
menubar: false,
toolbar: false,
@ -88,19 +88,16 @@ export class SentNotificationDialogComponent extends
resize: false,
readonly: true,
height: 400,
autofocus: false,
branding: false,
promotion: false,
setup: (ed) => {
ed.on('PreInit', () => {
const document = $(ed.iframeElement.contentDocument);
const body = $('#tinymce', document);
const body = $(`#${HUGERTE_BODY_ID}`, document);
body.attr({contenteditable: false});
body.css('pointerEvents', 'none');
body.css('userSelect', 'none');
})
}
};
});
private authUser: AuthUser = getCurrentAuthUser(this.store);

2
ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.html

@ -194,7 +194,7 @@
[class.tb-error]="(interacted || templateConfigurationForm.get('EMAIL.body').touched) && templateConfigurationForm.get('EMAIL.body').hasError('required')"
translate>notification.message
</mat-label>
<editor [init]="tinyMceOptions" formControlName="body"></editor>
<editor [init]="hugeRteOptions" formControlName="body"></editor>
@if ((interacted || templateConfigurationForm.get('EMAIL.body').touched) && templateConfigurationForm.get('EMAIL.body').hasError('required')) {
<mat-error class="tb-mat-error">{{ 'notification.message-required' | translate }}</mat-error>
}

47
ui-ngx/src/app/modules/home/pages/notification/template/configuration/notification-template-configuration.component.ts

@ -37,7 +37,8 @@ import { Subject } from 'rxjs';
import { deepClone, isDefinedAndNotNull } from '@core/utils';
import { coerceBoolean } from '@shared/decorators/coercion';
import { TranslateService } from '@ngx-translate/core';
import { EditorOptions } from 'tinymce';
import { EditorOptions } from 'hugerte';
import { defaultHugeRteOptions } from '@shared/models/hugerte/hugerte.models';
@Component({
selector: 'tb-template-configuration',
@ -83,53 +84,15 @@ export class NotificationTemplateConfigurationComponent implements OnDestroy, Co
readonly NotificationDeliveryMethod = NotificationDeliveryMethod;
readonly NotificationTemplateTypeTranslateMap = NotificationTemplateTypeTranslateMap;
tinyMceOptions: Partial<EditorOptions> = {
base_url: '/assets/tinymce',
suffix: '.min',
hugeRteOptions: Partial<EditorOptions> = defaultHugeRteOptions({
plugins: ['link', 'table', 'image', 'lists', 'code', 'fullscreen'],
menubar: 'edit insert tools view format table',
toolbar: 'undo redo | fontfamily fontsize blocks | bold italic strikethrough | forecolor backcolor ' +
'| link table image | alignleft aligncenter alignright alignjustify ' +
'| numlist bullist | outdent indent | removeformat | code | fullscreen',
toolbar_mode: 'sliding',
height: 400,
autofocus: false,
branding: false,
promotion: false,
setup: (editor) => {
editor.on('PostRender', function() {
const container = document.querySelector('.tox.tox-tinymce-aux');
const styleSheet = document.createElement('style');
styleSheet.innerText = `
.tox-tiered-menu .tox-menu {
width: fit-content;
max-width: min(80%, 440px);
@media screen and (max-width: 510px) {
max-width: calc(100% - 64px);
}
media screen and (min-width: 511px) and (max-width: 548px) {
max-width: calc(100% - 84px);
}
media screen and (min-width: 549px) and (max-width: 599px) {
max-width: calc(100% - 104px);
}
}
.tox-tiered-menu .tox-menu .tox-collection__item-label {
word-break: normal;
}
@media screen and (max-width: 890px) {
.tox-tiered-menu > .tox-collection--list:not(:first-child) {
left: auto !important;
right: 0 !important;
}
}
`;
container.prepend(styleSheet);
});
},
relative_urls: false,
urlconverter_callback: (url) => url
};
height: 400
});
private propagateChange = null;
private readonly destroy$ = new Subject<void>();

34
ui-ngx/src/app/shared/models/hugerte/hugerte.models.ts

@ -0,0 +1,34 @@
///
/// Copyright © 2016-2026 The Thingsboard Authors
///
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///
/// http://www.apache.org/licenses/LICENSE-2.0
///
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
///
import { EditorOptions } from 'hugerte';
export const HUGERTE_ASSETS_PATH = 'assets/hugerte';
export const HUGERTE_BODY_ID = 'hugerte';
export function defaultHugeRteOptions(overrides: Partial<EditorOptions>): Partial<EditorOptions> {
return {
base_url: '/' + HUGERTE_ASSETS_PATH,
suffix: '.min',
body_id: HUGERTE_BODY_ID,
autofocus: false,
branding: false,
relative_urls: false,
urlconverter_callback: (url) => url,
...overrides
};
}

7
ui-ngx/src/app/shared/shared.module.ts

@ -64,7 +64,8 @@ import { ShareButtonDirective } from 'ngx-sharebuttons';
import { HotkeyModule } from 'angular2-hotkeys';
import { ColorPickerModule } from '@iplab/ngx-color-picker';
import { NgxHmCarouselComponent, NgxHmCarouselDynamicDirective, NgxHmCarouselItemDirective } from 'ngx-hm-carousel';
import { EditorModule, TINYMCE_SCRIPT_SRC } from '@tinymce/tinymce-angular';
import { EditorModule, HUGERTE_SCRIPT_SRC } from '@hugerte/hugerte-angular';
import { HUGERTE_ASSETS_PATH } from '@shared/models/hugerte/hugerte.models';
import { UserMenuComponent } from '@shared/components/user-menu.component';
import { TruncateWithTooltipDirective } from '@shared/directives/truncate-with-tooltip.directive';
import { ContextMenuDirective } from '@shared/directives/context-menu.directive';
@ -272,8 +273,8 @@ export function MarkedOptionsFactory(markedOptionsService: MarkedOptionsService)
useValue: Flow
},
{
provide: TINYMCE_SCRIPT_SRC,
useValue: 'assets/tinymce/tinymce.min.js'
provide: HUGERTE_SCRIPT_SRC,
useValue: `${HUGERTE_ASSETS_PATH}/hugerte.min.js`
},
{
provide: MAT_DATE_LOCALE,

31
ui-ngx/src/styles.scss

@ -1272,14 +1272,41 @@ pre.tb-highlight {
white-space: pre-line;
}
// TinyMCE
// HugeRTE
.tox-tinymce {
.tox-hugerte {
button:not(.mat-mdc-menu-item):not(.mat-sort-header-button) {
text-transform: none;
}
}
.tox-tiered-menu {
.tox-menu {
width: fit-content;
max-width: min(80%, 440px);
@media screen and (max-width: 510px) {
max-width: calc(100% - 64px);
}
@media screen and (min-width: 511px) and (max-width: 548px) {
max-width: calc(100% - 84px);
}
@media screen and (min-width: 549px) and (max-width: 599px) {
max-width: calc(100% - 104px);
}
.tox-collection__item-label {
word-break: normal;
}
}
> .tox-collection--list:not(:first-child) {
@media screen and (max-width: 890px) {
left: auto !important;
right: 0 !important;
}
}
}
.tb-toast-panel {
pointer-events: none !important;
}

1217
ui-ngx/yarn.lock

File diff suppressed because it is too large
Loading…
Cancel
Save