-
Notifications
You must be signed in to change notification settings - Fork 6.8k
/
Copy pathoverlay-config.ts
84 lines (68 loc) · 3.36 KB
/
overlay-config.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
import {PositionStrategy} from './position/position-strategy';
import {Direction, Directionality} from '../bidi';
import {ScrollStrategy, NoopScrollStrategy} from './scroll/index';
/** Initial configuration used when creating an overlay. */
export class OverlayConfig {
/** Strategy with which to position the overlay. */
positionStrategy?: PositionStrategy;
/** Strategy to be used when handling scroll events while the overlay is open. */
scrollStrategy?: ScrollStrategy = new NoopScrollStrategy();
/** Custom class to add to the overlay pane. */
panelClass?: string | string[] = '';
/** Whether the overlay has a backdrop. */
hasBackdrop?: boolean = false;
/** Custom class to add to the backdrop */
backdropClass?: string | string[] = 'cdk-overlay-dark-backdrop';
/** Whether to disable any built-in animations. */
disableAnimations?: boolean;
/** The width of the overlay panel. If a number is provided, pixel units are assumed. */
width?: number | string;
/** The height of the overlay panel. If a number is provided, pixel units are assumed. */
height?: number | string;
/** The min-width of the overlay panel. If a number is provided, pixel units are assumed. */
minWidth?: number | string;
/** The min-height of the overlay panel. If a number is provided, pixel units are assumed. */
minHeight?: number | string;
/** The max-width of the overlay panel. If a number is provided, pixel units are assumed. */
maxWidth?: number | string;
/** The max-height of the overlay panel. If a number is provided, pixel units are assumed. */
maxHeight?: number | string;
/**
* Direction of the text in the overlay panel. If a `Directionality` instance
* is passed in, the overlay will handle changes to its value automatically.
*/
direction?: Direction | Directionality;
/**
* Whether the overlay should be disposed of when the user goes backwards/forwards in history.
* Note that this usually doesn't include clicking on links (unless the user is using
* the `HashLocationStrategy`).
*/
disposeOnNavigation?: boolean = false;
constructor(config?: OverlayConfig) {
if (config) {
// Use `Iterable` instead of `Array` because TypeScript, as of 3.6.3,
// loses the array generic type in the `for of`. But we *also* have to use `Array` because
// typescript won't iterate over an `Iterable` unless you compile with `--downlevelIteration`
const configKeys = Object.keys(config) as Iterable<keyof OverlayConfig> &
(keyof OverlayConfig)[];
for (const key of configKeys) {
if (config[key] !== undefined) {
// TypeScript, as of version 3.5, sees the left-hand-side of this expression
// as "I don't know *which* key this is, so the only valid value is the intersection
// of all the possible values." In this case, that happens to be `undefined`. TypeScript
// is not smart enough to see that the right-hand-side is actually an access of the same
// exact type with the same exact key, meaning that the value type must be identical.
// So we use `any` to work around this.
this[key] = config[key] as any;
}
}
}
}
}