@eclipse-scout/core 22.0.0-beta.5 → 22.0.2

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 (101) hide show
  1. package/dist/eclipse-scout-core-c98fb5230e71dcec75ce.min.js +2 -0
  2. package/dist/eclipse-scout-core-c98fb5230e71dcec75ce.min.js.map +1 -0
  3. package/dist/eclipse-scout-core-theme-6b2fef56e9e49231a49c.min.css +1 -0
  4. package/dist/eclipse-scout-core-theme-dark-d2bb274dd42f132bfca0.min.css +1 -0
  5. package/dist/eclipse-scout-core-theme-dark.css +511 -399
  6. package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
  7. package/dist/eclipse-scout-core-theme.css +247 -135
  8. package/dist/eclipse-scout-core-theme.css.map +1 -1
  9. package/dist/eclipse-scout-core.js +865 -646
  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/App.js +17 -10
  16. package/src/action/Button.less +1 -0
  17. package/src/box/Box.less +2 -2
  18. package/src/breadcrumbbar/BreadcrumbBarLayout.js +2 -2
  19. package/src/calendar/Calendar.js +40 -58
  20. package/src/calendar/Calendar.less +10 -10
  21. package/src/calendar/CalendarLayout.js +3 -1
  22. package/src/datepicker/DatePicker.less +1 -0
  23. package/src/desktop/desktoptab/DesktopTab.less +19 -2
  24. package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
  25. package/src/desktop/desktoptab/DesktopTabAreaLayout.js +1 -1
  26. package/src/desktop/navigation/DesktopNavigation.less +4 -0
  27. package/src/desktop/notification/DesktopNotification.js +11 -4
  28. package/src/desktop/notification/DesktopNotification.less +5 -3
  29. package/src/desktop/outline/Outline.js +0 -30
  30. package/src/desktop/outline/Outline.less +4 -4
  31. package/src/desktop/viewbutton/ViewButton.less +18 -9
  32. package/src/desktop/viewbutton/ViewButtonBox.js +2 -2
  33. package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
  34. package/src/filechooser/FileChooser.less +1 -1
  35. package/src/form/Form.less +1 -0
  36. package/src/form/fields/LookupBox.js +2 -1
  37. package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +14 -0
  38. package/src/form/fields/groupbox/GroupBox.js +13 -9
  39. package/src/form/fields/groupbox/GroupBox.less +4 -1
  40. package/src/form/fields/htmlfield/HtmlField.less +0 -1
  41. package/src/form/fields/listbox/ListBox.js +8 -3
  42. package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
  43. package/src/form/fields/tabbox/TabBox.js +4 -7
  44. package/src/form/fields/tabbox/TabBox.less +2 -1
  45. package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
  46. package/src/glasspane/GlassPane.js +3 -3
  47. package/src/group/Group.less +1 -1
  48. package/src/index.js +2 -1
  49. package/src/index.less +1 -0
  50. package/src/jquery/jquery-scout.js +5 -4
  51. package/src/login/LoginBox.less +9 -7
  52. package/src/menu/ContextMenuPopup.less +9 -2
  53. package/src/menu/Menu.less +1 -0
  54. package/src/messagebox/MessageBox.less +3 -3
  55. package/src/modeselector/Mode.less +15 -37
  56. package/src/modeselector/ModeSelector.js +1 -1
  57. package/src/modeselector/ModeSelector.less +2 -1
  58. package/src/planner/PlannerHeader.less +2 -1
  59. package/src/popup/Popup.js +24 -8
  60. package/src/popup/PopupLayout.js +2 -8
  61. package/src/scrollbar/Scrollbar.less +8 -1
  62. package/src/scrollbar/scrollbars.js +26 -4
  63. package/src/session/Session.js +4 -1
  64. package/src/style/colors-dark.less +25 -11
  65. package/src/style/colors.less +17 -3
  66. package/src/style/fonts.less +5 -0
  67. package/src/style/mixins.less +21 -14
  68. package/src/style/sizes-dark.less +4 -1
  69. package/src/style/sizes.less +7 -7
  70. package/src/table/Table.js +45 -33
  71. package/src/table/Table.less +49 -16
  72. package/src/table/TableHeader.js +10 -8
  73. package/src/table/TableHeader.less +1 -0
  74. package/src/table/TableHeaderMenu.js +3 -1
  75. package/src/table/TableHeaderMenu.less +7 -2
  76. package/src/table/columns/BooleanColumn.js +2 -2
  77. package/src/table/columns/Column.js +3 -3
  78. package/src/table/columns/ColumnOptimalWidthMeasurer.js +1 -1
  79. package/src/table/editor/CellEditorPopup.js +8 -1
  80. package/src/tagbar/TagBarOverflowPopupLayout.js +1 -1
  81. package/src/tile/TileGrid.js +1 -1
  82. package/src/tile/TileGridLayout.js +2 -2
  83. package/src/tile/accordion/TileAccordion.js +16 -1
  84. package/src/tile/fields/FormFieldTile.less +18 -11
  85. package/src/tile/fields/button/ButtonTile.js +1 -1
  86. package/src/tile/fields/htmlfield/TileHtmlField.js +28 -0
  87. package/src/tooltip/Tooltip.less +7 -5
  88. package/src/tree/CompactTree.less +1 -1
  89. package/src/tree/LazyNodeFilter.js +26 -15
  90. package/src/tree/Tree.js +114 -143
  91. package/src/tree/Tree.less +3 -5
  92. package/src/tree/TreeLayout.js +1 -1
  93. package/src/tree/TreeNode.js +2 -2
  94. package/src/util/Device.js +6 -2
  95. package/src/util/arrays.js +24 -2
  96. package/src/util/dragAndDrop.js +5 -4
  97. package/src/util/events.js +1 -1
  98. package/src/util/objects.js +4 -1
  99. package/src/widget/FilterSupport.js +7 -5
  100. package/src/widget/FilterSupport.less +38 -9
  101. package/src/widget/Widget.js +24 -7
@@ -88,7 +88,7 @@
88
88
  }
89
89
  }
90
90
 
91
- .severity-button(@error-color, @focus-color: @error-focus-box-shadow-color);
91
+ .severity-button(@error-color, @error-default-button-background-hover-color, @error-default-button-background-active-color, @error-focus-box-shadow-color);
92
92
  }
93
93
 
94
94
  &.warning {
@@ -100,7 +100,7 @@
100
100
  }
101
101
  }
102
102
 
103
- .severity-button(@warning-color, @focus-color: @warning-focus-box-shadow-color);
103
+ .severity-button(@warning-color, @warning-default-button-background-hover-color, @warning-default-button-background-active-color, @warning-focus-box-shadow-color);
104
104
  }
105
105
 
106
106
  &.ok {
@@ -112,7 +112,7 @@
112
112
  }
113
113
  }
114
114
 
115
- .severity-button(@ok-color, @focus-color: @ok-focus-box-shadow-color);
115
+ .severity-button(@ok-color, @ok-default-button-background-hover-color, @ok-default-button-background-active-color, @ok-focus-box-shadow-color);
116
116
  }
117
117
 
118
118
  &.animate-open {
@@ -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
@@ -9,10 +9,14 @@
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
11
  .mode {
12
- border: @mode-border-width solid @control-border-color;
12
+ --padding-x: @mode-padding-x;
13
+ --padding-y: @mode-padding-y;
14
+ --border-width: @mode-border-width;
15
+
16
+ border: var(--border-width) solid @control-border-color;
13
17
  border-radius: 0;
14
18
  flex: 1 1 0;
15
- padding: @mode-padding-y @mode-padding-x;
19
+ padding: var(--padding-y) var(--padding-x);
16
20
  #scout.overflow-ellipsis();
17
21
 
18
22
  &.first {
@@ -29,12 +33,12 @@
29
33
 
30
34
  &:not(.last):not(.selected) {
31
35
  border-right: none;
32
- padding-right: @mode-padding-x + @mode-border-width; /* account for the missing border, so that text does not jump */
36
+ padding-right: calc(var(--padding-x) + var(--border-width)); /* account for the missing border, so that text does not jump */
33
37
  }
34
38
 
35
39
  &.after-selected {
36
40
  border-left: none;
37
- padding-left: @mode-padding-x + @mode-border-width; /* account for the missing border, so that text does not jump */
41
+ padding-left: calc(var(--padding-x) + var(--border-width)); /* account for the missing border, so that text does not jump */
38
42
  }
39
43
 
40
44
  // override button (the selected mode cannot be clicked. therefore do not show hover and active colors)
@@ -68,28 +72,20 @@
68
72
  }
69
73
 
70
74
  .mode-selector.alternative {
71
- border: @mode-alternative-border-width solid transparent;
72
75
 
73
76
  & > .mode {
77
+ --border-width: 0px;
78
+
74
79
  color: @mode-color;
75
- border: none;
76
80
  background-color: transparent;
77
81
  border-radius: @button-border-radius;
78
82
 
79
- &:not(.last):not(.selected) {
80
- padding-right: @mode-padding-x;
81
- }
82
-
83
- &.after-selected {
84
- padding-left: @mode-padding-x;
85
- }
86
-
87
83
  &:hover {
88
- background-color: rgba(0, 0, 0, 0.05);
84
+ background-color: @mode-alternative-hover-background-color;
89
85
  }
90
86
 
91
87
  &:active {
92
- background-color: rgba(0, 0, 0, 0.1);
88
+ background-color: @mode-alternative-active-background-color;
93
89
  }
94
90
 
95
91
  &.selected {
@@ -120,26 +116,8 @@
120
116
  }
121
117
 
122
118
  .dense .mode-selector {
123
-
124
119
  & > .mode {
125
- padding: @mode-padding-dense;
126
-
127
- &:not(.last):not(.selected) {
128
- padding-right: @mode-padding-dense-x + @mode-border-width; /* account for the missing border, so that text does not jump */
129
- }
130
-
131
- &.after-selected {
132
- padding-left: @mode-padding-dense-x + @mode-border-width; /* account for the missing border, so that text does not jump */
133
- }
134
- }
135
-
136
- &.alternative > .mode {
137
- &:not(.last):not(.selected) {
138
- padding-right: @mode-padding-dense-x;
139
- }
140
-
141
- &.after-selected {
142
- padding-left: @mode-padding-dense-x;
143
- }
120
+ --padding-x: @mode-padding-dense-x;
121
+ --padding-y: @mode-padding-dense-y;
144
122
  }
145
123
  }
@@ -133,7 +133,7 @@ export default class ModeSelector extends Widget {
133
133
  let selectedModePosX = 0, selectedModeWidth = 0;
134
134
  if (this.selectedMode && this.selectedMode.$container) {
135
135
  selectedModePosX = graphics.position(this.selectedMode.$container).x;
136
- selectedModeWidth = graphics.size(this.selectedMode.$container).width;
136
+ selectedModeWidth = graphics.size(this.selectedMode.$container, {exact: true}).width;
137
137
  }
138
138
  this.$slider.cssLeft(selectedModePosX);
139
139
  this.$slider.cssWidth(selectedModeWidth);
@@ -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
@@ -22,6 +22,7 @@
22
22
  &.alternative {
23
23
  background-color: @mode-alternative-background-color;
24
24
  border-radius: @button-border-radius;
25
+ border: @mode-selector-alternative-border-width solid transparent;
25
26
 
26
27
  &:not(.disabled) > .mode-slider {
27
28
  display: block;
@@ -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) {
@@ -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
@@ -422,6 +422,8 @@ export default class Session {
422
422
  // Extract client session data without creating a model adapter for it. It is (currently) only used to transport the desktop's adapterId.
423
423
  let clientSessionData = this._getAdapterData(data.startupData.clientSession);
424
424
  this.desktop = this.getOrCreateWidget(clientSessionData.desktop, this.rootAdapter.widget);
425
+ App.get()._triggerDesktopReady(this.desktop);
426
+
425
427
  let renderDesktopImpl = function() {
426
428
  this._renderDesktop();
427
429
 
@@ -443,6 +445,7 @@ export default class Session {
443
445
  this._resumeBackgroundJobPolling();
444
446
 
445
447
  this.ready = true;
448
+ App.get()._triggerSessionReady(this);
446
449
 
447
450
  $.log.isInfoEnabled() && $.log.info('Session initialized. Detected ' + Device.get());
448
451
  if ($.log.isDebugEnabled()) {
@@ -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%);
@@ -75,8 +75,14 @@
75
75
  @warning-color: @palette-orange-2;
76
76
  @ok-color: @palette-green-2;
77
77
  @error-background-color: @background-color;
78
+ @error-default-button-background-hover-color: lighten(@error-color, 6%);
79
+ @error-default-button-background-active-color: lighten(@error-color, 10%);
78
80
  @error-focus-box-shadow-color: mix(@error-color, @palette-black, 50%);
81
+ @warning-default-button-background-hover-color: lighten(@warning-color, 8%);
82
+ @warning-default-button-background-active-color: lighten(@warning-color, 12%);
79
83
  @warning-focus-box-shadow-color: mix(@warning-color, @palette-black, 50%);
84
+ @ok-default-button-background-hover-color: lighten(@ok-color, 8%);
85
+ @ok-default-button-background-active-color: lighten(@ok-color, 14%);
80
86
  @ok-focus-box-shadow-color: mix(@ok-color, @palette-black, 50%);
81
87
  @focus-border-color: @focus-color;
82
88
  @focus-box-shadow-color: darken(@focus-color, 30%);
@@ -102,7 +108,8 @@
102
108
  @popup-2-background-color: @palette-gray-6;
103
109
  @popup-2-backdrop-background-color: fade(@popup-2-background-color, 80%);
104
110
  @popup-2-backdrop-filter: blur(15px);
105
- @selected-hover-background-color: darken(@selected-background-color, 10%);
111
+ @selected-hover-background-color: lighten(@selected-background-color, 8%);
112
+ @selected-active-background-color: lighten(@selected-background-color, 12%);
106
113
  @selected-disabled-background-color: @palette-gray-5;
107
114
  @text-color: @palette-gray-2;
108
115
  @text-color-1: @palette-gray-3;
@@ -129,9 +136,11 @@
129
136
  @carousel-current-item-color: @palette-gray-1;
130
137
  @check-box-border-color: @palette-gray-5;
131
138
  @mode-color: @text-color;
132
- @mode-alternative-background-color: @palette-gray-10;
139
+ @mode-alternative-background-color: fade(@palette-black, 60%);
133
140
  @mode-alternative-selected-background-color: @palette-gray-7;
134
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;
135
144
  @closer-action-color: @text-color;
136
145
  @closer-color: @palette-gray-3;
137
146
  @closer-hover-color: @text-color;
@@ -150,13 +159,15 @@
150
159
  @date-picker-separator-color: @palette-gray-4;
151
160
  @date-picker-day-preselected-background-color: fade(@palette-white, 8%);
152
161
  @dashboard-tile-border-color: @border-color;
153
- @dashboard-tile-alternative-selected-border-color: @dashboard-tile-selected-border-color;
154
- @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;
155
165
  @desktop-bench-drop-shadow-color: fade(@palette-black, 35%);
156
166
  @desktop-header-background-color: @palette-gray-10;
157
167
  @desktop-header-border-color: @palette-gray-8;
158
168
  @desktop-header-color: @title-color;
159
169
  @desktop-logo-background-color: transparent;
170
+ @desktop-tab-border-color: @border-color;
160
171
  @desktop-tab-closer-hover-background-color: @hover-background-color;
161
172
  @desktop-tab-closer-active-background-color: @active-background-color;
162
173
  @desktop-tab-status-color: @save-needer-color;
@@ -179,6 +190,7 @@
179
190
  @planner-large-scale-item-line-color: fade(@palette-white, 20%);
180
191
  @planner-resource-title-color: @text-color;
181
192
  @planner-small-scale-item-line-color: fade(@palette-white, 7%);
193
+ @scroll-shadow-alpha: 0;
182
194
  @scrollbar-thumb-main-color: @palette-white;
183
195
  @scrollbar-thumb-color: fade(@scrollbar-thumb-main-color, 20%);
184
196
  @scrollbar-thumb-hover-color: fade(@scrollbar-thumb-main-color, 30%);
@@ -235,6 +247,8 @@
235
247
  @tile-default-inverted-link-hover-color: @link-hover-color;
236
248
  @tile-default-inverted-status-hover-background-color: @hover-background-color;
237
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;
238
252
  @tile-default-label-color: @text-color-1;
239
253
  @tile-default-link-active-color: @link-active-color;
240
254
  @tile-table-default-inverted-selection-background-color: @item-selection-background-color;
@@ -101,8 +101,14 @@
101
101
  @ok-color: @palette-green-5;
102
102
  @error-background-color: @palette-red-0;
103
103
  @error-border-color: @error-color;
104
+ @error-default-button-background-hover-color: darken(@error-color, 6%);
105
+ @error-default-button-background-active-color: darken(@error-color, 13%);
104
106
  @error-focus-box-shadow-color: fade(@error-color, 40%);
107
+ @warning-default-button-background-hover-color: darken(@warning-color, 6%);
108
+ @warning-default-button-background-active-color: darken(@warning-color, 13%);
105
109
  @warning-focus-box-shadow-color: fade(@warning-color, 40%);
110
+ @ok-default-button-background-hover-color: darken(@ok-color, 6%);
111
+ @ok-default-button-background-active-color: darken(@ok-color, 13%);
106
112
  @ok-focus-box-shadow-color: fade(@ok-color, 40%);
107
113
  @focus-border-color: @accent-color-3;
108
114
  @focus-box-shadow-color: darken(@accent-color-1, 10%);
@@ -221,9 +227,12 @@
221
227
  @context-menu-item-color: @text-color;
222
228
  @context-menu-item-icon-color: @link-color;
223
229
  @dashboard-tile-border-color: darken(@palette-gray-3, 5%);
224
- @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;
225
234
  @dashboard-tile-alternative-selected-border-color: @tile-alternative-inverted-background-color;
226
- @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;
227
236
  @date-picker-day-hover-background-color: @hover-background-color;
228
237
  @date-picker-day-selected-color: @selected-color;
229
238
  @date-picker-day-selected-background-color: @selected-background-color;
@@ -260,6 +269,7 @@
260
269
  @desktop-header-background-color: @accent-color-3;
261
270
  @desktop-header-border-color: @border-color;
262
271
  @desktop-tab-background-color: fade(@palette-black, 10%);
272
+ @desktop-tab-border-color: transparent;
263
273
  @desktop-tab-flash-background-color: fade(@palette-black, 40%);
264
274
  @desktop-tab-closer-hover-background-color: fade(@palette-black, 14%);
265
275
  @desktop-tab-closer-active-background-color: fade(@palette-black, 20%);
@@ -292,6 +302,8 @@
292
302
  @mode-alternative-selected-background-color: @palette-white;
293
303
  @mode-alternative-selected-background-disabled-color: @palette-gray-4;
294
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);
295
307
  @navigate-up-button-border-color: @button-border-color;
296
308
  @navigate-up-button-color: @button-color;
297
309
  @desktop-navigation-background-color: @desktop-header-background-color;
@@ -474,6 +486,8 @@
474
486
  @tile-default-inverted-link-active-color: fade(@tile-default-inverted-color, 75%);
475
487
  @tile-default-inverted-status-hover-background-color: fade(@palette-black, 15%);
476
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;
477
491
  @tile-placeholder-background-color: @palette-gray-3;
478
492
  @tile-scrollbar-thumb-inverted-main-color: @palette-gray-4;
479
493
  @tile-scrollbar-thumb-inverted-color: fade(@tile-scrollbar-thumb-inverted-main-color, 30%);
@@ -509,7 +523,7 @@
509
523
  @top-label-disabled-color: @label-disabled-color;
510
524
  @tree-node-active-background-color: @item-active-background-color;
511
525
  @tree-node-control-color: inherit;
512
- @view-tab-selected-color: @active-color;
526
+ @view-tab-selected-color: @outline-title-color;
513
527
  @view-tab-selected-background-color: @desktop-navigation-body-background-color;
514
528
  @view-tab-in-background-selected-background-color: @desktop-navigation-body-in-background-background-color;
515
529
  @view-tab-hover-background-color: fade(@palette-black, 20%);
@@ -38,6 +38,11 @@ Try these to switch between fonts:
38
38
 
39
39
  @letter-spacing: 0.2px;
40
40
 
41
+ // Arial font is hard to vertically align, especially with icons
42
+ // This variable can be used to fix the alignment for specific widgets that can have an icon
43
+ // or are often placed to the side of widgets with icons
44
+ @text-margin-top: 1px;
45
+
41
46
  @icon-font-weight-light: 300;
42
47
 
43
48
  @tooltip-font-weight: @font-weight-normal;
@@ -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
 
@@ -213,8 +217,7 @@
213
217
  }
214
218
  }
215
219
 
216
- .tooltip-status,
217
- .info-status {
220
+ .tooltip-status {
218
221
  visibility: visible;
219
222
  cursor: pointer;
220
223
 
@@ -236,6 +239,10 @@
236
239
  }
237
240
  }
238
241
 
242
+ .info-status {
243
+ #scout.tooltip-status();
244
+ }
245
+
239
246
  .ok-status {
240
247
  visibility: visible;
241
248
  cursor: pointer;
@@ -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;