@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.
- package/dist/eclipse-scout-core-c98fb5230e71dcec75ce.min.js +2 -0
- package/dist/eclipse-scout-core-c98fb5230e71dcec75ce.min.js.map +1 -0
- package/dist/eclipse-scout-core-theme-6b2fef56e9e49231a49c.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark-d2bb274dd42f132bfca0.min.css +1 -0
- package/dist/eclipse-scout-core-theme-dark.css +511 -399
- package/dist/eclipse-scout-core-theme-dark.css.map +1 -1
- package/dist/eclipse-scout-core-theme.css +247 -135
- package/dist/eclipse-scout-core-theme.css.map +1 -1
- package/dist/eclipse-scout-core.js +865 -646
- package/dist/eclipse-scout-core.js.map +1 -1
- package/dist/file-list +7 -0
- package/dist/locales.json +47126 -0
- package/dist/texts.json +1153 -0
- package/package.json +2 -2
- package/src/App.js +17 -10
- package/src/action/Button.less +1 -0
- package/src/box/Box.less +2 -2
- package/src/breadcrumbbar/BreadcrumbBarLayout.js +2 -2
- package/src/calendar/Calendar.js +40 -58
- package/src/calendar/Calendar.less +10 -10
- package/src/calendar/CalendarLayout.js +3 -1
- package/src/datepicker/DatePicker.less +1 -0
- package/src/desktop/desktoptab/DesktopTab.less +19 -2
- package/src/desktop/desktoptab/DesktopTabArea.less +7 -3
- package/src/desktop/desktoptab/DesktopTabAreaLayout.js +1 -1
- package/src/desktop/navigation/DesktopNavigation.less +4 -0
- package/src/desktop/notification/DesktopNotification.js +11 -4
- package/src/desktop/notification/DesktopNotification.less +5 -3
- package/src/desktop/outline/Outline.js +0 -30
- package/src/desktop/outline/Outline.less +4 -4
- package/src/desktop/viewbutton/ViewButton.less +18 -9
- package/src/desktop/viewbutton/ViewButtonBox.js +2 -2
- package/src/desktop/viewbutton/ViewMenuTab.less +3 -2
- package/src/filechooser/FileChooser.less +1 -1
- package/src/form/Form.less +1 -0
- package/src/form/fields/LookupBox.js +2 -1
- package/src/form/fields/breadcrumbbarfield/BreadcrumbBarField.less +14 -0
- package/src/form/fields/groupbox/GroupBox.js +13 -9
- package/src/form/fields/groupbox/GroupBox.less +4 -1
- package/src/form/fields/htmlfield/HtmlField.less +0 -1
- package/src/form/fields/listbox/ListBox.js +8 -3
- package/src/form/fields/tabbox/TabAreaLayout.js +63 -66
- package/src/form/fields/tabbox/TabBox.js +4 -7
- package/src/form/fields/tabbox/TabBox.less +2 -1
- package/src/form/fields/tabbox/TabBoxHeaderLayout.js +5 -5
- package/src/glasspane/GlassPane.js +3 -3
- package/src/group/Group.less +1 -1
- package/src/index.js +2 -1
- package/src/index.less +1 -0
- package/src/jquery/jquery-scout.js +5 -4
- package/src/login/LoginBox.less +9 -7
- package/src/menu/ContextMenuPopup.less +9 -2
- package/src/menu/Menu.less +1 -0
- package/src/messagebox/MessageBox.less +3 -3
- package/src/modeselector/Mode.less +15 -37
- package/src/modeselector/ModeSelector.js +1 -1
- package/src/modeselector/ModeSelector.less +2 -1
- package/src/planner/PlannerHeader.less +2 -1
- package/src/popup/Popup.js +24 -8
- package/src/popup/PopupLayout.js +2 -8
- package/src/scrollbar/Scrollbar.less +8 -1
- package/src/scrollbar/scrollbars.js +26 -4
- package/src/session/Session.js +4 -1
- package/src/style/colors-dark.less +25 -11
- package/src/style/colors.less +17 -3
- package/src/style/fonts.less +5 -0
- package/src/style/mixins.less +21 -14
- package/src/style/sizes-dark.less +4 -1
- package/src/style/sizes.less +7 -7
- package/src/table/Table.js +45 -33
- package/src/table/Table.less +49 -16
- package/src/table/TableHeader.js +10 -8
- package/src/table/TableHeader.less +1 -0
- package/src/table/TableHeaderMenu.js +3 -1
- package/src/table/TableHeaderMenu.less +7 -2
- package/src/table/columns/BooleanColumn.js +2 -2
- package/src/table/columns/Column.js +3 -3
- package/src/table/columns/ColumnOptimalWidthMeasurer.js +1 -1
- package/src/table/editor/CellEditorPopup.js +8 -1
- package/src/tagbar/TagBarOverflowPopupLayout.js +1 -1
- package/src/tile/TileGrid.js +1 -1
- package/src/tile/TileGridLayout.js +2 -2
- package/src/tile/accordion/TileAccordion.js +16 -1
- package/src/tile/fields/FormFieldTile.less +18 -11
- package/src/tile/fields/button/ButtonTile.js +1 -1
- package/src/tile/fields/htmlfield/TileHtmlField.js +28 -0
- package/src/tooltip/Tooltip.less +7 -5
- package/src/tree/CompactTree.less +1 -1
- package/src/tree/LazyNodeFilter.js +26 -15
- package/src/tree/Tree.js +114 -143
- package/src/tree/Tree.less +3 -5
- package/src/tree/TreeLayout.js +1 -1
- package/src/tree/TreeNode.js +2 -2
- package/src/util/Device.js +6 -2
- package/src/util/arrays.js +24 -2
- package/src/util/dragAndDrop.js +5 -4
- package/src/util/events.js +1 -1
- package/src/util/objects.js +4 -1
- package/src/widget/FilterSupport.js +7 -5
- package/src/widget/FilterSupport.less +38 -9
- package/src/widget/Widget.js +24 -7
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
.severity-button(@error-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, @
|
|
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, @
|
|
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-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
84
|
+
background-color: @mode-alternative-hover-background-color;
|
|
89
85
|
}
|
|
90
86
|
|
|
91
87
|
&:active {
|
|
92
|
-
background-color:
|
|
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-
|
|
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;
|
package/src/popup/Popup.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
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
|
-
|
|
189
|
-
if (parent.destroyed) {
|
|
188
|
+
if (this.parent.destroyed) {
|
|
190
189
|
return;
|
|
191
190
|
}
|
|
192
|
-
if (parent.rendered || parent.rendering) {
|
|
193
|
-
this.open(
|
|
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
|
|
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
|
}
|
package/src/popup/PopupLayout.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
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
|
|
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
|
|
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-
|
|
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
|
-
* @
|
|
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) {
|
package/src/session/Session.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
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: #
|
|
23
|
-
@palette-gray-6: #
|
|
24
|
-
@palette-gray-6-1: #
|
|
25
|
-
@palette-gray-7: #
|
|
26
|
-
@palette-gray-8: #
|
|
27
|
-
@palette-gray-9: #
|
|
28
|
-
@palette-gray-10: #
|
|
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:
|
|
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-
|
|
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-
|
|
154
|
-
@dashboard-tile-
|
|
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;
|
package/src/style/colors.less
CHANGED
|
@@ -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-
|
|
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-
|
|
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: @
|
|
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%);
|
package/src/style/fonts.less
CHANGED
|
@@ -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;
|
package/src/style/mixins.less
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c) 2010-
|
|
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, @
|
|
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:
|
|
79
|
-
height:
|
|
80
|
-
width: @
|
|
81
|
-
box-
|
|
82
|
-
|
|
83
|
-
|
|
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: -@
|
|
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: -@
|
|
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;
|