@eclipse-scout/core 22.0.1 → 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 (77) 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 +367 -312
  6. package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
  7. package/dist/eclipse-scout-core-theme.css +150 -95
  8. package/dist/eclipse-scout-core-theme.css.map +1 -1
  9. package/dist/eclipse-scout-core.js +371 -204
  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/action/Button.less +1 -0
  16. package/src/calendar/Calendar.js +40 -58
  17. package/src/calendar/Calendar.less +10 -10
  18. package/src/calendar/CalendarLayout.js +3 -1
  19. package/src/datepicker/DatePicker.less +1 -0
  20. package/src/desktop/desktoptab/DesktopTab.less +5 -2
  21. package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
  22. package/src/desktop/navigation/DesktopNavigation.less +4 -0
  23. package/src/desktop/notification/DesktopNotification.js +11 -4
  24. package/src/desktop/notification/DesktopNotification.less +5 -3
  25. package/src/desktop/outline/Outline.less +4 -4
  26. package/src/desktop/viewbutton/ViewButton.less +13 -9
  27. package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
  28. package/src/filechooser/FileChooser.less +1 -1
  29. package/src/form/Form.less +1 -0
  30. package/src/form/fields/LookupBox.js +2 -1
  31. package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +14 -0
  32. package/src/form/fields/groupbox/GroupBox.js +13 -9
  33. package/src/form/fields/groupbox/GroupBox.less +1 -0
  34. package/src/form/fields/htmlfield/HtmlField.less +0 -1
  35. package/src/form/fields/listbox/ListBox.js +8 -3
  36. package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
  37. package/src/form/fields/tabbox/TabBox.js +4 -7
  38. package/src/form/fields/tabbox/TabBox.less +2 -1
  39. package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
  40. package/src/glasspane/GlassPane.js +3 -3
  41. package/src/group/Group.less +1 -1
  42. package/src/index.less +1 -0
  43. package/src/jquery/jquery-scout.js +5 -4
  44. package/src/menu/ContextMenuPopup.less +9 -2
  45. package/src/menu/Menu.less +1 -0
  46. package/src/modeselector/Mode.less +15 -37
  47. package/src/modeselector/ModeSelector.js +1 -1
  48. package/src/modeselector/ModeSelector.less +2 -1
  49. package/src/planner/PlannerHeader.less +2 -1
  50. package/src/popup/Popup.js +24 -8
  51. package/src/popup/PopupLayout.js +2 -8
  52. package/src/scrollbar/Scrollbar.less +8 -1
  53. package/src/scrollbar/scrollbars.js +26 -4
  54. package/src/style/colors-dark.less +17 -10
  55. package/src/style/colors.less +11 -3
  56. package/src/style/fonts.less +5 -0
  57. package/src/style/mixins.less +16 -12
  58. package/src/style/sizes-dark.less +4 -1
  59. package/src/style/sizes.less +3 -4
  60. package/src/table/Table.js +37 -29
  61. package/src/table/Table.less +36 -13
  62. package/src/table/TableHeader.js +10 -8
  63. package/src/table/TableHeader.less +1 -0
  64. package/src/table/TableHeaderMenu.js +3 -1
  65. package/src/table/TableHeaderMenu.less +7 -2
  66. package/src/table/columns/BooleanColumn.js +2 -2
  67. package/src/table/columns/Column.js +3 -3
  68. package/src/table/editor/CellEditorPopup.js +8 -1
  69. package/src/tile/TileGrid.js +1 -1
  70. package/src/tile/TileGridLayout.js +2 -2
  71. package/src/tile/accordion/TileAccordion.js +16 -1
  72. package/src/tile/fields/FormFieldTile.less +18 -11
  73. package/src/tree/CompactTree.less +1 -1
  74. package/src/tree/Tree.less +1 -3
  75. package/src/util/arrays.js +24 -2
  76. package/src/util/objects.js +4 -1
  77. package/src/widget/Widget.js +11 -3
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eclipse-scout/core",
3
- "version": "22.0.1",
3
+ "version": "22.0.2",
4
4
  "description": "Eclipse Scout runtime",
5
5
  "author": "BSI Business Systems Integration AG",
6
6
  "homepage": "https://www.eclipse.org/scout",
@@ -26,7 +26,7 @@
26
26
  "src"
27
27
  ],
28
28
  "devDependencies": {
29
- "@eclipse-scout/cli": "22.0.1",
29
+ "@eclipse-scout/cli": "22.0.2",
30
30
  "@eclipse-scout/releng": "^22.0.0",
31
31
  "jasmine-core": "3.10.1",
32
32
  "jasmine-ajax": "4.0.0",
@@ -33,6 +33,7 @@
33
33
 
34
34
  & > .text {
35
35
  #scout.overflow-ellipsis-nowrap();
36
+ margin-top: @text-margin-top;
36
37
  }
37
38
 
38
39
  & > .icon {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2010-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
@@ -8,27 +8,7 @@
8
8
  * Contributors:
9
9
  * BSI Business Systems Integration AG - initial API and implementation
10
10
  */
11
- import {
12
- CalendarComponent,
13
- CalendarLayout,
14
- CalendarListComponent,
15
- DateRange,
16
- dates,
17
- Device,
18
- events,
19
- GroupBox,
20
- HtmlComponent,
21
- KeyStrokeContext,
22
- menus,
23
- numbers,
24
- objects,
25
- Point,
26
- Range,
27
- scout,
28
- scrollbars,
29
- strings,
30
- Widget
31
- } from '../index';
11
+ import {CalendarComponent, CalendarLayout, CalendarListComponent, DateRange, dates, Device, events, GroupBox, HtmlComponent, KeyStrokeContext, menus, numbers, objects, Point, Range, scout, scrollbars, strings, Widget} from '../index';
32
12
  import $ from 'jquery';
33
13
 
34
14
  export default class Calendar extends Widget {
@@ -759,11 +739,9 @@ export default class Calendar extends Widget {
759
739
  this.$topGrid.find('.calendar-day-name').data('new-width', 0);
760
740
  this.$grids.find('.calendar-day').data('new-width', 0);
761
741
  let newWidthWorkWeek = Math.round(contentW / this.workDayIndices.length);
762
- $('.calendar-day-name:nth-child(-n+6), ' +
763
- '.calendar-day:nth-child(-n+6)', this.$topGrid)
764
- .data('new-width', newWidthWorkWeek);
765
- $('.calendar-day:nth-child(-n+6)', this.$grid)
766
- .data('new-width', newWidthWorkWeek);
742
+ this.$topGrid.find('.calendar-day-name').slice(0, 5).data('new-width', newWidthWorkWeek);
743
+ this.$topGrid.find('.calendar-day').slice(0, 5).data('new-width', newWidthWorkWeek);
744
+ $('.calendar-day:nth-child(-n+6)', this.$grid).data('new-width', newWidthWorkWeek);
767
745
  this.widthPerDivision = newWidthWorkWeek;
768
746
  } else if (this._isMonth() || this._isWeek()) {
769
747
  let newWidthMonthOrWeek = Math.round(contentW / 7);
@@ -781,21 +759,26 @@ export default class Calendar extends Widget {
781
759
  });
782
760
  }
783
761
 
784
- let afterLayoutCallback = this._afterLayout.bind(this);
785
-
786
762
  // animate old to new sizes
787
- $('div', this.$container).each(function() {
788
- let $e = $(this),
789
- w = $e.data('new-width'),
790
- h = $e.data('new-height');
763
+ $('div', this.$container).each((i, elem) => {
764
+ let $e = $(elem);
765
+ let w = $e.data('new-width');
766
+ let h = $e.data('new-height');
791
767
  $e.stop(false, true);
792
768
 
793
769
  if (w !== undefined && w !== $e.outerWidth()) {
794
770
  if (animate) {
795
- $e.animateAVCSD('width', w, afterLayoutCallback.bind(this, $e, animate));
771
+ let opts = {
772
+ complete: () => this._afterLayout($e, animate)
773
+ };
774
+ if ($e[0] === this.$grids[0]) {
775
+ // Grid contains scroll shadows that should be updated during animation (don't due it always for performance reasons)
776
+ opts.progress = () => this._afterLayout($e, animate);
777
+ }
778
+ $e.animate({width: w}, opts);
796
779
  } else {
797
780
  $e.css('width', w);
798
- afterLayoutCallback($e, animate);
781
+ this._afterLayout($e, animate);
799
782
  }
800
783
  }
801
784
  if (h !== undefined && h !== $e.outerHeight()) {
@@ -807,14 +790,14 @@ export default class Calendar extends Widget {
807
790
  if (h === 0) {
808
791
  $e.addClass('hidden');
809
792
  }
810
- afterLayoutCallback($e, animate);
793
+ this._afterLayout($e, animate);
811
794
  });
812
795
  } else {
813
796
  $e.css('height', h);
814
797
  if (h === 0) {
815
798
  $e.addClass('hidden');
816
799
  }
817
- afterLayoutCallback($e, animate);
800
+ this._afterLayout($e, animate);
818
801
  }
819
802
  }
820
803
  });
@@ -853,13 +836,18 @@ export default class Calendar extends Widget {
853
836
 
854
837
  _updateScrollbars($parent, animate) {
855
838
  let $scrollables = $('.calendar-scrollable-components', $parent);
856
- $scrollables.each(function() {
857
- let $scrollable = $(this);
858
- scrollbars.update($scrollable, true);
839
+ $scrollables.each((i, elem) => {
840
+ scrollbars.update($(elem), true);
859
841
  });
860
842
  this.updateScrollPosition(animate);
861
843
  }
862
844
 
845
+ _uninstallComponentScrollbars($parent) {
846
+ $parent.find('.calendar-scrollable-components').each((i, elem) => {
847
+ scrollbars.uninstall($(elem), this.session);
848
+ });
849
+ }
850
+
863
851
  _updateTopGrid() {
864
852
  $('.calendar-component', this.$topGrid).each((index, part) => {
865
853
  let component = $(part).data('component');
@@ -1037,18 +1025,8 @@ export default class Calendar extends Widget {
1037
1025
  }
1038
1026
 
1039
1027
  _remove() {
1040
- let $days = $('.calendar-day', this.$grid);
1041
-
1042
- // Ensure that scrollbars are unregistered
1043
- for (let k = 0; k < $days.length; k++) {
1044
- let $day = $days.eq(k);
1045
- let $scrollableContainer = $day.children('.calendar-scrollable-components');
1046
-
1047
- if ($scrollableContainer.length > 0) {
1048
- scrollbars.uninstall($scrollableContainer, this.session);
1049
- $scrollableContainer.remove();
1050
- }
1051
- }
1028
+ this._uninstallComponentScrollbars(this.$grid);
1029
+ this._uninstallComponentScrollbars(this.$topGrid);
1052
1030
 
1053
1031
  this.$window
1054
1032
  .off('mousemove touchmove', this._mouseMoveHandler)
@@ -1179,6 +1157,7 @@ export default class Calendar extends Widget {
1179
1157
 
1180
1158
  if (this._isMonth()) {
1181
1159
  this._uninstallScrollbars();
1160
+ this._uninstallComponentScrollbars(this.$topGrid);
1182
1161
  this.$grid.removeClass('calendar-scrollable-components');
1183
1162
  } else {
1184
1163
  this.$grid.addClass('calendar-scrollable-components');
@@ -1188,16 +1167,19 @@ export default class Calendar extends Widget {
1188
1167
  session: this.session,
1189
1168
  axis: 'y'
1190
1169
  });
1191
-
1192
- let $topDays = $('.calendar-scrollable-components', this.$topGrid);
1193
- for (k = 0; k < $topDays.length; k++) {
1194
- let $topDay = $topDays.eq(k);
1170
+ this.$topGrid.find('.calendar-scrollable-components').each((i, elem) => {
1171
+ let $topDay = $(elem);
1172
+ if ($topDay.data('scrollable')) {
1173
+ scrollbars.update($topDay);
1174
+ return;
1175
+ }
1195
1176
  scrollbars.install($topDay, {
1196
1177
  parent: this,
1197
1178
  session: this.session,
1198
- axis: 'y'
1179
+ axis: 'y',
1180
+ scrollShadow: 'none'
1199
1181
  });
1200
- }
1182
+ });
1201
1183
  }
1202
1184
  }
1203
1185
 
@@ -28,15 +28,6 @@
28
28
  height: 100%;
29
29
  }
30
30
 
31
- .calendar-week-scrollable {
32
- overflow: visible;
33
- }
34
-
35
- .calendar-scrollable-components-week {
36
- top: calc(@calendar-day-selected-circle-size ~'+ 5px');
37
- height: calc(~'15% - (' @calendar-day-selected-circle-size ~' + 5px)');
38
- }
39
-
40
31
  .calendar-header {
41
32
  position: relative;
42
33
  display: block;
@@ -147,7 +138,8 @@
147
138
  }
148
139
 
149
140
  .calendar-mode {
150
- width: 65px;
141
+ padding: 0 8px;
142
+ min-width: 65px;
151
143
 
152
144
  border-top: 1px solid @control-border-color;
153
145
  border-bottom: 1px solid @control-border-color;
@@ -362,8 +354,16 @@
362
354
  height: calc(~'100% - 25px');
363
355
  padding-right: @root-group-box-padding-right;
364
356
 
357
+ & + .scroll-shadow {
358
+ --scroll-shadow-inset-right: @root-group-box-padding-right;
359
+ }
360
+
365
361
  &.mobile {
366
362
  padding-right: @calendar-padding-right-mobile;
363
+
364
+ & + .scroll-shadow {
365
+ --scroll-shadow-inset-right: @calendar-padding-right-mobile;
366
+ }
367
367
  }
368
368
  }
369
369
 
@@ -17,6 +17,7 @@ export default class CalendarLayout extends AbstractLayout {
17
17
  this.calendar = calendar;
18
18
  this.stacked = false;
19
19
  this.compacted = false;
20
+ this.compactWidth = 550;
20
21
  }
21
22
 
22
23
  layout($container) {
@@ -34,7 +35,8 @@ export default class CalendarLayout extends AbstractLayout {
34
35
  if ($header[0].scrollWidth > $container.width()) {
35
36
  this.stack();
36
37
  }
37
- if ($header[0].scrollWidth > $container.width()) {
38
+ if ($container.width() < this.compactWidth || $header[0].scrollWidth > $container.width()) {
39
+ // Title may take a lot of space, make it always compact for small devices so it won't toggle when changing display mode or view range
38
40
  this.compact();
39
41
  }
40
42
 
@@ -142,6 +142,7 @@
142
142
  cursor: default;
143
143
  font-size: 18px;
144
144
  line-height: 30px;
145
+ margin-top: @text-margin-top;
145
146
  #scout.overflow-ellipsis-nowrap();
146
147
  }
147
148
 
@@ -10,11 +10,12 @@
10
10
  */
11
11
  .desktop-tab.simple-tab {
12
12
  width: @desktop-tab-width;
13
- min-width: @desktop-tab-min-width ;
13
+ min-width: @desktop-tab-min-width;
14
14
  margin: @desktop-tab-margin-top @desktop-tab-margin-right 0 0;
15
15
  padding: @desktop-tab-padding @desktop-tab-padding 0 @desktop-tab-padding-left;
16
16
  border-radius: @desktop-tab-border-radius @desktop-tab-border-radius 0 0;
17
- border-right-width: 0;
17
+ border: @desktop-tab-border-width solid @desktop-tab-border-color;
18
+ border-bottom-width: 0;
18
19
  background-color: @desktop-tab-background-color;
19
20
 
20
21
  & > .title-line {
@@ -79,6 +80,7 @@
79
80
  &:hover,
80
81
  &:active {
81
82
  background-color: @desktop-tab-hover-background-color;
83
+ border-color: transparent;
82
84
 
83
85
  & > .title-line > .title {
84
86
  color: inherit;
@@ -109,6 +111,7 @@
109
111
 
110
112
  &.selected {
111
113
  background-color: @simple-tab-selected-background-color;
114
+ border-color: transparent;
112
115
 
113
116
  & > .title-line {
114
117
  & > .icon-container {
@@ -11,17 +11,21 @@
11
11
  .desktop-tab-area {
12
12
 
13
13
  & > .simple-overflow-tab-item {
14
- border-radius: @desktop-tab-border-radius;
15
- margin: @desktop-tab-margin-top @desktop-tab-margin-right @desktop-tab-margin-right * 2;
14
+ @desktop-overflow-tab-margin-bottom: @desktop-tab-margin-right * 2;
15
+
16
+ border-radius: @view-tab-border-radius; // Use smaller border radius, so it fits nicely into the inverted border radius of the last tab if it is selected
17
+ margin: @desktop-tab-margin-top + @desktop-overflow-tab-margin-bottom @desktop-tab-margin-right @desktop-overflow-tab-margin-bottom;
16
18
  background-color: @desktop-tab-background-color;
17
- border: 0;
19
+ border: @desktop-tab-border-width solid @desktop-tab-border-color;
18
20
 
19
21
  &:hover {
20
22
  background-color: @desktop-tab-hover-background-color;
23
+ border-color: transparent;
21
24
  }
22
25
 
23
26
  &.selected {
24
27
  background-color: @desktop-tab-hover-background-color;
28
+ border-color: transparent;
25
29
  }
26
30
  }
27
31
  }
@@ -47,5 +47,9 @@
47
47
  & > .font-icon {
48
48
  font-size: @view-tab-icon-font-size;
49
49
  }
50
+
51
+ &.ellipsis > .font-icon {
52
+ font-size: @view-tab-icon-font-size + 2px;
53
+ }
50
54
  }
51
55
  }
@@ -160,18 +160,17 @@ export default class DesktopNotification extends ScoutNotification {
160
160
  return;
161
161
  }
162
162
  if (this.nativeNotificationVisibility === DesktopNotification.NativeNotificationVisibility.NONE) {
163
+ this._hideLaterIfNativeOnly();
163
164
  return;
164
165
  }
165
166
 
166
167
  if (this.nativeNotificationVisibility === DesktopNotification.NativeNotificationVisibility.BACKGROUND && !this._isDocumentHidden()) {
168
+ this._hideLaterIfNativeOnly();
167
169
  return;
168
170
  }
169
171
 
170
172
  if (window.Notification && Notification.permission === 'denied') {
171
- if (this.nativeOnly) {
172
- // If native notifications are not allowed, there is no need to keep the (invisible) desktop notification open
173
- this.hide();
174
- }
173
+ this._hideLaterIfNativeOnly();
175
174
  return;
176
175
  }
177
176
  if (this._checkNotificationPromise()) {
@@ -182,6 +181,14 @@ export default class DesktopNotification extends ScoutNotification {
182
181
  }
183
182
  }
184
183
 
184
+ _hideLaterIfNativeOnly() {
185
+ if (!this.nativeOnly) {
186
+ return;
187
+ }
188
+ // If native notifications are not shown, there is no need to keep the (invisible) desktop notification open (prevent dom-leak)
189
+ setTimeout(() => this.hide()); // async because this method is called in render and removing the notification within render throws exception
190
+ }
191
+
185
192
  /**
186
193
  * Checks if browser supports the promise-based version of the method requestPermission. Safari only supports the older callback version.
187
194
  */
@@ -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
@@ -12,12 +12,14 @@
12
12
  @desktop-notification-margin-bottom: 10px;
13
13
 
14
14
  .desktop-notifications {
15
+ @desktop-notifications-margin-top: @desktop-header-height + 8px;
16
+
15
17
  position: fixed;
16
18
  right: 10px;
17
19
  top: 0;
18
- height: 100%;
20
+ height: calc(~'100% - ' @desktop-notifications-margin-top);
19
21
  width: @desktop-notification-width;
20
- margin-top: @desktop-header-height + 8px;
22
+ margin-top: @desktop-notifications-margin-top;
21
23
  pointer-events: none; /* Don't block access to the elements in the background */
22
24
  }
23
25
 
@@ -58,10 +58,6 @@
58
58
  line-height: @outline-node-control-line-height;
59
59
  color: @outline-node-control-color;
60
60
 
61
- &::before {
62
- font-size: @outline-node-control-size;
63
- }
64
-
65
61
  &:hover {
66
62
  color: @highlight-color;
67
63
  }
@@ -77,6 +73,10 @@
77
73
 
78
74
  & > .tree-node-control {
79
75
  color: @outline-node-selected-control-color;
76
+
77
+ &:hover {
78
+ color: @highlight-color;
79
+ }
80
80
  }
81
81
 
82
82
  & > .font-icon {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2014-2018 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,14 +70,12 @@
70
70
 
71
71
  &.left {
72
72
  visibility: hidden;
73
- left: 0;
74
- animation: show-view-tab-left-edge @view-tab-transition-duration ease-out 0s forwards;
73
+ animation: show-view-tab-left-edge 40ms ease-out 160ms forwards;
75
74
  }
76
75
 
77
76
  &.right {
78
77
  visibility: hidden;
79
- right: 0;
80
- animation: show-view-tab-right-edge @view-tab-transition-duration ease-out 0s forwards;
78
+ animation: show-view-tab-right-edge 40ms ease-out 160ms forwards;
81
79
  }
82
80
  }
83
81
  }
@@ -132,15 +130,21 @@
132
130
  }
133
131
 
134
132
  @keyframes show-view-tab-left-edge {
135
- to {
133
+ 0% {
136
134
  visibility: visible;
137
- transform: translateX(-24px);
135
+ left: -5px;
136
+ }
137
+ 100% {
138
+ left: -12px;
138
139
  }
139
140
  }
140
141
 
141
142
  @keyframes show-view-tab-right-edge {
142
- to {
143
+ 0% {
143
144
  visibility: visible;
144
- transform: translateX(24px);
145
+ right: -5px;
146
+ }
147
+ 100% {
148
+ right: -12px;
145
149
  }
146
150
  }
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2014-2018 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
@@ -19,11 +19,11 @@
19
19
  align-items: center;
20
20
  justify-content: center;
21
21
  background-color: transparent;
22
+ cursor: pointer;
22
23
 
23
24
  &:hover {
24
25
  background-color: @view-menu-tab-hover-background-color;
25
26
  color: inherit;
26
- cursor: pointer;
27
27
  }
28
28
 
29
29
  &.disabled {
@@ -158,6 +158,7 @@
158
158
  & > .view-button {
159
159
  padding-left: @view-tab-margin;
160
160
  width: @view-tab-selected-width;
161
+ cursor: default;
161
162
  }
162
163
 
163
164
  .selected-button-invisible& > .view-menu {
@@ -51,7 +51,7 @@
51
51
  text-align: center;
52
52
  word-wrap: break-word;
53
53
  #scout.font-text-large(@font-weight-bold);
54
- color: @active-color;
54
+ color: @info-color;
55
55
  }
56
56
 
57
57
  .file-chooser-label {
@@ -125,6 +125,7 @@
125
125
  #scout.overflow-ellipsis-nowrap();
126
126
  font-size: @font-size-large;
127
127
  color: @title-color;
128
+ margin-top: @text-margin-top;
128
129
  }
129
130
 
130
131
  & > .sub-title {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2014-2017 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
@@ -19,6 +19,7 @@ export default class LookupBox extends ValueField {
19
19
  this.gridDataHints.weightY = 1.0;
20
20
  this.gridDataHints.h = 2;
21
21
  this.value = [];
22
+ this.clearable = ValueField.Clearable.NEVER;
22
23
 
23
24
  this.lookupCall = null;
24
25
  this._pendingLookup = null;
@@ -0,0 +1,14 @@
1
+ /*
2
+ * Copyright (c) 2010-2022 BSI Business Systems Integration AG.
3
+ * All rights reserved. This program and the accompanying materials
4
+ * are made available under the terms of the Eclipse Public License v1.0
5
+ * which accompanies this distribution, and is available at
6
+ * http://www.eclipse.org/legal/epl-v10.html
7
+ *
8
+ * Contributors:
9
+ * BSI Business Systems Integration AG - initial API and implementation
10
+ */
11
+ .breadcrumb-bar-field > .field {
12
+ padding-top: @borderless-field-padding-y;
13
+ padding-bottom: @borderless-field-padding-y + 1px; // BreadCrumbItem uses 14px instead of 13px font size
14
+ }
@@ -162,12 +162,12 @@ export default class GroupBox extends CompositeField {
162
162
  render: () => true,
163
163
  offset: 0,
164
164
  hAlign: HAlign.RIGHT,
165
- $drawingArea: function($drawingArea, event) {
166
- if (this.labelVisible) {
165
+ $drawingArea: ($drawingArea, event) => {
166
+ if (this.$header && this.$header.isVisible()) {
167
167
  return this.$header;
168
168
  }
169
169
  return this.$body;
170
- }.bind(this)
170
+ }
171
171
  };
172
172
 
173
173
  keyStrokes
@@ -360,14 +360,11 @@ export default class GroupBox extends CompositeField {
360
360
  this.$container.toggleClass('has-scroll-shadow-bottom', hasScrollShadowBottom);
361
361
  if ((headerVisible || hasMenubarTop) && oldHasScrollShadowTop !== hasScrollShadowTop
362
362
  || hasMenubarBottom && oldHasScrollShadowBottom !== hasScrollShadowBottom) {
363
- this.invalidateLayout();
363
+ this.invalidateLayoutTree(false);
364
364
  }
365
365
 
366
366
  // Enlarge header line if there is a shadow, but don't do it if there is a menubar on top
367
367
  fields.adjustStatusPositionForScrollShadow(this, () => hasScrollShadowTop && headerVisible && !hasMenubarTop);
368
-
369
- // Prevent flickering of status icon
370
- this.validateLayout();
371
368
  }
372
369
 
373
370
  setMainBox(mainBox) {
@@ -782,9 +779,16 @@ export default class GroupBox extends CompositeField {
782
779
  }
783
780
 
784
781
  _onControlClick(event) {
785
- if (this.expandable) {
786
- this.setExpanded(!this.expanded);
782
+ if (!this.expandable) {
783
+ return;
787
784
  }
785
+ const target = scout.widget(event.target);
786
+ if (this.menuBarPosition === GroupBox.MenuBarPosition.TITLE && this.menuBar.has(target)) {
787
+ // If the position of the menubar is set to title and a menu has been clicked, then the event must not be handled
788
+ return;
789
+ }
790
+
791
+ this.setExpanded(!this.expanded);
788
792
  $.suppressEvent(event); // otherwise, the event would be triggered twice sometimes (by group-box-control and group-box-title)
789
793
  }
790
794
 
@@ -120,6 +120,7 @@
120
120
  vertical-align: middle;
121
121
  padding: @group-box-title-padding-top 0 @group-box-title-padding-bottom 0;
122
122
  max-width: 100%;
123
+ margin-top: @text-margin-top;
123
124
 
124
125
  .group-box.has-sub-label > & {
125
126
  padding-bottom: @group-box-title-with-sub-label-padding-bottom;
@@ -19,7 +19,6 @@
19
19
 
20
20
  & > .field {
21
21
  margin-left: @mandatory-indicator-width;
22
- overflow: hidden;
23
22
 
24
23
  &:focus {
25
24
  outline: none;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2014-2017 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, ListBoxLayout, LookupBox, scout, Table, ValueField} from '../../../index';
11
+ import {arrays, ListBoxLayout, LookupBox, scout, Table} from '../../../index';
12
12
 
13
13
  export default class ListBox extends LookupBox {
14
14
 
@@ -17,7 +17,6 @@ export default class ListBox extends LookupBox {
17
17
 
18
18
  this.table = null;
19
19
  this.lookupStatus = null;
20
- this.clearable = ValueField.Clearable.NEVER;
21
20
 
22
21
  this._addWidgetProperties(['table', 'filterBox']);
23
22
  }
@@ -32,6 +31,12 @@ export default class ListBox extends LookupBox {
32
31
  if (!this.table) {
33
32
  this.table = this._createDefaultListBoxTable();
34
33
  }
34
+
35
+ // align checkableColumn in table with checkboxes of tree fields
36
+ if (this.table.checkableColumn) { // may be null if a non-default list-box-table with checkable=false is used
37
+ this.table.checkableColumn.minWidth = 28;
38
+ this.table.checkableColumn.width = this.table.checkableColumn.minWidth; // do not use setWidth here
39
+ }
35
40
  }
36
41
 
37
42
  _render() {