@ifsworld/granite-components 14.2.2 → 15.0.0-beta.1
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/date-picker/lib/date-picker-base.d.ts +3 -3
- package/date-picker/lib/date-picker.module.d.ts +2 -2
- package/fesm2022/ifsworld-granite-components-carousel.mjs +15 -13
- package/fesm2022/ifsworld-granite-components-carousel.mjs.map +1 -1
- package/fesm2022/ifsworld-granite-components-date-picker.mjs +34 -30
- package/fesm2022/ifsworld-granite-components-date-picker.mjs.map +1 -1
- package/fesm2022/ifsworld-granite-components-file-upload.mjs +13 -12
- package/fesm2022/ifsworld-granite-components-file-upload.mjs.map +1 -1
- package/fesm2022/ifsworld-granite-components-table.mjs +32 -29
- package/fesm2022/ifsworld-granite-components-table.mjs.map +1 -1
- package/fesm2022/ifsworld-granite-components-tooltip.mjs +16 -15
- package/fesm2022/ifsworld-granite-components-tooltip.mjs.map +1 -1
- package/fesm2022/ifsworld-granite-components.mjs +340 -322
- package/fesm2022/ifsworld-granite-components.mjs.map +1 -1
- package/lib/contacts/contacts-trigger/contacts-trigger-data.d.ts +1 -1
- package/lib/core/overlay-base.d.ts +1 -1
- package/lib/core/radio-checkbox-base.d.ts +1 -1
- package/lib/menu/menu-base.d.ts +1 -1
- package/lib/progress-bar/progress-bar-legend-base.d.ts +1 -1
- package/package.json +9 -21
- package/src/lib/core/style/_mixins.scss +16 -11
- package/src/lib/core/style/_range-functions.scss +6 -4
- package/src/lib/core/style/_z-index.scss +6 -4
- package/table/lib/cell/cell.d.ts +1 -1
- package/esm2022/carousel/ifsworld-granite-components-carousel.mjs +0 -5
- package/esm2022/carousel/index.mjs +0 -3
- package/esm2022/carousel/lib/carousel.component.mjs +0 -154
- package/esm2022/carousel/lib/carousel.module.mjs +0 -31
- package/esm2022/date-picker/ifsworld-granite-components-date-picker.mjs +0 -5
- package/esm2022/date-picker/index.mjs +0 -5
- package/esm2022/date-picker/lib/date-picker-base.mjs +0 -53
- package/esm2022/date-picker/lib/date-picker-trigger-for.directive.mjs +0 -228
- package/esm2022/date-picker/lib/date-picker.component.mjs +0 -30
- package/esm2022/date-picker/lib/date-picker.module.mjs +0 -58
- package/esm2022/date-picker/lib/date-range-picker.component.mjs +0 -46
- package/esm2022/file-upload/ifsworld-granite-components-file-upload.mjs +0 -5
- package/esm2022/file-upload/index.mjs +0 -3
- package/esm2022/file-upload/lib/directives/file-drag-and-drop.directive.mjs +0 -102
- package/esm2022/file-upload/lib/file-upload.component.mjs +0 -182
- package/esm2022/file-upload/lib/file-upload.constants.mjs +0 -45
- package/esm2022/file-upload/lib/file-upload.module.mjs +0 -32
- package/esm2022/file-upload/lib/file-upload.utils.mjs +0 -13
- package/esm2022/ifsworld-granite-components.mjs +0 -5
- package/esm2022/index.mjs +0 -90
- package/esm2022/lib/arrange-grid/arrange-grid-item.component.mjs +0 -44
- package/esm2022/lib/arrange-grid/arrange-grid.component.mjs +0 -125
- package/esm2022/lib/arrange-grid/arrange-grid.module.mjs +0 -19
- package/esm2022/lib/avatar/avatar-default-status/avatar-default-status.component.mjs +0 -36
- package/esm2022/lib/avatar/avatar.component.mjs +0 -68
- package/esm2022/lib/avatar/avatar.component.public-types.mjs +0 -7
- package/esm2022/lib/avatar/avatar.module.mjs +0 -37
- package/esm2022/lib/avatar/custom-avatar-status.directive.mjs +0 -18
- package/esm2022/lib/avatar/empty-avatar/empty-avatar.component.mjs +0 -37
- package/esm2022/lib/badge/badge.component.mjs +0 -39
- package/esm2022/lib/badge/badge.module.mjs +0 -18
- package/esm2022/lib/badge/testing/badge.harness.mjs +0 -25
- package/esm2022/lib/button/button.component.mjs +0 -87
- package/esm2022/lib/button/button.module.mjs +0 -16
- package/esm2022/lib/card-list/card/card-avatar.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-actions.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-body.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-content.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-footer.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-header-subtitle.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-header-title.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card-content/card-header.component.mjs +0 -11
- package/esm2022/lib/card-list/card/card.component.mjs +0 -11
- package/esm2022/lib/card-list/card-list.component.mjs +0 -24
- package/esm2022/lib/card-list/card-list.module.mjs +0 -68
- package/esm2022/lib/checkbox/checkbox-group.component.mjs +0 -17
- package/esm2022/lib/checkbox/checkbox.component.mjs +0 -99
- package/esm2022/lib/checkbox/checkbox.module.mjs +0 -17
- package/esm2022/lib/chips/chip-input.mjs +0 -195
- package/esm2022/lib/chips/chip-list.component.mjs +0 -567
- package/esm2022/lib/chips/chip.component.mjs +0 -287
- package/esm2022/lib/chips/chips.module.mjs +0 -31
- package/esm2022/lib/collapsible-group/collapsible-group-body.directive.mjs +0 -17
- package/esm2022/lib/collapsible-group/collapsible-group-header.directive.mjs +0 -17
- package/esm2022/lib/collapsible-group/collapsible-group.component.mjs +0 -46
- package/esm2022/lib/collapsible-group/collapsible-group.module.mjs +0 -33
- package/esm2022/lib/contacts/contact-item/contact-item.component.mjs +0 -27
- package/esm2022/lib/contacts/contact-item-default-status/contact-item-default-status.component.mjs +0 -20
- package/esm2022/lib/contacts/contact-item-title/contact-item-title.component.mjs +0 -15
- package/esm2022/lib/contacts/contacts-profile/contacts-profile.component.mjs +0 -18
- package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-data.mjs +0 -24
- package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-for.directive.mjs +0 -231
- package/esm2022/lib/contacts/contacts-types/contacts.component.private-types.mjs +0 -2
- package/esm2022/lib/contacts/contacts-types/contacts.component.public-types.mjs +0 -9
- package/esm2022/lib/contacts/contacts.component.mjs +0 -92
- package/esm2022/lib/contacts/contacts.module.mjs +0 -53
- package/esm2022/lib/contacts/custom-profile.directive.mjs +0 -16
- package/esm2022/lib/contacts/custom-status.directive.mjs +0 -18
- package/esm2022/lib/core/animation.mjs +0 -34
- package/esm2022/lib/core/client-environment.mjs +0 -20
- package/esm2022/lib/core/common-behaviors/disabled.mjs +0 -27
- package/esm2022/lib/core/core.module.mjs +0 -44
- package/esm2022/lib/core/devices/client-input-desktop.directive.mjs +0 -29
- package/esm2022/lib/core/devices/client-input-touch.directive.mjs +0 -29
- package/esm2022/lib/core/devices/client-output-desktop.directive.mjs +0 -29
- package/esm2022/lib/core/devices/client-output-touch.directive.mjs +0 -29
- package/esm2022/lib/core/hide-on-overflow.directive.mjs +0 -83
- package/esm2022/lib/core/overlay-base.mjs +0 -18
- package/esm2022/lib/core/overlay-position-config.mjs +0 -2
- package/esm2022/lib/core/overlay-trigger-for-base.directive.mjs +0 -121
- package/esm2022/lib/core/overlay.service.mjs +0 -90
- package/esm2022/lib/core/pipes/pure-pipes.module.mjs +0 -16
- package/esm2022/lib/core/pipes/title.pipe.mjs +0 -21
- package/esm2022/lib/core/radio-checkbox-base.mjs +0 -19
- package/esm2022/lib/core/services/names-utils-service.mjs +0 -51
- package/esm2022/lib/core/theme.library.mjs +0 -59
- package/esm2022/lib/core/types.mjs +0 -2
- package/esm2022/lib/grid/grid.component.mjs +0 -128
- package/esm2022/lib/grid/grid.module.mjs +0 -18
- package/esm2022/lib/icon/icon.component.mjs +0 -43
- package/esm2022/lib/icon/icon.module.mjs +0 -16
- package/esm2022/lib/input-field/input-field.component.mjs +0 -167
- package/esm2022/lib/input-field/input-field.module.mjs +0 -20
- package/esm2022/lib/label/label.component.mjs +0 -31
- package/esm2022/lib/label/label.module.mjs +0 -18
- package/esm2022/lib/menu/divider.directive.mjs +0 -23
- package/esm2022/lib/menu/menu-base.mjs +0 -354
- package/esm2022/lib/menu/menu-desktop-animations.mjs +0 -23
- package/esm2022/lib/menu/menu-errors.mjs +0 -37
- package/esm2022/lib/menu/menu-item.component.mjs +0 -89
- package/esm2022/lib/menu/menu-panel.mjs +0 -7
- package/esm2022/lib/menu/menu-positions.mjs +0 -9
- package/esm2022/lib/menu/menu-touch-animations.mjs +0 -137
- package/esm2022/lib/menu/menu-touch-close.component.mjs +0 -13
- package/esm2022/lib/menu/menu-touch-title.component.mjs +0 -59
- package/esm2022/lib/menu/menu-trigger-for.directive.mjs +0 -738
- package/esm2022/lib/menu/menu.component.mjs +0 -30
- package/esm2022/lib/menu/menu.module.mjs +0 -55
- package/esm2022/lib/menu/testing/menu.harness.mjs +0 -109
- package/esm2022/lib/menu/title.directive.mjs +0 -17
- package/esm2022/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.mjs +0 -19
- package/esm2022/lib/progress-bar/progress-bar-legend-base.mjs +0 -17
- package/esm2022/lib/progress-bar/progress-bar-legend-trigger-for.directive.mjs +0 -54
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +0 -92
- package/esm2022/lib/progress-bar/progress-bar.model.mjs +0 -2
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +0 -44
- package/esm2022/lib/radio-button/radio-button.component.mjs +0 -119
- package/esm2022/lib/radio-button/radio-button.module.mjs +0 -17
- package/esm2022/lib/radio-button/radio-group.component.mjs +0 -17
- package/esm2022/lib/toggle-switch/toggle-switch.component.mjs +0 -100
- package/esm2022/lib/toggle-switch/toggle-switch.module.mjs +0 -16
- package/esm2022/table/ifsworld-granite-components-table.mjs +0 -5
- package/esm2022/table/index.mjs +0 -5
- package/esm2022/table/lib/cell/cell-align/cell-align-classes.directive.mjs +0 -26
- package/esm2022/table/lib/cell/cell.mjs +0 -15
- package/esm2022/table/lib/cell/table-data-cell.component.mjs +0 -25
- package/esm2022/table/lib/cell/table-header-cell.component.mjs +0 -14
- package/esm2022/table/lib/column/table-column.directive.mjs +0 -33
- package/esm2022/table/lib/column-size/column-size.directive.mjs +0 -34
- package/esm2022/table/lib/table-constants.library.mjs +0 -7
- package/esm2022/table/lib/table.component.mjs +0 -62
- package/esm2022/table/lib/table.model.mjs +0 -2
- package/esm2022/table/lib/table.module.mjs +0 -38
- package/esm2022/tooltip/ifsworld-granite-components-tooltip.mjs +0 -5
- package/esm2022/tooltip/index.mjs +0 -4
- package/esm2022/tooltip/lib/Services/granite-tooltip.service.mjs +0 -28
- package/esm2022/tooltip/lib/tooltip-constants.library.mjs +0 -4
- package/esm2022/tooltip/lib/tooltip-trigger-for.directive.mjs +0 -147
- package/esm2022/tooltip/lib/tooltip.component.mjs +0 -14
- package/esm2022/tooltip/lib/tooltip.module.mjs +0 -19
|
@@ -1,354 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, ContentChildren, Directive, EventEmitter, Input, Output, QueryList, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
-
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
3
|
-
import { hasModifierKey } from '@angular/cdk/keycodes';
|
|
4
|
-
import { BehaviorSubject, combineLatest, merge, Subject, Subscription, } from 'rxjs';
|
|
5
|
-
import { filter, map, startWith, switchMap } from 'rxjs/operators';
|
|
6
|
-
import { throwGraniteMenuInvalidPositionX, throwGraniteMenuInvalidPositionY, } from './menu-errors';
|
|
7
|
-
import { GraniteMenuItemComponent } from './menu-item.component';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
/** Counter for panel ID generation */
|
|
10
|
-
let menuPanelUid = 0;
|
|
11
|
-
/** Menu panel animation default transform values */
|
|
12
|
-
const transformMenuDefault = {
|
|
13
|
-
value: 'void',
|
|
14
|
-
params: {
|
|
15
|
-
xOffset: 0,
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
/** Base class with all of the menu functionality. */
|
|
19
|
-
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
20
|
-
export class _MenuBaseComponent {
|
|
21
|
-
/** Position of the menu in the X axis. */
|
|
22
|
-
get xPosition() {
|
|
23
|
-
return this._xPosition;
|
|
24
|
-
}
|
|
25
|
-
set xPosition(value) {
|
|
26
|
-
if (value !== 'before' && value !== 'after') {
|
|
27
|
-
throwGraniteMenuInvalidPositionX();
|
|
28
|
-
}
|
|
29
|
-
this._xPosition = value;
|
|
30
|
-
}
|
|
31
|
-
/** Position of the menu in the Y axis. */
|
|
32
|
-
get yPosition() {
|
|
33
|
-
return this._yPosition;
|
|
34
|
-
}
|
|
35
|
-
set yPosition(value) {
|
|
36
|
-
if (value !== 'above' && value !== 'below') {
|
|
37
|
-
throwGraniteMenuInvalidPositionY();
|
|
38
|
-
}
|
|
39
|
-
this._yPosition = value;
|
|
40
|
-
}
|
|
41
|
-
/** Current state of the panel animation. */
|
|
42
|
-
set _panelAnimationState(state) {
|
|
43
|
-
this._transformMenu.next({
|
|
44
|
-
value: state,
|
|
45
|
-
params: { xOffset: this.xOffset },
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
constructor(_changeDetectorRef) {
|
|
49
|
-
this._changeDetectorRef = _changeDetectorRef;
|
|
50
|
-
this.openOnHover = true;
|
|
51
|
-
this.scrollStrategy = 'reposition';
|
|
52
|
-
/**
|
|
53
|
-
* Event emitted when the menu is closed
|
|
54
|
-
*/
|
|
55
|
-
this.closed = new EventEmitter();
|
|
56
|
-
/**
|
|
57
|
-
* Event emitted when the menu is opened
|
|
58
|
-
*/
|
|
59
|
-
this.opened = new EventEmitter();
|
|
60
|
-
/**
|
|
61
|
-
* Used for locating the panel in tests and setting the aria-control attribute
|
|
62
|
-
* for the menu trigger.
|
|
63
|
-
*/
|
|
64
|
-
this.panelId = `granite-menu-panel-${menuPanelUid++}`;
|
|
65
|
-
/** Whether to show back button in touch menu title bar */
|
|
66
|
-
this.showBackButton = false;
|
|
67
|
-
/** Whether to show touch menu title bar */
|
|
68
|
-
this.showTitle = false;
|
|
69
|
-
/** Whether to add a close button below the menu */
|
|
70
|
-
this.showCloseButton = false;
|
|
71
|
-
/** Observable current state of the panel animation. */
|
|
72
|
-
this._transformMenu = new BehaviorSubject(transformMenuDefault);
|
|
73
|
-
/** Emits whenever an animation on the menu completes. */
|
|
74
|
-
this._animationDone = new Subject();
|
|
75
|
-
this._menuEmpty$ = new BehaviorSubject(false);
|
|
76
|
-
// eslint-disable-next-line @typescript-eslint/member-ordering
|
|
77
|
-
this._isMenuEmpty$ = combineLatest([
|
|
78
|
-
this._menuEmpty$,
|
|
79
|
-
this._animationDone,
|
|
80
|
-
]).pipe(filter(([m, a]) => m && a != null), map(() => true));
|
|
81
|
-
/** Only the direct descendant menu items. */
|
|
82
|
-
this._directDescendantItems = new QueryList();
|
|
83
|
-
/** Subscription to tab events on the menu panel */
|
|
84
|
-
this._tabSubscription = Subscription.EMPTY;
|
|
85
|
-
this._xPosition = 'after';
|
|
86
|
-
this._yPosition = 'below';
|
|
87
|
-
/**
|
|
88
|
-
* Current horizontal offset. Used with `pan` and `pan-hidden`
|
|
89
|
-
* animation states.
|
|
90
|
-
*/
|
|
91
|
-
this.xOffset = 0;
|
|
92
|
-
}
|
|
93
|
-
ngAfterContentChecked() {
|
|
94
|
-
this._menuEmpty$.next(this._allItems.length < 1 ? true : false);
|
|
95
|
-
}
|
|
96
|
-
ngAfterContentInit() {
|
|
97
|
-
this._updateDirectDescendants();
|
|
98
|
-
this._keyManager = new FocusKeyManager(this._directDescendantItems)
|
|
99
|
-
.withWrap()
|
|
100
|
-
.skipPredicate((menuItem) => {
|
|
101
|
-
const hostElement = menuItem._getHostElement();
|
|
102
|
-
return hostElement instanceof HTMLButtonElement
|
|
103
|
-
? hostElement.disabled
|
|
104
|
-
: hostElement.hasAttribute('graniteTitle');
|
|
105
|
-
});
|
|
106
|
-
this._tabSubscription = this._keyManager.tabOut.subscribe(() => {
|
|
107
|
-
this.closed.emit('tab');
|
|
108
|
-
});
|
|
109
|
-
// If a user manually (programatically) focuses a menu item, we need to reflect that focus
|
|
110
|
-
// change back to the key manager. Note that we don't need to unsubscribe here because _focused
|
|
111
|
-
// is internal and we know that it gets completed on destroy.
|
|
112
|
-
this._directDescendantItems.changes
|
|
113
|
-
.pipe(startWith(this._directDescendantItems), switchMap((items) => merge(...items.map((item) => item._focused))))
|
|
114
|
-
.subscribe((focusedItem) => this._keyManager.updateActiveItem(focusedItem));
|
|
115
|
-
}
|
|
116
|
-
ngOnDestroy() {
|
|
117
|
-
this._directDescendantItems.destroy();
|
|
118
|
-
this._tabSubscription.unsubscribe();
|
|
119
|
-
this.closed.complete();
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Stream that combines the `_hovered` observables of all the menu's items
|
|
123
|
-
* into a single observable. Emits whenever the hovered menu item changes.
|
|
124
|
-
*/
|
|
125
|
-
_hovered() {
|
|
126
|
-
// Coerce the `changes` property because Angular types it as `Observable<any>`
|
|
127
|
-
const itemChanges = this._directDescendantItems.changes;
|
|
128
|
-
return itemChanges.pipe(startWith(this._directDescendantItems),
|
|
129
|
-
// Hovering is not applicable when producing touch output
|
|
130
|
-
filter(() => {
|
|
131
|
-
return this._clientOutput?.device !== 'touch';
|
|
132
|
-
}), switchMap((items) => merge(...items.map((item) => item._hovered))));
|
|
133
|
-
}
|
|
134
|
-
/** Handle a keyboard event from the menu, delegating to the appropriate action. */
|
|
135
|
-
_handleKeydown(event) {
|
|
136
|
-
const key = event.key;
|
|
137
|
-
const manager = this._keyManager;
|
|
138
|
-
switch (key) {
|
|
139
|
-
case 'Escape':
|
|
140
|
-
if (!hasModifierKey(event)) {
|
|
141
|
-
event.preventDefault();
|
|
142
|
-
this.closed.emit('keydown');
|
|
143
|
-
}
|
|
144
|
-
break;
|
|
145
|
-
case 'ArrowLeft':
|
|
146
|
-
if (this.parentMenu && this.direction === 'ltr') {
|
|
147
|
-
this.closed.emit('keydown');
|
|
148
|
-
}
|
|
149
|
-
break;
|
|
150
|
-
case 'ArrowRight':
|
|
151
|
-
if (this.parentMenu && this.direction === 'rtl') {
|
|
152
|
-
this.closed.emit('keydown');
|
|
153
|
-
}
|
|
154
|
-
break;
|
|
155
|
-
case 'Home':
|
|
156
|
-
case 'End':
|
|
157
|
-
if (!hasModifierKey(event)) {
|
|
158
|
-
key === 'Home'
|
|
159
|
-
? manager.setFirstItemActive()
|
|
160
|
-
: manager.setLastItemActive();
|
|
161
|
-
event.preventDefault();
|
|
162
|
-
}
|
|
163
|
-
break;
|
|
164
|
-
default:
|
|
165
|
-
if (key === 'ArrowUp' || key === 'ArrowDown') {
|
|
166
|
-
manager.setFocusOrigin('keyboard');
|
|
167
|
-
}
|
|
168
|
-
manager.onKeydown(event);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
/**
|
|
172
|
-
* Focus the first item in the menu.
|
|
173
|
-
* @param origin Action from which the focus originated. Used to set the correct styling.
|
|
174
|
-
*/
|
|
175
|
-
focusFirstItem(origin = 'program') {
|
|
176
|
-
this._keyManager.setFocusOrigin(origin).setFirstItemActive();
|
|
177
|
-
}
|
|
178
|
-
/** Updates the `showTitle` property for touch device UI */
|
|
179
|
-
_updateShowTitle() {
|
|
180
|
-
this.showTitle = !!this.title || this.showBackButton;
|
|
181
|
-
}
|
|
182
|
-
/** Starts the enter animation */
|
|
183
|
-
_startAnimation() {
|
|
184
|
-
this._panelAnimationState = 'enter';
|
|
185
|
-
}
|
|
186
|
-
/** Resets the panel animation to its initial state. */
|
|
187
|
-
_resetAnimation() {
|
|
188
|
-
this._panelAnimationState = 'void';
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Starts the 'below' animation, moving a menu down, out of view below the
|
|
192
|
-
* viewport. Used to close the whole menu, for example when clicking
|
|
193
|
-
* the backdrop.
|
|
194
|
-
*/
|
|
195
|
-
_startTouchCloseDownAnimation() {
|
|
196
|
-
this._panelAnimationState = 'below';
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Starts the 'below-with-delay' animation, moving a menu down, out of view below the
|
|
200
|
-
* viewport. Used to close the whole menu as a response to the user tapping
|
|
201
|
-
* a menu item. There is a short delay before the animation starts, to that
|
|
202
|
-
* the user gets a visual feedback on what item was selected.
|
|
203
|
-
*/
|
|
204
|
-
_startTouchCloseDownAnimationWithDelay() {
|
|
205
|
-
this._panelAnimationState = 'below-with-delay';
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Starts the 'void' animation, moving a (sub) menu out of view to the side
|
|
209
|
-
* of the viewport. Used when going "back" from a sub menu.
|
|
210
|
-
*/
|
|
211
|
-
_startTouchCloseSideAnimation() {
|
|
212
|
-
this._resetAnimation();
|
|
213
|
-
}
|
|
214
|
-
/**
|
|
215
|
-
* Starts the enter-from-below animation, moving a (root) menu into view,
|
|
216
|
-
* Animates upwards from a starting position below the viewport.
|
|
217
|
-
*/
|
|
218
|
-
_startTouchRootEnterAnimation() {
|
|
219
|
-
this._panelAnimationState = 'enter-from-below';
|
|
220
|
-
this.xOffset = 0;
|
|
221
|
-
}
|
|
222
|
-
/** Starts the enter animation, moving a (sub) menu into view. */
|
|
223
|
-
_startTouchSubmenuEnterAnimation() {
|
|
224
|
-
this._panelAnimationState = 'enter';
|
|
225
|
-
this.xOffset = 0;
|
|
226
|
-
}
|
|
227
|
-
/**
|
|
228
|
-
* Starts the pan animation, to position a submenu in a response
|
|
229
|
-
* to user dragging sideways (panning).
|
|
230
|
-
*/
|
|
231
|
-
_startTouchPanAnimation(xOffset) {
|
|
232
|
-
this._panelAnimationState = 'pan';
|
|
233
|
-
this.xOffset = xOffset;
|
|
234
|
-
}
|
|
235
|
-
/**
|
|
236
|
-
* Starts the pan-hidden animation, to position a parent menu next to an
|
|
237
|
-
* active submenu that the user is dragging sideways (panning).
|
|
238
|
-
*/
|
|
239
|
-
_startTouchHidePanAnimation(xOffset) {
|
|
240
|
-
this._panelAnimationState = 'pan-hidden';
|
|
241
|
-
this.xOffset = xOffset;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Starts the hide animation, to make a parent menu slide out to leave
|
|
245
|
-
* space for a submenu.
|
|
246
|
-
*/
|
|
247
|
-
_startTouchHideAnimation() {
|
|
248
|
-
this._panelAnimationState = 'hide';
|
|
249
|
-
this.xOffset = 0;
|
|
250
|
-
}
|
|
251
|
-
/** Callback that is invoked when the panel animation completes. */
|
|
252
|
-
_onAnimationDone(event) {
|
|
253
|
-
this._animationDone.next(event);
|
|
254
|
-
this._isAnimating = false;
|
|
255
|
-
}
|
|
256
|
-
_onAnimationStart(event) {
|
|
257
|
-
this._isAnimating = true;
|
|
258
|
-
// Scroll the content element to the top as soon as the animation starts. This is necessary,
|
|
259
|
-
// because we move focus to the first item while it's still being animated, which can throw
|
|
260
|
-
// the browser off when it determines the scroll position. Alternatively we can move focus
|
|
261
|
-
// when the animation is done, however moving focus asynchronously will interrupt screen
|
|
262
|
-
// readers which are in the process of reading out the menu already. We take the `element`
|
|
263
|
-
// from the `event` since we can't use a `ViewChild` to access the pane.
|
|
264
|
-
if ((event.toState === 'enter' || event.toState === 'enter-from-below') &&
|
|
265
|
-
this._keyManager.activeItemIndex === 0) {
|
|
266
|
-
event.element.scrollTop = 0;
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
/**
|
|
270
|
-
* Handle click on the menu by emitting on the `closed` emitter
|
|
271
|
-
* with a `click` reason
|
|
272
|
-
*/
|
|
273
|
-
_handleClick() {
|
|
274
|
-
this.closed.emit('click');
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Handle click on the close button by emitting on the `closed` emitter
|
|
278
|
-
* without any particular reason
|
|
279
|
-
*/
|
|
280
|
-
_handleCloseClick() {
|
|
281
|
-
this.closed.emit();
|
|
282
|
-
}
|
|
283
|
-
/**
|
|
284
|
-
* Handle click on the back icon by emitting on the `clicked` emitter
|
|
285
|
-
*/
|
|
286
|
-
_handleBackClick(e) {
|
|
287
|
-
if (this.showBackButton) {
|
|
288
|
-
// Close submenu keydown-style: close only this menu and leave parents open
|
|
289
|
-
this.closed.emit('keydown');
|
|
290
|
-
}
|
|
291
|
-
e.stopPropagation();
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Update client device information for the menu and its menu items.
|
|
295
|
-
*/
|
|
296
|
-
_setDevice(clientInput, clientOutput) {
|
|
297
|
-
this._clientInput = clientInput;
|
|
298
|
-
this._clientOutput = clientOutput;
|
|
299
|
-
this._directDescendantItems.forEach((item) => {
|
|
300
|
-
item._clientInput = clientInput;
|
|
301
|
-
item._clientOutput = clientOutput;
|
|
302
|
-
});
|
|
303
|
-
this._changeDetectorRef.markForCheck();
|
|
304
|
-
}
|
|
305
|
-
/**
|
|
306
|
-
* Resets the active item in the menu. This is used when the menu is opened, allowing
|
|
307
|
-
* the user to start from the first option when pressing the down arrow.
|
|
308
|
-
*/
|
|
309
|
-
resetActiveItem() {
|
|
310
|
-
this._keyManager.setActiveItem(-1);
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Sets up a stream that will keep track of any newly-added menu items and will update the list
|
|
314
|
-
* of direct descendants. We collect the descendants this way, because `_allItems` can include
|
|
315
|
-
* items that are part of child menus, and using a custom way of registering items is unreliable
|
|
316
|
-
* when it comes to maintaining the item order.
|
|
317
|
-
*/
|
|
318
|
-
_updateDirectDescendants() {
|
|
319
|
-
this._allItems.changes
|
|
320
|
-
.pipe(startWith(this._allItems))
|
|
321
|
-
.subscribe((items) => {
|
|
322
|
-
this._directDescendantItems.reset(items.filter((item) => item._parentMenu === this));
|
|
323
|
-
this._directDescendantItems.notifyOnChanges();
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _MenuBaseComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
327
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: _MenuBaseComponent, inputs: { xPosition: "xPosition", yPosition: "yPosition", title: "title", closeLabel: "closeLabel", openOnHover: "openOnHover", scrollStrategy: "scrollStrategy" }, outputs: { closed: "closed", opened: "opened" }, queries: [{ propertyName: "_allItems", predicate: GraniteMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 }); }
|
|
328
|
-
}
|
|
329
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _MenuBaseComponent, decorators: [{
|
|
330
|
-
type: Directive
|
|
331
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { xPosition: [{
|
|
332
|
-
type: Input
|
|
333
|
-
}], yPosition: [{
|
|
334
|
-
type: Input
|
|
335
|
-
}], title: [{
|
|
336
|
-
type: Input
|
|
337
|
-
}], closeLabel: [{
|
|
338
|
-
type: Input
|
|
339
|
-
}], openOnHover: [{
|
|
340
|
-
type: Input
|
|
341
|
-
}], scrollStrategy: [{
|
|
342
|
-
type: Input
|
|
343
|
-
}], templateRef: [{
|
|
344
|
-
type: ViewChild,
|
|
345
|
-
args: [TemplateRef]
|
|
346
|
-
}], _allItems: [{
|
|
347
|
-
type: ContentChildren,
|
|
348
|
-
args: [GraniteMenuItemComponent, { descendants: true }]
|
|
349
|
-
}], closed: [{
|
|
350
|
-
type: Output
|
|
351
|
-
}], opened: [{
|
|
352
|
-
type: Output
|
|
353
|
-
}] } });
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBRUwsT0FBTyxFQUNQLFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1uRSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRakUsc0NBQXNDO0FBQ3RDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQTJCckIsb0RBQW9EO0FBQ3BELE1BQU0sb0JBQW9CLEdBQWtCO0lBQzFDLEtBQUssRUFBRSxNQUFNO0lBQ2IsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFLENBQUM7S0FDWDtDQUNGLENBQUM7QUFFRixxREFBcUQ7QUFFckQsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsMENBQTBDO0lBQzFDLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFB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QkFLWSxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQ2xpZW50SW5wdXRJbnRlcmZhY2UsXG4gIENsaWVudE91dHB1dEludGVyZmFjZSxcbn0gZnJvbSAnLi4vY29yZS9jbGllbnQtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtcbiAgdGhyb3dHcmFuaXRlTWVudUludmFsaWRQb3NpdGlvblgsXG4gIHRocm93R3Jhbml0ZU1lbnVJbnZhbGlkUG9zaXRpb25ZLFxufSBmcm9tICcuL21lbnUtZXJyb3JzJztcbmltcG9ydCB7IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDbG9zZWRFdmVudFR5cGUsXG4gIE9wZW5lZEV2ZW50VHlwZSxcbiAgR3Jhbml0ZU1lbnVQYW5lbEludGVyZmFjZSxcbn0gZnJvbSAnLi9tZW51LXBhbmVsJztcbmltcG9ydCB7IE1lbnVQb3NpdGlvblgsIE1lbnVQb3NpdGlvblkgfSBmcm9tICcuL21lbnUtcG9zaXRpb25zJztcblxuLyoqIENvdW50ZXIgZm9yIHBhbmVsIElEIGdlbmVyYXRpb24gKi9cbmxldCBtZW51UGFuZWxVaWQgPSAwO1xuXG4vKiogTWVudSBwYW5lbCBhbmltYXRpb24gc3RhdGVzICovXG50eXBlIFRyYW5zZm9ybU1lbnVTdGF0ZXMgPVxuICAvLyBUb3VjaCBkZXZpY2VcbiAgfCAndm9pZCdcbiAgfCAnZW50ZXInXG4gIHwgJ2VudGVyLWZyb20tYmVsb3cnXG4gIHwgJ2JlbG93LXdpdGgtZGVsYXknXG4gIHwgJ2JlbG93J1xuICB8ICdwYW4nXG4gIHwgJ2hpZGUnXG4gIHwgJ3Bhbi1oaWRkZW4nO1xuXG4vKipcbiAqIE1lbnUgcGFuZWwgYW5pbWF0aW9uIHRyYW5zZm9ybS9zdGF0ZSBvYmplY3QuIEhhcyB0byBiZSBhbiBvYmplY3QgYXMgd2Ugc3VwcGx5XG4gKiB0aGUgYHhPZmZzZXRgIHBhcmFtZXRlciBhbmQgbm90IGp1c3QgdGhlIHN0YXRlIG5hbWUuXG4gKi9cbnR5cGUgVHJhbnNmb3JtTWVudSA9IHtcbiAgLyoqIEN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIG5hbWUgKi9cbiAgdmFsdWU6IFRyYW5zZm9ybU1lbnVTdGF0ZXM7XG4gIHBhcmFtczoge1xuICAgIC8qKiBIb3cgZmFyIHRoZSBtZW51IGhhcyBiZWVuIHBhbm5lZC9zd2lwZWQgYnkgdGhlIHVzZXIgKi9cbiAgICB4T2Zmc2V0OiBudW1iZXI7XG4gIH07XG59O1xuXG4vKiogTWVudSBwYW5lbCBhbmltYXRpb24gZGVmYXVsdCB0cmFuc2Zvcm0gdmFsdWVzICovXG5jb25zdCB0cmFuc2Zvcm1NZW51RGVmYXVsdDogVHJhbnNmb3JtTWVudSA9IHtcbiAgdmFsdWU6ICd2b2lkJyxcbiAgcGFyYW1zOiB7XG4gICAgeE9mZnNldDogMCxcbiAgfSxcbn07XG5cbi8qKiBCYXNlIGNsYXNzIHdpdGggYWxsIG9mIHRoZSBtZW51IGZ1bmN0aW9uYWxpdHkuICovXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIF9NZW51QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBHcmFuaXRlTWVudVBhbmVsSW50ZXJmYWNlXG57XG4gIC8qKiBQb3NpdGlvbiBvZiB0aGUgbWVudSBpbiB0aGUgWCBheGlzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgeFBvc2l0aW9uKCk6IE1lbnVQb3NpdGlvblgge1xuICAgIHJldHVybiB0aGlzLl94UG9zaXRpb247XG4gIH1cbiAgc2V0IHhQb3NpdGlvbih2YWx1ZTogTWVudVBvc2l0aW9uWCkge1xuICAgIGlmICh2YWx1ZSAhPT0gJ2JlZm9yZScgJiYgdmFsdWUgIT09ICdhZnRlcicpIHtcbiAgICAgIHRocm93R3Jhbml0ZU1lbnVJbnZhbGlkUG9zaXRpb25YKCk7XG4gICAgfVxuICAgIHRoaXMuX3hQb3NpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBtZW51IGluIHRoZSBZIGF4aXMuICovXG4gIEBJbnB1dCgpXG4gIGdldCB5UG9zaXRpb24oKTogTWVudVBvc2l0aW9uWSB7XG4gICAgcmV0dXJuIHRoaXMuX3lQb3NpdGlvbjtcbiAgfVxuICBzZXQgeVBvc2l0aW9uKHZhbHVlOiBNZW51UG9zaXRpb25ZKSB7XG4gICAgaWYgKHZhbHVlICE9PSAnYWJvdmUnICYmIHZhbHVlICE9PSAnYmVsb3cnKSB7XG4gICAgICB0aHJvd0dyYW5pdGVNZW51SW52YWxpZFBvc2l0aW9uWSgpO1xuICAgIH1cbiAgICB0aGlzLl95UG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBPcHRpb25hbCB0b3VjaCBtZW51IHBhbmVsIHRpdGxlICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvdWNoIG1lbnUgY2xvc2UgYnV0dG9uIGxhYmVsLiBJZiBub3Qgc2V0LCBhbnkgbGFiZWwgc2V0IGJ5IHBhcmVudCB3aWxsXG4gICAqIGJlIHVzZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbG9zZUxhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgb3Blbk9uSG92ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNjcm9sbFN0cmF0ZWd5OiAncmVwb3NpdGlvbicgfCAnY2xvc2UnID0gJ3JlcG9zaXRpb24nO1xuXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIC8qKiBBbGwgaXRlbXMgaW5zaWRlIHRoZSBtZW51LiBJbmNsdWRlcyBpdGVtcyBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgbWVudS4gKi9cbiAgQENvbnRlbnRDaGlsZHJlbihHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgX2FsbEl0ZW1zOiBRdWVyeUxpc3Q8R3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50PjtcblxuICAvKipcbiAgICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBtZW51IGlzIGNsb3NlZFxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGNsb3NlZDogRXZlbnRFbWl0dGVyPENsb3NlZEV2ZW50VHlwZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBvcGVuZWQ6IEV2ZW50RW1pdHRlcjxPcGVuZWRFdmVudFR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBsb2NhdGluZyB0aGUgcGFuZWwgaW4gdGVzdHMgYW5kIHNldHRpbmcgdGhlIGFyaWEtY29udHJvbCBhdHRyaWJ1dGVcbiAgICogZm9yIHRoZSBtZW51IHRyaWdnZXIuXG4gICAqL1xuICByZWFkb25seSBwYW5lbElkID0gYGdyYW5pdGUtbWVudS1wYW5lbC0ke21lbnVQYW5lbFVpZCsrfWA7XG5cbiAgLyoqIFBhcmVudCBtZW51IG9mIHRoZSBjdXJyZW50IG1lbnUgcGFuZWwuICovXG4gIHBhcmVudE1lbnU6IEdyYW5pdGVNZW51UGFuZWxJbnRlcmZhY2UgfCB1bmRlZmluZWQ7XG5cbiAgLyoqIExheW91dCBkaXJlY3Rpb24gb2YgdGhlIG1lbnUuICovXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYmFjayBidXR0b24gaW4gdG91Y2ggbWVudSB0aXRsZSBiYXIgKi9cbiAgc2hvd0JhY2tCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBzaG93IHRvdWNoIG1lbnUgdGl0bGUgYmFyICovXG4gIHNob3dUaXRsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFkZCBhIGNsb3NlIGJ1dHRvbiBiZWxvdyB0aGUgbWVudSAqL1xuICBzaG93Q2xvc2VCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT2JzZXJ2YWJsZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBwYW5lbCBhbmltYXRpb24uICovXG4gIF90cmFuc2Zvcm1NZW51OiBCZWhhdmlvclN1YmplY3Q8VHJhbnNmb3JtTWVudT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFxuICAgIHRyYW5zZm9ybU1lbnVEZWZhdWx0XG4gICk7XG5cbiAgLyoqIEVtaXRzIHdoZW5ldmVyIGFuIGFuaW1hdGlvbiBvbiB0aGUgbWVudSBjb21wbGV0ZXMuICovXG4gIF9hbmltYXRpb25Eb25lID0gbmV3IFN1YmplY3Q8QW5pbWF0aW9uRXZlbnQ+KCk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIG1lbnUgaXMgYW5pbWF0aW5nLiAqL1xuICBfaXNBbmltYXRpbmc6IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIG1lbnUgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAqL1xuICBfaXNDbG9zaW5nOiBib29sZWFuO1xuXG4gIC8qKiBDbGllbnQgaW5wdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gIF9jbGllbnRJbnB1dDogQ2xpZW50SW5wdXRJbnRlcmZhY2U7XG5cbiAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gIF9jbGllbnRPdXRwdXQ6IENsaWVudE91dHB1dEludGVyZmFjZTtcblxuICBwcml2YXRlIF9tZW51RW1wdHkkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9tZW1iZXItb3JkZXJpbmdcbiAgX2lzTWVudUVtcHR5JDogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMuX21lbnVFbXB0eSQsXG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZSxcbiAgXSkucGlwZShcbiAgICBmaWx0ZXIoKFttLCBhXSkgPT4gbSAmJiBhICE9IG51bGwpLFxuICAgIG1hcCgoKSA9PiB0cnVlKVxuICApO1xuXG4gIC8qKiBPbmx5IHRoZSBkaXJlY3QgZGVzY2VuZGFudCBtZW51IGl0ZW1zLiAqL1xuICBwcml2YXRlIF9kaXJlY3REZXNjZW5kYW50SXRlbXMgPSBuZXcgUXVlcnlMaXN0PEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD4oKTtcblxuICBwcml2YXRlIF9rZXlNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8R3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50PjtcblxuICAvKiogU3Vic2NyaXB0aW9uIHRvIHRhYiBldmVudHMgb24gdGhlIG1lbnUgcGFuZWwgKi9cbiAgcHJpdmF0ZSBfdGFiU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIHByaXZhdGUgX3hQb3NpdGlvbjogTWVudVBvc2l0aW9uWCA9ICdhZnRlcic7XG4gIHByaXZhdGUgX3lQb3NpdGlvbjogTWVudVBvc2l0aW9uWSA9ICdiZWxvdyc7XG5cbiAgLyoqIEN1cnJlbnQgc3RhdGUgb2YgdGhlIHBhbmVsIGFuaW1hdGlvbi4gKi9cbiAgc2V0IF9wYW5lbEFuaW1hdGlvblN0YXRlKHN0YXRlOiBUcmFuc2Zvcm1NZW51U3RhdGVzKSB7XG4gICAgdGhpcy5fdHJhbnNmb3JtTWVudS5uZXh0KHtcbiAgICAgIHZhbHVlOiBzdGF0ZSxcbiAgICAgIHBhcmFtczogeyB4T2Zmc2V0OiB0aGlzLnhPZmZzZXQgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXJyZW50IGhvcml6b250YWwgb2Zmc2V0LiBVc2VkIHdpdGggYHBhbmAgYW5kIGBwYW4taGlkZGVuYFxuICAgKiBhbmltYXRpb24gc3RhdGVzLlxuICAgKi9cbiAgcHJpdmF0ZSB4T2Zmc2V0OiBudW1iZXIgPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ0FmdGVyQ29udGVudENoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVudUVtcHR5JC5uZXh0KHRoaXMuX2FsbEl0ZW1zLmxlbmd0aCA8IDEgPyB0cnVlIDogZmFsc2UpO1xuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCk7XG4gICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKVxuICAgICAgLndpdGhXcmFwKClcbiAgICAgIC5za2lwUHJlZGljYXRlKChtZW51SXRlbSkgPT4ge1xuICAgICAgICBjb25zdCBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQgPSBtZW51SXRlbS5fZ2V0SG9zdEVsZW1lbnQoKTtcbiAgICAgICAgcmV0dXJuIGhvc3RFbGVtZW50IGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnRcbiAgICAgICAgICA/IGhvc3RFbGVtZW50LmRpc2FibGVkXG4gICAgICAgICAgOiBob3N0RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2dyYW5pdGVUaXRsZScpO1xuICAgICAgfSk7XG4gICAgdGhpcy5fdGFiU3Vic2NyaXB0aW9uID0gdGhpcy5fa2V5TWFuYWdlci50YWJPdXQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VkLmVtaXQoJ3RhYicpO1xuICAgIH0pO1xuXG4gICAgLy8gSWYgYSB1c2VyIG1hbnVhbGx5IChwcm9ncmFtYXRpY2FsbHkpIGZvY3VzZXMgYSBtZW51IGl0ZW0sIHdlIG5lZWQgdG8gcmVmbGVjdCB0aGF0IGZvY3VzXG4gICAgLy8gY2hhbmdlIGJhY2sgdG8gdGhlIGtleSBtYW5hZ2VyLiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byB1bnN1YnNjcmliZSBoZXJlIGJlY2F1c2UgX2ZvY3VzZWRcbiAgICAvLyBpcyBpbnRlcm5hbCBhbmQgd2Uga25vdyB0aGF0IGl0IGdldHMgY29tcGxldGVkIG9uIGRlc3Ryb3kuXG4gICAgdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBzdGFydFdpdGgodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSxcbiAgICAgICAgc3dpdGNoTWFwKChpdGVtcykgPT5cbiAgICAgICAgICBtZXJnZSguLi5pdGVtcy5tYXAoKGl0ZW06IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCkgPT4gaXRlbS5fZm9jdXNlZCkpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGZvY3VzZWRJdGVtOiBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQpID0+XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShmb2N1c2VkSXRlbSlcbiAgICAgICk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuZGVzdHJveSgpO1xuICAgIHRoaXMuX3RhYlN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RyZWFtIHRoYXQgY29tYmluZXMgdGhlIGBfaG92ZXJlZGAgb2JzZXJ2YWJsZXMgb2YgYWxsIHRoZSBtZW51J3MgaXRlbXNcbiAgICogaW50byBhIHNpbmdsZSBvYnNlcnZhYmxlLiBFbWl0cyB3aGVuZXZlciB0aGUgaG92ZXJlZCBtZW51IGl0ZW0gY2hhbmdlcy5cbiAgICovXG4gIF9ob3ZlcmVkKCk6IE9ic2VydmFibGU8R3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50PiB7XG4gICAgLy8gQ29lcmNlIHRoZSBgY2hhbmdlc2AgcHJvcGVydHkgYmVjYXVzZSBBbmd1bGFyIHR5cGVzIGl0IGFzIGBPYnNlcnZhYmxlPGFueT5gXG4gICAgY29uc3QgaXRlbUNoYW5nZXMgPSB0aGlzLl9kaXJlY3REZXNjZW5kYW50SXRlbXMuY2hhbmdlcyBhcyBPYnNlcnZhYmxlPFxuICAgICAgUXVlcnlMaXN0PEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD5cbiAgICA+O1xuXG4gICAgcmV0dXJuIGl0ZW1DaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zKSxcbiAgICAgIC8vIEhvdmVyaW5nIGlzIG5vdCBhcHBsaWNhYmxlIHdoZW4gcHJvZHVjaW5nIHRvdWNoIG91dHB1dFxuICAgICAgZmlsdGVyKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaWVudE91dHB1dD8uZGV2aWNlICE9PSAndG91Y2gnO1xuICAgICAgfSksXG4gICAgICBzd2l0Y2hNYXAoKGl0ZW1zKSA9PlxuICAgICAgICBtZXJnZSguLi5pdGVtcy5tYXAoKGl0ZW06IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCkgPT4gaXRlbS5faG92ZXJlZCkpXG4gICAgICApXG4gICAgKSBhcyBPYnNlcnZhYmxlPEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD47XG4gIH1cblxuICAvKiogSGFuZGxlIGEga2V5Ym9hcmQgZXZlbnQgZnJvbSB0aGUgbWVudSwgZGVsZWdhdGluZyB0byB0aGUgYXBwcm9wcmlhdGUgYWN0aW9uLiAqL1xuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5fa2V5TWFuYWdlcjtcblxuICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgaWYgKHRoaXMucGFyZW50TWVudSAmJiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgaWYgKHRoaXMucGFyZW50TWVudSAmJiB0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAga2V5ID09PSAnSG9tZSdcbiAgICAgICAgICAgID8gbWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKVxuICAgICAgICAgICAgOiBtYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChrZXkgPT09ICdBcnJvd1VwJyB8fCBrZXkgPT09ICdBcnJvd0Rvd24nKSB7XG4gICAgICAgICAgbWFuYWdlci5zZXRGb2N1c09yaWdpbigna2V5Ym9hcmQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRm9jdXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIG1lbnUuXG4gICAqIEBwYXJhbSBvcmlnaW4gQWN0aW9uIGZyb20gd2hpY2ggdGhlIGZvY3VzIG9yaWdpbmF0ZWQuIFVzZWQgdG8gc2V0IHRoZSBjb3JyZWN0IHN0eWxpbmcuXG4gICAqL1xuICBmb2N1c0ZpcnN0SXRlbShvcmlnaW46IEZvY3VzT3JpZ2luID0gJ3Byb2dyYW0nKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5TWFuYWdlci5zZXRGb2N1c09yaWdpbihvcmlnaW4pLnNldEZpcnN0SXRlbUFjdGl2ZSgpO1xuICB9XG5cbiAgLyoqIFVwZGF0ZXMgdGhlIGBzaG93VGl0bGVgIHByb3BlcnR5IGZvciB0b3VjaCBkZXZpY2UgVUkgKi9cbiAgX3VwZGF0ZVNob3dUaXRsZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dUaXRsZSA9ICEhdGhpcy50aXRsZSB8fCB0aGlzLnNob3dCYWNrQnV0dG9uO1xuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgZW50ZXIgYW5pbWF0aW9uICovXG4gIF9zdGFydEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ2VudGVyJztcbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIHBhbmVsIGFuaW1hdGlvbiB0byBpdHMgaW5pdGlhbCBzdGF0ZS4gKi9cbiAgX3Jlc2V0QW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAndm9pZCc7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSAnYmVsb3cnIGFuaW1hdGlvbiwgbW92aW5nIGEgbWVudSBkb3duLCBvdXQgb2YgdmlldyBiZWxvdyB0aGVcbiAgICogdmlld3BvcnQuIFVzZWQgdG8gY2xvc2UgdGhlIHdob2xlIG1lbnUsIGZvciBleGFtcGxlIHdoZW4gY2xpY2tpbmdcbiAgICogdGhlIGJhY2tkcm9wLlxuICAgKi9cbiAgX3N0YXJ0VG91Y2hDbG9zZURvd25BbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdiZWxvdyc7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSAnYmVsb3ctd2l0aC1kZWxheScgYW5pbWF0aW9uLCBtb3ZpbmcgYSBtZW51IGRvd24sIG91dCBvZiB2aWV3IGJlbG93IHRoZVxuICAgKiB2aWV3cG9ydC4gVXNlZCB0byBjbG9zZSB0aGUgd2hvbGUgbWVudSBhcyBhIHJlc3BvbnNlIHRvIHRoZSB1c2VyIHRhcHBpbmdcbiAgICogYSBtZW51IGl0ZW0uIFRoZXJlIGlzIGEgc2hvcnQgZGVsYXkgYmVmb3JlIHRoZSBhbmltYXRpb24gc3RhcnRzLCB0byB0aGF0XG4gICAqIHRoZSB1c2VyIGdldHMgYSB2aXN1YWwgZmVlZGJhY2sgb24gd2hhdCBpdGVtIHdhcyBzZWxlY3RlZC5cbiAgICovXG4gIF9zdGFydFRvdWNoQ2xvc2VEb3duQW5pbWF0aW9uV2l0aERlbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAnYmVsb3ctd2l0aC1kZWxheSc7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSAndm9pZCcgYW5pbWF0aW9uLCBtb3ZpbmcgYSAoc3ViKSBtZW51IG91dCBvZiB2aWV3IHRvIHRoZSBzaWRlXG4gICAqIG9mIHRoZSB2aWV3cG9ydC4gVXNlZCB3aGVuIGdvaW5nIFwiYmFja1wiIGZyb20gYSBzdWIgbWVudS5cbiAgICovXG4gIF9zdGFydFRvdWNoQ2xvc2VTaWRlQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2V0QW5pbWF0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBlbnRlci1mcm9tLWJlbG93IGFuaW1hdGlvbiwgbW92aW5nIGEgKHJvb3QpIG1lbnUgaW50byB2aWV3LFxuICAgKiBBbmltYXRlcyB1cHdhcmRzIGZyb20gYSBzdGFydGluZyBwb3NpdGlvbiBiZWxvdyB0aGUgdmlld3BvcnQuXG4gICAqL1xuICBfc3RhcnRUb3VjaFJvb3RFbnRlckFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ2VudGVyLWZyb20tYmVsb3cnO1xuICAgIHRoaXMueE9mZnNldCA9IDA7XG4gIH1cblxuICAvKiogU3RhcnRzIHRoZSBlbnRlciBhbmltYXRpb24sIG1vdmluZyBhIChzdWIpIG1lbnUgaW50byB2aWV3LiAqL1xuICBfc3RhcnRUb3VjaFN1Ym1lbnVFbnRlckFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ2VudGVyJztcbiAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgcGFuIGFuaW1hdGlvbiwgdG8gcG9zaXRpb24gYSBzdWJtZW51IGluIGEgcmVzcG9uc2VcbiAgICogdG8gdXNlciBkcmFnZ2luZyBzaWRld2F5cyAocGFubmluZykuXG4gICAqL1xuICBfc3RhcnRUb3VjaFBhbkFuaW1hdGlvbih4T2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ3Bhbic7XG4gICAgdGhpcy54T2Zmc2V0ID0geE9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHBhbi1oaWRkZW4gYW5pbWF0aW9uLCB0byBwb3NpdGlvbiBhIHBhcmVudCBtZW51IG5leHQgdG8gYW5cbiAgICogYWN0aXZlIHN1Ym1lbnUgdGhhdCB0aGUgdXNlciBpcyBkcmFnZ2luZyBzaWRld2F5cyAocGFubmluZykuXG4gICAqL1xuICBfc3RhcnRUb3VjaEhpZGVQYW5BbmltYXRpb24oeE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdwYW4taGlkZGVuJztcbiAgICB0aGlzLnhPZmZzZXQgPSB4T2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgaGlkZSBhbmltYXRpb24sIHRvIG1ha2UgYSBwYXJlbnQgbWVudSBzbGlkZSBvdXQgdG8gbGVhdmVcbiAgICogc3BhY2UgZm9yIGEgc3VibWVudS5cbiAgICovXG4gIF9zdGFydFRvdWNoSGlkZUFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ2hpZGUnO1xuICAgIHRoaXMueE9mZnNldCA9IDA7XG4gIH1cblxuICAvKiogQ2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIHBhbmVsIGFuaW1hdGlvbiBjb21wbGV0ZXMuICovXG4gIF9vbkFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGV2ZW50KTtcbiAgICB0aGlzLl9pc0FuaW1hdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgX29uQW5pbWF0aW9uU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5faXNBbmltYXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gU2Nyb2xsIHRoZSBjb250ZW50IGVsZW1lbnQgdG8gdGhlIHRvcCBhcyBzb29uIGFzIHRoZSBhbmltYXRpb24gc3RhcnRzLiBUaGlzIGlzIG5lY2Vzc2FyeSxcbiAgICAvLyBiZWNhdXNlIHdlIG1vdmUgZm9jdXMgdG8gdGhlIGZpcnN0IGl0ZW0gd2hpbGUgaXQncyBzdGlsbCBiZWluZyBhbmltYXRlZCwgd2hpY2ggY2FuIHRocm93XG4gICAgLy8gdGhlIGJyb3dzZXIgb2ZmIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIHBvc2l0aW9uLiBBbHRlcm5hdGl2ZWx5IHdlIGNhbiBtb3ZlIGZvY3VzXG4gICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGhvd2V2ZXIgbW92aW5nIGZvY3VzIGFzeW5jaHJvbm91c2x5IHdpbGwgaW50ZXJydXB0IHNjcmVlblxuICAgIC8vIHJlYWRlcnMgd2hpY2ggYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJlYWRpbmcgb3V0IHRoZSBtZW51IGFscmVhZHkuIFdlIHRha2UgdGhlIGBlbGVtZW50YFxuICAgIC8vIGZyb20gdGhlIGBldmVudGAgc2luY2Ugd2UgY2FuJ3QgdXNlIGEgYFZpZXdDaGlsZGAgdG8gYWNjZXNzIHRoZSBwYW5lLlxuICAgIGlmIChcbiAgICAgIChldmVudC50b1N0YXRlID09PSAnZW50ZXInIHx8IGV2ZW50LnRvU3RhdGUgPT09ICdlbnRlci1mcm9tLWJlbG93JykgJiZcbiAgICAgIHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ID09PSAwXG4gICAgKSB7XG4gICAgICBldmVudC5lbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiB0aGUgbWVudSBieSBlbWl0dGluZyBvbiB0aGUgYGNsb3NlZGAgZW1pdHRlclxuICAgKiB3aXRoIGEgYGNsaWNrYCByZWFzb25cbiAgICovXG4gIF9oYW5kbGVDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCdjbGljaycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiB0aGUgY2xvc2UgYnV0dG9uIGJ5IGVtaXR0aW5nIG9uIHRoZSBgY2xvc2VkYCBlbWl0dGVyXG4gICAqIHdpdGhvdXQgYW55IHBhcnRpY3VsYXIgcmVhc29uXG4gICAqL1xuICBfaGFuZGxlQ2xvc2VDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlZC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNsaWNrIG9uIHRoZSBiYWNrIGljb24gYnkgZW1pdHRpbmcgb24gdGhlIGBjbGlja2VkYCBlbWl0dGVyXG4gICAqL1xuICBfaGFuZGxlQmFja0NsaWNrKGU6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaG93QmFja0J1dHRvbikge1xuICAgICAgLy8gQ2xvc2Ugc3VibWVudSBrZXlkb3duLXN0eWxlOiBjbG9zZSBvbmx5IHRoaXMgbWVudSBhbmQgbGVhdmUgcGFyZW50cyBvcGVuXG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJyk7XG4gICAgfVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGNsaWVudCBkZXZpY2UgaW5mb3JtYXRpb24gZm9yIHRoZSBtZW51IGFuZCBpdHMgbWVudSBpdGVtcy5cbiAgICovXG4gIF9zZXREZXZpY2UoXG4gICAgY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlLFxuICAgIGNsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlXG4gICk6IHZvaWQge1xuICAgIHRoaXMuX2NsaWVudElucHV0ID0gY2xpZW50SW5wdXQ7XG4gICAgdGhpcy5fY2xpZW50T3V0cHV0ID0gY2xpZW50T3V0cHV0O1xuXG4gICAgdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uX2NsaWVudElucHV0ID0gY2xpZW50SW5wdXQ7XG4gICAgICBpdGVtLl9jbGllbnRPdXRwdXQgPSBjbGllbnRPdXRwdXQ7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBpdGVtIGluIHRoZSBtZW51LiBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQsIGFsbG93aW5nXG4gICAqIHRoZSB1c2VyIHRvIHN0YXJ0IGZyb20gdGhlIGZpcnN0IG9wdGlvbiB3aGVuIHByZXNzaW5nIHRoZSBkb3duIGFycm93LlxuICAgKi9cbiAgcmVzZXRBY3RpdmVJdGVtKCk6IHZvaWQge1xuICAgIHRoaXMuX2tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSgtMSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCBhIHN0cmVhbSB0aGF0IHdpbGwga2VlcCB0cmFjayBvZiBhbnkgbmV3bHktYWRkZWQgbWVudSBpdGVtcyBhbmQgd2lsbCB1cGRhdGUgdGhlIGxpc3RcbiAgICogb2YgZGlyZWN0IGRlc2NlbmRhbnRzLiBXZSBjb2xsZWN0IHRoZSBkZXNjZW5kYW50cyB0aGlzIHdheSwgYmVjYXVzZSBgX2FsbEl0ZW1zYCBjYW4gaW5jbHVkZVxuICAgKiBpdGVtcyB0aGF0IGFyZSBwYXJ0IG9mIGNoaWxkIG1lbnVzLCBhbmQgdXNpbmcgYSBjdXN0b20gd2F5IG9mIHJlZ2lzdGVyaW5nIGl0ZW1zIGlzIHVucmVsaWFibGVcbiAgICogd2hlbiBpdCBjb21lcyB0byBtYWludGFpbmluZyB0aGUgaXRlbSBvcmRlci5cbiAgICovXG4gIHByaXZhdGUgX3VwZGF0ZURpcmVjdERlc2NlbmRhbnRzKCkge1xuICAgIHRoaXMuX2FsbEl0ZW1zLmNoYW5nZXNcbiAgICAgIC5waXBlKHN0YXJ0V2l0aCh0aGlzLl9hbGxJdGVtcykpXG4gICAgICAuc3Vic2NyaWJlKChpdGVtczogUXVlcnlMaXN0PEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD4pID0+IHtcbiAgICAgICAgdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLnJlc2V0KFxuICAgICAgICAgIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5fcGFyZW50TWVudSA9PT0gdGhpcylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { trigger, state, style, animate, group, query, transition, } from '@angular/animations';
|
|
2
|
-
import { getEaseLinear, getEaseOutSteep } from '../core/animation';
|
|
3
|
-
const easeOut120 = getEaseOutSteep(120);
|
|
4
|
-
/**
|
|
5
|
-
* Animations used by the `granite-menu` component, showing the desktop interface.
|
|
6
|
-
* @docs-private
|
|
7
|
-
*/
|
|
8
|
-
export const graniteMenuDesktopAnimations = {
|
|
9
|
-
transformMenuDesktop: trigger('transformMenuDesktop', [
|
|
10
|
-
state('void', style({
|
|
11
|
-
opacity: 0,
|
|
12
|
-
transform: 'scale(0.9)',
|
|
13
|
-
})),
|
|
14
|
-
transition('void => enter', group([
|
|
15
|
-
query('.granite-menu-content', animate(getEaseLinear(100), style({
|
|
16
|
-
opacity: 1,
|
|
17
|
-
}))),
|
|
18
|
-
animate(easeOut120, style({ transform: 'scale(1)' })),
|
|
19
|
-
])),
|
|
20
|
-
transition('* => void', animate(getEaseLinear(100, 25), style({ opacity: 0 }))),
|
|
21
|
-
]),
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1kZXNrdG9wLWFuaW1hdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS1kZXNrdG9wLWFuaW1hdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUVMLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbkUsTUFBTSxVQUFVLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRXhDOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLDRCQUE0QixHQU1yQztJQUNGLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRTtRQUNwRCxLQUFLLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztZQUNKLE9BQU8sRUFBRSxDQUFDO1lBQ1YsU0FBUyxFQUFFLFlBQVk7U0FDeEIsQ0FBQyxDQUNIO1FBQ0QsVUFBVSxDQUNSLGVBQWUsRUFDZixLQUFLLENBQUM7WUFDSixLQUFLLENBQ0gsdUJBQXVCLEVBQ3ZCLE9BQU8sQ0FDTCxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQ2xCLEtBQUssQ0FBQztnQkFDSixPQUFPLEVBQUUsQ0FBQzthQUNYLENBQUMsQ0FDSCxDQUNGO1lBQ0QsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztTQUN0RCxDQUFDLENBQ0g7UUFDRCxVQUFVLENBQ1IsV0FBVyxFQUNYLE9BQU8sQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ3ZEO0tBQ0YsQ0FBQztDQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0cmlnZ2VyLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YSxcbiAgYW5pbWF0ZSxcbiAgZ3JvdXAsXG4gIHF1ZXJ5LFxuICB0cmFuc2l0aW9uLFxufSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IGdldEVhc2VMaW5lYXIsIGdldEVhc2VPdXRTdGVlcCB9IGZyb20gJy4uL2NvcmUvYW5pbWF0aW9uJztcblxuY29uc3QgZWFzZU91dDEyMCA9IGdldEVhc2VPdXRTdGVlcCgxMjApO1xuXG4vKipcbiAqIEFuaW1hdGlvbnMgdXNlZCBieSB0aGUgYGdyYW5pdGUtbWVudWAgY29tcG9uZW50LCBzaG93aW5nIHRoZSBkZXNrdG9wIGludGVyZmFjZS5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdyYW5pdGVNZW51RGVza3RvcEFuaW1hdGlvbnM6IHtcbiAgLyoqXG4gICAqIFRoaXMgYW5pbWF0aW9uIHRyaWdnZXIgY29udHJvbHMgdGhlIG1lbnUgcGFuZWwncyBlbnRyeSBhbmQgZXhpdCBmcm9tIHRoZVxuICAgKiBzdGFnZSBvbiBkZXNrdG9wIG91dHB1dCBkZXZpY2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgdHJhbnNmb3JtTWVudURlc2t0b3A6IEFuaW1hdGlvblRyaWdnZXJNZXRhZGF0YTtcbn0gPSB7XG4gIHRyYW5zZm9ybU1lbnVEZXNrdG9wOiB0cmlnZ2VyKCd0cmFuc2Zvcm1NZW51RGVza3RvcCcsIFtcbiAgICBzdGF0ZShcbiAgICAgICd2b2lkJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgdHJhbnNmb3JtOiAnc2NhbGUoMC45KScsXG4gICAgICB9KVxuICAgICksXG4gICAgdHJhbnNpdGlvbihcbiAgICAgICd2b2lkID0+IGVudGVyJyxcbiAgICAgIGdyb3VwKFtcbiAgICAgICAgcXVlcnkoXG4gICAgICAgICAgJy5ncmFuaXRlLW1lbnUtY29udGVudCcsXG4gICAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAgIGdldEVhc2VMaW5lYXIoMTAwKSxcbiAgICAgICAgICAgIHN0eWxlKHtcbiAgICAgICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBhbmltYXRlKGVhc2VPdXQxMjAsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknIH0pKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICB0cmFuc2l0aW9uKFxuICAgICAgJyogPT4gdm9pZCcsXG4gICAgICBhbmltYXRlKGdldEVhc2VMaW5lYXIoMTAwLCAyNSksIHN0eWxlKHsgb3BhY2l0eTogMCB9KSlcbiAgICApLFxuICBdKSxcbn07XG4iXX0=
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Throws an exception for the case when menu trigger doesn't have a valid granite-menu instance
|
|
10
|
-
* @docs-private
|
|
11
|
-
*/
|
|
12
|
-
export function throwGraniteMenuMissingError() {
|
|
13
|
-
throw Error(`graniteMenuTriggerFor: must pass in an granite-menu instance.
|
|
14
|
-
|
|
15
|
-
Example:
|
|
16
|
-
<granite-menu #menu="graniteMenu"></granite-menu>
|
|
17
|
-
<button [graniteMenuTriggerFor]="menu"></button>`);
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Throws an exception for the case when menu's x-position value isn't valid.
|
|
21
|
-
* In other words, it doesn't match 'before' or 'after'.
|
|
22
|
-
* @docs-private
|
|
23
|
-
*/
|
|
24
|
-
export function throwGraniteMenuInvalidPositionX() {
|
|
25
|
-
throw Error(`xPosition value must be either 'before' or after'.
|
|
26
|
-
Example: <granite-menu xPosition="before" #menu="graniteMenu"></granite-menu>`);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Throws an exception for the case when menu's y-position value isn't valid.
|
|
30
|
-
* In other words, it doesn't match 'above' or 'below'.
|
|
31
|
-
* @docs-private
|
|
32
|
-
*/
|
|
33
|
-
export function throwGraniteMenuInvalidPositionY() {
|
|
34
|
-
throw Error(`yPosition value must be either 'above' or below'.
|
|
35
|
-
Example: <granite-menu yPosition="above" #menu="graniteMenu"></granite-menu>`);
|
|
36
|
-
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS1lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUg7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QjtJQUMxQyxNQUFNLEtBQUssQ0FBQzs7Ozt1REFJeUMsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQztJQUM5QyxNQUFNLEtBQUssQ0FBQztvRkFDc0UsQ0FBQyxDQUFDO0FBQ3RGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQztJQUM5QyxNQUFNLEtBQUssQ0FBQzttRkFDcUUsQ0FBQyxDQUFDO0FBQ3JGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuLyoqXG4gKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGZvciB0aGUgY2FzZSB3aGVuIG1lbnUgdHJpZ2dlciBkb2Vzbid0IGhhdmUgYSB2YWxpZCBncmFuaXRlLW1lbnUgaW5zdGFuY2VcbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93R3Jhbml0ZU1lbnVNaXNzaW5nRXJyb3IoKTogdm9pZCB7XG4gIHRocm93IEVycm9yKGBncmFuaXRlTWVudVRyaWdnZXJGb3I6IG11c3QgcGFzcyBpbiBhbiBncmFuaXRlLW1lbnUgaW5zdGFuY2UuXG5cbiAgICBFeGFtcGxlOlxuICAgICAgPGdyYW5pdGUtbWVudSAjbWVudT1cImdyYW5pdGVNZW51XCI+PC9ncmFuaXRlLW1lbnU+XG4gICAgICA8YnV0dG9uIFtncmFuaXRlTWVudVRyaWdnZXJGb3JdPVwibWVudVwiPjwvYnV0dG9uPmApO1xufVxuXG4vKipcbiAqIFRocm93cyBhbiBleGNlcHRpb24gZm9yIHRoZSBjYXNlIHdoZW4gbWVudSdzIHgtcG9zaXRpb24gdmFsdWUgaXNuJ3QgdmFsaWQuXG4gKiBJbiBvdGhlciB3b3JkcywgaXQgZG9lc24ndCBtYXRjaCAnYmVmb3JlJyBvciAnYWZ0ZXInLlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGhyb3dHcmFuaXRlTWVudUludmFsaWRQb3NpdGlvblgoKTogdm9pZCB7XG4gIHRocm93IEVycm9yKGB4UG9zaXRpb24gdmFsdWUgbXVzdCBiZSBlaXRoZXIgJ2JlZm9yZScgb3IgYWZ0ZXInLlxuICAgICAgRXhhbXBsZTogPGdyYW5pdGUtbWVudSB4UG9zaXRpb249XCJiZWZvcmVcIiAjbWVudT1cImdyYW5pdGVNZW51XCI+PC9ncmFuaXRlLW1lbnU+YCk7XG59XG5cbi8qKlxuICogVGhyb3dzIGFuIGV4Y2VwdGlvbiBmb3IgdGhlIGNhc2Ugd2hlbiBtZW51J3MgeS1wb3NpdGlvbiB2YWx1ZSBpc24ndCB2YWxpZC5cbiAqIEluIG90aGVyIHdvcmRzLCBpdCBkb2Vzbid0IG1hdGNoICdhYm92ZScgb3IgJ2JlbG93Jy5cbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93R3Jhbml0ZU1lbnVJbnZhbGlkUG9zaXRpb25ZKCk6IHZvaWQge1xuICB0aHJvdyBFcnJvcihgeVBvc2l0aW9uIHZhbHVlIG11c3QgYmUgZWl0aGVyICdhYm92ZScgb3IgYmVsb3cnLlxuICAgICAgRXhhbXBsZTogPGdyYW5pdGUtbWVudSB5UG9zaXRpb249XCJhYm92ZVwiICNtZW51PVwiZ3Jhbml0ZU1lbnVcIj48L2dyYW5pdGUtbWVudT5gKTtcbn1cbiJdfQ==
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
2
|
-
import { Component, ElementRef, Inject, Input, Optional, } from '@angular/core';
|
|
3
|
-
import { Subject } from 'rxjs';
|
|
4
|
-
import { GRANITE_MENU_PANEL } from './menu-panel';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/cdk/a11y";
|
|
7
|
-
import * as i2 from "@angular/common";
|
|
8
|
-
import * as i3 from "../icon/icon.component";
|
|
9
|
-
export class GraniteMenuItemComponent {
|
|
10
|
-
constructor(_elementRef, _focusMonitor, _parentMenu) {
|
|
11
|
-
this._elementRef = _elementRef;
|
|
12
|
-
this._focusMonitor = _focusMonitor;
|
|
13
|
-
this._parentMenu = _parentMenu;
|
|
14
|
-
/** ARIA role for the menu item. */
|
|
15
|
-
this.role = 'menuitem';
|
|
16
|
-
/** Stream that emits when the menu item is hovered. */
|
|
17
|
-
this._hovered = new Subject();
|
|
18
|
-
/** Stream that emits when the menu item is focused. */
|
|
19
|
-
this._focused = new Subject();
|
|
20
|
-
/** Whether the menu item acts as a trigger for a sub-menu (used for styling) */
|
|
21
|
-
this._triggersSubmenu = false;
|
|
22
|
-
/**
|
|
23
|
-
* Whether the menu item is highlighted, e.g. in the "breadcrumb" parent chain
|
|
24
|
-
* of sub menu trigger items
|
|
25
|
-
*/
|
|
26
|
-
this._highlighted = false;
|
|
27
|
-
// Start monitoring the element so it gets the appropriate focused classes. We want
|
|
28
|
-
// to show the focus style for menu items only when the focus was not caused by a
|
|
29
|
-
// mouse or touch interaction.
|
|
30
|
-
_focusMonitor.monitor(this._elementRef, false);
|
|
31
|
-
}
|
|
32
|
-
ngOnDestroy() {
|
|
33
|
-
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
34
|
-
this._hovered.complete();
|
|
35
|
-
this._focused.complete();
|
|
36
|
-
}
|
|
37
|
-
/** Focuses the menu item. */
|
|
38
|
-
focus(origin = 'program', options) {
|
|
39
|
-
this._focusMonitor.focusVia(this._getHostElement(), origin, options);
|
|
40
|
-
this._focused.next(this);
|
|
41
|
-
}
|
|
42
|
-
/** Returns the host DOM element. */
|
|
43
|
-
_getHostElement() {
|
|
44
|
-
return this._elementRef.nativeElement;
|
|
45
|
-
}
|
|
46
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GraniteMenuItemComponent, deps: [{ token: i0.ElementRef }, { token: i1.FocusMonitor }, { token: GRANITE_MENU_PANEL, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GraniteMenuItemComponent, selector: "[graniteMenuItem]", inputs: { role: "role" }, host: { listeners: { "mouseenter": "_hovered.next(this)" }, properties: { "attr.role": "role", "class.granite-menu-item": "true", "class.granite-menu-item-highlighted": "_highlighted", "class.granite-menu-item-submenu-trigger": "_triggersSubmenu", "class.granite-device-output-touch": "_clientOutput?.device === \"touch\"" } }, exportAs: ["graniteMenuItem"], ngImport: i0, template: `<ng-content></ng-content>
|
|
48
|
-
<ng-container *ngIf="_triggersSubmenu">
|
|
49
|
-
<granite-icon
|
|
50
|
-
class="caret-left"
|
|
51
|
-
[fontIcon]="'icon-caret-left'"
|
|
52
|
-
></granite-icon>
|
|
53
|
-
<granite-icon
|
|
54
|
-
class="caret-right"
|
|
55
|
-
[fontIcon]="'icon-caret-right'"
|
|
56
|
-
></granite-icon>
|
|
57
|
-
</ng-container>`, isInline: true, styles: [":host{display:block;position:relative;line-height:2rem;padding:0 var(--granite-spacing-8);width:100%;max-width:100%;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:start;text-decoration:none;background-color:var(--granite-color-background-variant);color:var(--granite-color-text);font-size:var(--granite-font-size-body-small);font-family:inherit}@media (hover: hover) and (pointer: fine){:host:hover:not(.granite-title):not([disabled]){background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}@media (hover: none) and (pointer: coarse){:host:active:not(.granite-title):not([disabled]){background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}:host.granite-title{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;align-items:center;line-height:1.5rem;width:100%;outline:none;border:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;color:var(--granite-color-text);font-size:var(--granite-font-size-micro);font-weight:var(--granite-font-weight-bold);cursor:default}:host.cdk-program-focused,:host.cdk-keyboard-focused,:host.granite-menu-item-highlighted{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}:host granite-icon{position:absolute;font-size:var(--granite-font-size-body-small);color:inherit;top:50%;transform:translateY(-50%)}:host.granite-menu-item-submenu-trigger{padding-inline-end:var(--granite-spacing-24)}html[dir=ltr] :host.granite-menu-item-submenu-trigger granite-icon{right:var(--granite-spacing-4)}:host-context([dir=ltr]) :host.granite-menu-item-submenu-trigger granite-icon{right:var(--granite-spacing-4)}html[dir=rtl] :host.granite-menu-item-submenu-trigger granite-icon{left:var(--granite-spacing-4)}:host-context([dir=rtl]) :host.granite-menu-item-submenu-trigger granite-icon{left:var(--granite-spacing-4)}[dir=rtl] :host.granite-menu-item-submenu-trigger granite-icon.caret-right{display:none}[dir=ltr] :host.granite-menu-item-submenu-trigger granite-icon.caret-left{display:none}:host.granite-divider-top{border-top:.0625rem solid var(--granite-color-border-soft)}:host.granite-divider-bottom{border-bottom:.0625rem solid var(--granite-color-border-soft)}:host.granite-device-output-touch{line-height:3rem;font-size:var(--granite-font-size-body-small);text-align:center;padding:0 var(--granite-spacing-24)}:host.granite-device-output-touch.granite-title{padding:0;justify-content:center;line-height:1.5rem;font-size:var(--granite-font-size-micro)}:host.granite-device-output-touch.granite-menu-item-back-trigger,:host.granite-device-output-touch.granite-menu-item-submenu-trigger{padding:0 var(--granite-spacing-24)}:host.granite-device-output-touch.granite-menu-item-title{line-height:3rem;height:3rem;font-size:var(--granite-font-size-micro);color:var(--granite-color-text-weak)}@media (hover: none) and (pointer: coarse){:host.granite-device-output-touch.granite-menu-item-title:active{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}html[dir=ltr] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{left:var(--granite-spacing-4)}:host-context([dir=ltr]) :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{left:var(--granite-spacing-4)}html[dir=rtl] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{right:var(--granite-spacing-4)}:host-context([dir=rtl]) :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{right:var(--granite-spacing-4)}[dir=rtl] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon.caret-left{display:none}[dir=ltr] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon.caret-right{display:none}:host:disabled:not(.granite-menu-item-title){opacity:.4;cursor:default}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.GraniteIconComponent, selector: "granite-icon", inputs: ["fontIcon"] }] }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GraniteMenuItemComponent, decorators: [{
|
|
60
|
-
type: Component,
|
|
61
|
-
args: [{ selector: '[graniteMenuItem]', template: `<ng-content></ng-content>
|
|
62
|
-
<ng-container *ngIf="_triggersSubmenu">
|
|
63
|
-
<granite-icon
|
|
64
|
-
class="caret-left"
|
|
65
|
-
[fontIcon]="'icon-caret-left'"
|
|
66
|
-
></granite-icon>
|
|
67
|
-
<granite-icon
|
|
68
|
-
class="caret-right"
|
|
69
|
-
[fontIcon]="'icon-caret-right'"
|
|
70
|
-
></granite-icon>
|
|
71
|
-
</ng-container>`, exportAs: 'graniteMenuItem', host: {
|
|
72
|
-
'[attr.role]': 'role',
|
|
73
|
-
'[class.granite-menu-item]': 'true',
|
|
74
|
-
'[class.granite-menu-item-highlighted]': '_highlighted',
|
|
75
|
-
'[class.granite-menu-item-submenu-trigger]': '_triggersSubmenu',
|
|
76
|
-
//#region --- Touch device customizations ---
|
|
77
|
-
'[class.granite-device-output-touch]': '_clientOutput?.device === "touch"',
|
|
78
|
-
//#endregion --- Touch device customizations ---
|
|
79
|
-
'(mouseenter)': '_hovered.next(this)',
|
|
80
|
-
}, styles: [":host{display:block;position:relative;line-height:2rem;padding:0 var(--granite-spacing-8);width:100%;max-width:100%;-webkit-user-select:none;user-select:none;cursor:pointer;outline:none;border:none;-webkit-tap-highlight-color:transparent;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:start;text-decoration:none;background-color:var(--granite-color-background-variant);color:var(--granite-color-text);font-size:var(--granite-font-size-body-small);font-family:inherit}@media (hover: hover) and (pointer: fine){:host:hover:not(.granite-title):not([disabled]){background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}@media (hover: none) and (pointer: coarse){:host:active:not(.granite-title):not([disabled]){background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}:host.granite-title{-moz-user-select:none;-ms-user-select:none;-webkit-user-select:none;user-select:none;display:-webkit-flex;display:-moz-box;display:-ms-flexbox;display:flex;align-items:center;line-height:1.5rem;width:100%;outline:none;border:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none;color:var(--granite-color-text);font-size:var(--granite-font-size-micro);font-weight:var(--granite-font-weight-bold);cursor:default}:host.cdk-program-focused,:host.cdk-keyboard-focused,:host.granite-menu-item-highlighted{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}:host granite-icon{position:absolute;font-size:var(--granite-font-size-body-small);color:inherit;top:50%;transform:translateY(-50%)}:host.granite-menu-item-submenu-trigger{padding-inline-end:var(--granite-spacing-24)}html[dir=ltr] :host.granite-menu-item-submenu-trigger granite-icon{right:var(--granite-spacing-4)}:host-context([dir=ltr]) :host.granite-menu-item-submenu-trigger granite-icon{right:var(--granite-spacing-4)}html[dir=rtl] :host.granite-menu-item-submenu-trigger granite-icon{left:var(--granite-spacing-4)}:host-context([dir=rtl]) :host.granite-menu-item-submenu-trigger granite-icon{left:var(--granite-spacing-4)}[dir=rtl] :host.granite-menu-item-submenu-trigger granite-icon.caret-right{display:none}[dir=ltr] :host.granite-menu-item-submenu-trigger granite-icon.caret-left{display:none}:host.granite-divider-top{border-top:.0625rem solid var(--granite-color-border-soft)}:host.granite-divider-bottom{border-bottom:.0625rem solid var(--granite-color-border-soft)}:host.granite-device-output-touch{line-height:3rem;font-size:var(--granite-font-size-body-small);text-align:center;padding:0 var(--granite-spacing-24)}:host.granite-device-output-touch.granite-title{padding:0;justify-content:center;line-height:1.5rem;font-size:var(--granite-font-size-micro)}:host.granite-device-output-touch.granite-menu-item-back-trigger,:host.granite-device-output-touch.granite-menu-item-submenu-trigger{padding:0 var(--granite-spacing-24)}:host.granite-device-output-touch.granite-menu-item-title{line-height:3rem;height:3rem;font-size:var(--granite-font-size-micro);color:var(--granite-color-text-weak)}@media (hover: none) and (pointer: coarse){:host.granite-device-output-touch.granite-menu-item-title:active{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active)}}html[dir=ltr] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{left:var(--granite-spacing-4)}:host-context([dir=ltr]) :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{left:var(--granite-spacing-4)}html[dir=rtl] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{right:var(--granite-spacing-4)}:host-context([dir=rtl]) :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon{right:var(--granite-spacing-4)}[dir=rtl] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon.caret-left{display:none}[dir=ltr] :host.granite-device-output-touch.granite-menu-item-back-trigger granite-icon.caret-right{display:none}:host:disabled:not(.granite-menu-item-title){opacity:.4;cursor:default}\n"] }]
|
|
81
|
-
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.FocusMonitor }, { type: undefined, decorators: [{
|
|
82
|
-
type: Inject,
|
|
83
|
-
args: [GRANITE_MENU_PANEL]
|
|
84
|
-
}, {
|
|
85
|
-
type: Optional
|
|
86
|
-
}] }], propDecorators: { role: [{
|
|
87
|
-
type: Input
|
|
88
|
-
}] } });
|
|
89
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZ3Jhbml0ZS1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LWl0ZW0uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBbUIsWUFBWSxFQUFlLE1BQU0sbUJBQW1CLENBQUM7QUFDL0UsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUsvQixPQUFPLEVBQUUsa0JBQWtCLEVBQTZCLE1BQU0sY0FBYyxDQUFDOzs7OztBQTZCN0UsTUFBTSxPQUFPLHdCQUF3QjtJQXlCbkMsWUFDVSxXQUFvQyxFQUNwQyxhQUEyQixFQUk1QixXQUF1QztRQUx0QyxnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFDcEMsa0JBQWEsR0FBYixhQUFhLENBQWM7UUFJNUIsZ0JBQVcsR0FBWCxXQUFXLENBQTRCO1FBOUJoRCxtQ0FBbUM7UUFDMUIsU0FBSSxHQUFzRCxVQUFVLENBQUM7UUFFOUUsdURBQXVEO1FBQzlDLGFBQVEsR0FBa0IsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUV2RCx1REFBdUQ7UUFDOUMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFeEMsZ0ZBQWdGO1FBQ2hGLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQzs7O1dBR0c7UUFDSCxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWdCNUIsbUZBQW1GO1FBQ25GLGlGQUFpRjtRQUNqRiw4QkFBOEI7UUFDOUIsYUFBYSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRXBELElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLEtBQUssQ0FBQyxTQUFzQixTQUFTLEVBQUUsT0FBc0I7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDO0lBQ3hDLENBQUM7K0dBdkRVLHdCQUF3Qix3RUE2QnpCLGtCQUFrQjttR0E3QmpCLHdCQUF3QiwwYkF4QnpCOzs7Ozs7Ozs7O29CQVVROzs0RkFjUCx3QkFBd0I7a0JBM0JwQyxTQUFTOytCQUVFLG1CQUFtQixZQUNuQjs7Ozs7Ozs7OztvQkFVUSxZQUNSLGlCQUFpQixRQUVyQjt3QkFDSixhQUFhLEVBQUUsTUFBTTt3QkFDckIsMkJBQTJCLEVBQUUsTUFBTTt3QkFDbkMsdUNBQXVDLEVBQUUsY0FBYzt3QkFDdkQsMkNBQTJDLEVBQUUsa0JBQWtCO3dCQUMvRCw2Q0FBNkM7d0JBQzdDLHFDQUFxQyxFQUFFLG1DQUFtQzt3QkFDMUUsZ0RBQWdEO3dCQUNoRCxjQUFjLEVBQUUscUJBQXFCO3FCQUN0Qzs7MEJBK0JFLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsUUFBUTt5Q0E1QkYsSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uLCBGb2N1c01vbml0b3IsIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIENsaWVudElucHV0SW50ZXJmYWNlLFxuICBDbGllbnRPdXRwdXRJbnRlcmZhY2UsXG59IGZyb20gJy4uL2NvcmUvY2xpZW50LWVudmlyb25tZW50JztcbmltcG9ydCB7IEdSQU5JVEVfTUVOVV9QQU5FTCwgR3Jhbml0ZU1lbnVQYW5lbEludGVyZmFjZSB9IGZyb20gJy4vbWVudS1wYW5lbCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tncmFuaXRlTWVudUl0ZW1dJyxcbiAgdGVtcGxhdGU6IGA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIl90cmlnZ2Vyc1N1Ym1lbnVcIj5cbiAgICAgIDxncmFuaXRlLWljb25cbiAgICAgICAgY2xhc3M9XCJjYXJldC1sZWZ0XCJcbiAgICAgICAgW2ZvbnRJY29uXT1cIidpY29uLWNhcmV0LWxlZnQnXCJcbiAgICAgID48L2dyYW5pdGUtaWNvbj5cbiAgICAgIDxncmFuaXRlLWljb25cbiAgICAgICAgY2xhc3M9XCJjYXJldC1yaWdodFwiXG4gICAgICAgIFtmb250SWNvbl09XCInaWNvbi1jYXJldC1yaWdodCdcIlxuICAgICAgPjwvZ3Jhbml0ZS1pY29uPlxuICAgIDwvbmctY29udGFpbmVyPmAsXG4gIGV4cG9ydEFzOiAnZ3Jhbml0ZU1lbnVJdGVtJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWVudS1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGhvc3Q6IHtcbiAgICAnW2F0dHIucm9sZV0nOiAncm9sZScsXG4gICAgJ1tjbGFzcy5ncmFuaXRlLW1lbnUtaXRlbV0nOiAndHJ1ZScsXG4gICAgJ1tjbGFzcy5ncmFuaXRlLW1lbnUtaXRlbS1oaWdobGlnaHRlZF0nOiAnX2hpZ2hsaWdodGVkJyxcbiAgICAnW2NsYXNzLmdyYW5pdGUtbWVudS1pdGVtLXN1Ym1lbnUtdHJpZ2dlcl0nOiAnX3RyaWdnZXJzU3VibWVudScsXG4gICAgLy8jcmVnaW9uIC0tLSBUb3VjaCBkZXZpY2UgY3VzdG9taXphdGlvbnMgLS0tXG4gICAgJ1tjbGFzcy5ncmFuaXRlLWRldmljZS1vdXRwdXQtdG91Y2hdJzogJ19jbGllbnRPdXRwdXQ/LmRldmljZSA9PT0gXCJ0b3VjaFwiJyxcbiAgICAvLyNlbmRyZWdpb24gLS0tIFRvdWNoIGRldmljZSBjdXN0b21pemF0aW9ucyAtLS1cbiAgICAnKG1vdXNlZW50ZXIpJzogJ19ob3ZlcmVkLm5leHQodGhpcyknLFxuICB9LFxufSlcbmV4cG9ydCBjbGFzcyBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEZvY3VzYWJsZU9wdGlvbiB7XG4gIC8qKiBBUklBIHJvbGUgZm9yIHRoZSBtZW51IGl0ZW0uICovXG4gIEBJbnB1dCgpIHJvbGU6ICdtZW51aXRlbScgfCAnbWVudWl0ZW1yYWRpbycgfCAnbWVudWl0ZW1jaGVja2JveCcgPSAnbWVudWl0ZW0nO1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHRoZSBtZW51IGl0ZW0gaXMgaG92ZXJlZC4gKi9cbiAgcmVhZG9ubHkgX2hvdmVyZWQ6IFN1YmplY3Q8dGhpcz4gPSBuZXcgU3ViamVjdDx0aGlzPigpO1xuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuIHRoZSBtZW51IGl0ZW0gaXMgZm9jdXNlZC4gKi9cbiAgcmVhZG9ubHkgX2ZvY3VzZWQgPSBuZXcgU3ViamVjdDx0aGlzPigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IGl0ZW0gYWN0cyBhcyBhIHRyaWdnZXIgZm9yIGEgc3ViLW1lbnUgKHVzZWQgZm9yIHN0eWxpbmcpICovXG4gIF90cmlnZ2Vyc1N1Ym1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgbWVudSBpdGVtIGlzIGhpZ2hsaWdodGVkLCBlLmcuIGluIHRoZSBcImJyZWFkY3J1bWJcIiBwYXJlbnQgY2hhaW5cbiAgICogb2Ygc3ViIG1lbnUgdHJpZ2dlciBpdGVtc1xuICAgKi9cbiAgX2hpZ2hsaWdodGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIENsaWVudCBpbnB1dCBkZXZpY2UgaW5mb3JtYXRpb24gKi9cbiAgX2NsaWVudElucHV0OiBDbGllbnRJbnB1dEludGVyZmFjZTtcblxuICAvKiogQ2xpZW50IG91dHB1dCBkZXZpY2UgaW5mb3JtYXRpb24gKi9cbiAgX2NsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgIHByaXZhdGUgX2ZvY3VzTW9uaXRvcjogRm9jdXNNb25pdG9yLFxuXG4gICAgQEluamVjdChHUkFOSVRFX01FTlVfUEFORUwpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgX3BhcmVudE1lbnU/OiBHcmFuaXRlTWVudVBhbmVsSW50ZXJmYWNlXG4gICkge1xuICAgIC8vIFN0YXJ0IG1vbml0b3JpbmcgdGhlIGVsZW1lbnQgc28gaXQgZ2V0cyB0aGUgYXBwcm9wcmlhdGUgZm9jdXNlZCBjbGFzc2VzLiBXZSB3YW50XG4gICAgLy8gdG8gc2hvdyB0aGUgZm9jdXMgc3R5bGUgZm9yIG1lbnUgaXRlbXMgb25seSB3aGVuIHRoZSBmb2N1cyB3YXMgbm90IGNhdXNlZCBieSBhXG4gICAgLy8gbW91c2Ugb3IgdG91Y2ggaW50ZXJhY3Rpb24uXG4gICAgX2ZvY3VzTW9uaXRvci5tb25pdG9yKHRoaXMuX2VsZW1lbnRSZWYsIGZhbHNlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKTtcblxuICAgIHRoaXMuX2hvdmVyZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9mb2N1c2VkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogRm9jdXNlcyB0aGUgbWVudSBpdGVtLiAqL1xuICBmb2N1cyhvcmlnaW46IEZvY3VzT3JpZ2luID0gJ3Byb2dyYW0nLCBvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2dldEhvc3RFbGVtZW50KCksIG9yaWdpbiwgb3B0aW9ucyk7XG4gICAgdGhpcy5fZm9jdXNlZC5uZXh0KHRoaXMpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGhvc3QgRE9NIGVsZW1lbnQuICovXG4gIF9nZXRIb3N0RWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxufVxuIl19
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/**
|
|
3
|
-
* Injection token used to provide the parent menu to menu-specific components.
|
|
4
|
-
* @docs-private
|
|
5
|
-
*/
|
|
6
|
-
export const GRANITE_MENU_PANEL = new InjectionToken('GRANITE_MENU_PANEL');
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1wYW5lbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZ3Jhbml0ZS1jb21wb25lbnRzL3NyYy9saWIvbWVudS9tZW51LXBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBZ0IsY0FBYyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBRzFFOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUNsRCxvQkFBb0IsQ0FDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3Rpb25Ub2tlbiwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lbnVQb3NpdGlvblgsIE1lbnVQb3NpdGlvblkgfSBmcm9tICcuL21lbnUtcG9zaXRpb25zJztcblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdXNlZCB0byBwcm92aWRlIHRoZSBwYXJlbnQgbWVudSB0byBtZW51LXNwZWNpZmljIGNvbXBvbmVudHMuXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbmV4cG9ydCBjb25zdCBHUkFOSVRFX01FTlVfUEFORUwgPSBuZXcgSW5qZWN0aW9uVG9rZW48R3Jhbml0ZU1lbnVQYW5lbEludGVyZmFjZT4oXG4gICdHUkFOSVRFX01FTlVfUEFORUwnXG4pO1xuXG5leHBvcnQgdHlwZSBDbG9zZWRFdmVudFR5cGUgPSB2b2lkIHwgJ2NsaWNrJyB8ICdrZXlkb3duJyB8ICd0YWInO1xuZXhwb3J0IHR5cGUgT3BlbmVkRXZlbnRUeXBlID0gdm9pZCB8ICdjbGljaycgfCAna2V5ZG93bic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Jhbml0ZU1lbnVQYW5lbEludGVyZmFjZSB7XG4gIHhQb3NpdGlvbjogTWVudVBvc2l0aW9uWDtcbiAgeVBvc2l0aW9uOiBNZW51UG9zaXRpb25ZO1xuICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcGFyZW50TWVudT86IEdyYW5pdGVNZW51UGFuZWxJbnRlcmZhY2UgfCB1bmRlZmluZWQ7XG4gIGRpcmVjdGlvbj86IERpcmVjdGlvbjtcbiAgZm9jdXNGaXJzdEl0ZW06IChvcmlnaW4/OiBGb2N1c09yaWdpbikgPT4gdm9pZDtcbiAgY2xvc2VkOiBFdmVudEVtaXR0ZXI8Q2xvc2VkRXZlbnRUeXBlPjtcbiAgb3BlbmVkOiBFdmVudEVtaXR0ZXI8T3BlbmVkRXZlbnRUeXBlPjtcbiAgcmVhZG9ubHkgcGFuZWxJZD86IHN0cmluZztcbiAgc2hvd0JhY2tCdXR0b246IGJvb2xlYW47XG59XG4iXX0=
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @license
|
|
3
|
-
* Copyright Google LLC All Rights Reserved.
|
|
4
|
-
*
|
|
5
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
-
* found in the LICENSE file at https://angular.io/license
|
|
7
|
-
*/
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1wb3NpdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9zcmMvbGliL21lbnUvbWVudS1wb3NpdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCB0eXBlIE1lbnVQb3NpdGlvblggPSAnYmVmb3JlJyB8ICdhZnRlcic7XG5cbmV4cG9ydCB0eXBlIE1lbnVQb3NpdGlvblkgPSAnYWJvdmUnIHwgJ2JlbG93JztcbiJdfQ==
|