@tylertech/forge 3.8.2-dev.0 → 3.9.0-dev.0
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/custom-elements.json +10454 -10067
- package/dist/lib.js +18 -18
- package/dist/lib.js.map +3 -3
- package/dist/toolbar/forge-toolbar.css +1 -0
- package/dist/vscode.css-custom-data.json +946 -946
- package/dist/vscode.html-custom-data.json +618 -558
- package/esm/calendar/calendar-adapter.d.ts +24 -0
- package/esm/calendar/calendar-adapter.js +67 -1
- package/esm/calendar/calendar-constants.d.ts +34 -0
- package/esm/calendar/calendar-constants.js +33 -0
- package/esm/calendar/calendar-core.d.ts +60 -0
- package/esm/calendar/calendar-core.js +220 -2
- package/esm/calendar/calendar-dom-utils.d.ts +6 -0
- package/esm/calendar/calendar-dom-utils.js +36 -0
- package/esm/calendar/calendar.d.ts +40 -1
- package/esm/calendar/calendar.js +80 -2
- package/esm/calendar/core/calendar-base.d.ts +3 -0
- package/esm/calendar/core/date-range.d.ts +2 -0
- package/esm/calendar/core/date-range.js +1 -0
- package/esm/date-picker/base/base-date-picker-adapter.js +0 -3
- package/esm/date-picker/base/base-date-picker-constants.d.ts +3 -0
- package/esm/date-picker/base/base-date-picker-constants.js +3 -0
- package/esm/date-picker/base/base-date-picker-core.d.ts +15 -0
- package/esm/date-picker/base/base-date-picker-core.js +30 -0
- package/esm/date-picker/base/base-date-picker.d.ts +12 -0
- package/esm/date-picker/base/base-date-picker.js +24 -0
- package/esm/date-picker/date-picker-core.d.ts +3 -0
- package/esm/date-picker/date-picker-core.js +20 -0
- package/esm/date-range-picker/date-range-picker-constants.d.ts +3 -0
- package/esm/date-range-picker/date-range-picker-constants.js +1 -0
- package/esm/date-range-picker/date-range-picker-core.d.ts +3 -0
- package/esm/date-range-picker/date-range-picker-core.js +62 -2
- package/esm/date-range-picker/date-range-picker.d.ts +3 -0
- package/esm/date-range-picker/date-range-picker.js +3 -0
- package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
- package/esm/tabs/tab-bar/tab-bar-core.d.ts +1 -0
- package/esm/tabs/tab-bar/tab-bar-core.js +27 -30
- package/esm/toolbar/toolbar.js +1 -1
- package/package.json +1 -1
- package/sass/calendar/_mixins.scss +3 -2
- package/sass/toolbar/_core.scss +5 -0
- package/sass/toolbar/toolbar.scss +4 -0
|
@@ -48,6 +48,9 @@ export declare const BASE_DATE_PICKER_CONSTANTS: {
|
|
|
48
48
|
VALUE_MODE: string;
|
|
49
49
|
ALLOW_INVALID_DATE: string;
|
|
50
50
|
SHOW_TODAY: string;
|
|
51
|
+
SHOW_YESTERDAY: string;
|
|
52
|
+
SHOW_LAST_SEVEN_DAYS: string;
|
|
53
|
+
SHOW_LAST_THIRTY_DAYS: string;
|
|
51
54
|
SHOW_CLEAR: string;
|
|
52
55
|
DISABLED_DAYS_OF_WEEK: string;
|
|
53
56
|
YEAR_RANGE: string;
|
|
@@ -15,6 +15,9 @@ const observedAttributes = {
|
|
|
15
15
|
VALUE_MODE: 'value-mode',
|
|
16
16
|
ALLOW_INVALID_DATE: 'allow-invalid-date',
|
|
17
17
|
SHOW_TODAY: 'show-today',
|
|
18
|
+
SHOW_YESTERDAY: 'show-yesterday',
|
|
19
|
+
SHOW_LAST_SEVEN_DAYS: 'show-last-seven-days',
|
|
20
|
+
SHOW_LAST_THIRTY_DAYS: 'show-last-thirty-days',
|
|
18
21
|
SHOW_CLEAR: 'show-clear',
|
|
19
22
|
DISABLED_DAYS_OF_WEEK: 'disabled-days-of-week',
|
|
20
23
|
YEAR_RANGE: 'year-range',
|
|
@@ -49,6 +49,9 @@ export declare abstract class BaseDatePickerCore<TAdapter extends IBaseDatePicke
|
|
|
49
49
|
protected _notifyInputValueChanges: boolean;
|
|
50
50
|
protected _allowInvalidDate: boolean;
|
|
51
51
|
protected _showToday: boolean;
|
|
52
|
+
protected _showYesterday: boolean;
|
|
53
|
+
protected _showLastSevenDays: boolean;
|
|
54
|
+
protected _showLastThirtyDays: boolean;
|
|
52
55
|
protected _showClear: boolean;
|
|
53
56
|
protected _disabledDaysOfWeek: DayOfWeek[];
|
|
54
57
|
protected _yearRange: string;
|
|
@@ -64,6 +67,9 @@ export declare abstract class BaseDatePickerCore<TAdapter extends IBaseDatePicke
|
|
|
64
67
|
private _dropdownCloseListener;
|
|
65
68
|
private _activeChangeListener;
|
|
66
69
|
private _todayListener;
|
|
70
|
+
private _yesterdayListener;
|
|
71
|
+
private _lastSevenDaysListener;
|
|
72
|
+
private _lastThirtyDaysListener;
|
|
67
73
|
private _clearListener;
|
|
68
74
|
private _dateSelectListener;
|
|
69
75
|
private _monthChangeListener;
|
|
@@ -74,6 +80,9 @@ export declare abstract class BaseDatePickerCore<TAdapter extends IBaseDatePicke
|
|
|
74
80
|
protected abstract _emitOpenEvent(): void;
|
|
75
81
|
protected abstract _emitCloseEvent(): void;
|
|
76
82
|
protected abstract _onToday(): void;
|
|
83
|
+
protected abstract _onYesterday(): void;
|
|
84
|
+
protected abstract _onLastSevenDays(): void;
|
|
85
|
+
protected abstract _onLastThirtyDays(): void;
|
|
77
86
|
protected abstract _onClear(): void;
|
|
78
87
|
protected abstract _getCurrentValue(): TPrivateValue | null | undefined;
|
|
79
88
|
protected abstract _setFormattedInputValue(suppressValueChanges?: boolean): void;
|
|
@@ -149,6 +158,12 @@ export declare abstract class BaseDatePickerCore<TAdapter extends IBaseDatePicke
|
|
|
149
158
|
set prepareMaskCallback(cb: DatePickerPrepareMaskCallback);
|
|
150
159
|
get showToday(): boolean;
|
|
151
160
|
set showToday(value: boolean);
|
|
161
|
+
get showYesterday(): boolean;
|
|
162
|
+
set showYesterday(value: boolean);
|
|
163
|
+
get showLastSevenDays(): boolean;
|
|
164
|
+
set showLastSevenDays(value: boolean);
|
|
165
|
+
get showLastThirtyDays(): boolean;
|
|
166
|
+
set showLastThirtyDays(value: boolean);
|
|
152
167
|
get showClear(): boolean;
|
|
153
168
|
set showClear(value: boolean);
|
|
154
169
|
get yearRange(): string;
|
|
@@ -24,6 +24,9 @@ export class BaseDatePickerCore {
|
|
|
24
24
|
this._notifyInputValueChanges = true;
|
|
25
25
|
this._allowInvalidDate = false;
|
|
26
26
|
this._showToday = false;
|
|
27
|
+
this._showYesterday = false;
|
|
28
|
+
this._showLastSevenDays = false;
|
|
29
|
+
this._showLastThirtyDays = false;
|
|
27
30
|
this._showClear = false;
|
|
28
31
|
this._yearRange = '-50:+50';
|
|
29
32
|
this._calendarText = {};
|
|
@@ -39,6 +42,9 @@ export class BaseDatePickerCore {
|
|
|
39
42
|
this._monthChangeListener = evt => this._onMonthChanged(evt);
|
|
40
43
|
this._activeChangeListener = id => this._onActiveDescendantChanged(id);
|
|
41
44
|
this._todayListener = () => this._onToday();
|
|
45
|
+
this._yesterdayListener = () => this._onYesterday();
|
|
46
|
+
this._lastSevenDaysListener = () => this._onLastSevenDays();
|
|
47
|
+
this._lastThirtyDaysListener = () => this._onLastThirtyDays();
|
|
42
48
|
this._clearListener = () => this._onClear();
|
|
43
49
|
}
|
|
44
50
|
initialize() {
|
|
@@ -118,8 +124,14 @@ export class BaseDatePickerCore {
|
|
|
118
124
|
disabledDates: this._disabledDates,
|
|
119
125
|
yearRange: this._yearRange,
|
|
120
126
|
todayButton: this._showToday,
|
|
127
|
+
yesterdayButton: this._showYesterday,
|
|
128
|
+
lastSevenDaysButton: this._showLastSevenDays,
|
|
129
|
+
lastThirtyDaysButton: this._showLastThirtyDays,
|
|
121
130
|
clearButton: this._showClear,
|
|
122
131
|
todayCallback: this._todayListener,
|
|
132
|
+
yesterdayCallback: this._yesterdayListener,
|
|
133
|
+
lastSevenDaysCallback: this._lastSevenDaysListener,
|
|
134
|
+
lastThirtyDaysCallback: this._lastThirtyDaysListener,
|
|
123
135
|
clearCallback: this._clearListener,
|
|
124
136
|
disabledDateBuilder: this._disableDayCallback,
|
|
125
137
|
disabledDaysOfWeek: this._disabledDaysOfWeek,
|
|
@@ -607,6 +619,24 @@ export class BaseDatePickerCore {
|
|
|
607
619
|
set showToday(value) {
|
|
608
620
|
this._showToday = value;
|
|
609
621
|
}
|
|
622
|
+
get showYesterday() {
|
|
623
|
+
return this._showYesterday;
|
|
624
|
+
}
|
|
625
|
+
set showYesterday(value) {
|
|
626
|
+
this._showYesterday = value;
|
|
627
|
+
}
|
|
628
|
+
get showLastSevenDays() {
|
|
629
|
+
return this._showLastSevenDays;
|
|
630
|
+
}
|
|
631
|
+
set showLastSevenDays(value) {
|
|
632
|
+
this._showLastSevenDays = value;
|
|
633
|
+
}
|
|
634
|
+
get showLastThirtyDays() {
|
|
635
|
+
return this._showLastThirtyDays;
|
|
636
|
+
}
|
|
637
|
+
set showLastThirtyDays(value) {
|
|
638
|
+
this._showLastThirtyDays = value;
|
|
639
|
+
}
|
|
610
640
|
get showClear() {
|
|
611
641
|
return this._showClear;
|
|
612
642
|
}
|
|
@@ -27,6 +27,9 @@ export interface IBaseDatePickerComponent<TValue> extends IBaseComponent {
|
|
|
27
27
|
notifyInputValueChanges: boolean;
|
|
28
28
|
allowInvalidDate: boolean;
|
|
29
29
|
showToday: boolean;
|
|
30
|
+
showYesterday: boolean;
|
|
31
|
+
showLastSevenDays: boolean;
|
|
32
|
+
showLastThirtyDays: boolean;
|
|
30
33
|
showClear: boolean;
|
|
31
34
|
disabledDaysOfWeek: DayOfWeek[];
|
|
32
35
|
yearRange: string;
|
|
@@ -54,6 +57,9 @@ export interface IBaseDatePickerComponent<TValue> extends IBaseComponent {
|
|
|
54
57
|
* @property {boolean} [showClear=false] - Whether the clear button is visible in the popup.
|
|
55
58
|
* @property {boolean} [showMaskFormat=false] - Whether the mask format is displayed in the input or not. Only applies if `masked` is `true`.
|
|
56
59
|
* @property {boolean} [showToday=false] - Whether the today button is visible in the popup.
|
|
60
|
+
* @property {boolean} [showYesterday=false] - Whether the yesterday button is visible in the popup.
|
|
61
|
+
* @property {boolean} [showLastSevenDays=false] - Whether the last seven days button is visible in the popup.
|
|
62
|
+
* @property {boolean} [showLastThirtyDays=false] - Whether the last thirty days button is visible in the popup.
|
|
57
63
|
* @property {TValue} value - The value of the date picker.
|
|
58
64
|
* @property {DatePickerValueMode} valueMode - The type for the `value` property and `forge-date-picker-change` event.
|
|
59
65
|
* @property {string} yearRange - The year range.
|
|
@@ -72,6 +78,9 @@ export interface IBaseDatePickerComponent<TValue> extends IBaseComponent {
|
|
|
72
78
|
* @attribute {boolean} [show-clear=false] - Whether the clear button is visible in the popup.
|
|
73
79
|
* @attribute {boolean} [show-mask-format=false] - Whether the mask format is displayed in the input or not. Only applies if `masked` is `true`.
|
|
74
80
|
* @attribute {boolean} [show-today=false] - Whether the today button is visible in the popup.
|
|
81
|
+
* @attribute {boolean} [show-yesterday=false] - Whether the yesterday button is visible in the popup.
|
|
82
|
+
* @attribute {boolean} [show-last-seven-days=false] - Whether the last seven days button is visible in the popup.
|
|
83
|
+
* @attribute {boolean} [show-last-thirty-days=false] - Whether the last thirty days button is visible in the popup.
|
|
75
84
|
* @attribute {DatePickerValueMode} [value-mode=string] - The type for the `value` property and `forge-date-picker-change` event.
|
|
76
85
|
* @attribute {string} [year-range] - The year range.
|
|
77
86
|
*/
|
|
@@ -95,6 +104,9 @@ export declare abstract class BaseDatePickerComponent<TPublicValue, TPrivateValu
|
|
|
95
104
|
notifyInputValueChanges: boolean;
|
|
96
105
|
allowInvalidDate: boolean;
|
|
97
106
|
showToday: boolean;
|
|
107
|
+
showYesterday: boolean;
|
|
108
|
+
showLastSevenDays: boolean;
|
|
109
|
+
showLastThirtyDays: boolean;
|
|
98
110
|
showClear: boolean;
|
|
99
111
|
parseCallback: DatePickerParseCallback;
|
|
100
112
|
formatCallback: DatePickerFormatCallback;
|
|
@@ -28,6 +28,9 @@ import { BASE_DATE_PICKER_CONSTANTS } from './base-date-picker-constants';
|
|
|
28
28
|
* @property {boolean} [showClear=false] - Whether the clear button is visible in the popup.
|
|
29
29
|
* @property {boolean} [showMaskFormat=false] - Whether the mask format is displayed in the input or not. Only applies if `masked` is `true`.
|
|
30
30
|
* @property {boolean} [showToday=false] - Whether the today button is visible in the popup.
|
|
31
|
+
* @property {boolean} [showYesterday=false] - Whether the yesterday button is visible in the popup.
|
|
32
|
+
* @property {boolean} [showLastSevenDays=false] - Whether the last seven days button is visible in the popup.
|
|
33
|
+
* @property {boolean} [showLastThirtyDays=false] - Whether the last thirty days button is visible in the popup.
|
|
31
34
|
* @property {TValue} value - The value of the date picker.
|
|
32
35
|
* @property {DatePickerValueMode} valueMode - The type for the `value` property and `forge-date-picker-change` event.
|
|
33
36
|
* @property {string} yearRange - The year range.
|
|
@@ -46,6 +49,9 @@ import { BASE_DATE_PICKER_CONSTANTS } from './base-date-picker-constants';
|
|
|
46
49
|
* @attribute {boolean} [show-clear=false] - Whether the clear button is visible in the popup.
|
|
47
50
|
* @attribute {boolean} [show-mask-format=false] - Whether the mask format is displayed in the input or not. Only applies if `masked` is `true`.
|
|
48
51
|
* @attribute {boolean} [show-today=false] - Whether the today button is visible in the popup.
|
|
52
|
+
* @attribute {boolean} [show-yesterday=false] - Whether the yesterday button is visible in the popup.
|
|
53
|
+
* @attribute {boolean} [show-last-seven-days=false] - Whether the last seven days button is visible in the popup.
|
|
54
|
+
* @attribute {boolean} [show-last-thirty-days=false] - Whether the last thirty days button is visible in the popup.
|
|
49
55
|
* @attribute {DatePickerValueMode} [value-mode=string] - The type for the `value` property and `forge-date-picker-change` event.
|
|
50
56
|
* @attribute {string} [year-range] - The year range.
|
|
51
57
|
*/
|
|
@@ -101,6 +107,15 @@ export class BaseDatePickerComponent extends BaseComponent {
|
|
|
101
107
|
case BASE_DATE_PICKER_CONSTANTS.observedAttributes.SHOW_TODAY:
|
|
102
108
|
this.showToday = coerceBoolean(newValue);
|
|
103
109
|
break;
|
|
110
|
+
case BASE_DATE_PICKER_CONSTANTS.observedAttributes.SHOW_YESTERDAY:
|
|
111
|
+
this.showYesterday = coerceBoolean(newValue);
|
|
112
|
+
break;
|
|
113
|
+
case BASE_DATE_PICKER_CONSTANTS.observedAttributes.SHOW_LAST_SEVEN_DAYS:
|
|
114
|
+
this.showLastSevenDays = coerceBoolean(newValue);
|
|
115
|
+
break;
|
|
116
|
+
case BASE_DATE_PICKER_CONSTANTS.observedAttributes.SHOW_LAST_THIRTY_DAYS:
|
|
117
|
+
this.showLastThirtyDays = coerceBoolean(newValue);
|
|
118
|
+
break;
|
|
104
119
|
case BASE_DATE_PICKER_CONSTANTS.observedAttributes.SHOW_CLEAR:
|
|
105
120
|
this.showClear = coerceBoolean(newValue);
|
|
106
121
|
break;
|
|
@@ -161,6 +176,15 @@ __decorate([
|
|
|
161
176
|
__decorate([
|
|
162
177
|
coreProperty()
|
|
163
178
|
], BaseDatePickerComponent.prototype, "showToday", void 0);
|
|
179
|
+
__decorate([
|
|
180
|
+
coreProperty()
|
|
181
|
+
], BaseDatePickerComponent.prototype, "showYesterday", void 0);
|
|
182
|
+
__decorate([
|
|
183
|
+
coreProperty()
|
|
184
|
+
], BaseDatePickerComponent.prototype, "showLastSevenDays", void 0);
|
|
185
|
+
__decorate([
|
|
186
|
+
coreProperty()
|
|
187
|
+
], BaseDatePickerComponent.prototype, "showLastThirtyDays", void 0);
|
|
164
188
|
__decorate([
|
|
165
189
|
coreProperty()
|
|
166
190
|
], BaseDatePickerComponent.prototype, "showClear", void 0);
|
|
@@ -16,6 +16,9 @@ export declare class DatePickerCore extends BaseDatePickerCore<IDatePickerAdapte
|
|
|
16
16
|
protected _emitOpenEvent(): void;
|
|
17
17
|
protected _emitCloseEvent(): void;
|
|
18
18
|
protected _onToday(): void;
|
|
19
|
+
protected _onYesterday(): void;
|
|
20
|
+
protected _onLastSevenDays(): void;
|
|
21
|
+
protected _onLastThirtyDays(): void;
|
|
19
22
|
protected _onClear(): void;
|
|
20
23
|
protected _getCurrentValue(): Date | null | undefined;
|
|
21
24
|
protected _setFormattedInputValue(suppressValueChanges?: boolean): void;
|
|
@@ -37,6 +37,26 @@ export class DatePickerCore extends BaseDatePickerCore {
|
|
|
37
37
|
this._tryMergeCurrentTime(today);
|
|
38
38
|
this._onDateSelected({ date: today, selected: true, type: 'date' });
|
|
39
39
|
}
|
|
40
|
+
_onYesterday() {
|
|
41
|
+
const today = new Date();
|
|
42
|
+
const yesterday = new Date(today.setDate(today.getDate() - 1));
|
|
43
|
+
this._tryMergeCurrentTime(yesterday);
|
|
44
|
+
this._onDateSelected({ date: yesterday, selected: true, type: 'date' });
|
|
45
|
+
}
|
|
46
|
+
_onLastSevenDays() {
|
|
47
|
+
// not a range, so setting the day to 7 days ago
|
|
48
|
+
const today = new Date();
|
|
49
|
+
const sevenDaysAgo = new Date(today.setDate(today.getDate() - 7));
|
|
50
|
+
this._tryMergeCurrentTime(sevenDaysAgo);
|
|
51
|
+
this._onDateSelected({ date: sevenDaysAgo, selected: true, type: 'date' });
|
|
52
|
+
}
|
|
53
|
+
_onLastThirtyDays() {
|
|
54
|
+
// not a range, so setting the day to 30 days ago
|
|
55
|
+
const today = new Date();
|
|
56
|
+
const thirtyDaysAgo = new Date(today.setDate(today.getDate() - 7));
|
|
57
|
+
this._tryMergeCurrentTime(thirtyDaysAgo);
|
|
58
|
+
this._onDateSelected({ date: thirtyDaysAgo, selected: true, type: 'date' });
|
|
59
|
+
}
|
|
40
60
|
_onClear() {
|
|
41
61
|
this._onDateSelected({ date: null, selected: false, type: 'date' });
|
|
42
62
|
}
|
|
@@ -6,12 +6,14 @@
|
|
|
6
6
|
export declare class DatePickerRange implements IDatePickerRange {
|
|
7
7
|
from?: Date | string | null;
|
|
8
8
|
to?: Date | string | null;
|
|
9
|
+
rangeName?: string | null | undefined;
|
|
9
10
|
constructor(range?: IDatePickerRange);
|
|
10
11
|
copy(): DatePickerRange;
|
|
11
12
|
}
|
|
12
13
|
export interface IDatePickerRange {
|
|
13
14
|
from?: Date | string | null;
|
|
14
15
|
to?: Date | string | null;
|
|
16
|
+
rangeName?: string | null | undefined;
|
|
15
17
|
}
|
|
16
18
|
export declare const DATE_RANGE_PICKER_CONSTANTS: {
|
|
17
19
|
elementName: "forge-date-range-picker";
|
|
@@ -31,4 +33,5 @@ export declare const DATE_RANGE_PICKER_CONSTANTS: {
|
|
|
31
33
|
};
|
|
32
34
|
};
|
|
33
35
|
export interface IDateRangePickerChangeEventData extends DatePickerRange {
|
|
36
|
+
rangeName?: string | null | undefined;
|
|
34
37
|
}
|
|
@@ -32,6 +32,9 @@ export declare class DateRangePickerCore extends BaseDatePickerCore<IDateRangePi
|
|
|
32
32
|
protected _emitOpenEvent(): void;
|
|
33
33
|
protected _emitCloseEvent(): void;
|
|
34
34
|
protected _onToday(): void;
|
|
35
|
+
protected _onYesterday(): void;
|
|
36
|
+
protected _onLastSevenDays(): void;
|
|
37
|
+
protected _onLastThirtyDays(): void;
|
|
35
38
|
protected _onClear(): void;
|
|
36
39
|
protected _getCurrentValue(): IDatePickerRange | null | undefined;
|
|
37
40
|
private _applyToMask;
|
|
@@ -65,7 +65,8 @@ export class DateRangePickerCore extends BaseDatePickerCore {
|
|
|
65
65
|
_emitChangeEvent(value, force) {
|
|
66
66
|
const typedStartValue = this._getTypedValue((value && value.from) || null);
|
|
67
67
|
const typedEndValue = this._getTypedValue((value && value.to) || null);
|
|
68
|
-
const
|
|
68
|
+
const rangeName = (value && value.rangeName) || null;
|
|
69
|
+
const detail = new DatePickerRange({ from: typedStartValue, to: typedEndValue, rangeName });
|
|
69
70
|
const wasCancelled = !this._adapter.emitHostEvent(DATE_RANGE_PICKER_CONSTANTS.events.CHANGE, detail, true, !force);
|
|
70
71
|
if (!wasCancelled) {
|
|
71
72
|
this._setValue(this._coerceDateValue((value && value.from) || null));
|
|
@@ -81,9 +82,14 @@ export class DateRangePickerCore extends BaseDatePickerCore {
|
|
|
81
82
|
this._adapter.emitHostEvent(DATE_RANGE_PICKER_CONSTANTS.events.CLOSE, undefined, false);
|
|
82
83
|
}
|
|
83
84
|
_onToday() {
|
|
85
|
+
this._onClear();
|
|
84
86
|
const today = new Date();
|
|
87
|
+
const todayFrom = new Date();
|
|
88
|
+
todayFrom.setHours(0, 0, 0, 0);
|
|
85
89
|
this._tryMergeCurrentTime({ from: today });
|
|
86
|
-
const range = this._open
|
|
90
|
+
const range = this._open
|
|
91
|
+
? new DateRange({ from: this._from || todayFrom, to: this._to || today, rangeName: 'today' })
|
|
92
|
+
: new DateRange({ from: todayFrom, to: today, rangeName: 'today' });
|
|
87
93
|
if (!this._isDateRangeAcceptable(range)) {
|
|
88
94
|
return;
|
|
89
95
|
}
|
|
@@ -91,6 +97,60 @@ export class DateRangePickerCore extends BaseDatePickerCore {
|
|
|
91
97
|
this._onDateSelected({ date: today, range, selected: true, type: 'date' });
|
|
92
98
|
this._adapter.setCalendarActiveDate(today);
|
|
93
99
|
}
|
|
100
|
+
_onYesterday() {
|
|
101
|
+
this._onClear();
|
|
102
|
+
const today = new Date();
|
|
103
|
+
const yesterdayFrom = new Date(today.setDate(today.getDate() - 1));
|
|
104
|
+
yesterdayFrom.setHours(0, 0, 0, 0);
|
|
105
|
+
const yesterdayTo = new Date(yesterdayFrom);
|
|
106
|
+
yesterdayTo.setHours(23, 59, 59, 0);
|
|
107
|
+
this._tryMergeCurrentTime({ from: yesterdayFrom, to: yesterdayTo });
|
|
108
|
+
const range = this._open
|
|
109
|
+
? new DateRange({ from: this._from || yesterdayFrom, to: this._to || yesterdayTo, rangeName: 'yesterday' })
|
|
110
|
+
: new DateRange({ from: yesterdayFrom, to: yesterdayTo, rangeName: 'yesterday' });
|
|
111
|
+
if (!this._isDateRangeAcceptable(range)) {
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
this.value = range;
|
|
115
|
+
this._onDateSelected({ date: yesterdayFrom, range, selected: true, type: 'date' });
|
|
116
|
+
this._adapter.setCalendarActiveDate(yesterdayFrom);
|
|
117
|
+
}
|
|
118
|
+
_onLastSevenDays() {
|
|
119
|
+
this._onClear();
|
|
120
|
+
const today = new Date();
|
|
121
|
+
const lastSevenDaysFrom = new Date(today.setDate(today.getDate() - 7));
|
|
122
|
+
lastSevenDaysFrom.setHours(0, 0, 0, 0);
|
|
123
|
+
const lastSevenDaysTo = new Date();
|
|
124
|
+
lastSevenDaysTo.setHours(23, 59, 59, 0);
|
|
125
|
+
this._tryMergeCurrentTime({ from: lastSevenDaysFrom, to: lastSevenDaysTo });
|
|
126
|
+
const range = this._open
|
|
127
|
+
? new DateRange({ from: this._from || lastSevenDaysFrom, to: this._to || lastSevenDaysTo, rangeName: 'last 7 days' })
|
|
128
|
+
: new DateRange({ from: lastSevenDaysFrom, to: lastSevenDaysTo, rangeName: 'last 7 days' });
|
|
129
|
+
if (!this._isDateRangeAcceptable(range)) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.value = range;
|
|
133
|
+
this._onDateSelected({ date: lastSevenDaysFrom, range, selected: true, rangeSelectionState: 'from', type: 'date' });
|
|
134
|
+
this._onDateSelected({ date: lastSevenDaysTo, range, selected: true, rangeSelectionState: 'to', type: 'date' });
|
|
135
|
+
}
|
|
136
|
+
_onLastThirtyDays() {
|
|
137
|
+
this._onClear();
|
|
138
|
+
const today = new Date();
|
|
139
|
+
const lastThirtyDaysFrom = new Date(today.setDate(today.getDate() - 30));
|
|
140
|
+
lastThirtyDaysFrom.setHours(0, 0, 0, 0);
|
|
141
|
+
const lastThirtyDaysTo = new Date();
|
|
142
|
+
lastThirtyDaysTo.setHours(23, 59, 59, 0);
|
|
143
|
+
this._tryMergeCurrentTime({ from: lastThirtyDaysFrom, to: lastThirtyDaysTo });
|
|
144
|
+
const range = this._open
|
|
145
|
+
? new DateRange({ from: this._from || lastThirtyDaysFrom, to: this._to || lastThirtyDaysTo, rangeName: 'last 30 days' })
|
|
146
|
+
: new DateRange({ from: lastThirtyDaysFrom, to: lastThirtyDaysTo, rangeName: 'last 30 days' });
|
|
147
|
+
if (!this._isDateRangeAcceptable(range)) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
this.value = range;
|
|
151
|
+
this._onDateSelected({ date: lastThirtyDaysFrom, range, selected: true, rangeSelectionState: 'from', type: 'date' });
|
|
152
|
+
this._onDateSelected({ date: lastThirtyDaysTo, range, selected: true, rangeSelectionState: 'to', type: 'date' });
|
|
153
|
+
}
|
|
94
154
|
_onClear() {
|
|
95
155
|
this._onDateSelected({ date: null, range: new DateRange(), selected: false, type: 'date' });
|
|
96
156
|
this._closeCalendar(true);
|
|
@@ -44,6 +44,9 @@ declare global {
|
|
|
44
44
|
* @property {boolean} [notifyInputValueChanges=false] - Gets/sets the state of whether to notify input value changes.
|
|
45
45
|
* @property {boolean} [allowInvalidDate=false] - Gets/sets the state of whether to allow invalid dates.
|
|
46
46
|
* @property {boolean} [showToday=true] - Gets/sets the state of whether to show the "Today" button.
|
|
47
|
+
* @property {boolean} [showYesterday=true] - Gets/sets the state of whether to show the "Yesterday" button.
|
|
48
|
+
* @property {boolean} [showLastSevenDays=true] Gets/sets the state of whether to show the "Last 7 days" button.
|
|
49
|
+
* @property {boolean} [showLastThirtyDays=true] Gets/sets the state of whether to show the "Last 30 days" button.
|
|
47
50
|
* @property {boolean} [showClear=true] - Gets/sets the state of whether to show the "Clear" button.
|
|
48
51
|
* @property {DayOfWeek[]} [disabledDaysOfWeek=[]] - Gets/sets the disabled days of the week.
|
|
49
52
|
* @property {string} [yearRange=''] - Gets/sets the year range for the date range picker.
|
|
@@ -40,6 +40,9 @@ const styles = ':host{display:block}:host([hidden]){display:none}';
|
|
|
40
40
|
* @property {boolean} [notifyInputValueChanges=false] - Gets/sets the state of whether to notify input value changes.
|
|
41
41
|
* @property {boolean} [allowInvalidDate=false] - Gets/sets the state of whether to allow invalid dates.
|
|
42
42
|
* @property {boolean} [showToday=true] - Gets/sets the state of whether to show the "Today" button.
|
|
43
|
+
* @property {boolean} [showYesterday=true] - Gets/sets the state of whether to show the "Yesterday" button.
|
|
44
|
+
* @property {boolean} [showLastSevenDays=true] Gets/sets the state of whether to show the "Last 7 days" button.
|
|
45
|
+
* @property {boolean} [showLastThirtyDays=true] Gets/sets the state of whether to show the "Last 30 days" button.
|
|
43
46
|
* @property {boolean} [showClear=true] - Gets/sets the state of whether to show the "Clear" button.
|
|
44
47
|
* @property {DayOfWeek[]} [disabledDaysOfWeek=[]] - Gets/sets the disabled days of the week.
|
|
45
48
|
* @property {string} [yearRange=''] - Gets/sets the year range for the date range picker.
|
|
@@ -13,7 +13,7 @@ import { SplitViewPanelCore } from './split-view-panel-core';
|
|
|
13
13
|
import { SplitViewPanelAdapter } from './split-view-panel-adapter';
|
|
14
14
|
import { IconComponent, IconRegistry } from '../../icon';
|
|
15
15
|
const template = '<template><div class=\"forge-split-view-panel\" id=\"root\" part=\"root\"><div class=\"forge-split-view-panel__handle\" id=\"handle\" part=\"handle\" role=\"separator\" aria-controls=\"content\" aria-grabbed=\"false\" tabindex=\"0\"><forge-icon class=\"forge-split-view-panel__icon\" id=\"icon\" part=\"icon\"></forge-icon><forge-state-layer target=\"handle\" id=\"state-layer\" exportparts=\"surface:state-layer\"></forge-state-layer><forge-focus-indicator inward target=\"handle\" part=\"focus-indicator\"></forge-focus-indicator></div><div class=\"forge-split-view-panel__content\" id=\"content\" part=\"content\" role=\"group\"><slot></slot></div></div></template>';
|
|
16
|
-
const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:
|
|
16
|
+
const styles = '.forge-split-view-panel{display:flex;width:100%;height:100%;overflow:hidden}.forge-split-view-panel__handle{color:var(--forge-theme-text-medium,rgba(0,0,0,.6));background-color:var(--forge-theme-outline,#e0e0e0);position:relative;display:flex;flex-shrink:0;justify-content:center;align-items:center;outline:0}.forge-split-view-panel__content{flex:1;overflow:hidden}.forge-split-view-panel--closed{display:none}.forge-split-view-panel--disabled #handle{pointer-events:none}.forge-split-view-panel--disabled .forge-split-view-panel__icon{display:none}.forge-split-view-panel[orientation=horizontal]{min-width:var(--forge-split-view-handle-width,8px);width:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:row}.forge-split-view-panel[orientation=horizontal] .forge-split-view-panel__handle{width:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uaukume;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uaukume{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--closing[resizable=start]{position:absolute;top:0;right:0;animation-name:uaukumo;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uaukumo{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uaukung;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uaukung{from{transform:none}to{transform:translateX(-100%)}}.forge-split-view-panel[orientation=horizontal].forge-split-view-panel--opening[resizable=start]{position:absolute;top:0;right:0;animation-name:uaukunu;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uaukunu{from{transform:none}to{transform:translateX(100%)}}.forge-split-view-panel[orientation=vertical]{min-height:var(--forge-split-view-handle-width,8px);height:calc(var(--forge-split-view-panel-size,unset) + var(--forge-split-view-handle-width,8px));flex-direction:column}.forge-split-view-panel[orientation=vertical] .forge-split-view-panel__handle{height:var(--forge-split-view-handle-width,8px);cursor:var(--forge-split-view-panel-cursor)}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=end]{position:absolute;top:0;left:0;animation-name:uaukuod;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uaukuod{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--closing[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uaukup9;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1))}@keyframes uaukup9{from{transform:none}to{transform:translateY(100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=end]{position:absolute;top:0;left:0;animation-name:uaukupi;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uaukupi{from{transform:none}to{transform:translateY(-100%)}}.forge-split-view-panel[orientation=vertical].forge-split-view-panel--opening[resizable=start]{position:absolute;bottom:0;left:0;animation-name:uaukupq;animation-duration:var(--forge-animation-duration-medium2, 300ms);animation-timing-function:var(--forge-animation-easing-standard,cubic-bezier(0.2,0,0,1));animation-direction:reverse}@keyframes uaukupq{from{transform:none}to{transform:translateY(100%)}}:host{z-index:var(--forge-split-view-animating-layer)!important;display:block;position:relative;height:100%;width:100%;flex:0}:host([hidden]){display:none}:host(:not([resizable=start],[resizable=end])){flex:1}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel{width:100%;height:100%;min-width:0;min-height:0}:host(:not([resizable=start],[resizable=end])) .forge-split-view-panel__handle{display:none}forge-focus-indicator{--forge-focus-indicator-active-width:2px}';
|
|
17
17
|
import { StateLayerComponent } from '../../state-layer';
|
|
18
18
|
import { FocusIndicatorComponent } from '../../focus-indicator';
|
|
19
19
|
/**
|
|
@@ -18,6 +18,7 @@ export class TabBarCore {
|
|
|
18
18
|
this._inverted = false;
|
|
19
19
|
this._autoActivate = false;
|
|
20
20
|
this._scrollButtons = false;
|
|
21
|
+
this._tabs = [];
|
|
21
22
|
this._scrollButtonsVisible = false;
|
|
22
23
|
this._tabsChangedListener = () => this._onTabsChanged();
|
|
23
24
|
this._tabSelectedListener = (evt) => this._onTabSelected(evt);
|
|
@@ -37,7 +38,7 @@ export class TabBarCore {
|
|
|
37
38
|
this._adapter.initializeScrollObserver(this._scrollListener);
|
|
38
39
|
this._updateScrollState();
|
|
39
40
|
}
|
|
40
|
-
this.
|
|
41
|
+
this._tryScrollActiveTabIntoView();
|
|
41
42
|
this._isInitialized = true;
|
|
42
43
|
}
|
|
43
44
|
destroy() {
|
|
@@ -46,6 +47,7 @@ export class TabBarCore {
|
|
|
46
47
|
this._isInitialized = false;
|
|
47
48
|
}
|
|
48
49
|
async _onTabsChanged() {
|
|
50
|
+
this._tabs = this._adapter.getTabs();
|
|
49
51
|
this._syncTabState();
|
|
50
52
|
if (this._scrollButtons) {
|
|
51
53
|
this._detectScrollableStatus();
|
|
@@ -63,25 +65,24 @@ export class TabBarCore {
|
|
|
63
65
|
}
|
|
64
66
|
evt.preventDefault();
|
|
65
67
|
let index = -1;
|
|
66
|
-
const tabs = this._adapter.getTabs();
|
|
67
68
|
if (evt.key === 'Home') {
|
|
68
69
|
// Locate the first non-disabled tab
|
|
69
|
-
index =
|
|
70
|
+
index = this._tabs.findIndex(tab => !tab.disabled);
|
|
70
71
|
}
|
|
71
72
|
else if (evt.key === 'End') {
|
|
72
73
|
// Locate the last non-disabled tab
|
|
73
|
-
index =
|
|
74
|
+
index = this._tabs.reduceRight((acc, tab, i) => (!tab.disabled && acc === -1 ? i : acc), -1);
|
|
74
75
|
}
|
|
75
76
|
else {
|
|
76
77
|
// Locate the next or previous tab based on the key that was pressed
|
|
77
|
-
const currentIndex =
|
|
78
|
+
const currentIndex = this._tabs.findIndex(tab => tab.matches(':focus'));
|
|
78
79
|
const isPrevKey = evt.key === 'ArrowLeft' || evt.key === 'ArrowUp';
|
|
79
80
|
const calcIndex = (startIndex) => {
|
|
80
81
|
index = startIndex + (isPrevKey ? -1 : 1);
|
|
81
|
-
index = index < 0 ?
|
|
82
|
+
index = index < 0 ? this._tabs.length - 1 : index % this._tabs.length;
|
|
82
83
|
// Try to recurse until we find a non-disabled tab (unless all tabs are disabled already)
|
|
83
|
-
const isAllTabsDisabled =
|
|
84
|
-
if (!isAllTabsDisabled &&
|
|
84
|
+
const isAllTabsDisabled = this._tabs.every(tab => tab.disabled);
|
|
85
|
+
if (!isAllTabsDisabled && this._tabs[index]?.disabled) {
|
|
85
86
|
calcIndex(index);
|
|
86
87
|
}
|
|
87
88
|
};
|
|
@@ -91,24 +92,23 @@ export class TabBarCore {
|
|
|
91
92
|
return;
|
|
92
93
|
}
|
|
93
94
|
if (this._autoActivate) {
|
|
94
|
-
this._selectTab({ tab:
|
|
95
|
+
this._selectTab({ tab: this._tabs[index], focusTab: true });
|
|
95
96
|
}
|
|
96
97
|
else {
|
|
97
|
-
|
|
98
|
-
await this._adapter.tryScrollTabIntoView(
|
|
98
|
+
this._tabs[index].focus({ preventScroll: true, focusVisible: true });
|
|
99
|
+
await this._adapter.tryScrollTabIntoView(this._tabs[index]);
|
|
99
100
|
}
|
|
100
101
|
}
|
|
101
102
|
async _selectTab({ tab, emitEvent = true, focusTab = false }) {
|
|
102
103
|
if (!tab || tab.disabled) {
|
|
103
104
|
return;
|
|
104
105
|
}
|
|
105
|
-
const
|
|
106
|
-
const currentSelectedTab = tabs.find(t => t.selected);
|
|
106
|
+
const currentSelectedTab = this._tabs.find(t => t.selected);
|
|
107
107
|
if (currentSelectedTab === tab) {
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
if (emitEvent) {
|
|
111
|
-
const index =
|
|
111
|
+
const index = this._tabs.indexOf(tab);
|
|
112
112
|
const event = new CustomEvent(TAB_BAR_CONSTANTS.events.CHANGE, {
|
|
113
113
|
detail: { index },
|
|
114
114
|
bubbles: true,
|
|
@@ -132,7 +132,7 @@ export class TabBarCore {
|
|
|
132
132
|
if (currentSelectedTab) {
|
|
133
133
|
currentSelectedTab.selected = false;
|
|
134
134
|
}
|
|
135
|
-
this._activeTab =
|
|
135
|
+
this._activeTab = this._tabs.indexOf(tab);
|
|
136
136
|
}
|
|
137
137
|
/**
|
|
138
138
|
* Ensures that all tabs have the correct state based on the tab bar state.
|
|
@@ -140,14 +140,13 @@ export class TabBarCore {
|
|
|
140
140
|
* This is called whenever a child tab is added to the DOM.
|
|
141
141
|
*/
|
|
142
142
|
_syncTabState() {
|
|
143
|
-
|
|
144
|
-
tabs.forEach((tab, index) => {
|
|
143
|
+
this._tabs.forEach((tab, index) => {
|
|
145
144
|
tab.selected = index === this._activeTab;
|
|
146
|
-
if (this._disabled)
|
|
145
|
+
if (this._disabled)
|
|
147
146
|
tab.disabled = this._disabled;
|
|
148
|
-
}
|
|
149
147
|
tab.vertical = this._vertical;
|
|
150
148
|
tab.stacked = this._stacked;
|
|
149
|
+
tab.secondary = this._secondary;
|
|
151
150
|
tab.inverted = this._inverted;
|
|
152
151
|
});
|
|
153
152
|
}
|
|
@@ -200,11 +199,10 @@ export class TabBarCore {
|
|
|
200
199
|
}
|
|
201
200
|
// We batch the tab scrolling into a single animation frame to unnecessarily scrolling for each tab
|
|
202
201
|
this._tabScrollAnimationFrame = window.requestAnimationFrame(() => {
|
|
203
|
-
const tabs = this._adapter.getTabs();
|
|
204
202
|
this._tabScrollAnimationFrame = undefined;
|
|
205
203
|
if (this._adapter.isScrollable()) {
|
|
206
|
-
if (typeof this._activeTab === 'number' && this._activeTab >= 0 &&
|
|
207
|
-
this._adapter.tryScrollTabIntoView(
|
|
204
|
+
if (typeof this._activeTab === 'number' && this._activeTab >= 0 && this._tabs[this._activeTab]) {
|
|
205
|
+
this._adapter.tryScrollTabIntoView(this._tabs[this._activeTab]);
|
|
208
206
|
}
|
|
209
207
|
}
|
|
210
208
|
});
|
|
@@ -216,7 +214,7 @@ export class TabBarCore {
|
|
|
216
214
|
value = Boolean(value);
|
|
217
215
|
if (this._disabled !== value) {
|
|
218
216
|
this._disabled = value;
|
|
219
|
-
this.
|
|
217
|
+
this._tabs.forEach(tab => (tab.disabled = this._disabled));
|
|
220
218
|
this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.DISABLED, this._disabled);
|
|
221
219
|
}
|
|
222
220
|
}
|
|
@@ -226,14 +224,13 @@ export class TabBarCore {
|
|
|
226
224
|
set activeTab(value) {
|
|
227
225
|
if (this._activeTab !== value) {
|
|
228
226
|
this._activeTab = value ?? undefined;
|
|
229
|
-
const tabs = this._adapter.getTabs();
|
|
230
227
|
if (typeof this._activeTab === 'number') {
|
|
231
|
-
const newSelectedTab =
|
|
228
|
+
const newSelectedTab = this._tabs[this._activeTab];
|
|
232
229
|
this._selectTab({ tab: newSelectedTab, emitEvent: false, focusTab: false });
|
|
233
230
|
this._adapter.setHostAttribute(TAB_BAR_CONSTANTS.attributes.ACTIVE_TAB, String(this._activeTab));
|
|
234
231
|
}
|
|
235
232
|
else {
|
|
236
|
-
|
|
233
|
+
this._tabs.forEach(tab => (tab.selected = false));
|
|
237
234
|
this._adapter.removeHostAttribute(TAB_BAR_CONSTANTS.attributes.ACTIVE_TAB);
|
|
238
235
|
}
|
|
239
236
|
}
|
|
@@ -248,7 +245,7 @@ export class TabBarCore {
|
|
|
248
245
|
if (this._isInitialized) {
|
|
249
246
|
this._adapter.setVertical(this._vertical);
|
|
250
247
|
}
|
|
251
|
-
this.
|
|
248
|
+
this._tabs.forEach(tab => (tab.vertical = this._vertical));
|
|
252
249
|
if (this._scrollButtonsVisible) {
|
|
253
250
|
this._adapter.updateScrollButtonIcons(this._vertical);
|
|
254
251
|
}
|
|
@@ -272,7 +269,7 @@ export class TabBarCore {
|
|
|
272
269
|
value = Boolean(value);
|
|
273
270
|
if (this._stacked !== value) {
|
|
274
271
|
this._stacked = value;
|
|
275
|
-
this.
|
|
272
|
+
this._tabs.forEach(tab => (tab.stacked = this._stacked));
|
|
276
273
|
this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.STACKED, this._stacked);
|
|
277
274
|
}
|
|
278
275
|
}
|
|
@@ -283,7 +280,7 @@ export class TabBarCore {
|
|
|
283
280
|
value = Boolean(value);
|
|
284
281
|
if (this._secondary !== value) {
|
|
285
282
|
this._secondary = value;
|
|
286
|
-
this.
|
|
283
|
+
this._tabs.forEach(tab => (tab.secondary = this._secondary));
|
|
287
284
|
this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.SECONDARY, this._secondary);
|
|
288
285
|
}
|
|
289
286
|
}
|
|
@@ -294,7 +291,7 @@ export class TabBarCore {
|
|
|
294
291
|
value = Boolean(value);
|
|
295
292
|
if (this._inverted !== value) {
|
|
296
293
|
this._inverted = value;
|
|
297
|
-
this.
|
|
294
|
+
this._tabs.forEach(tab => (tab.inverted = this._inverted));
|
|
298
295
|
this._adapter.toggleHostAttribute(TAB_BAR_CONSTANTS.attributes.INVERTED, this._inverted);
|
|
299
296
|
}
|
|
300
297
|
}
|