@ifsworld/granite-components 15.0.0 → 15.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +1 -1
  2. package/date-picker/lib/date-picker-base.d.ts +3 -3
  3. package/date-picker/lib/date-picker.module.d.ts +2 -2
  4. package/esm2022/carousel/ifsworld-granite-components-carousel.mjs +5 -0
  5. package/esm2022/carousel/index.mjs +3 -0
  6. package/esm2022/carousel/lib/carousel.component.mjs +156 -0
  7. package/esm2022/carousel/lib/carousel.module.mjs +31 -0
  8. package/esm2022/date-picker/ifsworld-granite-components-date-picker.mjs +5 -0
  9. package/esm2022/date-picker/index.mjs +5 -0
  10. package/esm2022/date-picker/lib/date-picker-base.mjs +53 -0
  11. package/esm2022/date-picker/lib/date-picker-trigger-for.directive.mjs +228 -0
  12. package/esm2022/date-picker/lib/date-picker.component.mjs +30 -0
  13. package/esm2022/date-picker/lib/date-picker.module.mjs +58 -0
  14. package/esm2022/date-picker/lib/date-range-picker.component.mjs +46 -0
  15. package/esm2022/file-upload/ifsworld-granite-components-file-upload.mjs +5 -0
  16. package/esm2022/file-upload/index.mjs +3 -0
  17. package/esm2022/file-upload/lib/directives/file-drag-and-drop.directive.mjs +102 -0
  18. package/esm2022/file-upload/lib/file-upload.component.mjs +182 -0
  19. package/esm2022/file-upload/lib/file-upload.constants.mjs +45 -0
  20. package/esm2022/file-upload/lib/file-upload.module.mjs +32 -0
  21. package/esm2022/file-upload/lib/file-upload.utils.mjs +13 -0
  22. package/esm2022/ifsworld-granite-components.mjs +5 -0
  23. package/esm2022/index.mjs +90 -0
  24. package/esm2022/lib/arrange-grid/arrange-grid-item.component.mjs +44 -0
  25. package/esm2022/lib/arrange-grid/arrange-grid.component.mjs +125 -0
  26. package/esm2022/lib/arrange-grid/arrange-grid.module.mjs +19 -0
  27. package/esm2022/lib/avatar/avatar-default-status/avatar-default-status.component.mjs +36 -0
  28. package/esm2022/lib/avatar/avatar.component.mjs +68 -0
  29. package/esm2022/lib/avatar/avatar.component.public-types.mjs +7 -0
  30. package/esm2022/lib/avatar/avatar.module.mjs +37 -0
  31. package/esm2022/lib/avatar/custom-avatar-status.directive.mjs +18 -0
  32. package/esm2022/lib/avatar/empty-avatar/empty-avatar.component.mjs +37 -0
  33. package/esm2022/lib/badge/badge.component.mjs +39 -0
  34. package/esm2022/lib/badge/badge.module.mjs +18 -0
  35. package/esm2022/lib/badge/testing/badge.harness.mjs +25 -0
  36. package/esm2022/lib/button/button.component.mjs +87 -0
  37. package/esm2022/lib/button/button.module.mjs +16 -0
  38. package/esm2022/lib/card-list/card/card-avatar.component.mjs +11 -0
  39. package/esm2022/lib/card-list/card/card-content/card-actions.component.mjs +11 -0
  40. package/esm2022/lib/card-list/card/card-content/card-body.component.mjs +11 -0
  41. package/esm2022/lib/card-list/card/card-content/card-content.component.mjs +11 -0
  42. package/esm2022/lib/card-list/card/card-content/card-footer.component.mjs +11 -0
  43. package/esm2022/lib/card-list/card/card-content/card-header-subtitle.component.mjs +11 -0
  44. package/esm2022/lib/card-list/card/card-content/card-header-title.component.mjs +11 -0
  45. package/esm2022/lib/card-list/card/card-content/card-header.component.mjs +11 -0
  46. package/esm2022/lib/card-list/card/card.component.mjs +11 -0
  47. package/esm2022/lib/card-list/card-list.component.mjs +24 -0
  48. package/esm2022/lib/card-list/card-list.module.mjs +68 -0
  49. package/esm2022/lib/checkbox/checkbox-group.component.mjs +17 -0
  50. package/esm2022/lib/checkbox/checkbox.component.mjs +99 -0
  51. package/esm2022/lib/checkbox/checkbox.module.mjs +17 -0
  52. package/esm2022/lib/chips/chip-input.mjs +195 -0
  53. package/esm2022/lib/chips/chip-list.component.mjs +567 -0
  54. package/esm2022/lib/chips/chip.component.mjs +288 -0
  55. package/esm2022/lib/chips/chips.module.mjs +31 -0
  56. package/esm2022/lib/collapsible-group/collapsible-group-body.directive.mjs +17 -0
  57. package/esm2022/lib/collapsible-group/collapsible-group-header.directive.mjs +17 -0
  58. package/esm2022/lib/collapsible-group/collapsible-group.component.mjs +46 -0
  59. package/esm2022/lib/collapsible-group/collapsible-group.module.mjs +33 -0
  60. package/esm2022/lib/contacts/contact-item/contact-item.component.mjs +27 -0
  61. package/esm2022/lib/contacts/contact-item-default-status/contact-item-default-status.component.mjs +20 -0
  62. package/esm2022/lib/contacts/contact-item-title/contact-item-title.component.mjs +15 -0
  63. package/esm2022/lib/contacts/contacts-profile/contacts-profile.component.mjs +18 -0
  64. package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-data.mjs +24 -0
  65. package/esm2022/lib/contacts/contacts-trigger/contacts-trigger-for.directive.mjs +231 -0
  66. package/esm2022/lib/contacts/contacts-types/contacts.component.private-types.mjs +2 -0
  67. package/esm2022/lib/contacts/contacts-types/contacts.component.public-types.mjs +9 -0
  68. package/esm2022/lib/contacts/contacts.component.mjs +92 -0
  69. package/esm2022/lib/contacts/contacts.module.mjs +53 -0
  70. package/esm2022/lib/contacts/custom-profile.directive.mjs +16 -0
  71. package/esm2022/lib/contacts/custom-status.directive.mjs +18 -0
  72. package/esm2022/lib/core/animation.mjs +34 -0
  73. package/esm2022/lib/core/client-environment.mjs +20 -0
  74. package/esm2022/lib/core/common-behaviors/disabled.mjs +27 -0
  75. package/esm2022/lib/core/core.module.mjs +44 -0
  76. package/esm2022/lib/core/devices/client-input-desktop.directive.mjs +29 -0
  77. package/esm2022/lib/core/devices/client-input-touch.directive.mjs +29 -0
  78. package/esm2022/lib/core/devices/client-output-desktop.directive.mjs +29 -0
  79. package/esm2022/lib/core/devices/client-output-touch.directive.mjs +29 -0
  80. package/esm2022/lib/core/hide-on-overflow.directive.mjs +83 -0
  81. package/esm2022/lib/core/overlay-base.mjs +18 -0
  82. package/esm2022/lib/core/overlay-position-config.mjs +2 -0
  83. package/esm2022/lib/core/overlay-trigger-for-base.directive.mjs +121 -0
  84. package/esm2022/lib/core/overlay.service.mjs +90 -0
  85. package/esm2022/lib/core/pipes/pure-pipes.module.mjs +16 -0
  86. package/esm2022/lib/core/pipes/title.pipe.mjs +21 -0
  87. package/esm2022/lib/core/radio-checkbox-base.mjs +19 -0
  88. package/esm2022/lib/core/services/names-utils-service.mjs +51 -0
  89. package/esm2022/lib/core/theme.library.mjs +59 -0
  90. package/esm2022/lib/core/types.mjs +2 -0
  91. package/esm2022/lib/grid/grid.component.mjs +128 -0
  92. package/esm2022/lib/grid/grid.module.mjs +18 -0
  93. package/esm2022/lib/icon/icon.component.mjs +43 -0
  94. package/esm2022/lib/icon/icon.module.mjs +16 -0
  95. package/esm2022/lib/input-field/input-field.component.mjs +167 -0
  96. package/esm2022/lib/input-field/input-field.module.mjs +20 -0
  97. package/esm2022/lib/label/label.component.mjs +31 -0
  98. package/esm2022/lib/label/label.module.mjs +18 -0
  99. package/esm2022/lib/menu/divider.directive.mjs +23 -0
  100. package/esm2022/lib/menu/menu-base.mjs +364 -0
  101. package/esm2022/lib/menu/menu-desktop-animations.mjs +23 -0
  102. package/esm2022/lib/menu/menu-errors.mjs +37 -0
  103. package/esm2022/lib/menu/menu-item.component.mjs +89 -0
  104. package/esm2022/lib/menu/menu-panel.mjs +7 -0
  105. package/esm2022/lib/menu/menu-positions.mjs +9 -0
  106. package/esm2022/lib/menu/menu-touch-animations.mjs +137 -0
  107. package/esm2022/lib/menu/menu-touch-close.component.mjs +13 -0
  108. package/esm2022/lib/menu/menu-touch-title.component.mjs +59 -0
  109. package/esm2022/lib/menu/menu-trigger-for.directive.mjs +738 -0
  110. package/esm2022/lib/menu/menu.component.mjs +30 -0
  111. package/esm2022/lib/menu/menu.module.mjs +55 -0
  112. package/esm2022/lib/menu/testing/menu.harness.mjs +109 -0
  113. package/esm2022/lib/menu/title.directive.mjs +17 -0
  114. package/esm2022/lib/progress-bar/progress-bar-legend/progress-bar-legend.component.mjs +19 -0
  115. package/esm2022/lib/progress-bar/progress-bar-legend-base.mjs +17 -0
  116. package/esm2022/lib/progress-bar/progress-bar-legend-trigger-for.directive.mjs +54 -0
  117. package/esm2022/lib/progress-bar/progress-bar.component.mjs +92 -0
  118. package/esm2022/lib/progress-bar/progress-bar.model.mjs +2 -0
  119. package/esm2022/lib/progress-bar/progress-bar.module.mjs +44 -0
  120. package/esm2022/lib/radio-button/radio-button.component.mjs +119 -0
  121. package/esm2022/lib/radio-button/radio-button.module.mjs +17 -0
  122. package/esm2022/lib/radio-button/radio-group.component.mjs +17 -0
  123. package/esm2022/lib/toggle-switch/toggle-switch.component.mjs +100 -0
  124. package/esm2022/lib/toggle-switch/toggle-switch.module.mjs +16 -0
  125. package/esm2022/table/ifsworld-granite-components-table.mjs +5 -0
  126. package/esm2022/table/index.mjs +5 -0
  127. package/esm2022/table/lib/cell/cell-align/cell-align-classes.directive.mjs +26 -0
  128. package/esm2022/table/lib/cell/cell.mjs +15 -0
  129. package/esm2022/table/lib/cell/table-data-cell.component.mjs +25 -0
  130. package/esm2022/table/lib/cell/table-header-cell.component.mjs +14 -0
  131. package/esm2022/table/lib/column/table-column.directive.mjs +33 -0
  132. package/esm2022/table/lib/column-size/column-size.directive.mjs +34 -0
  133. package/esm2022/table/lib/table-constants.library.mjs +7 -0
  134. package/esm2022/table/lib/table.component.mjs +62 -0
  135. package/esm2022/table/lib/table.model.mjs +2 -0
  136. package/esm2022/table/lib/table.module.mjs +38 -0
  137. package/esm2022/tooltip/ifsworld-granite-components-tooltip.mjs +5 -0
  138. package/esm2022/tooltip/index.mjs +4 -0
  139. package/esm2022/tooltip/lib/Services/granite-tooltip.service.mjs +28 -0
  140. package/esm2022/tooltip/lib/tooltip-constants.library.mjs +4 -0
  141. package/esm2022/tooltip/lib/tooltip-trigger-for.directive.mjs +147 -0
  142. package/esm2022/tooltip/lib/tooltip.component.mjs +14 -0
  143. package/esm2022/tooltip/lib/tooltip.module.mjs +19 -0
  144. package/fesm2022/ifsworld-granite-components-carousel.mjs +9 -9
  145. package/fesm2022/ifsworld-granite-components-carousel.mjs.map +1 -1
  146. package/fesm2022/ifsworld-granite-components-date-picker.mjs +30 -34
  147. package/fesm2022/ifsworld-granite-components-date-picker.mjs.map +1 -1
  148. package/fesm2022/ifsworld-granite-components-file-upload.mjs +12 -13
  149. package/fesm2022/ifsworld-granite-components-file-upload.mjs.map +1 -1
  150. package/fesm2022/ifsworld-granite-components-table.mjs +29 -32
  151. package/fesm2022/ifsworld-granite-components-table.mjs.map +1 -1
  152. package/fesm2022/ifsworld-granite-components-tooltip.mjs +15 -16
  153. package/fesm2022/ifsworld-granite-components-tooltip.mjs.map +1 -1
  154. package/fesm2022/ifsworld-granite-components.mjs +323 -342
  155. package/fesm2022/ifsworld-granite-components.mjs.map +1 -1
  156. package/lib/contacts/contacts-trigger/contacts-trigger-data.d.ts +1 -1
  157. package/lib/core/overlay-base.d.ts +1 -1
  158. package/lib/core/radio-checkbox-base.d.ts +1 -1
  159. package/lib/menu/menu-base.d.ts +1 -1
  160. package/lib/progress-bar/progress-bar-legend-base.d.ts +1 -1
  161. package/package.json +21 -9
  162. package/src/lib/core/style/_mixins.scss +9 -10
  163. package/src/lib/core/style/_range-functions.scss +4 -6
  164. package/src/lib/core/style/_z-index.scss +4 -6
  165. package/table/lib/cell/cell.d.ts +1 -1
@@ -0,0 +1,364 @@
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
+ * Styles to be applied to the menu.
54
+ * Added as there is no way to apply styles to the menu from the outside.
55
+ */
56
+ this.styles = {};
57
+ this.touchStyles = {};
58
+ /**
59
+ * Event emitted when the menu is closed
60
+ */
61
+ this.closed = new EventEmitter();
62
+ /**
63
+ * Event emitted when the menu is opened
64
+ */
65
+ this.opened = new EventEmitter();
66
+ /**
67
+ * Used for locating the panel in tests and setting the aria-control attribute
68
+ * for the menu trigger.
69
+ */
70
+ this.panelId = `granite-menu-panel-${menuPanelUid++}`;
71
+ /** Whether to show back button in touch menu title bar */
72
+ this.showBackButton = false;
73
+ /** Whether to show touch menu title bar */
74
+ this.showTitle = false;
75
+ /** Whether to add a close button below the menu */
76
+ this.showCloseButton = false;
77
+ /** Observable current state of the panel animation. */
78
+ this._transformMenu = new BehaviorSubject(transformMenuDefault);
79
+ /** Emits whenever an animation on the menu completes. */
80
+ this._animationDone = new Subject();
81
+ this._menuEmpty$ = new BehaviorSubject(false);
82
+ // eslint-disable-next-line @typescript-eslint/member-ordering
83
+ this._isMenuEmpty$ = combineLatest([
84
+ this._menuEmpty$,
85
+ this._animationDone,
86
+ ]).pipe(filter(([m, a]) => m && a != null), map(() => true));
87
+ /** Only the direct descendant menu items. */
88
+ this._directDescendantItems = new QueryList();
89
+ /** Subscription to tab events on the menu panel */
90
+ this._tabSubscription = Subscription.EMPTY;
91
+ this._xPosition = 'after';
92
+ this._yPosition = 'below';
93
+ /**
94
+ * Current horizontal offset. Used with `pan` and `pan-hidden`
95
+ * animation states.
96
+ */
97
+ this.xOffset = 0;
98
+ }
99
+ ngAfterContentChecked() {
100
+ this._menuEmpty$.next(this._allItems.length < 1 ? true : false);
101
+ }
102
+ ngAfterContentInit() {
103
+ this._updateDirectDescendants();
104
+ this._keyManager = new FocusKeyManager(this._directDescendantItems)
105
+ .withWrap()
106
+ .skipPredicate((menuItem) => {
107
+ const hostElement = menuItem._getHostElement();
108
+ return hostElement instanceof HTMLButtonElement
109
+ ? hostElement.disabled
110
+ : hostElement.hasAttribute('graniteTitle');
111
+ });
112
+ this._tabSubscription = this._keyManager.tabOut.subscribe(() => {
113
+ this.closed.emit('tab');
114
+ });
115
+ // If a user manually (programatically) focuses a menu item, we need to reflect that focus
116
+ // change back to the key manager. Note that we don't need to unsubscribe here because _focused
117
+ // is internal and we know that it gets completed on destroy.
118
+ this._directDescendantItems.changes
119
+ .pipe(startWith(this._directDescendantItems), switchMap((items) => merge(...items.map((item) => item._focused))))
120
+ .subscribe((focusedItem) => this._keyManager.updateActiveItem(focusedItem));
121
+ }
122
+ ngOnDestroy() {
123
+ this._directDescendantItems.destroy();
124
+ this._tabSubscription.unsubscribe();
125
+ this.closed.complete();
126
+ }
127
+ /**
128
+ * Stream that combines the `_hovered` observables of all the menu's items
129
+ * into a single observable. Emits whenever the hovered menu item changes.
130
+ */
131
+ _hovered() {
132
+ // Coerce the `changes` property because Angular types it as `Observable<any>`
133
+ const itemChanges = this._directDescendantItems.changes;
134
+ return itemChanges.pipe(startWith(this._directDescendantItems),
135
+ // Hovering is not applicable when producing touch output
136
+ filter(() => {
137
+ return this._clientOutput?.device !== 'touch';
138
+ }), switchMap((items) => merge(...items.map((item) => item._hovered))));
139
+ }
140
+ /** Handle a keyboard event from the menu, delegating to the appropriate action. */
141
+ _handleKeydown(event) {
142
+ const key = event.key;
143
+ const manager = this._keyManager;
144
+ switch (key) {
145
+ case 'Escape':
146
+ if (!hasModifierKey(event)) {
147
+ event.preventDefault();
148
+ this.closed.emit('keydown');
149
+ }
150
+ break;
151
+ case 'ArrowLeft':
152
+ if (this.parentMenu && this.direction === 'ltr') {
153
+ this.closed.emit('keydown');
154
+ }
155
+ break;
156
+ case 'ArrowRight':
157
+ if (this.parentMenu && this.direction === 'rtl') {
158
+ this.closed.emit('keydown');
159
+ }
160
+ break;
161
+ case 'Home':
162
+ case 'End':
163
+ if (!hasModifierKey(event)) {
164
+ key === 'Home'
165
+ ? manager.setFirstItemActive()
166
+ : manager.setLastItemActive();
167
+ event.preventDefault();
168
+ }
169
+ break;
170
+ default:
171
+ if (key === 'ArrowUp' || key === 'ArrowDown') {
172
+ manager.setFocusOrigin('keyboard');
173
+ }
174
+ manager.onKeydown(event);
175
+ }
176
+ }
177
+ /**
178
+ * Focus the first item in the menu.
179
+ * @param origin Action from which the focus originated. Used to set the correct styling.
180
+ */
181
+ focusFirstItem(origin = 'program') {
182
+ this._keyManager.setFocusOrigin(origin).setFirstItemActive();
183
+ }
184
+ /** Updates the `showTitle` property for touch device UI */
185
+ _updateShowTitle() {
186
+ this.showTitle = !!this.title || this.showBackButton;
187
+ }
188
+ /** Starts the enter animation */
189
+ _startAnimation() {
190
+ this._panelAnimationState = 'enter';
191
+ }
192
+ /** Resets the panel animation to its initial state. */
193
+ _resetAnimation() {
194
+ this._panelAnimationState = 'void';
195
+ }
196
+ /**
197
+ * Starts the 'below' animation, moving a menu down, out of view below the
198
+ * viewport. Used to close the whole menu, for example when clicking
199
+ * the backdrop.
200
+ */
201
+ _startTouchCloseDownAnimation() {
202
+ this._panelAnimationState = 'below';
203
+ }
204
+ /**
205
+ * Starts the 'below-with-delay' animation, moving a menu down, out of view below the
206
+ * viewport. Used to close the whole menu as a response to the user tapping
207
+ * a menu item. There is a short delay before the animation starts, to that
208
+ * the user gets a visual feedback on what item was selected.
209
+ */
210
+ _startTouchCloseDownAnimationWithDelay() {
211
+ this._panelAnimationState = 'below-with-delay';
212
+ }
213
+ /**
214
+ * Starts the 'void' animation, moving a (sub) menu out of view to the side
215
+ * of the viewport. Used when going "back" from a sub menu.
216
+ */
217
+ _startTouchCloseSideAnimation() {
218
+ this._resetAnimation();
219
+ }
220
+ /**
221
+ * Starts the enter-from-below animation, moving a (root) menu into view,
222
+ * Animates upwards from a starting position below the viewport.
223
+ */
224
+ _startTouchRootEnterAnimation() {
225
+ this._panelAnimationState = 'enter-from-below';
226
+ this.xOffset = 0;
227
+ }
228
+ /** Starts the enter animation, moving a (sub) menu into view. */
229
+ _startTouchSubmenuEnterAnimation() {
230
+ this._panelAnimationState = 'enter';
231
+ this.xOffset = 0;
232
+ }
233
+ /**
234
+ * Starts the pan animation, to position a submenu in a response
235
+ * to user dragging sideways (panning).
236
+ */
237
+ _startTouchPanAnimation(xOffset) {
238
+ this._panelAnimationState = 'pan';
239
+ this.xOffset = xOffset;
240
+ }
241
+ /**
242
+ * Starts the pan-hidden animation, to position a parent menu next to an
243
+ * active submenu that the user is dragging sideways (panning).
244
+ */
245
+ _startTouchHidePanAnimation(xOffset) {
246
+ this._panelAnimationState = 'pan-hidden';
247
+ this.xOffset = xOffset;
248
+ }
249
+ /**
250
+ * Starts the hide animation, to make a parent menu slide out to leave
251
+ * space for a submenu.
252
+ */
253
+ _startTouchHideAnimation() {
254
+ this._panelAnimationState = 'hide';
255
+ this.xOffset = 0;
256
+ }
257
+ /** Callback that is invoked when the panel animation completes. */
258
+ _onAnimationDone(event) {
259
+ this._animationDone.next(event);
260
+ this._isAnimating = false;
261
+ }
262
+ _onAnimationStart(event) {
263
+ this._isAnimating = true;
264
+ // Scroll the content element to the top as soon as the animation starts. This is necessary,
265
+ // because we move focus to the first item while it's still being animated, which can throw
266
+ // the browser off when it determines the scroll position. Alternatively we can move focus
267
+ // when the animation is done, however moving focus asynchronously will interrupt screen
268
+ // readers which are in the process of reading out the menu already. We take the `element`
269
+ // from the `event` since we can't use a `ViewChild` to access the pane.
270
+ if ((event.toState === 'enter' || event.toState === 'enter-from-below') &&
271
+ this._keyManager.activeItemIndex === 0) {
272
+ event.element.scrollTop = 0;
273
+ }
274
+ }
275
+ /**
276
+ * Handle click on the menu by emitting on the `closed` emitter
277
+ * with a `click` reason
278
+ */
279
+ _handleClick() {
280
+ this.closed.emit('click');
281
+ }
282
+ /**
283
+ * Handle click on the close button by emitting on the `closed` emitter
284
+ * without any particular reason
285
+ */
286
+ _handleCloseClick() {
287
+ this.closed.emit();
288
+ }
289
+ /**
290
+ * Handle click on the back icon by emitting on the `clicked` emitter
291
+ */
292
+ _handleBackClick(e) {
293
+ if (this.showBackButton) {
294
+ // Close submenu keydown-style: close only this menu and leave parents open
295
+ this.closed.emit('keydown');
296
+ }
297
+ e.stopPropagation();
298
+ }
299
+ /**
300
+ * Update client device information for the menu and its menu items.
301
+ */
302
+ _setDevice(clientInput, clientOutput) {
303
+ this._clientInput = clientInput;
304
+ this._clientOutput = clientOutput;
305
+ this._directDescendantItems.forEach((item) => {
306
+ item._clientInput = clientInput;
307
+ item._clientOutput = clientOutput;
308
+ });
309
+ this._changeDetectorRef.markForCheck();
310
+ }
311
+ /**
312
+ * Resets the active item in the menu. This is used when the menu is opened, allowing
313
+ * the user to start from the first option when pressing the down arrow.
314
+ */
315
+ resetActiveItem() {
316
+ this._keyManager.setActiveItem(-1);
317
+ }
318
+ /**
319
+ * Sets up a stream that will keep track of any newly-added menu items and will update the list
320
+ * of direct descendants. We collect the descendants this way, because `_allItems` can include
321
+ * items that are part of child menus, and using a custom way of registering items is unreliable
322
+ * when it comes to maintaining the item order.
323
+ */
324
+ _updateDirectDescendants() {
325
+ this._allItems.changes
326
+ .pipe(startWith(this._allItems))
327
+ .subscribe((items) => {
328
+ this._directDescendantItems.reset(items.filter((item) => item._parentMenu === this));
329
+ this._directDescendantItems.notifyOnChanges();
330
+ });
331
+ }
332
+ 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 }); }
333
+ 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", styles: "styles", touchStyles: "touchStyles" }, outputs: { closed: "closed", opened: "opened" }, queries: [{ propertyName: "_allItems", predicate: GraniteMenuItemComponent, descendants: true }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 }); }
334
+ }
335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: _MenuBaseComponent, decorators: [{
336
+ type: Directive
337
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { xPosition: [{
338
+ type: Input
339
+ }], yPosition: [{
340
+ type: Input
341
+ }], title: [{
342
+ type: Input
343
+ }], closeLabel: [{
344
+ type: Input
345
+ }], openOnHover: [{
346
+ type: Input
347
+ }], scrollStrategy: [{
348
+ type: Input
349
+ }], styles: [{
350
+ type: Input
351
+ }], touchStyles: [{
352
+ type: Input
353
+ }], templateRef: [{
354
+ type: ViewChild,
355
+ args: [TemplateRef]
356
+ }], _allItems: [{
357
+ type: ContentChildren,
358
+ args: [GraniteMenuItemComponent, { descendants: true }]
359
+ }], closed: [{
360
+ type: Output
361
+ }], opened: [{
362
+ type: Output
363
+ }] } });
364
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvc3JjL2xpYi9tZW51L21lbnUtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBZSxNQUFNLG1CQUFtQixDQUFDO0FBRWpFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV2RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBRUwsT0FBTyxFQUNQLFlBQVksR0FDYixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU1uRSxPQUFPLEVBQ0wsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxHQUNqQyxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFRakUsc0NBQXNDO0FBQ3RDLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQTJCckIsb0RBQW9EO0FBQ3BELE1BQU0sb0JBQW9CLEdBQWtCO0lBQzFDLEtBQUssRUFBRSxNQUFNO0lBQ2IsTUFBTSxFQUFFO1FBQ04sT0FBTyxFQUFFLENBQUM7S0FDWDtDQUNGLENBQUM7QUFFRixxREFBcUQ7QUFFckQsa0VBQWtFO0FBQ2xFLE1BQU0sT0FBTyxrQkFBa0I7SUFPN0IsMENBQTBDO0lBQzFDLElBQ0ksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBQ0QsSUFB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QWxDLFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsU0FBUztzQkFEUixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFNN0MsTUFBTTtzQkFBeEIsTUFBTTtnQkFLWSxNQUFNO3NCQUF4QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRGlyZWN0aXZlLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG5pbXBvcnQgeyBoYXNNb2RpZmllcktleSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBtZXJnZSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgQ2xpZW50SW5wdXRJbnRlcmZhY2UsXG4gIENsaWVudE91dHB1dEludGVyZmFjZSxcbn0gZnJvbSAnLi4vY29yZS9jbGllbnQtZW52aXJvbm1lbnQnO1xuaW1wb3J0IHtcbiAgdGhyb3dHcmFuaXRlTWVudUludmFsaWRQb3NpdGlvblgsXG4gIHRocm93R3Jhbml0ZU1lbnVJbnZhbGlkUG9zaXRpb25ZLFxufSBmcm9tICcuL21lbnUtZXJyb3JzJztcbmltcG9ydCB7IEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBDbG9zZWRFdmVudFR5cGUsXG4gIE9wZW5lZEV2ZW50VHlwZSxcbiAgR3Jhbml0ZU1lbnVQYW5lbEludGVyZmFjZSxcbn0gZnJvbSAnLi9tZW51LXBhbmVsJztcbmltcG9ydCB7IE1lbnVQb3NpdGlvblgsIE1lbnVQb3NpdGlvblkgfSBmcm9tICcuL21lbnUtcG9zaXRpb25zJztcblxuLyoqIENvdW50ZXIgZm9yIHBhbmVsIElEIGdlbmVyYXRpb24gKi9cbmxldCBtZW51UGFuZWxVaWQgPSAwO1xuXG4vKiogTWVudSBwYW5lbCBhbmltYXRpb24gc3RhdGVzICovXG50eXBlIFRyYW5zZm9ybU1lbnVTdGF0ZXMgPVxuICAvLyBUb3VjaCBkZXZpY2VcbiAgfCAndm9pZCdcbiAgfCAnZW50ZXInXG4gIHwgJ2VudGVyLWZyb20tYmVsb3cnXG4gIHwgJ2JlbG93LXdpdGgtZGVsYXknXG4gIHwgJ2JlbG93J1xuICB8ICdwYW4nXG4gIHwgJ2hpZGUnXG4gIHwgJ3Bhbi1oaWRkZW4nO1xuXG4vKipcbiAqIE1lbnUgcGFuZWwgYW5pbWF0aW9uIHRyYW5zZm9ybS9zdGF0ZSBvYmplY3QuIEhhcyB0byBiZSBhbiBvYmplY3QgYXMgd2Ugc3VwcGx5XG4gKiB0aGUgYHhPZmZzZXRgIHBhcmFtZXRlciBhbmQgbm90IGp1c3QgdGhlIHN0YXRlIG5hbWUuXG4gKi9cbnR5cGUgVHJhbnNmb3JtTWVudSA9IHtcbiAgLyoqIEN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlIG5hbWUgKi9cbiAgdmFsdWU6IFRyYW5zZm9ybU1lbnVTdGF0ZXM7XG4gIHBhcmFtczoge1xuICAgIC8qKiBIb3cgZmFyIHRoZSBtZW51IGhhcyBiZWVuIHBhbm5lZC9zd2lwZWQgYnkgdGhlIHVzZXIgKi9cbiAgICB4T2Zmc2V0OiBudW1iZXI7XG4gIH07XG59O1xuXG4vKiogTWVudSBwYW5lbCBhbmltYXRpb24gZGVmYXVsdCB0cmFuc2Zvcm0gdmFsdWVzICovXG5jb25zdCB0cmFuc2Zvcm1NZW51RGVmYXVsdDogVHJhbnNmb3JtTWVudSA9IHtcbiAgdmFsdWU6ICd2b2lkJyxcbiAgcGFyYW1zOiB7XG4gICAgeE9mZnNldDogMCxcbiAgfSxcbn07XG5cbi8qKiBCYXNlIGNsYXNzIHdpdGggYWxsIG9mIHRoZSBtZW51IGZ1bmN0aW9uYWxpdHkuICovXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIF9NZW51QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgQWZ0ZXJDb250ZW50Q2hlY2tlZCxcbiAgICBHcmFuaXRlTWVudVBhbmVsSW50ZXJmYWNlXG57XG4gIC8qKiBQb3NpdGlvbiBvZiB0aGUgbWVudSBpbiB0aGUgWCBheGlzLiAqL1xuICBASW5wdXQoKVxuICBnZXQgeFBvc2l0aW9uKCk6IE1lbnVQb3NpdGlvblgge1xuICAgIHJldHVybiB0aGlzLl94UG9zaXRpb247XG4gIH1cbiAgc2V0IHhQb3NpdGlvbih2YWx1ZTogTWVudVBvc2l0aW9uWCkge1xuICAgIGlmICh2YWx1ZSAhPT0gJ2JlZm9yZScgJiYgdmFsdWUgIT09ICdhZnRlcicpIHtcbiAgICAgIHRocm93R3Jhbml0ZU1lbnVJbnZhbGlkUG9zaXRpb25YKCk7XG4gICAgfVxuICAgIHRoaXMuX3hQb3NpdGlvbiA9IHZhbHVlO1xuICB9XG5cbiAgLyoqIFBvc2l0aW9uIG9mIHRoZSBtZW51IGluIHRoZSBZIGF4aXMuICovXG4gIEBJbnB1dCgpXG4gIGdldCB5UG9zaXRpb24oKTogTWVudVBvc2l0aW9uWSB7XG4gICAgcmV0dXJuIHRoaXMuX3lQb3NpdGlvbjtcbiAgfVxuICBzZXQgeVBvc2l0aW9uKHZhbHVlOiBNZW51UG9zaXRpb25ZKSB7XG4gICAgaWYgKHZhbHVlICE9PSAnYWJvdmUnICYmIHZhbHVlICE9PSAnYmVsb3cnKSB7XG4gICAgICB0aHJvd0dyYW5pdGVNZW51SW52YWxpZFBvc2l0aW9uWSgpO1xuICAgIH1cbiAgICB0aGlzLl95UG9zaXRpb24gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKiBPcHRpb25hbCB0b3VjaCBtZW51IHBhbmVsIHRpdGxlICovXG4gIEBJbnB1dCgpXG4gIHRpdGxlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRvdWNoIG1lbnUgY2xvc2UgYnV0dG9uIGxhYmVsLiBJZiBub3Qgc2V0LCBhbnkgbGFiZWwgc2V0IGJ5IHBhcmVudCB3aWxsXG4gICAqIGJlIHVzZWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBjbG9zZUxhYmVsOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgb3Blbk9uSG92ZXI6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBJbnB1dCgpXG4gIHNjcm9sbFN0cmF0ZWd5OiAncmVwb3NpdGlvbicgfCAnY2xvc2UnID0gJ3JlcG9zaXRpb24nO1xuXG4gIC8qKlxuICAgKiBTdHlsZXMgdG8gYmUgYXBwbGllZCB0byB0aGUgbWVudS5cbiAgICogQWRkZWQgYXMgdGhlcmUgaXMgbm8gd2F5IHRvIGFwcGx5IHN0eWxlcyB0byB0aGUgbWVudSBmcm9tIHRoZSBvdXRzaWRlLlxuICAgKi9cbiAgQElucHV0KClcbiAgc3R5bGVzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG5cbiAgQElucHV0KClcbiAgdG91Y2hTdHlsZXM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcblxuICBAVmlld0NoaWxkKFRlbXBsYXRlUmVmKSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAvKiogQWxsIGl0ZW1zIGluc2lkZSB0aGUgbWVudS4gSW5jbHVkZXMgaXRlbXMgbmVzdGVkIGluc2lkZSBhbm90aGVyIG1lbnUuICovXG4gIEBDb250ZW50Q2hpbGRyZW4oR3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pXG4gIF9hbGxJdGVtczogUXVlcnlMaXN0PEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD47XG5cbiAgLyoqXG4gICAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgbWVudSBpcyBjbG9zZWRcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbG9zZWQ6IEV2ZW50RW1pdHRlcjxDbG9zZWRFdmVudFR5cGU+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIC8qKlxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgb3BlbmVkOiBFdmVudEVtaXR0ZXI8T3BlbmVkRXZlbnRUeXBlPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAvKipcbiAgICogVXNlZCBmb3IgbG9jYXRpbmcgdGhlIHBhbmVsIGluIHRlc3RzIGFuZCBzZXR0aW5nIHRoZSBhcmlhLWNvbnRyb2wgYXR0cmlidXRlXG4gICAqIGZvciB0aGUgbWVudSB0cmlnZ2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFuZWxJZCA9IGBncmFuaXRlLW1lbnUtcGFuZWwtJHttZW51UGFuZWxVaWQrK31gO1xuXG4gIC8qKiBQYXJlbnQgbWVudSBvZiB0aGUgY3VycmVudCBtZW51IHBhbmVsLiAqL1xuICBwYXJlbnRNZW51OiBHcmFuaXRlTWVudVBhbmVsSW50ZXJmYWNlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKiBMYXlvdXQgZGlyZWN0aW9uIG9mIHRoZSBtZW51LiAqL1xuICBkaXJlY3Rpb246IERpcmVjdGlvbjtcblxuICAvKiogV2hldGhlciB0byBzaG93IGJhY2sgYnV0dG9uIGluIHRvdWNoIG1lbnUgdGl0bGUgYmFyICovXG4gIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyB0b3VjaCBtZW51IHRpdGxlIGJhciAqL1xuICBzaG93VGl0bGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciB0byBhZGQgYSBjbG9zZSBidXR0b24gYmVsb3cgdGhlIG1lbnUgKi9cbiAgc2hvd0Nsb3NlQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIE9ic2VydmFibGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgcGFuZWwgYW5pbWF0aW9uLiAqL1xuICBfdHJhbnNmb3JtTWVudTogQmVoYXZpb3JTdWJqZWN0PFRyYW5zZm9ybU1lbnU+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcbiAgICB0cmFuc2Zvcm1NZW51RGVmYXVsdFxuICApO1xuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciBhbiBhbmltYXRpb24gb24gdGhlIG1lbnUgY29tcGxldGVzLiAqL1xuICBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IGlzIGFuaW1hdGluZy4gKi9cbiAgX2lzQW5pbWF0aW5nOiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoZSBtZW51IGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gKi9cbiAgX2lzQ2xvc2luZzogYm9vbGVhbjtcblxuICAvKiogQ2xpZW50IGlucHV0IGRldmljZSBpbmZvcm1hdGlvbiAqL1xuICBfY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlO1xuXG4gIC8qKiBDbGllbnQgb3V0cHV0IGRldmljZSBpbmZvcm1hdGlvbiAqL1xuICBfY2xpZW50T3V0cHV0OiBDbGllbnRPdXRwdXRJbnRlcmZhY2U7XG5cbiAgcHJpdmF0ZSBfbWVudUVtcHR5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbWVtYmVyLW9yZGVyaW5nXG4gIF9pc01lbnVFbXB0eSQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICB0aGlzLl9tZW51RW1wdHkkLFxuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUsXG4gIF0pLnBpcGUoXG4gICAgZmlsdGVyKChbbSwgYV0pID0+IG0gJiYgYSAhPSBudWxsKSxcbiAgICBtYXAoKCkgPT4gdHJ1ZSlcbiAgKTtcblxuICAvKiogT25seSB0aGUgZGlyZWN0IGRlc2NlbmRhbnQgbWVudSBpdGVtcy4gKi9cbiAgcHJpdmF0ZSBfZGlyZWN0RGVzY2VuZGFudEl0ZW1zID0gbmV3IFF1ZXJ5TGlzdDxHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQ+KCk7XG5cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD47XG5cbiAgLyoqIFN1YnNjcmlwdGlvbiB0byB0YWIgZXZlbnRzIG9uIHRoZSBtZW51IHBhbmVsICovXG4gIHByaXZhdGUgX3RhYlN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcblxuICBwcml2YXRlIF94UG9zaXRpb246IE1lbnVQb3NpdGlvblggPSAnYWZ0ZXInO1xuICBwcml2YXRlIF95UG9zaXRpb246IE1lbnVQb3NpdGlvblkgPSAnYmVsb3cnO1xuXG4gIC8qKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBwYW5lbCBhbmltYXRpb24uICovXG4gIHNldCBfcGFuZWxBbmltYXRpb25TdGF0ZShzdGF0ZTogVHJhbnNmb3JtTWVudVN0YXRlcykge1xuICAgIHRoaXMuX3RyYW5zZm9ybU1lbnUubmV4dCh7XG4gICAgICB2YWx1ZTogc3RhdGUsXG4gICAgICBwYXJhbXM6IHsgeE9mZnNldDogdGhpcy54T2Zmc2V0IH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3VycmVudCBob3Jpem9udGFsIG9mZnNldC4gVXNlZCB3aXRoIGBwYW5gIGFuZCBgcGFuLWhpZGRlbmBcbiAgICogYW5pbWF0aW9uIHN0YXRlcy5cbiAgICovXG4gIHByaXZhdGUgeE9mZnNldDogbnVtYmVyID0gMDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuX21lbnVFbXB0eSQubmV4dCh0aGlzLl9hbGxJdGVtcy5sZW5ndGggPCAxID8gdHJ1ZSA6IGZhbHNlKTtcbiAgfVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpO1xuICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcylcbiAgICAgIC53aXRoV3JhcCgpXG4gICAgICAuc2tpcFByZWRpY2F0ZSgobWVudUl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgaG9zdEVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gbWVudUl0ZW0uX2dldEhvc3RFbGVtZW50KCk7XG4gICAgICAgIHJldHVybiBob3N0RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50XG4gICAgICAgICAgPyBob3N0RWxlbWVudC5kaXNhYmxlZFxuICAgICAgICAgIDogaG9zdEVsZW1lbnQuaGFzQXR0cmlidXRlKCdncmFuaXRlVGl0bGUnKTtcbiAgICAgIH0pO1xuICAgIHRoaXMuX3RhYlN1YnNjcmlwdGlvbiA9IHRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNsb3NlZC5lbWl0KCd0YWInKTtcbiAgICB9KTtcblxuICAgIC8vIElmIGEgdXNlciBtYW51YWxseSAocHJvZ3JhbWF0aWNhbGx5KSBmb2N1c2VzIGEgbWVudSBpdGVtLCB3ZSBuZWVkIHRvIHJlZmxlY3QgdGhhdCBmb2N1c1xuICAgIC8vIGNoYW5nZSBiYWNrIHRvIHRoZSBrZXkgbWFuYWdlci4gTm90ZSB0aGF0IHdlIGRvbid0IG5lZWQgdG8gdW5zdWJzY3JpYmUgaGVyZSBiZWNhdXNlIF9mb2N1c2VkXG4gICAgLy8gaXMgaW50ZXJuYWwgYW5kIHdlIGtub3cgdGhhdCBpdCBnZXRzIGNvbXBsZXRlZCBvbiBkZXN0cm95LlxuICAgIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksXG4gICAgICAgIHN3aXRjaE1hcCgoaXRlbXMpID0+XG4gICAgICAgICAgbWVyZ2UoLi4uaXRlbXMubWFwKChpdGVtOiBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQpID0+IGl0ZW0uX2ZvY3VzZWQpKVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChmb2N1c2VkSXRlbTogR3Jhbml0ZU1lbnVJdGVtQ29tcG9uZW50KSA9PlxuICAgICAgICB0aGlzLl9rZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZm9jdXNlZEl0ZW0pXG4gICAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmRlc3Ryb3koKTtcbiAgICB0aGlzLl90YWJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNsb3NlZC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0cmVhbSB0aGF0IGNvbWJpbmVzIHRoZSBgX2hvdmVyZWRgIG9ic2VydmFibGVzIG9mIGFsbCB0aGUgbWVudSdzIGl0ZW1zXG4gICAqIGludG8gYSBzaW5nbGUgb2JzZXJ2YWJsZS4gRW1pdHMgd2hlbmV2ZXIgdGhlIGhvdmVyZWQgbWVudSBpdGVtIGNoYW5nZXMuXG4gICAqL1xuICBfaG92ZXJlZCgpOiBPYnNlcnZhYmxlPEdyYW5pdGVNZW51SXRlbUNvbXBvbmVudD4ge1xuICAgIC8vIENvZXJjZSB0aGUgYGNoYW5nZXNgIHByb3BlcnR5IGJlY2F1c2UgQW5ndWxhciB0eXBlcyBpdCBhcyBgT2JzZXJ2YWJsZTxhbnk+YFxuICAgIGNvbnN0IGl0ZW1DaGFuZ2VzID0gdGhpcy5fZGlyZWN0RGVzY2VuZGFudEl0ZW1zLmNoYW5nZXMgYXMgT2JzZXJ2YWJsZTxcbiAgICAgIFF1ZXJ5TGlzdDxHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQ+XG4gICAgPjtcblxuICAgIHJldHVybiBpdGVtQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcyksXG4gICAgICAvLyBIb3ZlcmluZyBpcyBub3QgYXBwbGljYWJsZSB3aGVuIHByb2R1Y2luZyB0b3VjaCBvdXRwdXRcbiAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnRPdXRwdXQ/LmRldmljZSAhPT0gJ3RvdWNoJztcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKChpdGVtcykgPT5cbiAgICAgICAgbWVyZ2UoLi4uaXRlbXMubWFwKChpdGVtOiBHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQpID0+IGl0ZW0uX2hvdmVyZWQpKVxuICAgICAgKVxuICAgICkgYXMgT2JzZXJ2YWJsZTxHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQ+O1xuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGtleWJvYXJkIGV2ZW50IGZyb20gdGhlIG1lbnUsIGRlbGVnYXRpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4gKi9cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG4gICAgY29uc3QgbWFuYWdlciA9IHRoaXMuX2tleU1hbmFnZXI7XG5cbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoJ2tleWRvd24nKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE1lbnUgJiYgdGhpcy5kaXJlY3Rpb24gPT09ICdsdHInKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIGlmICh0aGlzLnBhcmVudE1lbnUgJiYgdGhpcy5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGtleSA9PT0gJ0hvbWUnXG4gICAgICAgICAgICA/IG1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKClcbiAgICAgICAgICAgIDogbWFuYWdlci5zZXRMYXN0SXRlbUFjdGl2ZSgpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoa2V5ID09PSAnQXJyb3dVcCcgfHwga2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgICAgIG1hbmFnZXIuc2V0Rm9jdXNPcmlnaW4oJ2tleWJvYXJkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBtYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBtZW51LlxuICAgKiBAcGFyYW0gb3JpZ2luIEFjdGlvbiBmcm9tIHdoaWNoIHRoZSBmb2N1cyBvcmlnaW5hdGVkLiBVc2VkIHRvIHNldCB0aGUgY29ycmVjdCBzdHlsaW5nLlxuICAgKi9cbiAgZm9jdXNGaXJzdEl0ZW0ob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJyk6IHZvaWQge1xuICAgIHRoaXMuX2tleU1hbmFnZXIuc2V0Rm9jdXNPcmlnaW4ob3JpZ2luKS5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgfVxuXG4gIC8qKiBVcGRhdGVzIHRoZSBgc2hvd1RpdGxlYCBwcm9wZXJ0eSBmb3IgdG91Y2ggZGV2aWNlIFVJICovXG4gIF91cGRhdGVTaG93VGl0bGUoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93VGl0bGUgPSAhIXRoaXMudGl0bGUgfHwgdGhpcy5zaG93QmFja0J1dHRvbjtcbiAgfVxuXG4gIC8qKiBTdGFydHMgdGhlIGVudGVyIGFuaW1hdGlvbiAqL1xuICBfc3RhcnRBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdlbnRlcic7XG4gIH1cblxuICAvKiogUmVzZXRzIHRoZSBwYW5lbCBhbmltYXRpb24gdG8gaXRzIGluaXRpYWwgc3RhdGUuICovXG4gIF9yZXNldEFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ3ZvaWQnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgJ2JlbG93JyBhbmltYXRpb24sIG1vdmluZyBhIG1lbnUgZG93biwgb3V0IG9mIHZpZXcgYmVsb3cgdGhlXG4gICAqIHZpZXdwb3J0LiBVc2VkIHRvIGNsb3NlIHRoZSB3aG9sZSBtZW51LCBmb3IgZXhhbXBsZSB3aGVuIGNsaWNraW5nXG4gICAqIHRoZSBiYWNrZHJvcC5cbiAgICovXG4gIF9zdGFydFRvdWNoQ2xvc2VEb3duQW5pbWF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAnYmVsb3cnO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgJ2JlbG93LXdpdGgtZGVsYXknIGFuaW1hdGlvbiwgbW92aW5nIGEgbWVudSBkb3duLCBvdXQgb2YgdmlldyBiZWxvdyB0aGVcbiAgICogdmlld3BvcnQuIFVzZWQgdG8gY2xvc2UgdGhlIHdob2xlIG1lbnUgYXMgYSByZXNwb25zZSB0byB0aGUgdXNlciB0YXBwaW5nXG4gICAqIGEgbWVudSBpdGVtLiBUaGVyZSBpcyBhIHNob3J0IGRlbGF5IGJlZm9yZSB0aGUgYW5pbWF0aW9uIHN0YXJ0cywgdG8gdGhhdFxuICAgKiB0aGUgdXNlciBnZXRzIGEgdmlzdWFsIGZlZWRiYWNrIG9uIHdoYXQgaXRlbSB3YXMgc2VsZWN0ZWQuXG4gICAqL1xuICBfc3RhcnRUb3VjaENsb3NlRG93bkFuaW1hdGlvbldpdGhEZWxheSgpOiB2b2lkIHtcbiAgICB0aGlzLl9wYW5lbEFuaW1hdGlvblN0YXRlID0gJ2JlbG93LXdpdGgtZGVsYXknO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgJ3ZvaWQnIGFuaW1hdGlvbiwgbW92aW5nIGEgKHN1YikgbWVudSBvdXQgb2YgdmlldyB0byB0aGUgc2lkZVxuICAgKiBvZiB0aGUgdmlld3BvcnQuIFVzZWQgd2hlbiBnb2luZyBcImJhY2tcIiBmcm9tIGEgc3ViIG1lbnUuXG4gICAqL1xuICBfc3RhcnRUb3VjaENsb3NlU2lkZUFuaW1hdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEFuaW1hdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyB0aGUgZW50ZXItZnJvbS1iZWxvdyBhbmltYXRpb24sIG1vdmluZyBhIChyb290KSBtZW51IGludG8gdmlldyxcbiAgICogQW5pbWF0ZXMgdXB3YXJkcyBmcm9tIGEgc3RhcnRpbmcgcG9zaXRpb24gYmVsb3cgdGhlIHZpZXdwb3J0LlxuICAgKi9cbiAgX3N0YXJ0VG91Y2hSb290RW50ZXJBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdlbnRlci1mcm9tLWJlbG93JztcbiAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqIFN0YXJ0cyB0aGUgZW50ZXIgYW5pbWF0aW9uLCBtb3ZpbmcgYSAoc3ViKSBtZW51IGludG8gdmlldy4gKi9cbiAgX3N0YXJ0VG91Y2hTdWJtZW51RW50ZXJBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdlbnRlcic7XG4gICAgdGhpcy54T2Zmc2V0ID0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIHBhbiBhbmltYXRpb24sIHRvIHBvc2l0aW9uIGEgc3VibWVudSBpbiBhIHJlc3BvbnNlXG4gICAqIHRvIHVzZXIgZHJhZ2dpbmcgc2lkZXdheXMgKHBhbm5pbmcpLlxuICAgKi9cbiAgX3N0YXJ0VG91Y2hQYW5BbmltYXRpb24oeE9mZnNldDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdwYW4nO1xuICAgIHRoaXMueE9mZnNldCA9IHhPZmZzZXQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIHRoZSBwYW4taGlkZGVuIGFuaW1hdGlvbiwgdG8gcG9zaXRpb24gYSBwYXJlbnQgbWVudSBuZXh0IHRvIGFuXG4gICAqIGFjdGl2ZSBzdWJtZW51IHRoYXQgdGhlIHVzZXIgaXMgZHJhZ2dpbmcgc2lkZXdheXMgKHBhbm5pbmcpLlxuICAgKi9cbiAgX3N0YXJ0VG91Y2hIaWRlUGFuQW5pbWF0aW9uKHhPZmZzZXQ6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX3BhbmVsQW5pbWF0aW9uU3RhdGUgPSAncGFuLWhpZGRlbic7XG4gICAgdGhpcy54T2Zmc2V0ID0geE9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgdGhlIGhpZGUgYW5pbWF0aW9uLCB0byBtYWtlIGEgcGFyZW50IG1lbnUgc2xpZGUgb3V0IHRvIGxlYXZlXG4gICAqIHNwYWNlIGZvciBhIHN1Ym1lbnUuXG4gICAqL1xuICBfc3RhcnRUb3VjaEhpZGVBbmltYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcGFuZWxBbmltYXRpb25TdGF0ZSA9ICdoaWRlJztcbiAgICB0aGlzLnhPZmZzZXQgPSAwO1xuICB9XG5cbiAgLyoqIENhbGxiYWNrIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZSBwYW5lbCBhbmltYXRpb24gY29tcGxldGVzLiAqL1xuICBfb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2FuaW1hdGlvbkRvbmUubmV4dChldmVudCk7XG4gICAgdGhpcy5faXNBbmltYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIF9vbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX2lzQW5pbWF0aW5nID0gdHJ1ZTtcblxuICAgIC8vIFNjcm9sbCB0aGUgY29udGVudCBlbGVtZW50IHRvIHRoZSB0b3AgYXMgc29vbiBhcyB0aGUgYW5pbWF0aW9uIHN0YXJ0cy4gVGhpcyBpcyBuZWNlc3NhcnksXG4gICAgLy8gYmVjYXVzZSB3ZSBtb3ZlIGZvY3VzIHRvIHRoZSBmaXJzdCBpdGVtIHdoaWxlIGl0J3Mgc3RpbGwgYmVpbmcgYW5pbWF0ZWQsIHdoaWNoIGNhbiB0aHJvd1xuICAgIC8vIHRoZSBicm93c2VyIG9mZiB3aGVuIGl0IGRldGVybWluZXMgdGhlIHNjcm9sbCBwb3NpdGlvbi4gQWx0ZXJuYXRpdmVseSB3ZSBjYW4gbW92ZSBmb2N1c1xuICAgIC8vIHdoZW4gdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBob3dldmVyIG1vdmluZyBmb2N1cyBhc3luY2hyb25vdXNseSB3aWxsIGludGVycnVwdCBzY3JlZW5cbiAgICAvLyByZWFkZXJzIHdoaWNoIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIG91dCB0aGUgbWVudSBhbHJlYWR5LiBXZSB0YWtlIHRoZSBgZWxlbWVudGBcbiAgICAvLyBmcm9tIHRoZSBgZXZlbnRgIHNpbmNlIHdlIGNhbid0IHVzZSBhIGBWaWV3Q2hpbGRgIHRvIGFjY2VzcyB0aGUgcGFuZS5cbiAgICBpZiAoXG4gICAgICAoZXZlbnQudG9TdGF0ZSA9PT0gJ2VudGVyJyB8fCBldmVudC50b1N0YXRlID09PSAnZW50ZXItZnJvbS1iZWxvdycpICYmXG4gICAgICB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCA9PT0gMFxuICAgICkge1xuICAgICAgZXZlbnQuZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2xpY2sgb24gdGhlIG1lbnUgYnkgZW1pdHRpbmcgb24gdGhlIGBjbG9zZWRgIGVtaXR0ZXJcbiAgICogd2l0aCBhIGBjbGlja2AgcmVhc29uXG4gICAqL1xuICBfaGFuZGxlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgnY2xpY2snKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgY2xpY2sgb24gdGhlIGNsb3NlIGJ1dHRvbiBieSBlbWl0dGluZyBvbiB0aGUgYGNsb3NlZGAgZW1pdHRlclxuICAgKiB3aXRob3V0IGFueSBwYXJ0aWN1bGFyIHJlYXNvblxuICAgKi9cbiAgX2hhbmRsZUNsb3NlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZWQuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjbGljayBvbiB0aGUgYmFjayBpY29uIGJ5IGVtaXR0aW5nIG9uIHRoZSBgY2xpY2tlZGAgZW1pdHRlclxuICAgKi9cbiAgX2hhbmRsZUJhY2tDbGljayhlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2hvd0JhY2tCdXR0b24pIHtcbiAgICAgIC8vIENsb3NlIHN1Ym1lbnUga2V5ZG93bi1zdHlsZTogY2xvc2Ugb25seSB0aGlzIG1lbnUgYW5kIGxlYXZlIHBhcmVudHMgb3BlblxuICAgICAgdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpO1xuICAgIH1cbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBjbGllbnQgZGV2aWNlIGluZm9ybWF0aW9uIGZvciB0aGUgbWVudSBhbmQgaXRzIG1lbnUgaXRlbXMuXG4gICAqL1xuICBfc2V0RGV2aWNlKFxuICAgIGNsaWVudElucHV0OiBDbGllbnRJbnB1dEludGVyZmFjZSxcbiAgICBjbGllbnRPdXRwdXQ6IENsaWVudE91dHB1dEludGVyZmFjZVxuICApOiB2b2lkIHtcbiAgICB0aGlzLl9jbGllbnRJbnB1dCA9IGNsaWVudElucHV0O1xuICAgIHRoaXMuX2NsaWVudE91dHB1dCA9IGNsaWVudE91dHB1dDtcblxuICAgIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLl9jbGllbnRJbnB1dCA9IGNsaWVudElucHV0O1xuICAgICAgaXRlbS5fY2xpZW50T3V0cHV0ID0gY2xpZW50T3V0cHV0O1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBhY3RpdmUgaXRlbSBpbiB0aGUgbWVudS4gVGhpcyBpcyB1c2VkIHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkLCBhbGxvd2luZ1xuICAgKiB0aGUgdXNlciB0byBzdGFydCBmcm9tIHRoZSBmaXJzdCBvcHRpb24gd2hlbiBwcmVzc2luZyB0aGUgZG93biBhcnJvdy5cbiAgICovXG4gIHJlc2V0QWN0aXZlSXRlbSgpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oLTEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgYSBzdHJlYW0gdGhhdCB3aWxsIGtlZXAgdHJhY2sgb2YgYW55IG5ld2x5LWFkZGVkIG1lbnUgaXRlbXMgYW5kIHdpbGwgdXBkYXRlIHRoZSBsaXN0XG4gICAqIG9mIGRpcmVjdCBkZXNjZW5kYW50cy4gV2UgY29sbGVjdCB0aGUgZGVzY2VuZGFudHMgdGhpcyB3YXksIGJlY2F1c2UgYF9hbGxJdGVtc2AgY2FuIGluY2x1ZGVcbiAgICogaXRlbXMgdGhhdCBhcmUgcGFydCBvZiBjaGlsZCBtZW51cywgYW5kIHVzaW5nIGEgY3VzdG9tIHdheSBvZiByZWdpc3RlcmluZyBpdGVtcyBpcyB1bnJlbGlhYmxlXG4gICAqIHdoZW4gaXQgY29tZXMgdG8gbWFpbnRhaW5pbmcgdGhlIGl0ZW0gb3JkZXIuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVEaXJlY3REZXNjZW5kYW50cygpIHtcbiAgICB0aGlzLl9hbGxJdGVtcy5jaGFuZ2VzXG4gICAgICAucGlwZShzdGFydFdpdGgodGhpcy5fYWxsSXRlbXMpKVxuICAgICAgLnN1YnNjcmliZSgoaXRlbXM6IFF1ZXJ5TGlzdDxHcmFuaXRlTWVudUl0ZW1Db21wb25lbnQ+KSA9PiB7XG4gICAgICAgIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5yZXNldChcbiAgICAgICAgICBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uX3BhcmVudE1lbnUgPT09IHRoaXMpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX2RpcmVjdERlc2NlbmRhbnRJdGVtcy5ub3RpZnlPbkNoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,23 @@
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=
@@ -0,0 +1,37 @@
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==
@@ -0,0 +1,89 @@
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
@@ -0,0 +1,7 @@
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=
@@ -0,0 +1,9 @@
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==