@eclipse-scout/core 22.0.1 → 22.0.11

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.
Files changed (156) hide show
  1. package/dist/eclipse-scout-core-e5e8740e3649f5b9f279.min.js +2 -0
  2. package/dist/eclipse-scout-core-e5e8740e3649f5b9f279.min.js.map +1 -0
  3. package/dist/eclipse-scout-core-theme-74b63e0d57bed407a729.min.css +1 -0
  4. package/dist/eclipse-scout-core-theme-dark-b82aea152f416e38ce7f.min.css +1 -0
  5. package/dist/eclipse-scout-core-theme-dark.css +517 -361
  6. package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
  7. package/dist/eclipse-scout-core-theme.css +300 -144
  8. package/dist/eclipse-scout-core-theme.css.map +1 -1
  9. package/dist/eclipse-scout-core.js +1150 -766
  10. package/dist/eclipse-scout-core.js.map +1 -1
  11. package/dist/file-list +7 -0
  12. package/dist/locales.json +47126 -0
  13. package/dist/texts.json +1153 -0
  14. package/package.json +2 -2
  15. package/src/ErrorHandler.js +66 -28
  16. package/src/{table/TableHeaderMenuButtonKeyStroke.js → action/ActionExecKeyStroke.js} +4 -5
  17. package/src/action/Button.less +1 -0
  18. package/src/box/Box.less +10 -6
  19. package/src/breadcrumbbar/BreadcrumbItem.less +3 -6
  20. package/src/calendar/Calendar.js +40 -58
  21. package/src/calendar/Calendar.less +10 -10
  22. package/src/calendar/CalendarLayout.js +3 -1
  23. package/src/checkbox/CheckBox.less +3 -1
  24. package/src/datepicker/DatePicker.less +1 -0
  25. package/src/datepicker/DatePickerTouchPopup.js +8 -0
  26. package/src/desktop/DisableBrowserF5ReloadKeyStroke.js +1 -0
  27. package/src/desktop/bench/DesktopTabSelectKeyStroke.js +2 -1
  28. package/src/desktop/desktoptab/DesktopTab.less +5 -2
  29. package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
  30. package/src/desktop/desktoptab/DisableBrowserTabSwitchingKeyStroke.js +1 -0
  31. package/src/desktop/navigation/DesktopNavigation.less +4 -0
  32. package/src/desktop/navigation/EnlargeNavigationKeyStroke.js +1 -0
  33. package/src/desktop/navigation/ShrinkNavigationKeyStroke.js +1 -0
  34. package/src/desktop/notification/DesktopNotification.js +11 -4
  35. package/src/desktop/notification/DesktopNotification.less +5 -3
  36. package/src/desktop/outline/Outline.less +4 -4
  37. package/src/desktop/viewbutton/ViewButton.less +13 -9
  38. package/src/desktop/viewbutton/ViewMenuPopupEnterKeyStroke.js +2 -1
  39. package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
  40. package/src/filechooser/FileChooser.js +1 -1
  41. package/src/filechooser/FileChooser.less +16 -11
  42. package/src/focus/FocusContext.js +11 -8
  43. package/src/focus/FocusManager.js +24 -5
  44. package/src/form/Form.less +1 -0
  45. package/src/form/fields/LookupBox.js +5 -2
  46. package/src/form/fields/LookupBox.less +28 -2
  47. package/src/form/fields/TextFieldIcon.less +2 -2
  48. package/src/form/fields/ValueField.js +11 -2
  49. package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +20 -0
  50. package/src/form/fields/button/ButtonKeyStroke.js +0 -3
  51. package/src/form/fields/datefield/DateField.js +31 -47
  52. package/src/form/fields/filechooserfield/FileChooserFieldBrowseKeyStroke.js +1 -3
  53. package/src/form/fields/filechooserfield/FileChooserFieldDeleteKeyStroke.js +1 -3
  54. package/src/form/fields/groupbox/GroupBox.js +14 -9
  55. package/src/form/fields/groupbox/GroupBox.less +1 -0
  56. package/src/form/fields/htmlfield/HtmlField.less +0 -1
  57. package/src/form/fields/listbox/ListBox.js +13 -7
  58. package/src/form/fields/lookupfield/lookupField.js +6 -5
  59. package/src/form/fields/smartfield/ProposalField.js +2 -1
  60. package/src/form/fields/smartfield/ProposalTreeNode.js +4 -8
  61. package/src/form/fields/smartfield/SmartField.js +4 -20
  62. package/src/form/fields/smartfield/SmartField.less +24 -11
  63. package/src/form/fields/splitbox/SplitBoxCollapseKeyStroke.js +1 -0
  64. package/src/form/fields/splitbox/SplitBoxFirstCollapseKeyStroke.js +1 -0
  65. package/src/form/fields/splitbox/SplitBoxSecondCollapseKeyStroke.js +1 -0
  66. package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
  67. package/src/form/fields/tabbox/TabAreaLeftKeyStroke.js +2 -0
  68. package/src/form/fields/tabbox/TabAreaRightKeyStroke.js +2 -0
  69. package/src/form/fields/tabbox/TabBox.js +8 -7
  70. package/src/form/fields/tabbox/TabBox.less +2 -1
  71. package/src/form/fields/tabbox/TabBoxHeader.js +4 -0
  72. package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
  73. package/src/form/fields/tabbox/TabItem.js +4 -0
  74. package/src/form/fields/treebox/TreeBox.js +6 -5
  75. package/src/glasspane/GlassPane.js +3 -3
  76. package/src/group/Group.less +1 -1
  77. package/src/index.js +1 -1
  78. package/src/index.less +1 -0
  79. package/src/jquery/jquery-scout.js +17 -4
  80. package/src/keystroke/CloseKeyStroke.js +1 -0
  81. package/src/keystroke/ContextMenuKeyStroke.js +1 -0
  82. package/src/keystroke/FocusFilterFieldKeyStroke.js +1 -0
  83. package/src/keystroke/KeyStroke.js +11 -3
  84. package/src/keystroke/TabItemKeyStroke.js +8 -5
  85. package/src/logging/logging.js +16 -8
  86. package/src/login/LoginBox.js +3 -2
  87. package/src/login/LoginBox.less +18 -1
  88. package/src/menu/ContextMenuPopup.less +9 -2
  89. package/src/menu/Menu.less +1 -0
  90. package/src/menu/MenuExecKeyStroke.js +3 -17
  91. package/src/menu/MenuNavigationKeyStroke.js +1 -0
  92. package/src/menu/menubar/MenuBarLeftKeyStroke.js +2 -0
  93. package/src/menu/menubar/MenuBarRightKeyStroke.js +2 -0
  94. package/src/messagebox/MessageBox.less +17 -17
  95. package/src/modeselector/Mode.less +15 -37
  96. package/src/modeselector/ModeSelector.js +1 -1
  97. package/src/modeselector/ModeSelector.less +2 -1
  98. package/src/planner/Planner.js +2 -0
  99. package/src/planner/PlannerHeader.less +2 -1
  100. package/src/popup/Popup.js +24 -8
  101. package/src/popup/PopupLayout.js +2 -8
  102. package/src/scrollbar/Scrollbar.less +8 -1
  103. package/src/scrollbar/scrollbars.js +26 -4
  104. package/src/session/Session.js +8 -5
  105. package/src/style/colors-dark.less +17 -10
  106. package/src/style/colors.less +11 -3
  107. package/src/style/fonts.less +10 -1
  108. package/src/style/mixins.less +16 -12
  109. package/src/style/sizes-dark.less +4 -1
  110. package/src/style/sizes.less +17 -9
  111. package/src/table/Table.js +62 -48
  112. package/src/table/Table.less +50 -20
  113. package/src/table/TableAdapter.js +9 -12
  114. package/src/table/TableHeader.js +10 -8
  115. package/src/table/TableHeader.less +1 -0
  116. package/src/table/TableHeaderMenu.js +3 -1
  117. package/src/table/TableHeaderMenu.less +7 -2
  118. package/src/table/TableHeaderMenuButton.js +2 -2
  119. package/src/table/TableLayout.js +6 -0
  120. package/src/table/columns/BooleanColumn.js +2 -2
  121. package/src/table/columns/Column.js +10 -7
  122. package/src/table/editor/CellEditorPopup.js +29 -15
  123. package/src/table/keystrokes/AbstractTableNavigationKeyStroke.js +1 -0
  124. package/src/table/keystrokes/TableCopyKeyStroke.js +1 -0
  125. package/src/table/keystrokes/TableNavigationCollapseKeyStroke.js +2 -2
  126. package/src/table/keystrokes/TableNavigationEndKeyStroke.js +2 -2
  127. package/src/table/keystrokes/TableNavigationExpandKeyStroke.js +2 -2
  128. package/src/table/keystrokes/TableNavigationHomeKeyStroke.js +2 -2
  129. package/src/table/keystrokes/TableNavigationPageDownKeyStroke.js +2 -2
  130. package/src/table/keystrokes/TableNavigationPageUpKeyStroke.js +2 -2
  131. package/src/table/keystrokes/TableNavigationUpKeyStroke.js +2 -2
  132. package/src/table/keystrokes/TableRefreshKeyStroke.js +2 -2
  133. package/src/table/keystrokes/TableSelectAllKeyStroke.js +3 -2
  134. package/src/table/keystrokes/TableStartCellEditKeyStroke.js +2 -2
  135. package/src/testing/index.js +1 -0
  136. package/src/testing/lookup/AbortableMicrotaskStaticLookupCall.js +50 -0
  137. package/src/tile/TileGrid.js +10 -12
  138. package/src/tile/TileGridLayout.js +2 -2
  139. package/src/tile/accordion/TileAccordion.js +16 -1
  140. package/src/tile/fields/FormFieldTile.less +18 -11
  141. package/src/tile/fields/tablefield/TileTableField.less +19 -2
  142. package/src/tile/keystrokes/TileGridSelectKeyStroke.js +3 -2
  143. package/src/timepicker/TimePickerTouchPopup.js +8 -0
  144. package/src/tree/CompactTree.less +1 -1
  145. package/src/tree/Tree.js +4 -4
  146. package/src/tree/Tree.less +13 -5
  147. package/src/tree/keystrokes/AbstractTreeNavigationKeyStroke.js +1 -0
  148. package/src/tree/keystrokes/TreeCollapseAllKeyStroke.js +2 -2
  149. package/src/tree/keystrokes/TreeExpandOrDrillDownKeyStroke.js +2 -2
  150. package/src/tree/keystrokes/TreeNavigationDownKeyStroke.js +2 -2
  151. package/src/tree/keystrokes/TreeNavigationEndKeyStroke.js +2 -2
  152. package/src/tree/keystrokes/TreeNavigationUpKeyStroke.js +2 -2
  153. package/src/util/Device.js +4 -4
  154. package/src/util/arrays.js +44 -2
  155. package/src/util/objects.js +4 -1
  156. package/src/widget/Widget.js +17 -7
@@ -1533,6 +1533,8 @@ export default class Planner extends Widget {
1533
1533
  this._renderViewRange();
1534
1534
  this._rerenderActivities();
1535
1535
  this._renderSelectedActivity();
1536
+ this.validateLayoutTree(); // Layouting is required for adjusting the scroll position
1537
+ this._reconcileScrollPos();
1536
1538
  }
1537
1539
  }
1538
1540
 
@@ -97,7 +97,8 @@
97
97
  }
98
98
 
99
99
  .planner-mode {
100
- width: 65px;
100
+ padding: 0 8px;
101
+ min-width: 65px;
101
102
  text-align: center;
102
103
  border-top: 1px solid @control-border-color;
103
104
  border-bottom: 1px solid @control-border-color;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {CloseKeyStroke, DialogLayout, Dimension, Event, FocusRule, GlassPaneRenderer, graphics, HtmlComponent, Insets, KeyStrokeContext, Point, PopupLayout, Rectangle, scout, scrollbars, strings, Widget} from '../index';
11
+ import {CloseKeyStroke, DialogLayout, Dimension, Event, FocusRule, GlassPaneRenderer, graphics, HtmlComponent, Insets, KeyStrokeContext, Point, PopupLayout, Rectangle, scout, scrollbars, strings, Widget, widgets} from '../index';
12
12
  import $ from 'jquery';
13
13
 
14
14
  export default class Popup extends Widget {
@@ -185,18 +185,17 @@ export default class Popup extends Widget {
185
185
 
186
186
  _openWithoutParent() {
187
187
  // resolve parent for entry-point (don't change the actual property)
188
- let parent = this.parent;
189
- if (parent.destroyed) {
188
+ if (this.parent.destroyed) {
190
189
  return;
191
190
  }
192
- if (parent.rendered || parent.rendering) {
193
- this.open(parent.entryPoint());
191
+ if (this.parent.rendered || this.parent.rendering) {
192
+ this.open(this._getDefaultOpen$Parent());
194
193
  return;
195
194
  }
196
195
 
197
196
  // This is important for popups rendered in another (native) browser window. The DOM in the popup window
198
197
  // is rendered later, so we must wait until that window is rendered and layouted. See popup-window.html.
199
- parent.one('render', () => {
198
+ this.parent.one('render', () => {
200
199
  this.session.layoutValidator.schedulePostValidateFunction(() => {
201
200
  if (this.destroyed || this.rendered) {
202
201
  return;
@@ -206,6 +205,14 @@ export default class Popup extends Widget {
206
205
  });
207
206
  }
208
207
 
208
+ /**
209
+ * Only called if parent.rendered or parent.rendering
210
+ * @return {$}
211
+ */
212
+ _getDefaultOpen$Parent() {
213
+ return this.parent.entryPoint();
214
+ }
215
+
209
216
  open($parent) {
210
217
  if (!$parent) {
211
218
  this._openWithoutParent();
@@ -442,6 +449,15 @@ export default class Popup extends Widget {
442
449
  return cssClass;
443
450
  }
444
451
 
452
+ _animateRemovalWhileRemovingParent() {
453
+ if (!this.$anchor) {
454
+ // Allow remove animations for popups without an anchor
455
+ return true;
456
+ }
457
+ // If parent is the anchor, prevent remove animation to ensure popup will be removed together with the anchor
458
+ return widgets.get(this.$anchor) !== this.parent;
459
+ }
460
+
445
461
  _isRemovalPrevented() {
446
462
  // If removal of a parent is pending due to an animation then don't return true to make sure popups are closed before the parent animation starts.
447
463
  // However, if the popup itself is removed by an animation, removal should be prevented to ensure remove() won't run multiple times.
@@ -1037,7 +1053,7 @@ export default class Popup extends Widget {
1037
1053
 
1038
1054
  _handleGlassPanes() {
1039
1055
  let parentCoveredByGlassPane = this.session.focusManager.isElementCovertByGlassPane(this.parent.$container);
1040
- // if a popup is covered by a glass pane the glass pane's need to be rerendered to ensure a glass pane is also painted over the popup
1056
+ // if a popup is covered by a glass pane the glass pane's need to be re-rendered to ensure a glass pane is also painted over the popup
1041
1057
  if (parentCoveredByGlassPane) {
1042
1058
  this.session.focusManager.rerenderGlassPanes();
1043
1059
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2014-2020 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -135,9 +135,6 @@ export default class PopupLayout extends AbstractLayout {
135
135
  * @returns {Dimension}
136
136
  */
137
137
  _calcMaxSize() {
138
- // Position the popup at the desired location before doing any calculations to consider the preferred bounds
139
- this._position(false);
140
-
141
138
  let maxWidth, maxHeight,
142
139
  htmlComp = this.popup.htmlComp,
143
140
  windowPaddingX = this.popup.windowPaddingX,
@@ -159,7 +156,7 @@ export default class PopupLayout extends AbstractLayout {
159
156
  horizontalAlignment = this.popup.horizontalAlignment,
160
157
  verticalAlignment = this.popup.verticalAlignment;
161
158
 
162
- // Decide whether the prefSize can be used or the popup needs to be shrinked so that it fits into the viewport
159
+ // Decide whether the prefSize can be used or the popup needs to be shrunken so that it fits into the viewport
163
160
  // The decision is based on the preferred opening direction
164
161
  // Example: The popup would like to be opened leftedge and bottom
165
162
  // If there is enough space on the right and on the bottom -> pref size is used
@@ -219,9 +216,6 @@ export default class PopupLayout extends AbstractLayout {
219
216
  * @returns {Insets}
220
217
  */
221
218
  _calcMaxSizeAroundAnchor() {
222
- // Position the popup at the desired location before doing any calculations because positioning adds CSS classes which might change margins
223
- this._position(false);
224
-
225
219
  let maxWidthLeft, maxWidthRight, maxHeightDown, maxHeightUp,
226
220
  htmlComp = this.popup.htmlComp,
227
221
  windowPaddingX = this.popup.windowPaddingX,
@@ -133,7 +133,7 @@
133
133
  transition: box-shadow 250ms;
134
134
  position: absolute;
135
135
  pointer-events: none;
136
- z-index: 1; // ensure shadow layout over elements having a z-index
136
+ z-index: 1; // ensure shadow lays over elements having a z-index
137
137
 
138
138
  #scout.scroll-shadow();
139
139
 
@@ -157,6 +157,13 @@
157
157
  --scroll-shadow-size: @scroll-shadow-size;
158
158
  --scroll-shadow-blur: @scroll-shadow-blur;
159
159
  --scroll-shadow-spread: @scroll-shadow-spread;
160
+
161
+ // Allow a widget to adjust the size of the shadow container
162
+ --scroll-shadow-inset-top: 0;
163
+ --scroll-shadow-inset-right: 0;
164
+ --scroll-shadow-inset-bottom: 0;
165
+ --scroll-shadow-inset-left: 0;
166
+
160
167
  @scroll-shadow-blur-spread-color: var(--scroll-shadow-blur) calc(-1 * var(--scroll-shadow-spread)) var(--scroll-shadow-color);
161
168
  @scroll-shadow-top: inset 0 var(--scroll-shadow-size) @scroll-shadow-blur-spread-color;
162
169
  @scroll-shadow-bottom: inset 0 calc(-1 * var(--scroll-shadow-size)) @scroll-shadow-blur-spread-color;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -8,7 +8,7 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {arrays, Device, graphics, HtmlComponent, objects, scout} from '../index';
11
+ import {arrays, Device, graphics, HtmlComponent, Insets, objects, scout} from '../index';
12
12
  import $ from 'jquery';
13
13
 
14
14
  /**
@@ -159,6 +159,17 @@ export function installScrollShadow($container, session, options) {
159
159
  _installMutationObserver(session);
160
160
  _installIntersectionObserver();
161
161
  intersectionObserver.observe($container[0]);
162
+
163
+ // this is required in addition to the intersection observer because the observer events are handled asynchronously later after all the setTimeout calls.
164
+ // Then the shadow might stay visible too long which has an impact on layout updates.
165
+ let containerElement = $container[0];
166
+ let visibleListener = e => {
167
+ if (e.target === containerElement) {
168
+ _onScrollableVisibleChange(containerElement, e.type === 'show');
169
+ }
170
+ };
171
+ $container.data('scroll-shadow-visible-listener', visibleListener);
172
+ $container.on('hide show', visibleListener);
162
173
  }
163
174
 
164
175
  export function uninstallScrollShadow($container, session) {
@@ -177,6 +188,10 @@ export function uninstallScrollShadow($container, session) {
177
188
  if (intersectionObserver) {
178
189
  intersectionObserver.unobserve($container[0]);
179
190
  }
191
+ let visibleListener = $container.data('scroll-shadow-visible-listener');
192
+ if (visibleListener) {
193
+ $container.off('hide show', visibleListener);
194
+ }
180
195
  let $scrollables = _$scrollables[session];
181
196
  if (!$scrollables || !$scrollables.some($scrollable => $scrollable.data('scroll-shadow'))) {
182
197
  _uninstallMutationObserver();
@@ -237,7 +252,7 @@ export function updateScrollShadow($container) {
237
252
  $shadow.toggleClass('bottom', !atBottom && style.indexOf('bottom') > -1);
238
253
  $shadow.toggleClass('left', !atLeft && style.indexOf('left') > -1);
239
254
  $shadow.toggleClass('right', !atRight && style.indexOf('right') > -1);
240
- graphics.setBounds($shadow, graphics.bounds($container, {exact: true}));
255
+ graphics.setBounds($shadow, graphics.bounds($container, {exact: true}).subtract(insets($shadow)));
241
256
  graphics.setMargins($shadow, graphics.margins($container));
242
257
  $shadow.css('border-radius', $container.css('border-radius'));
243
258
 
@@ -253,6 +268,13 @@ export function updateScrollShadow($container) {
253
268
  function atEnd(scrollPos, scrollSize, offsetSize) {
254
269
  return scrollPos + 1 >= scrollSize - offsetSize;
255
270
  }
271
+
272
+ function insets($shadow) {
273
+ return new Insets($shadow.cssPxValue('--scroll-shadow-inset-top'),
274
+ $shadow.cssPxValue('--scroll-shadow-inset-right'),
275
+ $shadow.cssPxValue('--scroll-shadow-inset-bottom'),
276
+ $shadow.cssPxValue('--scroll-shadow-inset-left'));
277
+ }
256
278
  }
257
279
 
258
280
  /**
@@ -726,7 +748,7 @@ export function scrollToBottom($scrollable, options) {
726
748
  /**
727
749
  * @param location object with x and y properties
728
750
  * @param $scrollables one or more scrollables to check against
729
- * @eturns {boolean} true if the location is visible in the current viewport of all the $scrollables, or if $scrollables is null
751
+ * @returns {boolean} true if the location is visible in the current viewport of all the $scrollables, or if $scrollables is null
730
752
  */
731
753
  export function isLocationInView(location, $scrollables) {
732
754
  if (!$scrollables || $scrollables.length === 0) {
@@ -8,7 +8,7 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {AjaxCall, App, arrays, BackgroundJobPollingStatus, BackgroundJobPollingSupport, Device, EventSupport, FileInput, files as fileUtil, FocusManager, fonts, icons, LayoutValidator, Locale, MessageBox, ModelAdapter, NullWidget, ObjectFactory, objects, Reconnector, RemoteEvent, ResponseQueue, scout, Status, strings, TextMap, texts, TypeDescriptor, URL, UserAgent, webstorage} from '../index';
11
+ import {AjaxCall, App, arrays, BackgroundJobPollingStatus, BackgroundJobPollingSupport, Device, EventSupport, FileInput, files as fileUtil, FocusManager, fonts, icons, LayoutValidator, Locale, logging, MessageBox, ModelAdapter, NullWidget, ObjectFactory, objects, Reconnector, RemoteEvent, ResponseQueue, scout, Status, strings, TextMap, texts, TypeDescriptor, URL, UserAgent, webstorage} from '../index';
12
12
  import $ from 'jquery';
13
13
 
14
14
  export default class Session {
@@ -1364,13 +1364,16 @@ export default class Session {
1364
1364
  }
1365
1365
 
1366
1366
  /**
1367
- * Sends a request containing the error message for logging purpose.
1368
- * The request is sent immediately (does not await pending requests)
1367
+ * Sends a request containing the log message for logging purpose.
1368
+ * The request is sent immediately (does not await pending requests).
1369
+ * @param {string} message the log message
1370
+ * @param {logging.Level} [level] the log level used to log the message. Default is {@link logging.Level.ERROR}.
1369
1371
  */
1370
- sendLogRequest(message) {
1372
+ sendLogRequest(message, level) {
1371
1373
  let request = this._newRequest({
1372
1374
  log: true,
1373
- message: message
1375
+ message: message,
1376
+ level: scout.nvl(level, logging.Level.ERROR)
1374
1377
  });
1375
1378
  if (this.currentEvent) {
1376
1379
  request.event = {
@@ -19,13 +19,13 @@
19
19
  @palette-gray-3: #BFC2C3;
20
20
  @palette-gray-4: #A7ACAD;
21
21
  @palette-gray-5: #7E8588;
22
- @palette-gray-5-1: #445155;
23
- @palette-gray-6: #344146;
24
- @palette-gray-6-1: #283438;
25
- @palette-gray-7: #252e31;
26
- @palette-gray-8: #1F272B;
27
- @palette-gray-9: #181C1F;
28
- @palette-gray-10: #0C1013;
22
+ @palette-gray-5-1: #4B595E;
23
+ @palette-gray-6: #3B494F;
24
+ @palette-gray-6-1: #2E3C41;
25
+ @palette-gray-7: #2C363A;
26
+ @palette-gray-8: #252F34;
27
+ @palette-gray-9: #1F2428;
28
+ @palette-gray-10: #0E1316;
29
29
 
30
30
  @fade-white-0: fade(@palette-white, 25%);
31
31
  @fade-white-1: fade(@palette-white, 18%);
@@ -136,9 +136,11 @@
136
136
  @carousel-current-item-color: @palette-gray-1;
137
137
  @check-box-border-color: @palette-gray-5;
138
138
  @mode-color: @text-color;
139
- @mode-alternative-background-color: @palette-gray-10;
139
+ @mode-alternative-background-color: fade(@palette-black, 60%);
140
140
  @mode-alternative-selected-background-color: @palette-gray-7;
141
141
  @mode-alternative-selected-background-disabled-color: @palette-gray-8;
142
+ @mode-alternative-hover-background-color: @palette-gray-9;
143
+ @mode-alternative-active-background-color: @palette-gray-6;
142
144
  @closer-action-color: @text-color;
143
145
  @closer-color: @palette-gray-3;
144
146
  @closer-hover-color: @text-color;
@@ -157,13 +159,15 @@
157
159
  @date-picker-separator-color: @palette-gray-4;
158
160
  @date-picker-day-preselected-background-color: fade(@palette-white, 8%);
159
161
  @dashboard-tile-border-color: @border-color;
160
- @dashboard-tile-alternative-selected-border-color: @dashboard-tile-selected-border-color;
161
- @dashboard-tile-default-selected-border-color: @dashboard-tile-selected-border-color;
162
+ @dashboard-tile-default-inverted-selected-border-color: @item-selection-border-color;
163
+ @dashboard-tile-alternative-selected-border-color: @dashboard-tile-default-selected-border-color;
164
+ @dashboard-tile-alternative-inverted-selected-border-color: @item-selection-border-color;
162
165
  @desktop-bench-drop-shadow-color: fade(@palette-black, 35%);
163
166
  @desktop-header-background-color: @palette-gray-10;
164
167
  @desktop-header-border-color: @palette-gray-8;
165
168
  @desktop-header-color: @title-color;
166
169
  @desktop-logo-background-color: transparent;
170
+ @desktop-tab-border-color: @border-color;
167
171
  @desktop-tab-closer-hover-background-color: @hover-background-color;
168
172
  @desktop-tab-closer-active-background-color: @active-background-color;
169
173
  @desktop-tab-status-color: @save-needer-color;
@@ -186,6 +190,7 @@
186
190
  @planner-large-scale-item-line-color: fade(@palette-white, 20%);
187
191
  @planner-resource-title-color: @text-color;
188
192
  @planner-small-scale-item-line-color: fade(@palette-white, 7%);
193
+ @scroll-shadow-alpha: 0;
189
194
  @scrollbar-thumb-main-color: @palette-white;
190
195
  @scrollbar-thumb-color: fade(@scrollbar-thumb-main-color, 20%);
191
196
  @scrollbar-thumb-hover-color: fade(@scrollbar-thumb-main-color, 30%);
@@ -242,6 +247,8 @@
242
247
  @tile-default-inverted-link-hover-color: @link-hover-color;
243
248
  @tile-default-inverted-status-hover-background-color: @hover-background-color;
244
249
  @tile-default-inverted-status-active-background-color: @active-background-color;
250
+ @tile-default-inverted-error-status-color: @status-error-color;
251
+ @tile-default-inverted-error-status-hover-color: @status-error-hover-color;
245
252
  @tile-default-label-color: @text-color-1;
246
253
  @tile-default-link-active-color: @link-active-color;
247
254
  @tile-table-default-inverted-selection-background-color: @item-selection-background-color;
@@ -227,9 +227,12 @@
227
227
  @context-menu-item-color: @text-color;
228
228
  @context-menu-item-icon-color: @link-color;
229
229
  @dashboard-tile-border-color: darken(@palette-gray-3, 5%);
230
- @dashboard-tile-selected-border-color: @item-selection-border-color;
230
+ @dashboard-tile-default-inverted-background-color: mix(@tile-default-inverted-background-color, @tile-default-inverted-selection-background-color, 65%);
231
+ @dashboard-tile-alternative-inverted-background-color: mix(@tile-alternative-inverted-background-color, @tile-alternative-inverted-selection-background-color, 65%);
232
+ @dashboard-tile-default-selected-border-color: @item-selection-border-color;
233
+ @dashboard-tile-default-inverted-selected-border-color: @dashboard-tile-default-inverted-background-color;
231
234
  @dashboard-tile-alternative-selected-border-color: @tile-alternative-inverted-background-color;
232
- @dashboard-tile-default-selected-border-color: @tile-default-inverted-background-color;
235
+ @dashboard-tile-alternative-inverted-selected-border-color: @dashboard-tile-alternative-inverted-background-color;
233
236
  @date-picker-day-hover-background-color: @hover-background-color;
234
237
  @date-picker-day-selected-color: @selected-color;
235
238
  @date-picker-day-selected-background-color: @selected-background-color;
@@ -266,6 +269,7 @@
266
269
  @desktop-header-background-color: @accent-color-3;
267
270
  @desktop-header-border-color: @border-color;
268
271
  @desktop-tab-background-color: fade(@palette-black, 10%);
272
+ @desktop-tab-border-color: transparent;
269
273
  @desktop-tab-flash-background-color: fade(@palette-black, 40%);
270
274
  @desktop-tab-closer-hover-background-color: fade(@palette-black, 14%);
271
275
  @desktop-tab-closer-active-background-color: fade(@palette-black, 20%);
@@ -298,6 +302,8 @@
298
302
  @mode-alternative-selected-background-color: @palette-white;
299
303
  @mode-alternative-selected-background-disabled-color: @palette-gray-4;
300
304
  @mode-alternative-background-color: rgba(0, 0, 0, 0.08);
305
+ @mode-alternative-hover-background-color: rgba(0, 0, 0, 0.05);
306
+ @mode-alternative-active-background-color: rgba(0, 0, 0, 0.1);
301
307
  @navigate-up-button-border-color: @button-border-color;
302
308
  @navigate-up-button-color: @button-color;
303
309
  @desktop-navigation-background-color: @desktop-header-background-color;
@@ -480,6 +486,8 @@
480
486
  @tile-default-inverted-link-active-color: fade(@tile-default-inverted-color, 75%);
481
487
  @tile-default-inverted-status-hover-background-color: fade(@palette-black, 15%);
482
488
  @tile-default-inverted-status-active-background-color: fade(@palette-black, 20%);
489
+ @tile-default-inverted-error-status-color: @palette-red-3;
490
+ @tile-default-inverted-error-status-hover-color: @tile-default-inverted-error-status-color;
483
491
  @tile-placeholder-background-color: @palette-gray-3;
484
492
  @tile-scrollbar-thumb-inverted-main-color: @palette-gray-4;
485
493
  @tile-scrollbar-thumb-inverted-color: fade(@tile-scrollbar-thumb-inverted-main-color, 30%);
@@ -515,7 +523,7 @@
515
523
  @top-label-disabled-color: @label-disabled-color;
516
524
  @tree-node-active-background-color: @item-active-background-color;
517
525
  @tree-node-control-color: inherit;
518
- @view-tab-selected-color: @active-color;
526
+ @view-tab-selected-color: @outline-title-color;
519
527
  @view-tab-selected-background-color: @desktop-navigation-body-background-color;
520
528
  @view-tab-in-background-selected-background-color: @desktop-navigation-body-in-background-background-color;
521
529
  @view-tab-hover-background-color: fade(@palette-black, 20%);
@@ -33,13 +33,22 @@ Try these to switch between fonts:
33
33
  @font-size-large: 16px;
34
34
  @font-size-extra-large: 32px;
35
35
 
36
+ @font-size-icon-small: 14px;
36
37
  @font-size-icon: 16px;
37
38
  @font-size-icon-large: 24px;
38
39
 
39
40
  @letter-spacing: 0.2px;
40
41
 
41
- @icon-font-weight-light: 300;
42
+ // Arial font is hard to vertically align, especially with icons
43
+ // This variable can be used to fix the alignment for specific widgets that can have an icon
44
+ // or are often placed to the side of widgets with icons
45
+ @text-margin-top: 1px;
46
+
47
+ // Icons aligned with line-height may use this variable.
48
+ // It should have the same size as regular text (not the font-size, the actual size)
49
+ @font-icon-line-height: 15px;
42
50
 
51
+ @icon-font-weight-light: 300;
43
52
  @tooltip-font-weight: @font-weight-normal;
44
53
 
45
54
  @font-face {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-2021 BSI Business Systems Integration AG.
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
@@ -70,26 +70,30 @@
70
70
  padding-bottom: 0;
71
71
  }
72
72
 
73
- .inverted-bottom-round-edge(@border-radius: 12px, @width: 24px, @color: #ffffff) {
73
+ .inverted-bottom-round-edge(@border-radius: 12px, @color: #ffffff) {
74
+ @border-width: 5px;
75
+
74
76
  --color: @color; // Allows to change color only
75
77
  position: absolute;
76
78
  pointer-events: none;
77
79
  background-color: transparent;
78
- bottom: 0;
79
- height: 2 * @width;
80
- width: @width;
81
- box-shadow: 0 @width 0 0 var(--color);
82
- // Cut the leftover on the bottom to only get the edge. Use 110%/-10% because with 100%/0% there are drawing issues, at least with Chrome (a very thin line won't be colored)
83
- clip-path: polygon(-10% 0, 110% 0, 110% 100%, -10% 100%);
80
+ bottom: -@border-width;
81
+ height: @border-radius;
82
+ width: @border-radius;
83
+ box-sizing: content-box;
84
+ border: @border-width solid var(--color);
85
+ border-top: none;
84
86
 
85
87
  &.left {
86
- left: -@width;
87
- border-bottom-right-radius: @border-radius;
88
+ left: -@border-radius;
89
+ border-bottom-right-radius: @border-radius+@border-width;
90
+ border-left: none;
88
91
  }
89
92
 
90
93
  &.right {
91
- right: -@width;
92
- border-bottom-left-radius: @border-radius;
94
+ right: -@border-radius;
95
+ border-bottom-left-radius: @border-radius+@border-width;
96
+ border-right: none;
93
97
  }
94
98
  }
95
99
 
@@ -8,5 +8,8 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
+ @desktop-tab-border-width: 1px;
11
12
  @popup-border-width: 1px;
12
- @tooltip-border-width: 1px;
13
+ @tooltip-border-width: 1px;
14
+ @scroll-shadow-size-large: 14px;
15
+ @scroll-shadow-size: @scroll-shadow-size-large;
@@ -3,7 +3,7 @@
3
3
  * All rights reserved. This program and the accompanying materials
4
4
  * are made available under the terms of the Eclipse Public License v1.0
5
5
  * which accompanies this distribution, and is available at
6
- * http://www.eclipse.org/legal/epl-v10.html
6
+ * https://www.eclipse.org/legal/epl-v10.html
7
7
  *
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
@@ -17,6 +17,8 @@
17
17
  @border-radius-medium: 8px;
18
18
  @border-radius-large: 12px;
19
19
  @borderless-field-padding-y: @text-field-padding-y + 1px;
20
+ @breadcrumb-bar-field-padding-bottom: 0;
21
+ @breadcrumb-bar-field-padding-bottom-dense: 4px;
20
22
  @collapse-handle-border-radius: @border-radius-medium;
21
23
  @control-border-radius: @border-radius;
22
24
  @control-alternative-border-radius: @control-border-radius;
@@ -55,7 +57,7 @@
55
57
  @focus-box-shadow-size: 3px;
56
58
  @text-field-padding-x: 10px;
57
59
  @text-field-padding-y: 7px;
58
- @text-field-padding-top-compensation: 1px;
60
+ @text-field-padding-top-compensation: 1px + @text-margin-top;
59
61
  @text-field-alternative-padding-left: 0;
60
62
  @text-field-alternative-padding-right: 0;
61
63
  @text-field-icon-size: 24px;
@@ -162,6 +164,7 @@
162
164
  @desktop-navigation-width: 290px;
163
165
  @desktop-notification-no-icon-padding-y: 16px;
164
166
  @desktop-tab-border-radius: @view-tab-border-radius;
167
+ @desktop-tab-border-width: 0;
165
168
  @desktop-tab-key-box-bottom: @view-tab-key-box-bottom;
166
169
  @desktop-tab-margin-top: @view-tab-margin-top;
167
170
  @desktop-tab-margin-right: 3px;
@@ -172,7 +175,7 @@
172
175
  @desktop-tab-border-radius: @view-tab-selected-border-radius;
173
176
  @desktop-tab-margin-top: @view-tab-selected-margin-top;
174
177
  @desktop-tool-box-item-border-radius: @view-tab-border-radius;
175
- @desktop-tool-box-item-font-size: 14px;
178
+ @desktop-tool-box-item-font-size: @font-size-icon-small;
176
179
  @desktop-tool-box-item-margin: 3px;
177
180
  @desktop-tool-box-item-margin-top: @view-tab-margin-top;
178
181
  @detail-table-border-radius: 4px;
@@ -223,21 +226,19 @@
223
226
  @mobile-popup-title-margin-top: 10px;
224
227
  @mode-padding-x: 12px;
225
228
  @mode-padding-y: 6px;
226
- @mode-padding-dense: @mode-padding-dense-y @mode-padding-dense-x;
227
229
  @mode-padding-dense-x: 5px;
228
230
  @mode-padding-dense-y: 3px;
229
231
  @mode-border-width: 1px;
230
- @mode-alternative-border-width: 3px;
232
+ @mode-selector-alternative-border-width: 3px;
231
233
  @notification-no-icon-padding-y: 13px;
232
234
  @outline-breadcrumb-node-padding-x: @outline-title-padding-left;
233
235
  @outline-breadcrumb-node-padding-y: 12px;
234
236
  @outline-data-padding-top: 16px;
235
237
  @outline-font-size: @font-size-normal;
236
- @outline-node-control-size: 18px;
237
238
  @outline-node-control-padding-left: @outline-title-padding-left;
238
239
  @outline-node-control-padding-y: @outline-node-padding-y;
239
240
  @outline-node-control-line-height: @tree-node-control-line-height;
240
- @outline-node-font-icon-line-height: 14px;
241
+ @outline-node-font-icon-line-height: @tree-node-font-icon-line-height;
241
242
  @outline-node-font-icon-size: 16px;
242
243
  @outline-node-padding-left: 37px;
243
244
  @outline-node-padding-right: 8px;
@@ -292,9 +293,15 @@
292
293
  @tab-item-title-padding-bottom: @group-box-title-padding-bottom;
293
294
  @tab-item-title-padding-top: @group-box-title-padding-top;
294
295
  @tab-item-title-margin-top: @group-box-header-margin-top;
296
+ @table-aggregate-cell-font-icon-line-height: 14px;
297
+ @table-aggregate-sum-avg-font-icon-size: 13px;
298
+ @table-aggregate-min-max-font-icon-size: 15px;
299
+ @table-aggregate-row-font-size: @font-size-smaller;
295
300
  @table-cell-padding-left: 10px;
296
301
  @table-cell-padding-right: @table-cell-padding-left;
297
302
  @table-cell-padding-right-last: @scrollbar-size;
303
+ @table-cell-font-icon-size: @tree-node-font-icon-size;
304
+ @table-cell-font-icon-line-height: @tree-node-font-icon-line-height;
298
305
  @table-control-content-padding: 10px;
299
306
  @table-control-container-height: 364px;
300
307
  @table-control-container-height-dense: 320px;
@@ -350,9 +357,10 @@
350
357
  @tree-node-checkbox-margin-top: -2px;
351
358
  @tree-node-control-checkbox-size: 20px + @tree-node-control-size;
352
359
  @tree-node-control-size: 16px;
353
- @tree-node-control-line-height: 14px;
360
+ @tree-node-control-line-height: @font-icon-line-height;
354
361
  @tree-node-control-padding-left: 13px;
355
- @tree-node-font-icon-line-height: 15px;
362
+ @tree-node-font-icon-line-height: @font-icon-line-height;
363
+ @tree-node-font-icon-size: @font-size-icon-small;
356
364
  @tree-node-padding-left: 28px;
357
365
  @tree-node-padding-right: 7px;
358
366
  @tree-node-padding-y: 7px;