@tylertech/forge 2.13.0-next.0 → 2.13.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/README.md +1 -1
- package/custom-elements.json +106 -107
- package/dist/esm/app-bar/help-button/index.js +1 -1
- package/dist/esm/app-bar/index.js +1 -1
- package/dist/esm/autocomplete/index.js +1 -1
- package/dist/esm/bottom-sheet/index.js +1 -1
- package/dist/esm/chip-field/index.js +1 -1
- package/dist/esm/chunks/{chunk.Z5P6EA5L.js → chunk.6QMDYUVT.js} +2 -2
- package/dist/esm/chunks/{chunk.Z5P6EA5L.js.map → chunk.6QMDYUVT.js.map} +0 -0
- package/dist/esm/chunks/{chunk.VH3PVW2V.js → chunk.6SGRP4FO.js} +2 -2
- package/dist/esm/chunks/{chunk.VH3PVW2V.js.map → chunk.6SGRP4FO.js.map} +0 -0
- package/dist/esm/chunks/{chunk.SZL74RTY.js → chunk.6XXKSGW5.js} +2 -2
- package/dist/esm/chunks/{chunk.SZL74RTY.js.map → chunk.6XXKSGW5.js.map} +0 -0
- package/dist/esm/chunks/chunk.75KFBRF6.js +7 -0
- package/dist/esm/chunks/{chunk.CYJBOJMX.js.map → chunk.75KFBRF6.js.map} +2 -2
- package/dist/esm/chunks/chunk.BX7242PC.js +7 -0
- package/dist/esm/chunks/chunk.BX7242PC.js.map +7 -0
- package/dist/esm/chunks/{chunk.K32ME33N.js → chunk.DQBSFX46.js} +2 -2
- package/dist/esm/chunks/{chunk.K32ME33N.js.map → chunk.DQBSFX46.js.map} +0 -0
- package/dist/esm/chunks/chunk.EJ4ASQET.js +7 -0
- package/dist/esm/chunks/chunk.EJ4ASQET.js.map +7 -0
- package/dist/esm/chunks/{chunk.KGW63HJX.js → chunk.F2TKPPK7.js} +2 -2
- package/dist/esm/chunks/{chunk.KGW63HJX.js.map → chunk.F2TKPPK7.js.map} +0 -0
- package/dist/esm/chunks/{chunk.DML4YNQF.js → chunk.HSJQA42U.js} +2 -2
- package/dist/esm/chunks/{chunk.DML4YNQF.js.map → chunk.HSJQA42U.js.map} +2 -2
- package/dist/esm/chunks/{chunk.DGOV5RDW.js → chunk.HUWXZ4ZN.js} +2 -2
- package/dist/esm/chunks/{chunk.DGOV5RDW.js.map → chunk.HUWXZ4ZN.js.map} +2 -2
- package/dist/esm/chunks/{chunk.D3DLVPPE.js → chunk.J2ODMCFS.js} +2 -2
- package/dist/esm/chunks/{chunk.D3DLVPPE.js.map → chunk.J2ODMCFS.js.map} +0 -0
- package/dist/esm/chunks/{chunk.E4ZTNVXI.js → chunk.J6CIWTDH.js} +2 -2
- package/dist/esm/chunks/{chunk.E4ZTNVXI.js.map → chunk.J6CIWTDH.js.map} +0 -0
- package/dist/esm/chunks/chunk.LMOYZQZJ.js +7 -0
- package/dist/esm/chunks/chunk.LMOYZQZJ.js.map +7 -0
- package/dist/esm/chunks/chunk.NNGE722W.js +7 -0
- package/dist/esm/chunks/chunk.NNGE722W.js.map +7 -0
- package/dist/esm/chunks/{chunk.32SMESZX.js → chunk.O2XO3IRX.js} +2 -2
- package/dist/esm/chunks/{chunk.32SMESZX.js.map → chunk.O2XO3IRX.js.map} +0 -0
- package/dist/esm/chunks/{chunk.2ZSAAJDN.js → chunk.ON3JVSSR.js} +2 -2
- package/dist/esm/chunks/{chunk.2ZSAAJDN.js.map → chunk.ON3JVSSR.js.map} +0 -0
- package/dist/esm/chunks/chunk.PZTAIVJW.js +7 -0
- package/dist/esm/chunks/chunk.PZTAIVJW.js.map +7 -0
- package/dist/esm/chunks/{chunk.NTFA7FCB.js → chunk.QEHJJKFZ.js} +2 -2
- package/dist/esm/chunks/{chunk.NTFA7FCB.js.map → chunk.QEHJJKFZ.js.map} +0 -0
- package/dist/esm/chunks/chunk.QOZLQPKE.js +7 -0
- package/dist/esm/chunks/chunk.QOZLQPKE.js.map +7 -0
- package/dist/esm/chunks/{chunk.G5Q2CUUE.js → chunk.RGWUF3J2.js} +2 -2
- package/dist/esm/chunks/{chunk.G5Q2CUUE.js.map → chunk.RGWUF3J2.js.map} +0 -0
- package/dist/esm/chunks/{chunk.F3W3XMGT.js → chunk.RST65QIB.js} +2 -2
- package/dist/esm/chunks/{chunk.F3W3XMGT.js.map → chunk.RST65QIB.js.map} +0 -0
- package/dist/esm/chunks/{chunk.WUIIZZQD.js → chunk.WIUER75G.js} +2 -2
- package/dist/esm/chunks/{chunk.WUIIZZQD.js.map → chunk.WIUER75G.js.map} +0 -0
- package/dist/esm/chunks/{chunk.V7P3QPNM.js → chunk.Y7Q6QI5V.js} +2 -2
- package/dist/esm/chunks/{chunk.V7P3QPNM.js.map → chunk.Y7Q6QI5V.js.map} +2 -2
- package/dist/esm/chunks/chunk.YPUWII7L.js +7 -0
- package/dist/esm/chunks/{chunk.5PQTSZ7G.js.map → chunk.YPUWII7L.js.map} +2 -2
- package/dist/esm/date-picker/index.js +1 -1
- package/dist/esm/date-range-picker/index.js +1 -1
- package/dist/esm/dialog/index.js +1 -1
- package/dist/esm/file-picker/index.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/list/index.js +1 -1
- package/dist/esm/list/list/index.js +1 -1
- package/dist/esm/list/list-item/index.js +1 -1
- package/dist/esm/list-dropdown/index.js +1 -1
- package/dist/esm/menu/index.js +1 -1
- package/dist/esm/paginator/index.js +1 -1
- package/dist/esm/select/core/index.js +1 -1
- package/dist/esm/select/index.js +1 -1
- package/dist/esm/select/option/index.js +1 -1
- package/dist/esm/select/select/index.js +1 -1
- package/dist/esm/select/select-dropdown/index.js +1 -1
- package/dist/esm/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view/index.js +1 -1
- package/dist/esm/split-view/split-view-panel/index.js +1 -1
- package/dist/esm/switch/index.js +1 -1
- package/dist/esm/text-field/index.js +1 -1
- package/dist/esm/time-picker/index.js +1 -1
- package/esm/chip-field/chip-field.js +1 -1
- package/esm/date-range-picker/date-range-picker-foundation.d.ts +1 -0
- package/esm/date-range-picker/date-range-picker-foundation.js +13 -1
- package/esm/dialog/dialog-adapter.d.ts +5 -5
- package/esm/dialog/dialog-adapter.js +31 -30
- package/esm/dialog/dialog-foundation.d.ts +2 -4
- package/esm/dialog/dialog-foundation.js +38 -55
- package/esm/dialog/dialog.d.ts +0 -4
- package/esm/dialog/dialog.js +1 -7
- package/esm/file-picker/file-picker.js +1 -1
- package/esm/list/list-item/list-item-adapter.d.ts +7 -2
- package/esm/list/list-item/list-item-adapter.js +10 -4
- package/esm/list/list-item/list-item-foundation.js +8 -2
- package/esm/list/list-item/list-item.d.ts +1 -1
- package/esm/list/list-item/list-item.js +1 -1
- package/esm/select/core/base-select-adapter.js +11 -1
- package/esm/select/core/base-select-foundation.js +7 -3
- package/esm/select/option/option-constants.d.ts +3 -0
- package/esm/select/option/option-constants.js +5 -1
- package/esm/select/option/option-foundation.d.ts +2 -2
- package/esm/select/option/option-foundation.js +1 -0
- package/esm/select/select/select.js +1 -1
- package/esm/split-view/split-view/split-view-constants.d.ts +0 -1
- package/esm/split-view/split-view-panel/split-view-panel-adapter.d.ts +4 -1
- package/esm/split-view/split-view-panel/split-view-panel-adapter.js +17 -6
- package/esm/split-view/split-view-panel/split-view-panel-constants.d.ts +1 -0
- package/esm/split-view/split-view-panel/split-view-panel-constants.js +2 -1
- package/esm/split-view/split-view-panel/split-view-panel-foundation.js +1 -4
- package/esm/split-view/split-view-panel/split-view-panel-utils.d.ts +6 -0
- package/esm/split-view/split-view-panel/split-view-panel-utils.js +17 -0
- package/esm/split-view/split-view-panel/split-view-panel.js +1 -1
- package/esm/switch/switch.d.ts +1 -0
- package/esm/switch/switch.js +13 -9
- package/esm/text-field/text-field.js +1 -1
- package/package.json +1 -1
- package/styles/field/_base.scss +4 -2
- package/styles/field/_variables.scss +0 -3
- package/dist/esm/chunks/chunk.5D6UB4DL.js +0 -7
- package/dist/esm/chunks/chunk.5D6UB4DL.js.map +0 -7
- package/dist/esm/chunks/chunk.5PQTSZ7G.js +0 -7
- package/dist/esm/chunks/chunk.7JTKKFL4.js +0 -7
- package/dist/esm/chunks/chunk.7JTKKFL4.js.map +0 -7
- package/dist/esm/chunks/chunk.CYJBOJMX.js +0 -7
- package/dist/esm/chunks/chunk.IGMTMR3D.js +0 -7
- package/dist/esm/chunks/chunk.IGMTMR3D.js.map +0 -7
- package/dist/esm/chunks/chunk.TCCPCDJK.js +0 -7
- package/dist/esm/chunks/chunk.TCCPCDJK.js.map +0 -7
- package/dist/esm/chunks/chunk.VQKRN5IQ.js +0 -7
- package/dist/esm/chunks/chunk.VQKRN5IQ.js.map +0 -7
- package/dist/esm/chunks/chunk.YK2PXI6D.js +0 -7
- package/dist/esm/chunks/chunk.YK2PXI6D.js.map +0 -7
|
@@ -77,7 +77,10 @@ export class DateRangePickerFoundation extends BaseDatePickerFoundation {
|
|
|
77
77
|
}
|
|
78
78
|
_onToday() {
|
|
79
79
|
const today = new Date();
|
|
80
|
-
const range = new DateRange({ from: today });
|
|
80
|
+
const range = this._open ? new DateRange({ from: this._from || today, to: this._to || undefined }) : new DateRange({ from: today });
|
|
81
|
+
if (!this._isDateRangeAcceptable(range)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
81
84
|
this.value = range;
|
|
82
85
|
this._onDateSelected({ date: today, range, selected: true, type: 'date' });
|
|
83
86
|
this._adapter.setCalendarActiveDate(today);
|
|
@@ -120,6 +123,15 @@ export class DateRangePickerFoundation extends BaseDatePickerFoundation {
|
|
|
120
123
|
}
|
|
121
124
|
this._adapter.setToInputValue(formattedDate, suppressValueChanges ? false : this._notifyInputValueChanges);
|
|
122
125
|
}
|
|
126
|
+
_isDateRangeAcceptable(value) {
|
|
127
|
+
if (!(value === null || value === void 0 ? void 0 : value.to)) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
const passesMinDate = () => this._isDateValueAcceptable(value.from);
|
|
131
|
+
const passesMaxDate = () => this._isDateValueAcceptable(value.to);
|
|
132
|
+
const passesDateRange = () => (value === null || value === void 0 ? void 0 : value.from) && (value === null || value === void 0 ? void 0 : value.to) ? value.from.getTime() <= value.to.getTime() : true;
|
|
133
|
+
return passesMinDate() && passesMaxDate() && passesDateRange();
|
|
134
|
+
}
|
|
123
135
|
_setValue(value) {
|
|
124
136
|
if (this._isDateValueAcceptable(value)) {
|
|
125
137
|
this._from = value || null;
|
|
@@ -10,7 +10,7 @@ export interface IDialogAdapter extends IBaseAdapter {
|
|
|
10
10
|
initializeAccessibility(): void;
|
|
11
11
|
setAnimating(animating: boolean): void;
|
|
12
12
|
setVisibility(visible: boolean): void;
|
|
13
|
-
attach(
|
|
13
|
+
attach(): void;
|
|
14
14
|
detach(): void;
|
|
15
15
|
setDocumentListener(type: string, listener: (evt: Event) => void): void;
|
|
16
16
|
removeDocumentListener(type: string, listener: (evt: Event) => void): void;
|
|
@@ -31,7 +31,7 @@ export interface IDialogAdapter extends IBaseAdapter {
|
|
|
31
31
|
setMoveTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
|
|
32
32
|
removeDragTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
|
|
33
33
|
getSurfaceBounds(): DOMRect;
|
|
34
|
-
setSurfacePosition(x: string | null, y: string | null, positionType: DialogPositionType
|
|
34
|
+
setSurfacePosition(x: string | null, y: string | null, positionType: DialogPositionType): void;
|
|
35
35
|
captureActiveElement(): void;
|
|
36
36
|
tryRestoreActiveElement(): void;
|
|
37
37
|
}
|
|
@@ -39,7 +39,7 @@ export interface IDialogAdapter extends IBaseAdapter {
|
|
|
39
39
|
* Provides facilities for interacting with the internal DOM of `DialogComponent`.
|
|
40
40
|
*/
|
|
41
41
|
export declare class DialogAdapter extends BaseAdapter<IDialogComponent> implements IDialogAdapter {
|
|
42
|
-
private _backdropElement
|
|
42
|
+
private _backdropElement;
|
|
43
43
|
private _containerElement;
|
|
44
44
|
private _surfaceElement;
|
|
45
45
|
private _moveTargetElement;
|
|
@@ -48,7 +48,7 @@ export declare class DialogAdapter extends BaseAdapter<IDialogComponent> impleme
|
|
|
48
48
|
initializeAccessibility(): void;
|
|
49
49
|
setAnimating(animating: boolean): void;
|
|
50
50
|
setVisibility(visible: boolean): void;
|
|
51
|
-
attach(
|
|
51
|
+
attach(): void;
|
|
52
52
|
detach(): void;
|
|
53
53
|
registerTransitionEndHandler(handler: (evt: TransitionEvent) => void): void;
|
|
54
54
|
deregisterTransitionEndHandler(handler: (evt: TransitionEvent) => void): void;
|
|
@@ -69,7 +69,7 @@ export declare class DialogAdapter extends BaseAdapter<IDialogComponent> impleme
|
|
|
69
69
|
setMoveTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
|
|
70
70
|
removeDragTargetHandler(type: string, listener: (evt: MouseEvent) => void): void;
|
|
71
71
|
getSurfaceBounds(): DOMRect;
|
|
72
|
-
setSurfacePosition(x: string | null, y: string | null, positionType: DialogPositionType
|
|
72
|
+
setSurfacePosition(x: string | null, y: string | null, positionType: DialogPositionType): void;
|
|
73
73
|
captureActiveElement(): void;
|
|
74
74
|
tryRestoreActiveElement(): void;
|
|
75
75
|
}
|
|
@@ -17,6 +17,7 @@ import { DIALOG_CONSTANTS } from './dialog-constants';
|
|
|
17
17
|
export class DialogAdapter extends BaseAdapter {
|
|
18
18
|
constructor(component) {
|
|
19
19
|
super(component);
|
|
20
|
+
this._backdropElement = getShadowElement(component, DIALOG_CONSTANTS.selectors.BACKDROP);
|
|
20
21
|
this._containerElement = getShadowElement(component, DIALOG_CONSTANTS.selectors.CONTAINER);
|
|
21
22
|
this._surfaceElement = getShadowElement(component, DIALOG_CONSTANTS.selectors.SURFACE);
|
|
22
23
|
}
|
|
@@ -27,24 +28,23 @@ export class DialogAdapter extends BaseAdapter {
|
|
|
27
28
|
this._component.setAttribute('aria-modal', 'true');
|
|
28
29
|
}
|
|
29
30
|
setAnimating(animating) {
|
|
30
|
-
|
|
31
|
+
if (animating) {
|
|
32
|
+
this._containerElement.classList.add(DIALOG_CONSTANTS.classes.ANIMATING);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this._containerElement.classList.remove(DIALOG_CONSTANTS.classes.ANIMATING);
|
|
36
|
+
}
|
|
31
37
|
}
|
|
32
38
|
setVisibility(visible) {
|
|
33
|
-
toggleClass(this._containerElement, visible, DIALOG_CONSTANTS.classes.OPEN);
|
|
34
|
-
if (!this._backdropElement) {
|
|
35
|
-
this._backdropElement = document.createElement('forge-backdrop');
|
|
36
|
-
this._backdropElement.setAttribute('part', 'scrim');
|
|
37
|
-
this._containerElement.appendChild(this._backdropElement);
|
|
38
|
-
}
|
|
39
39
|
if (visible) {
|
|
40
|
-
this.
|
|
40
|
+
this._containerElement.classList.add(DIALOG_CONSTANTS.classes.OPEN);
|
|
41
41
|
}
|
|
42
42
|
else {
|
|
43
|
-
this.
|
|
43
|
+
this._containerElement.classList.remove(DIALOG_CONSTANTS.classes.OPEN);
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
|
-
attach(
|
|
47
|
-
|
|
46
|
+
attach() {
|
|
47
|
+
document.body.appendChild(this._component);
|
|
48
48
|
}
|
|
49
49
|
detach() {
|
|
50
50
|
if (this._activeElement) {
|
|
@@ -65,12 +65,10 @@ export class DialogAdapter extends BaseAdapter {
|
|
|
65
65
|
document.removeEventListener(type, listener);
|
|
66
66
|
}
|
|
67
67
|
registerBackdropClickHandler(handler) {
|
|
68
|
-
|
|
69
|
-
(_a = this._backdropElement) === null || _a === void 0 ? void 0 : _a.addEventListener(BACKDROP_CONSTANTS.events.BACKDROP_CLICK, handler);
|
|
68
|
+
this._backdropElement.addEventListener(BACKDROP_CONSTANTS.events.BACKDROP_CLICK, handler);
|
|
70
69
|
}
|
|
71
70
|
deregisterBackdropClickHandler(handler) {
|
|
72
|
-
|
|
73
|
-
(_a = this._backdropElement) === null || _a === void 0 ? void 0 : _a.removeEventListener(BACKDROP_CONSTANTS.events.BACKDROP_CLICK, handler);
|
|
71
|
+
this._backdropElement.removeEventListener(BACKDROP_CONSTANTS.events.BACKDROP_CLICK, handler);
|
|
74
72
|
}
|
|
75
73
|
getOpenDialogs(selector) {
|
|
76
74
|
return document.querySelectorAll(selector);
|
|
@@ -99,7 +97,12 @@ export class DialogAdapter extends BaseAdapter {
|
|
|
99
97
|
this._component.classList.add(name);
|
|
100
98
|
}
|
|
101
99
|
setFullscreen(value) {
|
|
102
|
-
|
|
100
|
+
if (value) {
|
|
101
|
+
this._containerElement.classList.add(DIALOG_CONSTANTS.classes.FULLSCREEN);
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
this._containerElement.classList.remove(DIALOG_CONSTANTS.classes.FULLSCREEN);
|
|
105
|
+
}
|
|
103
106
|
}
|
|
104
107
|
setMoveable(value) {
|
|
105
108
|
toggleClass(this._containerElement, value, DIALOG_CONSTANTS.classes.MOVEABLE);
|
|
@@ -117,30 +120,27 @@ export class DialogAdapter extends BaseAdapter {
|
|
|
117
120
|
return !!this._moveTargetElement;
|
|
118
121
|
}
|
|
119
122
|
setMoveTargetHandler(type, listener) {
|
|
120
|
-
|
|
121
|
-
|
|
123
|
+
if (this._moveTargetElement) {
|
|
124
|
+
this._moveTargetElement.addEventListener(type, listener);
|
|
125
|
+
}
|
|
122
126
|
}
|
|
123
127
|
removeDragTargetHandler(type, listener) {
|
|
124
|
-
|
|
125
|
-
|
|
128
|
+
if (this._moveTargetElement) {
|
|
129
|
+
this._moveTargetElement.removeEventListener(type, listener);
|
|
130
|
+
}
|
|
126
131
|
}
|
|
127
132
|
getSurfaceBounds() {
|
|
128
133
|
return this._surfaceElement.getBoundingClientRect();
|
|
129
134
|
}
|
|
130
135
|
setSurfacePosition(x, y, positionType) {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
this._surfaceElement.style.removeProperty('position');
|
|
136
|
-
}
|
|
137
|
-
if (y !== null) {
|
|
136
|
+
this._surfaceElement.style.position = positionType === 'absolute' ? positionType : 'relative';
|
|
137
|
+
if (y != null) {
|
|
138
138
|
this._surfaceElement.style.top = y;
|
|
139
139
|
}
|
|
140
140
|
else {
|
|
141
141
|
this._surfaceElement.style.removeProperty('top');
|
|
142
142
|
}
|
|
143
|
-
if (x
|
|
143
|
+
if (x != null) {
|
|
144
144
|
this._surfaceElement.style.left = x;
|
|
145
145
|
}
|
|
146
146
|
else {
|
|
@@ -148,9 +148,10 @@ export class DialogAdapter extends BaseAdapter {
|
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
captureActiveElement() {
|
|
151
|
-
var _a;
|
|
152
151
|
this._activeElement = getActiveElement();
|
|
153
|
-
(
|
|
152
|
+
if (this._activeElement) {
|
|
153
|
+
this._activeElement.blur();
|
|
154
|
+
}
|
|
154
155
|
}
|
|
155
156
|
tryRestoreActiveElement() {
|
|
156
157
|
if (this._activeElement) {
|
|
@@ -21,8 +21,6 @@ export interface IDialogFoundation extends ICustomElementFoundation {
|
|
|
21
21
|
moveTarget: string;
|
|
22
22
|
initializeMoveTarget(): void;
|
|
23
23
|
resetPosition(): void;
|
|
24
|
-
show(parent?: HTMLElement): Promise<void>;
|
|
25
|
-
hide(remove?: boolean): Promise<void>;
|
|
26
24
|
}
|
|
27
25
|
export declare class DialogFoundation implements IDialogFoundation {
|
|
28
26
|
_adapter: IDialogAdapter;
|
|
@@ -48,6 +46,8 @@ export declare class DialogFoundation implements IDialogFoundation {
|
|
|
48
46
|
private _moveTargetMouseDownHandler;
|
|
49
47
|
private _moveTargetMouseMoveHandler;
|
|
50
48
|
private _moveTargetMouseUpHandler;
|
|
49
|
+
private _attachedDocumentKeydownHandler;
|
|
50
|
+
private _attachedBackdropClickHandler;
|
|
51
51
|
constructor(_adapter: IDialogAdapter);
|
|
52
52
|
initialize(): void;
|
|
53
53
|
destroy(): void;
|
|
@@ -56,8 +56,6 @@ export declare class DialogFoundation implements IDialogFoundation {
|
|
|
56
56
|
private _executeCloseCallback;
|
|
57
57
|
initializeMoveTarget(): void;
|
|
58
58
|
resetPosition(): void;
|
|
59
|
-
show(parent?: HTMLElement): Promise<void>;
|
|
60
|
-
hide(remove?: boolean): Promise<void>;
|
|
61
59
|
private _normalizePositionValue;
|
|
62
60
|
private _openDialog;
|
|
63
61
|
private _closeDialog;
|
|
@@ -20,6 +20,9 @@ export class DialogFoundation {
|
|
|
20
20
|
this._moveTarget = DIALOG_CONSTANTS.selectors.DFEAULT_MOVE_TARGET;
|
|
21
21
|
this._isAnimating = false;
|
|
22
22
|
this._isMoving = false;
|
|
23
|
+
// Event handler states
|
|
24
|
+
this._attachedDocumentKeydownHandler = false;
|
|
25
|
+
this._attachedBackdropClickHandler = false;
|
|
23
26
|
this._transitionEndHandler = (evt) => this._onTransitionEnd();
|
|
24
27
|
this._documentKeydownHandler = (evt) => this._onDocumentKeydown(evt);
|
|
25
28
|
this._backdropClickHandler = (evt) => this._onBackdropClick(evt);
|
|
@@ -40,8 +43,12 @@ export class DialogFoundation {
|
|
|
40
43
|
if (this._open) {
|
|
41
44
|
this._removeDragHandlers();
|
|
42
45
|
this._adapter.deregisterTransitionEndHandler(this._transitionEndHandler);
|
|
43
|
-
|
|
44
|
-
|
|
46
|
+
if (this._attachedDocumentKeydownHandler) {
|
|
47
|
+
this._adapter.removeDocumentListener('keydown', this._documentKeydownHandler);
|
|
48
|
+
}
|
|
49
|
+
if (this._attachedBackdropClickHandler) {
|
|
50
|
+
this._adapter.deregisterBackdropClickHandler(this._backdropClickHandler);
|
|
51
|
+
}
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
54
|
async _applyOpen(value) {
|
|
@@ -86,26 +93,6 @@ export class DialogFoundation {
|
|
|
86
93
|
resetPosition() {
|
|
87
94
|
this._adapter.setSurfacePosition(this._positionX, this._positionY, this._positionType);
|
|
88
95
|
}
|
|
89
|
-
async show(parent) {
|
|
90
|
-
if (this._open) {
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
this._open = true;
|
|
94
|
-
if (!this._adapter.isConnected) {
|
|
95
|
-
this._adapter.attach(parent);
|
|
96
|
-
}
|
|
97
|
-
await this._openDialog();
|
|
98
|
-
}
|
|
99
|
-
async hide(remove) {
|
|
100
|
-
if (!this._open) {
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
this._open = false;
|
|
104
|
-
await this._closeDialog();
|
|
105
|
-
if (remove) {
|
|
106
|
-
this._adapter.detach();
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
96
|
_normalizePositionValue(value) {
|
|
110
97
|
if (isNumber(value)) {
|
|
111
98
|
return `${value}px`;
|
|
@@ -116,24 +103,25 @@ export class DialogFoundation {
|
|
|
116
103
|
return null;
|
|
117
104
|
}
|
|
118
105
|
_openDialog() {
|
|
106
|
+
this._adapter.attach();
|
|
119
107
|
if (!this._fullscreen) {
|
|
120
108
|
if (this._moveable) {
|
|
121
109
|
this._adapter.setMoveable(this._moveable);
|
|
122
110
|
}
|
|
123
|
-
if (this._positionX
|
|
111
|
+
if (this._positionX != null || this._positionY != null) {
|
|
124
112
|
this._adapter.setSurfacePosition(this._positionX, this._positionY, this._positionType);
|
|
125
113
|
}
|
|
126
114
|
}
|
|
127
115
|
this._adapter.setBodyAttribute(DIALOG_CONSTANTS.attributes.OPEN, 'true');
|
|
128
116
|
this._adapter.registerTransitionEndHandler(this._transitionEndHandler);
|
|
129
117
|
this._setDocumentKeydownListener(this._escapeClose);
|
|
118
|
+
this._setBackdropClickListener(this._backdropClose);
|
|
130
119
|
this._adapter.setAnimating(true);
|
|
131
120
|
this._isAnimating = true;
|
|
132
121
|
// Ensure transitions are triggered properly
|
|
133
122
|
window.requestAnimationFrame(() => {
|
|
134
123
|
window.requestAnimationFrame(() => {
|
|
135
124
|
this._adapter.setVisibility(true);
|
|
136
|
-
this._setBackdropClickListener(this._backdropClose); // Must come after setting visibility because the backdrop may not yet exist
|
|
137
125
|
this._adapter.emitHostEvent(DIALOG_CONSTANTS.events.OPEN);
|
|
138
126
|
this._adapter.trySetInitialFocus();
|
|
139
127
|
if (this._adapter.isScrollable()) {
|
|
@@ -141,46 +129,37 @@ export class DialogFoundation {
|
|
|
141
129
|
}
|
|
142
130
|
});
|
|
143
131
|
});
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
window.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
});
|
|
153
|
-
}, DIALOG_CONSTANTS.numbers.ANIMATION_DURATION);
|
|
154
|
-
});
|
|
132
|
+
// Wait for the dialog to finish animating open, then emit the ready event and attach any listeners
|
|
133
|
+
setTimeout(() => {
|
|
134
|
+
window.requestAnimationFrame(() => {
|
|
135
|
+
if (this._open && this._isAnimating) {
|
|
136
|
+
this._onTransitionEnd();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
}, DIALOG_CONSTANTS.numbers.ANIMATION_DURATION);
|
|
155
140
|
}
|
|
156
141
|
_closeDialog() {
|
|
157
142
|
if (this._moveTarget) {
|
|
158
143
|
this._removeDragHandlers();
|
|
159
144
|
}
|
|
160
145
|
this._adapter.deregisterTransitionEndHandler(this._transitionEndHandler);
|
|
161
|
-
if (this.
|
|
146
|
+
if (this._attachedDocumentKeydownHandler) {
|
|
162
147
|
this._adapter.removeDocumentListener('keydown', this._documentKeydownHandler);
|
|
163
148
|
}
|
|
164
|
-
if (this.
|
|
149
|
+
if (this._attachedBackdropClickHandler) {
|
|
165
150
|
this._adapter.deregisterBackdropClickHandler(this._backdropClickHandler);
|
|
166
151
|
}
|
|
167
152
|
this._isAnimating = false;
|
|
168
|
-
this._moveContext = undefined;
|
|
169
|
-
this._lastPosition = undefined;
|
|
170
153
|
this._adapter.setAnimating(true);
|
|
171
154
|
this._adapter.setVisibility(false);
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
this._adapter.setAnimating(false);
|
|
181
|
-
resolve();
|
|
182
|
-
}, DIALOG_CONSTANTS.numbers.ANIMATION_DURATION);
|
|
183
|
-
});
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
this._adapter.emitHostEvent(DIALOG_CONSTANTS.events.CLOSE);
|
|
157
|
+
this._adapter.detach();
|
|
158
|
+
const openDialogs = this._adapter.getOpenDialogs(DIALOG_CONSTANTS.elementName);
|
|
159
|
+
if (!openDialogs.length) {
|
|
160
|
+
this._adapter.removeBodyAttribute(DIALOG_CONSTANTS.attributes.OPEN);
|
|
161
|
+
}
|
|
162
|
+
}, DIALOG_CONSTANTS.numbers.ANIMATION_DURATION);
|
|
184
163
|
}
|
|
185
164
|
_onTransitionEnd() {
|
|
186
165
|
if (!this._isAnimating) {
|
|
@@ -291,22 +270,26 @@ export class DialogFoundation {
|
|
|
291
270
|
if (!this._open) {
|
|
292
271
|
return;
|
|
293
272
|
}
|
|
294
|
-
if (attach && this.
|
|
273
|
+
if (attach && !this._attachedBackdropClickHandler) {
|
|
295
274
|
this._adapter.registerBackdropClickHandler(this._backdropClickHandler);
|
|
275
|
+
this._attachedBackdropClickHandler = true;
|
|
296
276
|
}
|
|
297
|
-
else if (!attach) {
|
|
277
|
+
else if (!attach && this._attachedBackdropClickHandler) {
|
|
298
278
|
this._adapter.deregisterBackdropClickHandler(this._backdropClickHandler);
|
|
279
|
+
this._attachedBackdropClickHandler = false;
|
|
299
280
|
}
|
|
300
281
|
}
|
|
301
282
|
_setDocumentKeydownListener(attach) {
|
|
302
283
|
if (!this._open) {
|
|
303
284
|
return;
|
|
304
285
|
}
|
|
305
|
-
if (attach && this.
|
|
286
|
+
if (attach && !this._attachedDocumentKeydownHandler) {
|
|
306
287
|
this._adapter.setDocumentListener('keydown', this._documentKeydownHandler);
|
|
288
|
+
this._attachedDocumentKeydownHandler = true;
|
|
307
289
|
}
|
|
308
|
-
else if (!attach) {
|
|
290
|
+
else if (!attach && this._attachedDocumentKeydownHandler) {
|
|
309
291
|
this._adapter.removeDocumentListener('keydown', this._documentKeydownHandler);
|
|
292
|
+
this._attachedDocumentKeydownHandler = false;
|
|
310
293
|
}
|
|
311
294
|
}
|
|
312
295
|
_calculateOffsetPosition(pageX, pageY, context) {
|
package/esm/dialog/dialog.d.ts
CHANGED
|
@@ -20,8 +20,6 @@ export interface IDialogComponent extends IBaseComponent {
|
|
|
20
20
|
moveTarget: string;
|
|
21
21
|
initializeMoveTarget(): void;
|
|
22
22
|
resetPosition(): void;
|
|
23
|
-
show(parent?: HTMLElement): Promise<void>;
|
|
24
|
-
hide(remove?: boolean): Promise<void>;
|
|
25
23
|
}
|
|
26
24
|
declare global {
|
|
27
25
|
interface HTMLElementTagNameMap {
|
|
@@ -75,6 +73,4 @@ export declare class DialogComponent extends BaseComponent implements IDialogCom
|
|
|
75
73
|
moveTarget: string;
|
|
76
74
|
initializeMoveTarget(): void;
|
|
77
75
|
resetPosition(): void;
|
|
78
|
-
show(parent?: HTMLElement): Promise<void>;
|
|
79
|
-
hide(remove?: boolean): Promise<void>;
|
|
80
76
|
}
|
package/esm/dialog/dialog.js
CHANGED
|
@@ -10,7 +10,7 @@ import { DialogAdapter } from './dialog-adapter';
|
|
|
10
10
|
import { DIALOG_CONSTANTS } from './dialog-constants';
|
|
11
11
|
import { BackdropComponent } from '../backdrop';
|
|
12
12
|
import { BaseComponent } from '../core/base/base-component';
|
|
13
|
-
const template = '<template><div class=\"forge-dialog\" part=\"root\"><div class=\"forge-dialog__surface\" part=\"surface\"><slot></slot></div></div></template>';
|
|
13
|
+
const template = '<template><div class=\"forge-dialog\" part=\"root\"><forge-backdrop part=\"scrim\"></forge-backdrop><div class=\"forge-dialog__surface\" part=\"surface\"><slot></slot></div></div></template>';
|
|
14
14
|
const styles = '.forge-dialog{position:fixed;top:0;bottom:0;left:0;right:0;z-index:8;z-index:var(--forge-z-index-dialog,8);-webkit-box-align:center;align-items:center;-webkit-box-align:var(--forge-dialog-align-items,center);align-items:var(--forge-dialog-align-items,center);top:0;top:var(--forge-dialog-top,0);padding:24px;padding:var(--forge-dialog-padding,24px);display:-webkit-box;display:flex;-webkit-box-pack:center;justify-content:center;visibility:hidden}@media (max-width:599px){.forge-dialog{padding:0}}.forge-dialog--moveable:not(.forge-dialog--fullscreen) ::slotted([forge-dialog-move-target]){cursor:move}.forge-dialog--animating{visibility:visible}.forge-dialog--animating .forge-dialog--open .forge-dialog__surface{-webkit-transition:-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 150ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1)}.forge-dialog--animating .forge-dialog__surface{-webkit-transition:-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 150ms 0s cubic-bezier(0, 0, .2, 1);transition:transform 150ms 0s cubic-bezier(0, 0, .2, 1),-webkit-transform 150ms 0s cubic-bezier(0, 0, .2, 1)}.forge-dialog--scrollable .forge-dialog__footer,.forge-dialog--scrollable .forge-dialog__title{border-color:rgba(0,0,0,.12)}.forge-dialog--open{visibility:visible!important}.forge-dialog--open .forge-dialog__surface{-webkit-transform:scale(1);transform:scale(1);opacity:1}.forge-dialog__surface{-webkit-box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);box-shadow:0 11px 15px -7px rgba(0,0,0,.2),0 24px 38px 3px rgba(0,0,0,.14),0 9px 46px 8px rgba(0,0,0,.12);background-color:#fff;background-color:var(--mdc-theme-surface,#fff);width:auto;width:var(--forge-dialog-width,auto);height:auto;height:var(--forge-dialog-height,auto);min-width:280px;min-width:var(--forge-dialog-min-width,280px);max-width:100%;max-width:var(--forge-dialog-max-width,100%);max-height:100%;max-height:var(--forge-dialog-max-height,100%);border-radius:4px;border-radius:var(--forge-dialog-border-radius,var(--mdc-shape-medium,4px));display:-webkit-inline-box;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transform:scale(.8);transform:scale(.8);opacity:0;overflow:hidden;z-index:inherit}.forge-dialog__header{margin:0;padding:0 24px 9px;border-bottom:1px solid transparent}.forge-dialog__title{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:1.25rem;font-size:var(--forge-typography-title-font-size, 1.25rem);line-height:2rem;line-height:var(--forge-typography-title-line-height, 2rem);font-weight:400;font-weight:var(--forge-typography-title-font-weight,400);letter-spacing:.0125em;letter-spacing:var(--forge-typography-title-letter-spacing, .0125em);text-decoration:inherit;-webkit-text-decoration:var(--forge-typography-title-text-decoration,inherit);text-decoration:var(--forge-typography-title-text-decoration,inherit);text-transform:inherit;text-transform:var(--forge-typography-title-text-transform,inherit);-webkit-box-sizing:border-box;box-sizing:border-box;margin:0}.forge-dialog__title::before{display:inline-block;width:0;height:40px;content:\"\";vertical-align:0}.forge-dialog__body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-body1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-body1-font-size, 1rem);line-height:1.5rem;line-height:var(--mdc-typography-body1-line-height, 1.5rem);font-weight:400;font-weight:var(--mdc-typography-body1-font-weight,400);letter-spacing:.03125em;letter-spacing:var(--mdc-typography-body1-letter-spacing, .03125em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-decoration:var(--mdc-typography-body1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-body1-text-transform,inherit);padding-top:20px;padding:0 24px 24px;overflow:auto}.forge-dialog__body--scrollable{max-height:195px;border-top:1px solid rgba(0,0,0,.1);border-bottom:1px solid rgba(0,0,0,.1);overflow-x:auto;overflow-y:scroll;-webkit-overflow-scrolling:touch}.forge-dialog__footer{display:-webkit-box;display:flex;position:relative;flex-shrink:0;flex-wrap:wrap;-webkit-box-align:center;align-items:center;-webkit-box-pack:end;justify-content:flex-end;-webkit-box-sizing:border-box;box-sizing:border-box;min-height:52px;margin:0;padding:8px;border-top:1px solid transparent}.forge-dialog--fullscreen{padding:0}.forge-dialog--fullscreen .forge-dialog__surface{height:100%;width:100%;min-width:auto;max-width:100%;border-radius:0}:host{display:block}:host([hidden]){display:none}';
|
|
15
15
|
/**
|
|
16
16
|
* The web component class behind the `<forge-dialog>` custom element.
|
|
@@ -79,12 +79,6 @@ let DialogComponent = class DialogComponent extends BaseComponent {
|
|
|
79
79
|
resetPosition() {
|
|
80
80
|
this._foundation.resetPosition();
|
|
81
81
|
}
|
|
82
|
-
show(parent) {
|
|
83
|
-
return this._foundation.show(parent);
|
|
84
|
-
}
|
|
85
|
-
hide(remove) {
|
|
86
|
-
return this._foundation.hide(remove);
|
|
87
|
-
}
|
|
88
82
|
};
|
|
89
83
|
__decorate([
|
|
90
84
|
FoundationProperty()
|
|
@@ -11,7 +11,7 @@ import { FilePickerAdapter } from './file-picker-adapter';
|
|
|
11
11
|
import { FILE_PICKER_CONSTANTS } from './file-picker-constants';
|
|
12
12
|
import { FilePickerFoundation } from './file-picker-foundation';
|
|
13
13
|
const template = '<template><form class=\"forge-file-picker\" id=\"container\" part=\"form\"><div class=\"forge-file-picker__primary\" id=\"primary\" part=\"primary\"><slot name=\"primary\"></slot></div><slot id=\"button-slot\"></slot><div class=\"forge-file-picker__secondary\" id=\"secondary\" part=\"secondary\"><slot name=\"secondary\"></slot></div><input type=\"file\" class=\"forge-file-picker__input\" id=\"input\" part=\"input\"></form><div class=\"forge-file-picker__helper-text\" part=\"helper-text-container\"><slot name=\"helper-text\"></slot></div></template>';
|
|
14
|
-
const styles = '.forge-file-picker{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;background-color:rgba(189,189,189,.12);border:1px dashed #e0e0e0;display:grid;-webkit-box-pack:center;justify-content:center;align-content:center;gap:16px;padding:16px;text-align:center;cursor:pointer}.forge-file-picker__primary{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, .009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));max-width:auto;max-width:var(--forge-file-picker-max-content-width,auto)}.forge-file-picker__secondary{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:.875rem;font-size:var(--forge-typography-subtitle2-secondary-font-size, .875rem);line-height:1.375rem;line-height:var(--forge-typography-subtitle2-secondary-line-height, 1.375rem);font-weight:400;font-weight:var(--forge-typography-subtitle2-secondary-font-weight,400);letter-spacing:.0087500001em;letter-spacing:var(--forge-typography-subtitle2-secondary-letter-spacing, .0087500001em);text-decoration:inherit;-webkit-text-decoration:var(--forge-typography-subtitle2-secondary-text-decoration,inherit);text-decoration:var(--forge-typography-subtitle2-secondary-text-decoration,inherit);text-transform:inherit;text-transform:var(--forge-typography-subtitle2-secondary-text-transform,inherit);color:var(--mdc-theme-text-secondary-on-background);color:var(--forge-typography-subtitle2-secondary-color,var(--mdc-theme-text-secondary-on-background));color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));max-width:auto;max-width:var(--forge-file-picker-max-content-width,auto)}.forge-file-picker__input{display:none}.forge-file-picker__helper-text ::slotted([slot=helper-text]){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;height:
|
|
14
|
+
const styles = '.forge-file-picker{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;height:100%;background-color:rgba(189,189,189,.12);border:1px dashed #e0e0e0;display:grid;-webkit-box-pack:center;justify-content:center;align-content:center;gap:16px;padding:16px;text-align:center;cursor:pointer}.forge-file-picker__primary{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-subtitle1-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:1rem;font-size:var(--mdc-typography-subtitle1-font-size, 1rem);line-height:1.75rem;line-height:var(--mdc-typography-subtitle1-line-height, 1.75rem);font-weight:400;font-weight:var(--mdc-typography-subtitle1-font-weight,400);letter-spacing:.009375em;letter-spacing:var(--mdc-typography-subtitle1-letter-spacing, .009375em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-decoration:var(--mdc-typography-subtitle1-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-subtitle1-text-transform,inherit);color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));max-width:auto;max-width:var(--forge-file-picker-max-content-width,auto)}.forge-file-picker__secondary{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:.875rem;font-size:var(--forge-typography-subtitle2-secondary-font-size, .875rem);line-height:1.375rem;line-height:var(--forge-typography-subtitle2-secondary-line-height, 1.375rem);font-weight:400;font-weight:var(--forge-typography-subtitle2-secondary-font-weight,400);letter-spacing:.0087500001em;letter-spacing:var(--forge-typography-subtitle2-secondary-letter-spacing, .0087500001em);text-decoration:inherit;-webkit-text-decoration:var(--forge-typography-subtitle2-secondary-text-decoration,inherit);text-decoration:var(--forge-typography-subtitle2-secondary-text-decoration,inherit);text-transform:inherit;text-transform:var(--forge-typography-subtitle2-secondary-text-transform,inherit);color:var(--mdc-theme-text-secondary-on-background);color:var(--forge-typography-subtitle2-secondary-color,var(--mdc-theme-text-secondary-on-background));color:rgba(0,0,0,.87);color:var(--mdc-theme-text-primary-on-background,rgba(0,0,0,.87));max-width:auto;max-width:var(--forge-file-picker-max-content-width,auto)}.forge-file-picker__input{display:none}.forge-file-picker__helper-text ::slotted([slot=helper-text]){-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;-webkit-text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);display:block;min-height:1.5rem;line-height:normal;padding-top:4px;-webkit-box-sizing:border-box;box-sizing:border-box;color:rgba(0,0,0,.54);color:var(--mdc-theme-text-secondary-on-background,rgba(0,0,0,.54));margin-left:12px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-family:Roboto,sans-serif;font-family:var(--mdc-typography-caption-font-family, var(--mdc-typography-font-family, Roboto, sans-serif));font-size:.75rem;font-size:var(--mdc-typography-caption-font-size, .75rem);line-height:1.25rem;line-height:var(--mdc-typography-caption-line-height, 1.25rem);font-weight:400;font-weight:var(--mdc-typography-caption-font-weight,400);letter-spacing:.0333333333em;letter-spacing:var(--mdc-typography-caption-letter-spacing, .0333333333em);text-decoration:inherit;text-decoration:var(--mdc-typography-caption-text-decoration,inherit);text-transform:inherit;text-transform:var(--mdc-typography-caption-text-transform,inherit);text-align:start}.forge-file-picker[disabled]{background-color:#fafafa;background-color:var(--mdc-theme-background,#fafafa);border-color:#e0e0e0;border-color:var(--forge-theme-border-color,#e0e0e0);opacity:.38;cursor:unset}.forge-file-picker.compact{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content;background-color:transparent;border:none;padding:0}.forge-file-picker.compact .forge-file-picker__primary,.forge-file-picker.compact .forge-file-picker__secondary{display:none}.forge-file-picker.compact .forge-file-picker__button>button{width:auto;width:var(--forge-file-picker-width,auto);background-color:transparent}.forge-file-picker:not(.compact).highlight{border-color:#3f51b5;border-color:var(--mdc-theme-primary,#3f51b5);background-color:rgba(63,81,181,.12);border-width:1px;border-style:solid}.forge-file-picker.borderless{--forge-file-picker-width:100%;border:none}.forge-file-picker.borderless:not(.compact).highlight{border:none}.forge-file-picker.borderless+.forge-file-picker__helper-text{display:none}:host{width:auto;width:var(--forge-file-picker-width,auto);height:auto;height:var(--forge-file-picker-height,auto);display:inline-block}:host([hidden]){display:none}';
|
|
15
15
|
/**
|
|
16
16
|
* The web component class behind the `<forge-file-picker>` custom element.
|
|
17
17
|
*
|
|
@@ -25,7 +25,7 @@ export interface IListItemAdapter extends IBaseAdapter {
|
|
|
25
25
|
setDense(dense: boolean): void;
|
|
26
26
|
setIndented(indented: boolean): void;
|
|
27
27
|
setWrap(value: boolean): void;
|
|
28
|
-
trySelect(value: unknown):
|
|
28
|
+
trySelect(value: unknown): boolean | null;
|
|
29
29
|
}
|
|
30
30
|
export declare class ListItemAdapter extends BaseAdapter<IListItemComponent> implements IListItemAdapter {
|
|
31
31
|
private _listItemElement;
|
|
@@ -97,5 +97,10 @@ export declare class ListItemAdapter extends BaseAdapter<IListItemComponent> imp
|
|
|
97
97
|
setDense(dense: boolean): void;
|
|
98
98
|
setIndented(indented: boolean): void;
|
|
99
99
|
setWrap(value: boolean): void;
|
|
100
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Attempts to set the selected state of the list item element and it's visual indicators
|
|
102
|
+
* @param value The value to compare to the parent list element's selected value
|
|
103
|
+
* @returns Returns whether the list item is selected or not
|
|
104
|
+
*/
|
|
105
|
+
trySelect(value: unknown): boolean | null;
|
|
101
106
|
}
|
|
@@ -162,14 +162,20 @@ export class ListItemAdapter extends BaseAdapter {
|
|
|
162
162
|
setWrap(value) {
|
|
163
163
|
toggleClass(this._listItemElement, value, LIST_ITEM_CONSTANTS.classes.WRAP);
|
|
164
164
|
}
|
|
165
|
+
/**
|
|
166
|
+
* Attempts to set the selected state of the list item element and it's visual indicators
|
|
167
|
+
* @param value The value to compare to the parent list element's selected value
|
|
168
|
+
* @returns Returns whether the list item is selected or not
|
|
169
|
+
*/
|
|
165
170
|
trySelect(value) {
|
|
166
171
|
const list = requireParent(this._component, LIST_CONSTANTS.elementName);
|
|
167
172
|
if (!list || list.selectedValue === undefined) {
|
|
168
|
-
return;
|
|
173
|
+
return null;
|
|
169
174
|
}
|
|
170
175
|
const listValues = list.selectedValue instanceof Array ? list.selectedValue : [list.selectedValue];
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
176
|
+
const isSelected = listValues.some(v => isDeepEqual(v, value));
|
|
177
|
+
this.setSelected(isSelected);
|
|
178
|
+
this.tryToggleCheckboxRadio(isSelected);
|
|
179
|
+
return isSelected;
|
|
174
180
|
}
|
|
175
181
|
}
|
|
@@ -45,7 +45,10 @@ export class ListItemFoundation {
|
|
|
45
45
|
else if (this.twoLine) {
|
|
46
46
|
this._adapter.setTwoLine(this._twoLine);
|
|
47
47
|
}
|
|
48
|
-
this._adapter.trySelect(this._value);
|
|
48
|
+
const isSelected = this._adapter.trySelect(this._value);
|
|
49
|
+
if (isSelected != null) {
|
|
50
|
+
this._selected = isSelected;
|
|
51
|
+
}
|
|
49
52
|
}
|
|
50
53
|
disconnect() {
|
|
51
54
|
if (this._rippleInstance) {
|
|
@@ -210,7 +213,10 @@ export class ListItemFoundation {
|
|
|
210
213
|
}
|
|
211
214
|
set value(value) {
|
|
212
215
|
this._value = value;
|
|
213
|
-
this._adapter.trySelect(this._value);
|
|
216
|
+
const isSelected = this._adapter.trySelect(this._value);
|
|
217
|
+
if (isSelected != null) {
|
|
218
|
+
this._selected = isSelected;
|
|
219
|
+
}
|
|
214
220
|
}
|
|
215
221
|
/** Gets/sets the href link that this list item will send the browser to when clicked. */
|
|
216
222
|
get href() {
|
|
@@ -39,7 +39,7 @@ export declare class ListItemComponent extends BaseComponent implements IListIte
|
|
|
39
39
|
static get observedAttributes(): string[];
|
|
40
40
|
private _foundation;
|
|
41
41
|
constructor();
|
|
42
|
-
|
|
42
|
+
connectedCallback(): void;
|
|
43
43
|
disconnectedCallback(): void;
|
|
44
44
|
attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
|
|
45
45
|
private _inheritParentListProps;
|
|
@@ -41,7 +41,7 @@ let ListItemComponent = class ListItemComponent extends BaseComponent {
|
|
|
41
41
|
LIST_ITEM_CONSTANTS.attributes.WRAP
|
|
42
42
|
];
|
|
43
43
|
}
|
|
44
|
-
|
|
44
|
+
connectedCallback() {
|
|
45
45
|
// To simulate the :host-context() selector for Firefox until they implement it, we need to determine if the
|
|
46
46
|
// list item is within a drawer for auto-styling the list item when included within a drawer. Check to see if
|
|
47
47
|
// any of the parents of this element are a drawer.
|
|
@@ -102,9 +102,19 @@ export class BaseSelectAdapter extends BaseAdapter {
|
|
|
102
102
|
(_a = this._listDropdown) === null || _a === void 0 ? void 0 : _a.setSelectedValues(selectedValues);
|
|
103
103
|
}
|
|
104
104
|
setOptionsListener(listener) {
|
|
105
|
+
// Watch for option value property changes
|
|
106
|
+
const optionValueChangeListener = evt => {
|
|
107
|
+
evt.stopPropagation();
|
|
108
|
+
listener(this.getOptions());
|
|
109
|
+
};
|
|
110
|
+
this._component.addEventListener(OPTION_CONSTANTS.events.VALUE_CHANGE, optionValueChangeListener);
|
|
111
|
+
// Watch for DOM changes
|
|
105
112
|
const observer = new MutationObserver(() => listener(this.getOptions()));
|
|
106
113
|
observer.observe(this._component, { childList: true, subtree: true });
|
|
107
|
-
return () =>
|
|
114
|
+
return () => {
|
|
115
|
+
this._component.removeEventListener(OPTION_CONSTANTS.events.VALUE_CHANGE, optionValueChangeListener);
|
|
116
|
+
observer.disconnect();
|
|
117
|
+
};
|
|
108
118
|
}
|
|
109
119
|
setOptions(options, clear = true) {
|
|
110
120
|
if (clear) {
|
|
@@ -31,6 +31,9 @@ export class BaseSelectFoundation extends ListDropdownAwareFoundation {
|
|
|
31
31
|
}
|
|
32
32
|
_onFocus(evt) { }
|
|
33
33
|
initialize() {
|
|
34
|
+
if (this._optionListenerDestructor) {
|
|
35
|
+
this._optionListenerDestructor();
|
|
36
|
+
}
|
|
34
37
|
this._optionListenerDestructor = this._adapter.setOptionsListener(this._optionsChangedListener);
|
|
35
38
|
this._initializeValue();
|
|
36
39
|
}
|
|
@@ -160,6 +163,7 @@ export class BaseSelectFoundation extends ListDropdownAwareFoundation {
|
|
|
160
163
|
const value = option ? option.value : '';
|
|
161
164
|
const label = option ? option.label : '';
|
|
162
165
|
// Store the current selections in case we need to rollback (if the event was cancelled)
|
|
166
|
+
const prevValues = [...this._value];
|
|
163
167
|
const prevSelectedValues = [...this._selectedValues];
|
|
164
168
|
const prevSelectedLabels = [...this._selectedLabels];
|
|
165
169
|
const prevSelectedIndexes = [...this._selectedIndexes];
|
|
@@ -188,14 +192,14 @@ export class BaseSelectFoundation extends ListDropdownAwareFoundation {
|
|
|
188
192
|
this._selectedIndexes = [];
|
|
189
193
|
}
|
|
190
194
|
}
|
|
195
|
+
this._value = [...this._selectedValues];
|
|
191
196
|
const rollbackValue = () => {
|
|
192
197
|
this._selectedValues = [...prevSelectedValues];
|
|
193
198
|
this._selectedLabels = [...prevSelectedLabels];
|
|
194
199
|
this._selectedIndexes = [...prevSelectedIndexes];
|
|
200
|
+
this._value = [...prevValues];
|
|
195
201
|
};
|
|
196
202
|
const applyValue = () => {
|
|
197
|
-
// Always keep the internal value in sync in case the component needs to reinitialize with the existing value later on
|
|
198
|
-
this._value = [...this._selectedValues];
|
|
199
203
|
// If we're in multiselect mode, we need to toggle the selected option
|
|
200
204
|
if (this._multiple) {
|
|
201
205
|
const isSelected = this._selectedIndexes.includes(optionIndex);
|
|
@@ -459,7 +463,7 @@ export class BaseSelectFoundation extends ListDropdownAwareFoundation {
|
|
|
459
463
|
}
|
|
460
464
|
/** Gets/sets the value of the component. */
|
|
461
465
|
get value() {
|
|
462
|
-
return this._multiple ? [...this.
|
|
466
|
+
return this._multiple ? [...this._value] : this._value[0];
|
|
463
467
|
}
|
|
464
468
|
set value(value) {
|
|
465
469
|
let _value;
|