@ngrdt/menu 0.0.16 → 0.0.18
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/fesm2022/ngrdt-menu.mjs +324 -357
- package/fesm2022/ngrdt-menu.mjs.map +1 -1
- package/index.d.ts +335 -4
- package/package.json +1 -3
- package/esm2022/index.mjs +0 -5
- package/esm2022/lib/menu/rdt-menu.component.mjs +0 -93
- package/esm2022/lib/menu-bar/rdt-menu-bar.component.mjs +0 -58
- package/esm2022/lib/menu-base/rdt-menu-base.component.mjs +0 -458
- package/esm2022/lib/menu-overlay/rdt-menu-overlay.component.mjs +0 -597
- package/esm2022/lib/models.mjs +0 -15
- package/esm2022/lib/private-models.mjs +0 -73
- package/esm2022/lib/rdt-menu.module.mjs +0 -41
- package/esm2022/lib/utils.mjs +0 -79
- package/esm2022/ngrdt-menu.mjs +0 -5
- package/lib/menu/rdt-menu.component.d.ts +0 -23
- package/lib/menu-bar/rdt-menu-bar.component.d.ts +0 -18
- package/lib/menu-base/rdt-menu-base.component.d.ts +0 -103
- package/lib/menu-overlay/rdt-menu-overlay.component.d.ts +0 -85
- package/lib/models.d.ts +0 -35
- package/lib/private-models.d.ts +0 -53
- package/lib/rdt-menu.module.d.ts +0 -14
- package/lib/utils.d.ts +0 -36
package/index.d.ts
CHANGED
|
@@ -1,4 +1,335 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import * as i6 from '@ngrdt/router';
|
|
2
|
+
import { RdtRoute, RdtRouterService } from '@ngrdt/router';
|
|
3
|
+
import * as i7 from '@ngrdt/shortcuts';
|
|
4
|
+
import { RdtShortcut, RdtShortcutService } from '@ngrdt/shortcuts';
|
|
5
|
+
import { WindowOpenTargetType, RdtHorizontalDirection, RdtVerticalDirection, Nullable, KB_CODE } from '@ngrdt/utils';
|
|
6
|
+
import * as _angular_core from '@angular/core';
|
|
7
|
+
import { InjectionToken, ElementRef, DestroyRef, QueryList, ChangeDetectorRef, Renderer2, EnvironmentInjector, Signal } from '@angular/core';
|
|
8
|
+
import * as i5 from '@angular/router';
|
|
9
|
+
import { Router } from '@angular/router';
|
|
10
|
+
import * as i8 from '@ngrdt/button';
|
|
11
|
+
import { RdtButtonBaseInt } from '@ngrdt/button';
|
|
12
|
+
import * as i4 from '@angular/common';
|
|
13
|
+
|
|
14
|
+
interface RdtMenuItemWithRoute extends RdtMenuItemBase {
|
|
15
|
+
items?: never;
|
|
16
|
+
routerLink?: RdtRoute;
|
|
17
|
+
externalLink?: never;
|
|
18
|
+
target?: never;
|
|
19
|
+
}
|
|
20
|
+
interface RdtMenuItemWithLink extends RdtMenuItemBase {
|
|
21
|
+
items?: never;
|
|
22
|
+
externalLink: string;
|
|
23
|
+
routerLink?: never;
|
|
24
|
+
target?: WindowOpenTargetType;
|
|
25
|
+
}
|
|
26
|
+
interface RdtMenuItemWithChildren extends RdtMenuItemBase {
|
|
27
|
+
items: RdtMenuItem[];
|
|
28
|
+
routerLink?: never;
|
|
29
|
+
externalLink?: never;
|
|
30
|
+
target?: WindowOpenTargetType;
|
|
31
|
+
}
|
|
32
|
+
type RdtMenuItem = RdtMenuItemWithChildren | RdtMenuItemWithRoute | RdtMenuItemWithLink;
|
|
33
|
+
declare enum RdtMenuShortcutMode {
|
|
34
|
+
FOCUS_ITEM = "focus-item",
|
|
35
|
+
OPEN_SUBMENU = "open-submenu"
|
|
36
|
+
}
|
|
37
|
+
declare const RDT_MENU_MARGIN_TOP_PROPERTY_NAME = "--rdt-menu-margin-top";
|
|
38
|
+
declare const RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME = "--rdt-menu-margin-bottom";
|
|
39
|
+
declare const RDT_MENU_MARGIN_LEFT_PROPERTY_NAME = "--rdt-menu-margin-left";
|
|
40
|
+
declare const RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME = "--rdt-menu-margin-right";
|
|
41
|
+
declare const DEFAULT_MENU_HORIZONTAL_DIR = "left";
|
|
42
|
+
declare const DEFAULT_MENU_VERTICAL_DIR = "down";
|
|
43
|
+
declare const RDT_MENU_HORIZONTAL_DIR_PROVIDER: InjectionToken<RdtHorizontalDirection>;
|
|
44
|
+
declare const RDT_MENU_VERTICAL_DIR_PROVIDER: InjectionToken<RdtVerticalDirection>;
|
|
45
|
+
|
|
46
|
+
interface RdtMenuItemBase<TIcon = string> {
|
|
47
|
+
label: string;
|
|
48
|
+
icon?: TIcon;
|
|
49
|
+
shortcut?: RdtShortcut;
|
|
50
|
+
command?: () => void;
|
|
51
|
+
visible?: () => boolean;
|
|
52
|
+
queryParams?: {
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
};
|
|
55
|
+
requiredParent?: RdtRoute;
|
|
56
|
+
dataTestId?: string;
|
|
57
|
+
}
|
|
58
|
+
interface ParsedRdtMenuItemBase<TIcon = string> extends RdtMenuItemBase<TIcon> {
|
|
59
|
+
dataTestId: string;
|
|
60
|
+
}
|
|
61
|
+
interface ParsedRdtMenuItemWithChildren<TIcon = string> extends ParsedRdtMenuItemBase<TIcon> {
|
|
62
|
+
items: ParsedRdtMenuItem[];
|
|
63
|
+
routerLink?: never;
|
|
64
|
+
externalLink?: never;
|
|
65
|
+
icon?: never;
|
|
66
|
+
target?: never;
|
|
67
|
+
}
|
|
68
|
+
interface ParsedRdtMenuItemWithRoute<TIcon = string> extends ParsedRdtMenuItemBase<TIcon> {
|
|
69
|
+
items?: never;
|
|
70
|
+
routerLink?: string[];
|
|
71
|
+
externalLink?: never;
|
|
72
|
+
icon?: TIcon;
|
|
73
|
+
target: WindowOpenTargetType;
|
|
74
|
+
}
|
|
75
|
+
interface ParsedRdtMenuItemWithLink<TIcon = string> extends ParsedRdtMenuItemBase<TIcon> {
|
|
76
|
+
items?: never;
|
|
77
|
+
routerLink?: never;
|
|
78
|
+
externalLink?: string;
|
|
79
|
+
icon?: TIcon;
|
|
80
|
+
target: WindowOpenTargetType;
|
|
81
|
+
}
|
|
82
|
+
type ParsedRdtMenuItem = ParsedRdtMenuItemWithRoute | ParsedRdtMenuItemWithChildren | ParsedRdtMenuItemWithLink;
|
|
83
|
+
declare enum RdtMenuExpandSource {
|
|
84
|
+
Click = 0,
|
|
85
|
+
Hover = 1,
|
|
86
|
+
Shortcut = 2,
|
|
87
|
+
Focus = 3
|
|
88
|
+
}
|
|
89
|
+
interface RdtMenuExpandedChild {
|
|
90
|
+
item: ParsedRdtMenuItem;
|
|
91
|
+
src: RdtMenuExpandSource;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
interface Size {
|
|
95
|
+
width: number;
|
|
96
|
+
height: number;
|
|
97
|
+
}
|
|
98
|
+
interface VertDirWithOffset {
|
|
99
|
+
dir: RdtVerticalDirection;
|
|
100
|
+
top: number;
|
|
101
|
+
}
|
|
102
|
+
interface HorDirWithOffset {
|
|
103
|
+
dir: RdtHorizontalDirection;
|
|
104
|
+
left: number;
|
|
105
|
+
}
|
|
106
|
+
interface ParsedRdtMenuItemWithShortcut {
|
|
107
|
+
path: ParsedRdtMenuItem[];
|
|
108
|
+
shortcut: RdtShortcut;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
declare class RdtMenuOverlayComponent {
|
|
112
|
+
readonly elRef: ElementRef<HTMLElement>;
|
|
113
|
+
readonly destroyRef: DestroyRef;
|
|
114
|
+
private readonly renderer;
|
|
115
|
+
private readonly topLevelMenu;
|
|
116
|
+
private readonly parentMenu;
|
|
117
|
+
private readonly cd;
|
|
118
|
+
private readonly router;
|
|
119
|
+
private readonly document;
|
|
120
|
+
private readonly shortcutService;
|
|
121
|
+
readonly children: QueryList<RdtMenuOverlayComponent>;
|
|
122
|
+
private focusableElements;
|
|
123
|
+
private menuItemContainer;
|
|
124
|
+
readonly item: _angular_core.InputSignal<ParsedRdtMenuItemWithChildren<string>>;
|
|
125
|
+
readonly level: _angular_core.InputSignal<number>;
|
|
126
|
+
readonly preferredHorizontalDir: _angular_core.InputSignal<RdtHorizontalDirection>;
|
|
127
|
+
readonly preferredVerticalDir: _angular_core.InputSignal<RdtVerticalDirection>;
|
|
128
|
+
readonly expandedInput: _angular_core.InputSignal<boolean>;
|
|
129
|
+
readonly expanded: _angular_core.WritableSignal<boolean>;
|
|
130
|
+
readonly autofocusItemInput: _angular_core.InputSignal<"first" | "last" | null>;
|
|
131
|
+
readonly autofocusItem: _angular_core.WritableSignal<"first" | "last" | null>;
|
|
132
|
+
readonly anchorElementInput: _angular_core.InputSignal<Nullable<HTMLElement>>;
|
|
133
|
+
readonly anchorElement: _angular_core.Signal<HTMLElement>;
|
|
134
|
+
readonly zIndex: _angular_core.Signal<number>;
|
|
135
|
+
readonly isRootLevel: _angular_core.Signal<boolean>;
|
|
136
|
+
private _box;
|
|
137
|
+
get box(): DOMRect;
|
|
138
|
+
private _anchorBox;
|
|
139
|
+
private _containerPadding;
|
|
140
|
+
protected verticalDir: _angular_core.WritableSignal<VertDirWithOffset | null>;
|
|
141
|
+
protected horizontalDir: _angular_core.WritableSignal<HorDirWithOffset | null>;
|
|
142
|
+
protected expandedChild: _angular_core.WritableSignal<{
|
|
143
|
+
item: ParsedRdtMenuItem;
|
|
144
|
+
src: RdtMenuExpandSource;
|
|
145
|
+
} | null>;
|
|
146
|
+
protected autofocusSubmenuItem: _angular_core.WritableSignal<"first" | "last" | null>;
|
|
147
|
+
readonly keyActions: {
|
|
148
|
+
[KB_CODE.ARROW.UP]: (index: number) => void;
|
|
149
|
+
[KB_CODE.ARROW.DOWN]: (index: number) => void;
|
|
150
|
+
[KB_CODE.ARROW.RIGHT]: (index: number) => void;
|
|
151
|
+
[KB_CODE.ARROW.LEFT]: () => void;
|
|
152
|
+
[KB_CODE.HOME]: () => void;
|
|
153
|
+
[KB_CODE.END]: () => void;
|
|
154
|
+
[KB_CODE.ESCAPE]: () => void;
|
|
155
|
+
[KB_CODE.ENTER]: (index: number) => void;
|
|
156
|
+
[KB_CODE.SPACEBAR]: (index: number) => void;
|
|
157
|
+
};
|
|
158
|
+
get selfExpandSrc(): RdtMenuExpandSource | undefined;
|
|
159
|
+
readonly recalcEffect: _angular_core.EffectRef;
|
|
160
|
+
readonly expandedEffect: _angular_core.EffectRef;
|
|
161
|
+
readonly expandedFocusEffect: _angular_core.AfterRenderRef;
|
|
162
|
+
constructor();
|
|
163
|
+
private getMinOffsetLeft;
|
|
164
|
+
private getMaxOffsetLeft;
|
|
165
|
+
private getMinOffsetTop;
|
|
166
|
+
private getMaxOffsetTop;
|
|
167
|
+
recalculatePosition(preferredHorizontalDir: RdtHorizontalDirection, preferredVerticalDir: RdtVerticalDirection): void;
|
|
168
|
+
recalculateChildren(): void;
|
|
169
|
+
onItemPointerEnter(item: ParsedRdtMenuItem): void;
|
|
170
|
+
onItemClick(item: ParsedRdtMenuItem): void;
|
|
171
|
+
invokeItemClick(item: ParsedRdtMenuItem): void;
|
|
172
|
+
getChildRoutes(item: ParsedRdtMenuItem): string[][];
|
|
173
|
+
closeSubmenus(focusExpanded?: boolean): void;
|
|
174
|
+
focusItemRecursively(path: ParsedRdtMenuItem[]): void;
|
|
175
|
+
private expandAndGetChild;
|
|
176
|
+
protected onKeyDown(itemIndex: number, event: KeyboardEvent): void;
|
|
177
|
+
private onTabKeyPress;
|
|
178
|
+
private invokeItemClickByIndex;
|
|
179
|
+
private focusItem;
|
|
180
|
+
private blurAllFocusable;
|
|
181
|
+
private focusFocusable;
|
|
182
|
+
private focusNextItem;
|
|
183
|
+
private focusPrevItem;
|
|
184
|
+
private openSubmenu;
|
|
185
|
+
closeSelf(focusExpanded?: boolean): void;
|
|
186
|
+
private checkActiveElement;
|
|
187
|
+
private getRealHorizontalDir;
|
|
188
|
+
private getNarrowScreenHorizontalDir;
|
|
189
|
+
private getRealVerticalDir;
|
|
190
|
+
private measureBoundingRect;
|
|
191
|
+
private measureContainerPadding;
|
|
192
|
+
private setClasses;
|
|
193
|
+
private setClass;
|
|
194
|
+
private removeClass;
|
|
195
|
+
private setOffset;
|
|
196
|
+
private listenTabKeyPress;
|
|
197
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdtMenuOverlayComponent, never>;
|
|
198
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RdtMenuOverlayComponent, "rdt-menu-overlay", never, { "item": { "alias": "item"; "required": true; "isSignal": true; }; "level": { "alias": "level"; "required": true; "isSignal": true; }; "preferredHorizontalDir": { "alias": "preferredHorizontalDir"; "required": false; "isSignal": true; }; "preferredVerticalDir": { "alias": "preferredVerticalDir"; "required": false; "isSignal": true; }; "expandedInput": { "alias": "expanded"; "required": false; "isSignal": true; }; "autofocusItemInput": { "alias": "autofocusItem"; "required": false; "isSignal": true; }; "anchorElementInput": { "alias": "anchorElement"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
declare abstract class RdtMenuBaseComponent {
|
|
202
|
+
readonly preferredVerticalDir: _angular_core.InputSignal<RdtVerticalDirection>;
|
|
203
|
+
readonly preferredHorizontalDir: _angular_core.InputSignal<RdtHorizontalDirection>;
|
|
204
|
+
readonly shortcutMode: _angular_core.InputSignal<"focus-item" | "open-submenu">;
|
|
205
|
+
readonly closeOnFocusOut: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
206
|
+
readonly openOnHover: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
207
|
+
readonly hitboxMargin: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
208
|
+
readonly cd: ChangeDetectorRef;
|
|
209
|
+
readonly destroyRef: DestroyRef;
|
|
210
|
+
protected readonly rdtRouter: RdtRouterService;
|
|
211
|
+
protected readonly elRef: ElementRef<HTMLElement>;
|
|
212
|
+
protected readonly document: Document;
|
|
213
|
+
protected readonly renderer: Renderer2;
|
|
214
|
+
protected readonly router: Router;
|
|
215
|
+
protected readonly shortcutService: RdtShortcutService;
|
|
216
|
+
protected readonly injector: EnvironmentInjector;
|
|
217
|
+
protected children: QueryList<RdtMenuOverlayComponent>;
|
|
218
|
+
protected focusableElements: QueryList<ElementRef<HTMLElement>>;
|
|
219
|
+
abstract get buttonContainer(): HTMLElement | undefined;
|
|
220
|
+
readonly expandedChild: _angular_core.WritableSignal<RdtMenuExpandedChild | null>;
|
|
221
|
+
protected autofocusSubmenuItem: 'first' | 'last' | null;
|
|
222
|
+
protected readonly filteredItems: Signal<ParsedRdtMenuItem[]>;
|
|
223
|
+
get clientSize(): Size;
|
|
224
|
+
private _clientSize;
|
|
225
|
+
get bodyMargin(): {
|
|
226
|
+
top: number;
|
|
227
|
+
bottom: number;
|
|
228
|
+
left: number;
|
|
229
|
+
right: number;
|
|
230
|
+
};
|
|
231
|
+
private _bodyMargin;
|
|
232
|
+
get buttonContainerRect(): DOMRect | undefined;
|
|
233
|
+
private _buttonContainerRect?;
|
|
234
|
+
protected abstract readonly allParsedItems: Signal<ParsedRdtMenuItem[]>;
|
|
235
|
+
protected readonly childRoutesMap: Signal<Map<ParsedRdtMenuItem, string[][]>>;
|
|
236
|
+
readonly keyActions: {
|
|
237
|
+
[KB_CODE.ARROW.LEFT]: (index: number) => void;
|
|
238
|
+
[KB_CODE.ARROW.RIGHT]: (index: number) => void;
|
|
239
|
+
[KB_CODE.ARROW.DOWN]: (index: number) => void;
|
|
240
|
+
[KB_CODE.ARROW.UP]: (index: number) => void;
|
|
241
|
+
[KB_CODE.HOME]: () => void;
|
|
242
|
+
[KB_CODE.END]: () => void;
|
|
243
|
+
[KB_CODE.ENTER]: (index: number) => void;
|
|
244
|
+
[KB_CODE.SPACEBAR]: (index: number) => void;
|
|
245
|
+
};
|
|
246
|
+
private readonly navigationEnd;
|
|
247
|
+
getChildRoutes(item: ParsedRdtMenuItem): string[][];
|
|
248
|
+
constructor();
|
|
249
|
+
private readonly recalcChildrenEffect;
|
|
250
|
+
recalculateChildren(): void;
|
|
251
|
+
closeSubmenus(focusExpanded?: boolean): void;
|
|
252
|
+
protected onItemClick(item: ParsedRdtMenuItem): void;
|
|
253
|
+
protected onItemPointerEnter(item: ParsedRdtMenuItem): void;
|
|
254
|
+
protected onKeyDown(itemIndex: number, event: KeyboardEvent): void;
|
|
255
|
+
protected invokeItemClick(item: ParsedRdtMenuItem): void;
|
|
256
|
+
protected filterRec(items: ParsedRdtMenuItem[], current: {
|
|
257
|
+
route: RdtRoute;
|
|
258
|
+
params: Record<string, any>;
|
|
259
|
+
}): ParsedRdtMenuItem[];
|
|
260
|
+
protected invokeItemClickByIndex(itemIndex: number): void;
|
|
261
|
+
protected openSubmenu(itemIndex: number, visibleFocus: 'first' | 'last', src: RdtMenuExpandSource): void;
|
|
262
|
+
protected focusItem(item: number | ParsedRdtMenuItem): void;
|
|
263
|
+
protected focusNextItem(itemIndex: number): void;
|
|
264
|
+
protected focusPrevItem(itemIndex: number): void;
|
|
265
|
+
protected blurAllFocusable(): void;
|
|
266
|
+
protected focusFocusable(itemIndex: number): void;
|
|
267
|
+
protected onPointerMove(event: PointerEvent): void;
|
|
268
|
+
protected checkActiveElement(event: FocusEvent): void;
|
|
269
|
+
protected onDocumentClick(event: PointerEvent): void;
|
|
270
|
+
protected measure(): void;
|
|
271
|
+
protected readMargin(): void;
|
|
272
|
+
protected measureClientSize(): void;
|
|
273
|
+
protected measureButtonContainer(): void;
|
|
274
|
+
protected listenWindowResize(): void;
|
|
275
|
+
protected listenShortcuts(): void;
|
|
276
|
+
protected getShortcutMap(itemsWithShortcuts: ParsedRdtMenuItemWithShortcut[]): Record<string, ParsedRdtMenuItem[]>;
|
|
277
|
+
protected onShortcut(shortcut: RdtShortcut, map: Record<string, ParsedRdtMenuItem[]>): void;
|
|
278
|
+
protected activateItemRecursively(path: ParsedRdtMenuItem[], src: RdtMenuExpandSource): void;
|
|
279
|
+
isPointerInsideHitbox(hitbox: DOMRect, event: PointerEvent): boolean;
|
|
280
|
+
getHitboxes(): {
|
|
281
|
+
rect: DOMRect;
|
|
282
|
+
fixed: boolean;
|
|
283
|
+
close: () => void;
|
|
284
|
+
}[];
|
|
285
|
+
getOpenMenuBoundingBoxes(): {
|
|
286
|
+
rect: DOMRect;
|
|
287
|
+
fixed: boolean;
|
|
288
|
+
close: () => void;
|
|
289
|
+
}[];
|
|
290
|
+
private getOpenMenuBoundingBoxesRec;
|
|
291
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdtMenuBaseComponent, never>;
|
|
292
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<RdtMenuBaseComponent, never, never, { "preferredVerticalDir": { "alias": "preferredVerticalDir"; "required": false; "isSignal": true; }; "preferredHorizontalDir": { "alias": "preferredHorizontalDir"; "required": false; "isSignal": true; }; "shortcutMode": { "alias": "shortcutMode"; "required": false; "isSignal": true; }; "closeOnFocusOut": { "alias": "closeOnFocusOut"; "required": false; "isSignal": true; }; "openOnHover": { "alias": "openOnHover"; "required": false; "isSignal": true; }; "hitboxMargin": { "alias": "hitboxMargin"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
declare class RdtMenuBarComponent extends RdtMenuBaseComponent {
|
|
296
|
+
buttonContainerRef?: ElementRef<HTMLElement>;
|
|
297
|
+
get buttonContainer(): HTMLElement | undefined;
|
|
298
|
+
readonly items: _angular_core.InputSignal<RdtMenuItem[]>;
|
|
299
|
+
readonly allParsedItems: _angular_core.Signal<ParsedRdtMenuItem[]>;
|
|
300
|
+
readonly headerHeight: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
301
|
+
readonly footerHeight: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
302
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdtMenuBarComponent, never>;
|
|
303
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RdtMenuBarComponent, "rdt-menu-bar", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "headerHeight": { "alias": "headerHeight"; "required": false; "isSignal": true; }; "footerHeight": { "alias": "footerHeight"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
declare class RdtMenuComponent extends RdtMenuBaseComponent {
|
|
307
|
+
protected readonly buttonClass: _angular_core.Type<RdtButtonBaseInt<string>>;
|
|
308
|
+
readonly trigger: _angular_core.InputSignal<RdtButtonBaseInt<string>>;
|
|
309
|
+
readonly dataTestId: _angular_core.InputSignal<string>;
|
|
310
|
+
readonly items: _angular_core.InputSignal<RdtMenuItem[]>;
|
|
311
|
+
protected readonly allParsedItems: _angular_core.Signal<ParsedRdtMenuItem[]>;
|
|
312
|
+
protected readonly focusableElements: QueryList<ElementRef<HTMLElement>>;
|
|
313
|
+
get buttonContainer(): HTMLElement | undefined;
|
|
314
|
+
get parsedItem(): ParsedRdtMenuItem;
|
|
315
|
+
get anchorElement(): _angular_core.Signal<HTMLElement | null>;
|
|
316
|
+
constructor();
|
|
317
|
+
private readonly triggerTabIndexEffect;
|
|
318
|
+
private readonly triggerDataTestIdEffect;
|
|
319
|
+
private readonly triggerAriaEffect;
|
|
320
|
+
private subscribeClicks;
|
|
321
|
+
toggle(): void;
|
|
322
|
+
private listenPointerOver;
|
|
323
|
+
private updateFocusableElements;
|
|
324
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdtMenuComponent, never>;
|
|
325
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<RdtMenuComponent, "rdt-menu", never, { "trigger": { "alias": "trigger"; "required": true; "isSignal": true; }; "dataTestId": { "alias": "dataTestId"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; }, {}, never, never, false, never>;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
declare class RdtMenuModule {
|
|
329
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<RdtMenuModule, never>;
|
|
330
|
+
static ɵmod: _angular_core.ɵɵNgModuleDeclaration<RdtMenuModule, [typeof RdtMenuOverlayComponent, typeof RdtMenuComponent, typeof RdtMenuBarComponent], [typeof i4.CommonModule, typeof i5.RouterModule, typeof i6.RdtAnyRouteActiveDirective, typeof i7.RdtKeyListenerDirective, typeof i8.RdtButtonOutletDirective], [typeof RdtMenuComponent, typeof RdtMenuBarComponent]>;
|
|
331
|
+
static ɵinj: _angular_core.ɵɵInjectorDeclaration<RdtMenuModule>;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
export { DEFAULT_MENU_HORIZONTAL_DIR, DEFAULT_MENU_VERTICAL_DIR, RDT_MENU_HORIZONTAL_DIR_PROVIDER, RDT_MENU_MARGIN_BOTTOM_PROPERTY_NAME, RDT_MENU_MARGIN_LEFT_PROPERTY_NAME, RDT_MENU_MARGIN_RIGHT_PROPERTY_NAME, RDT_MENU_MARGIN_TOP_PROPERTY_NAME, RDT_MENU_VERTICAL_DIR_PROVIDER, RdtMenuBarComponent, RdtMenuComponent, RdtMenuModule, RdtMenuShortcutMode };
|
|
335
|
+
export type { RdtMenuItem, RdtMenuItemWithChildren, RdtMenuItemWithLink, RdtMenuItemWithRoute };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ngrdt/menu",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "v0.0.18",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": ">=18.2.0",
|
|
6
6
|
"@angular/core": ">=18.2.0",
|
|
@@ -20,8 +20,6 @@
|
|
|
20
20
|
},
|
|
21
21
|
".": {
|
|
22
22
|
"types": "./index.d.ts",
|
|
23
|
-
"esm2022": "./esm2022/ngrdt-menu.mjs",
|
|
24
|
-
"esm": "./esm2022/ngrdt-menu.mjs",
|
|
25
23
|
"default": "./fesm2022/ngrdt-menu.mjs"
|
|
26
24
|
}
|
|
27
25
|
},
|
package/esm2022/index.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './lib/menu-bar/rdt-menu-bar.component';
|
|
2
|
-
export * from './lib/menu/rdt-menu.component';
|
|
3
|
-
export * from './lib/models';
|
|
4
|
-
export * from './lib/rdt-menu.module';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9AbmdyZHQvbWVudS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tZW51LWJhci9yZHQtbWVudS1iYXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lbnUvcmR0LW1lbnUuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9yZHQtbWVudS5tb2R1bGUnO1xuIl19
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, inject, Input, QueryList, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { RDT_BUTTON_BASE_PROVIDER } from '@ngrdt/button';
|
|
3
|
-
import { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';
|
|
4
|
-
import { parseMenuItems } from '../private-models';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
import * as i2 from "../menu-overlay/rdt-menu-overlay.component";
|
|
8
|
-
export class RdtMenuComponent extends RdtMenuBaseComponent {
|
|
9
|
-
buttonClass = inject(RDT_BUTTON_BASE_PROVIDER);
|
|
10
|
-
trigger;
|
|
11
|
-
dataTestId = '';
|
|
12
|
-
get items() {
|
|
13
|
-
return this._items;
|
|
14
|
-
}
|
|
15
|
-
set items(value) {
|
|
16
|
-
this._items = value;
|
|
17
|
-
const wrapper = {
|
|
18
|
-
label: '',
|
|
19
|
-
icon: '',
|
|
20
|
-
items: value,
|
|
21
|
-
};
|
|
22
|
-
this.allParsedItems = parseMenuItems([wrapper], this.injector);
|
|
23
|
-
this.filterItems();
|
|
24
|
-
}
|
|
25
|
-
_items;
|
|
26
|
-
focusableElements = new QueryList();
|
|
27
|
-
get buttonContainer() {
|
|
28
|
-
return this.anchorElement ?? undefined;
|
|
29
|
-
}
|
|
30
|
-
get parsedItem() {
|
|
31
|
-
return this.parsedItems[0];
|
|
32
|
-
}
|
|
33
|
-
get anchorElement() {
|
|
34
|
-
return this.trigger.anchorElement;
|
|
35
|
-
}
|
|
36
|
-
ngOnInit() {
|
|
37
|
-
super.ngOnInit();
|
|
38
|
-
this.trigger.tabIndex = 0;
|
|
39
|
-
this.trigger.dataTestId = this.dataTestId;
|
|
40
|
-
this.trigger.click$.subscribe(() => this.toggle());
|
|
41
|
-
this.listenPointerOver();
|
|
42
|
-
if (this.anchorElement) {
|
|
43
|
-
console.log('Anchor element:', this.anchorElement);
|
|
44
|
-
this.focusableElements.reset([{ nativeElement: this.anchorElement }]);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
ngDoCheck() {
|
|
48
|
-
if (this.trigger) {
|
|
49
|
-
this.trigger.aria = {
|
|
50
|
-
role: 'menuitem',
|
|
51
|
-
'aria-haspopup': 'true',
|
|
52
|
-
'aria-expanded': this.expandedChild?.item === this.parsedItem,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
toggle() {
|
|
57
|
-
this.onItemClick(this.parsedItem);
|
|
58
|
-
this.cd.markForCheck();
|
|
59
|
-
}
|
|
60
|
-
listenPointerOver() {
|
|
61
|
-
const target = this.anchorElement;
|
|
62
|
-
const listener = this.renderer.listen(target, 'pointerover', (event) => {
|
|
63
|
-
this.onItemPointerEnter(this.parsedItem);
|
|
64
|
-
this.cd.markForCheck();
|
|
65
|
-
});
|
|
66
|
-
this.destroyRef.onDestroy(() => listener());
|
|
67
|
-
}
|
|
68
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
69
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: RdtMenuComponent, selector: "rdt-menu", inputs: { trigger: "trigger", dataTestId: "dataTestId", items: "items" }, providers: [
|
|
70
|
-
{
|
|
71
|
-
provide: RdtMenuBaseComponent,
|
|
72
|
-
useExisting: RdtMenuComponent,
|
|
73
|
-
},
|
|
74
|
-
], usesInheritance: true, ngImport: i0, template: "<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"anchorElement!\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expandedChild?.item === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
75
|
-
}
|
|
76
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuComponent, decorators: [{
|
|
77
|
-
type: Component,
|
|
78
|
-
args: [{ selector: 'rdt-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
79
|
-
{
|
|
80
|
-
provide: RdtMenuBaseComponent,
|
|
81
|
-
useExisting: RdtMenuComponent,
|
|
82
|
-
},
|
|
83
|
-
], template: "<rdt-menu-overlay\r\n *ngIf=\"parsedItem\"\r\n [anchorElement]=\"anchorElement!\"\r\n [item]=\"$any(parsedItem)\"\r\n [expanded]=\"expandedChild?.item === parsedItem\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n/>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu{display:block;position:relative}\n"] }]
|
|
84
|
-
}], propDecorators: { trigger: [{
|
|
85
|
-
type: Input,
|
|
86
|
-
args: [{ required: true }]
|
|
87
|
-
}], dataTestId: [{
|
|
88
|
-
type: Input
|
|
89
|
-
}], items: [{
|
|
90
|
-
type: Input,
|
|
91
|
-
args: [{ required: true }]
|
|
92
|
-
}] } });
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vQG5ncmR0L21lbnUvc3JjL2xpYi9tZW51L3JkdC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS9yZHQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFHVCxNQUFNLEVBQ04sS0FBSyxFQUVMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHdCQUF3QixFQUFvQixNQUFNLGVBQWUsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUU1RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7Ozs7QUFlbkQsTUFBTSxPQUFPLGdCQUNYLFNBQVEsb0JBQW9CO0lBR1QsV0FBVyxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBR2xFLE9BQU8sQ0FBb0I7SUFHM0IsVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUVoQixJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLE1BQU0sT0FBTyxHQUFnQjtZQUMzQixLQUFLLEVBQUUsRUFBRTtZQUNULElBQUksRUFBRSxFQUFFO1lBQ1IsS0FBSyxFQUFFLEtBQUs7U0FDYixDQUFDO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDTyxNQUFNLENBQWlCO0lBRUgsaUJBQWlCLEdBQUcsSUFBSSxTQUFTLEVBRTFELENBQUM7SUFFSixJQUFhLGVBQWU7UUFDMUIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLFNBQVMsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO0lBQ3BDLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRztnQkFDbEIsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLGVBQWUsRUFBRSxNQUFNO2dCQUN2QixlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLEtBQUssSUFBSSxDQUFDLFVBQVU7YUFDOUQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7dUdBL0VVLGdCQUFnQjsyRkFBaEIsZ0JBQWdCLDZHQVBoQjtZQUNUO2dCQUNFLE9BQU8sRUFBRSxvQkFBb0I7Z0JBQzdCLFdBQVcsRUFBRSxnQkFBZ0I7YUFDOUI7U0FDRixpREMzQkgsc1dBVUE7OzJGRG1CYSxnQkFBZ0I7a0JBYjVCLFNBQVM7K0JBQ0UsVUFBVSxtQkFHSCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcsa0JBQWtCO3lCQUM5QjtxQkFDRjs4QkFTRCxPQUFPO3NCQUROLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUl6QixVQUFVO3NCQURULEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIERvQ2hlY2ssXHJcbiAgRWxlbWVudFJlZixcclxuICBpbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT25Jbml0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUkRUX0JVVFRPTl9CQVNFX1BST1ZJREVSLCBSZHRCdXR0b25CYXNlSW50IH0gZnJvbSAnQG5ncmR0L2J1dHRvbic7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZHQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3JkdC1tZW51LmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51Q29tcG9uZW50XHJcbiAgZXh0ZW5kcyBSZHRNZW51QmFzZUNvbXBvbmVudFxyXG4gIGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrXHJcbntcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnV0dG9uQ2xhc3MgPSBpbmplY3QoUkRUX0JVVFRPTl9CQVNFX1BST1ZJREVSKTtcclxuXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcclxuICB0cmlnZ2VyITogUmR0QnV0dG9uQmFzZUludDtcclxuXHJcbiAgQElucHV0KClcclxuICBkYXRhVGVzdElkID0gJyc7XHJcblxyXG4gIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbiAgZ2V0IGl0ZW1zKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBzZXQgaXRlbXModmFsdWU6IFJkdE1lbnVJdGVtW10pIHtcclxuICAgIHRoaXMuX2l0ZW1zID0gdmFsdWU7XHJcbiAgICBjb25zdCB3cmFwcGVyOiBSZHRNZW51SXRlbSA9IHtcclxuICAgICAgbGFiZWw6ICcnLFxyXG4gICAgICBpY29uOiAnJyxcclxuICAgICAgaXRlbXM6IHZhbHVlLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYWxsUGFyc2VkSXRlbXMgPSBwYXJzZU1lbnVJdGVtcyhbd3JhcHBlcl0sIHRoaXMuaW5qZWN0b3IpO1xyXG4gICAgdGhpcy5maWx0ZXJJdGVtcygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9pdGVtcyE6IFJkdE1lbnVJdGVtW107XHJcblxyXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZWFkb25seSBmb2N1c2FibGVFbGVtZW50cyA9IG5ldyBRdWVyeUxpc3Q8XHJcbiAgICBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxyXG4gID4oKTtcclxuXHJcbiAgb3ZlcnJpZGUgZ2V0IGJ1dHRvbkNvbnRhaW5lcigpOiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5hbmNob3JFbGVtZW50ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldCBwYXJzZWRJdGVtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyc2VkSXRlbXNbMF07XHJcbiAgfVxyXG5cclxuICBnZXQgYW5jaG9yRWxlbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyaWdnZXIuYW5jaG9yRWxlbWVudDtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKTtcclxuICAgIHRoaXMudHJpZ2dlci50YWJJbmRleCA9IDA7XHJcbiAgICB0aGlzLnRyaWdnZXIuZGF0YVRlc3RJZCA9IHRoaXMuZGF0YVRlc3RJZDtcclxuICAgIHRoaXMudHJpZ2dlci5jbGljayQuc3Vic2NyaWJlKCgpID0+IHRoaXMudG9nZ2xlKCkpO1xyXG4gICAgdGhpcy5saXN0ZW5Qb2ludGVyT3ZlcigpO1xyXG4gICAgaWYgKHRoaXMuYW5jaG9yRWxlbWVudCkge1xyXG4gICAgICBjb25zb2xlLmxvZygnQW5jaG9yIGVsZW1lbnQ6JywgdGhpcy5hbmNob3JFbGVtZW50KTtcclxuICAgICAgdGhpcy5mb2N1c2FibGVFbGVtZW50cy5yZXNldChbeyBuYXRpdmVFbGVtZW50OiB0aGlzLmFuY2hvckVsZW1lbnQgfV0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMudHJpZ2dlcikge1xyXG4gICAgICB0aGlzLnRyaWdnZXIuYXJpYSA9IHtcclxuICAgICAgICByb2xlOiAnbWVudWl0ZW0nLFxyXG4gICAgICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnLFxyXG4gICAgICAgICdhcmlhLWV4cGFuZGVkJzogdGhpcy5leHBhbmRlZENoaWxkPy5pdGVtID09PSB0aGlzLnBhcnNlZEl0ZW0sXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGUoKSB7XHJcbiAgICB0aGlzLm9uSXRlbUNsaWNrKHRoaXMucGFyc2VkSXRlbSk7XHJcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsaXN0ZW5Qb2ludGVyT3ZlcigpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuYW5jaG9yRWxlbWVudDtcclxuICAgIGNvbnN0IGxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4odGFyZ2V0LCAncG9pbnRlcm92ZXInLCAoZXZlbnQpID0+IHtcclxuICAgICAgdGhpcy5vbkl0ZW1Qb2ludGVyRW50ZXIodGhpcy5wYXJzZWRJdGVtKTtcclxuICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gbGlzdGVuZXIoKSk7XHJcbiAgfVxyXG59XHJcbiIsIjxyZHQtbWVudS1vdmVybGF5XHJcbiAgKm5nSWY9XCJwYXJzZWRJdGVtXCJcclxuICBbYW5jaG9yRWxlbWVudF09XCJhbmNob3JFbGVtZW50IVwiXHJcbiAgW2l0ZW1dPVwiJGFueShwYXJzZWRJdGVtKVwiXHJcbiAgW2V4cGFuZGVkXT1cImV4cGFuZGVkQ2hpbGQ/Lml0ZW0gPT09IHBhcnNlZEl0ZW1cIlxyXG4gIFthdXRvZm9jdXNJdGVtXT1cImF1dG9mb2N1c1N1Ym1lbnVJdGVtXCJcclxuICBbcHJlZmVycmVkSG9yaXpvbnRhbERpcl09XCJwcmVmZXJyZWRIb3Jpem9udGFsRGlyXCJcclxuICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXJcIlxyXG4gIFtsZXZlbF09XCIwXCJcclxuLz5cclxuIl19
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, ElementRef, HostBinding, Input, numberAttribute, ViewChild, ViewEncapsulation, } from '@angular/core';
|
|
2
|
-
import { RdtMenuBaseComponent } from '../menu-base/rdt-menu-base.component';
|
|
3
|
-
import { parseMenuItems } from '../private-models';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common";
|
|
6
|
-
import * as i2 from "@angular/router";
|
|
7
|
-
import * as i3 from "@ngrdt/router";
|
|
8
|
-
import * as i4 from "@ngrdt/shortcuts";
|
|
9
|
-
import * as i5 from "../menu-overlay/rdt-menu-overlay.component";
|
|
10
|
-
export class RdtMenuBarComponent extends RdtMenuBaseComponent {
|
|
11
|
-
buttonContainerRef;
|
|
12
|
-
get buttonContainer() {
|
|
13
|
-
return this.buttonContainerRef?.nativeElement;
|
|
14
|
-
}
|
|
15
|
-
get items() {
|
|
16
|
-
return this._items;
|
|
17
|
-
}
|
|
18
|
-
set items(value) {
|
|
19
|
-
this._items = value;
|
|
20
|
-
this.allParsedItems = parseMenuItems(value, this.injector);
|
|
21
|
-
this.filterItems();
|
|
22
|
-
}
|
|
23
|
-
_items;
|
|
24
|
-
headerHeight = 0;
|
|
25
|
-
footerHeight = 0;
|
|
26
|
-
roleAttr = 'menubar';
|
|
27
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
28
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: RdtMenuBarComponent, selector: "rdt-menu-bar", inputs: { items: "items", headerHeight: ["headerHeight", "headerHeight", numberAttribute], footerHeight: ["footerHeight", "footerHeight", numberAttribute] }, host: { properties: { "attr.role": "this.roleAttr" } }, providers: [
|
|
29
|
-
{
|
|
30
|
-
provide: RdtMenuBaseComponent,
|
|
31
|
-
useExisting: RdtMenuBarComponent,
|
|
32
|
-
},
|
|
33
|
-
], viewQueries: [{ propertyName: "buttonContainerRef", first: true, predicate: ["buttonContainer"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i3.RdtAnyRouteActiveDirective, selector: "[rdtAnyRouteActive]", inputs: ["rdtAnyRouteActive", "watchedRoutes", "anyRouteActiveOptions", "ariaCurrentWhenActive"] }, { kind: "directive", type: i4.RdtKeyListenerDirective, selector: "[rdtKeyListener]", outputs: ["rdtKeyListener"] }, { kind: "component", type: i5.RdtMenuOverlayComponent, selector: "rdt-menu-overlay", inputs: ["item", "level", "preferredHorizontalDir", "preferredVerticalDir", "expanded", "autofocusItem", "anchorElement"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
34
|
-
}
|
|
35
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: RdtMenuBarComponent, decorators: [{
|
|
36
|
-
type: Component,
|
|
37
|
-
args: [{ selector: 'rdt-menu-bar', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, providers: [
|
|
38
|
-
{
|
|
39
|
-
provide: RdtMenuBaseComponent,
|
|
40
|
-
useExisting: RdtMenuBarComponent,
|
|
41
|
-
},
|
|
42
|
-
], template: "<ul class=\"menu-bar-item-container\" role=\"presentation\" #buttonContainer>\r\n @for(item of parsedItems; track item; let i = $index) {\r\n <li\r\n class=\"menu-bar-item\"\r\n role=\"presentation\"\r\n rdtAnyRouteActive=\"menu-bar-item-route-active\"\r\n [watchedRoutes]=\"getChildRoutes(item)\"\r\n (rdtKeyListener)=\"onKeyDown(i, $event)\"\r\n #anchorEl\r\n >\r\n @if(!item.routerLink && !item.externalLink) {\r\n <button\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n (pointerenter)=\"onItemPointerEnter(item)\"\r\n [attr.aria-haspopup]=\"item.items ? 'menu' : null\"\r\n [attr.aria-expanded]=\"item === expandedChild?.item\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!-- TODO\r\n <rdt-icon\r\n *ngIf=\"item.items\"\r\n name=\"expand_more\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n -->\r\n @if(item.items) {\r\n <span class=\"menu-bar-item-icon rdt-menu-icon-down\"></span>\r\n }\r\n </div>\r\n </button>\r\n }\r\n\r\n <ng-template #linkBody let-item>\r\n {{ item.label }}\r\n\r\n <div class=\"menu-bar-item-right-content\">\r\n @if(item.shortcut) {\r\n <span class=\"menu-item-shortcut\">\r\n {{ item.shortcut.label }}\r\n </span>\r\n }\r\n <!--\r\n <rdt-icon\r\n *ngIf=\"item.icon\"\r\n [name]=\"item.icon\"\r\n class=\"menu-bar-item-icon\"\r\n inverted\r\n />\r\n --></div>\r\n </ng-template>\r\n\r\n @if(item.routerLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [routerLink]=\"item.routerLink\"\r\n [target]=\"item.target!\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if(item.externalLink) {\r\n <a\r\n #focusableItem\r\n class=\"menu-bar-item-content\"\r\n role=\"menuitem\"\r\n (click)=\"onItemClick(item)\"\r\n [href]=\"item.externalLink\"\r\n [target]=\"item.target\"\r\n [attr.tabindex]=\"0\"\r\n [attr.data-testid]=\"item.dataTestId\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"linkBody; context: { $implicit: item }\"\r\n />\r\n </a>\r\n } @if (item.items) {\r\n <rdt-menu-overlay\r\n [item]=\"$any(item)\"\r\n [expanded]=\"item === expandedChild?.item\"\r\n [autofocusItem]=\"autofocusSubmenuItem\"\r\n [preferredHorizontalDir]=\"preferredHorizontalDir\"\r\n [preferredVerticalDir]=\"preferredVerticalDir\"\r\n [level]=\"0\"\r\n [anchorElement]=\"anchorEl\"\r\n />\r\n }\r\n </li>\r\n }\r\n</ul>\r\n", styles: ["a.menu-bar-item-content,a.menu-item-content,button.menu-bar-item-content,button.menu-item-content{white-space:nowrap;appearance:none;text-decoration:none;box-sizing:border-box}.menu-item-right-content,.menu-bar-item-right-content{margin-left:auto;display:flex;align-items:center}.menu-item-shortcut,.menu-bar-item-shortcut{margin-left:2rem}.menu-item-icon,.menu-bar-item-icon{margin-left:.5rem;font-size:1.2rem}.dp3-menu-base ul{margin-bottom:0}.rdt-menu-root{margin-left:0}.rdt-menu-root.rdt-overlay-down{margin-top:var(--rdt-menu-overlay-margin-y)}.rdt-menu-root.rdt-overlay-up{margin-top:calc(-1 * var(--rdt-menu-overlay-margin-y))}.rdt-menu-sub.rdt-overlay-left{margin-left:calc(-1 * var(--rdt-menu-overlay-margin-x))}.rdt-menu-sub.rdt-overlay-right{margin-left:var(--rdt-menu-overlay-margin-x)}rdt-menu-bar{-webkit-user-select:none;user-select:none;pointer-events:none;padding:var(--rdt-menu-bar-padding)}.menu-bar-item-container{display:flex;list-style-type:none;margin-bottom:0;margin-top:0;margin-block-start:0;margin-block-end:0;padding-left:0}.menu-bar-item{pointer-events:all;margin:var(--rdt-menu-bar-item-margin);position:relative;display:flex;align-items:center;justify-content:center}.menu-bar-item.menu-bar-item-route-active .menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-route-active-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-route-active-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-route-active-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-route-active-outline)}.menu-bar-item [aria-expanded=true].menu-bar-item-content{--rdt-menu-bar-item-background: var( --rdt-menu-bar-item-expanded-background );--rdt-menu-bar-item-text-color: var( --rdt-menu-bar-item-expanded-text-color );--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-expanded-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-expanded-outline)}.menu-bar-item-content{cursor:pointer;display:flex;align-items:center;overflow:hidden;padding:var(--rdt-menu-bar-item-padding);border-radius:var(--rdt-menu-bar-item-border-radius);border:var(--rdt-menu-bar-item-border);background-color:var(--rdt-menu-bar-item-background);color:var(--rdt-menu-bar-item-text-color);outline:var(--rdt-menu-bar-item-outline);font-size:inherit}.menu-bar-item-content:hover{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-hover-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-hover-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-hover-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-hover-outline)}.menu-bar-item .menu-bar-item-content.focus-visible:focus,.menu-bar-item .menu-bar-item-content:focus-visible{--rdt-menu-bar-item-background: var(--rdt-menu-bar-item-focus-background);--rdt-menu-bar-item-text-color: var(--rdt-menu-bar-item-focus-text-color);--rdt-menu-bar-item-border: var(--rdt-menu-bar-item-focus-border);--rdt-menu-bar-item-outline: var(--rdt-menu-bar-item-focus-outline)}.menu-bar-item-icon.rdt-menu-icon-down{width:0;height:0;border-left:var(--rdt-menu-default-icon-size) solid transparent;border-right:var(--rdt-menu-default-icon-size) solid transparent;border-top:var(--rdt-menu-default-icon-size) solid var(--rdt-menu-bar-item-text-color)}\n"] }]
|
|
43
|
-
}], propDecorators: { buttonContainerRef: [{
|
|
44
|
-
type: ViewChild,
|
|
45
|
-
args: ['buttonContainer', { static: true }]
|
|
46
|
-
}], items: [{
|
|
47
|
-
type: Input
|
|
48
|
-
}], headerHeight: [{
|
|
49
|
-
type: Input,
|
|
50
|
-
args: [{ transform: numberAttribute }]
|
|
51
|
-
}], footerHeight: [{
|
|
52
|
-
type: Input,
|
|
53
|
-
args: [{ transform: numberAttribute }]
|
|
54
|
-
}], roleAttr: [{
|
|
55
|
-
type: HostBinding,
|
|
56
|
-
args: ['attr.role']
|
|
57
|
-
}] } });
|
|
58
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmR0LW1lbnUtYmFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL0BuZ3JkdC9tZW51L3NyYy9saWIvbWVudS1iYXIvcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUNMLGVBQWUsRUFDZixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7OztBQWVuRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsb0JBQW9CO0lBRTNELGtCQUFrQixDQUEyQjtJQUU3QyxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsYUFBYSxDQUFDO0lBQ2hELENBQUM7SUFFRCxJQUNJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQW9CO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFDTyxNQUFNLENBQWlCO0lBRy9CLFlBQVksR0FBRyxDQUFDLENBQUM7SUFHakIsWUFBWSxHQUFHLENBQUMsQ0FBQztJQUdULFFBQVEsR0FBRyxTQUFTLENBQUM7dUdBMUJsQixtQkFBbUI7MkZBQW5CLG1CQUFtQixxR0FtQlYsZUFBZSxrREFHZixlQUFlLHdFQTdCeEI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsb0JBQW9CO2dCQUM3QixXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1NBQ0Ysc0xDekJILHM0R0FrSEE7OzJGRHZGYSxtQkFBbUI7a0JBYi9CLFNBQVM7K0JBQ0UsY0FBYyxtQkFHUCx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxvQkFBb0I7NEJBQzdCLFdBQVcscUJBQXFCO3lCQUNqQztxQkFDRjs4QkFJRCxrQkFBa0I7c0JBRGpCLFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVExQyxLQUFLO3NCQURSLEtBQUs7Z0JBWU4sWUFBWTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJckMsWUFBWTtzQkFEWCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFJN0IsUUFBUTtzQkFEZixXQUFXO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEhvc3RCaW5kaW5nLFxyXG4gIElucHV0LFxyXG4gIG51bWJlckF0dHJpYnV0ZSxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJkdE1lbnVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vbWVudS1iYXNlL3JkdC1tZW51LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUmR0TWVudUl0ZW0gfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBwYXJzZU1lbnVJdGVtcyB9IGZyb20gJy4uL3ByaXZhdGUtbW9kZWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncmR0LW1lbnUtYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vcmR0LW1lbnUtYmFyLmNvbXBvbmVudC5zY3NzJyxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBSZHRNZW51QmFzZUNvbXBvbmVudCxcclxuICAgICAgdXNlRXhpc3Rpbmc6IFJkdE1lbnVCYXJDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZHRNZW51QmFyQ29tcG9uZW50IGV4dGVuZHMgUmR0TWVudUJhc2VDb21wb25lbnQge1xyXG4gIEBWaWV3Q2hpbGQoJ2J1dHRvbkNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pXHJcbiAgYnV0dG9uQ29udGFpbmVyUmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIGdldCBidXR0b25Db250YWluZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5idXR0b25Db250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpdGVtcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtcztcclxuICB9XHJcbiAgc2V0IGl0ZW1zKHZhbHVlOiBSZHRNZW51SXRlbVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtcyA9IHZhbHVlO1xyXG4gICAgdGhpcy5hbGxQYXJzZWRJdGVtcyA9IHBhcnNlTWVudUl0ZW1zKHZhbHVlLCB0aGlzLmluamVjdG9yKTtcclxuICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaXRlbXMhOiBSZHRNZW51SXRlbVtdO1xyXG5cclxuICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxyXG4gIGhlYWRlckhlaWdodCA9IDA7XHJcblxyXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXHJcbiAgZm9vdGVySGVpZ2h0ID0gMDtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvbGUnKVxyXG4gIHByaXZhdGUgcm9sZUF0dHIgPSAnbWVudWJhcic7XHJcbn1cclxuIiwiPHVsIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250YWluZXJcIiByb2xlPVwicHJlc2VudGF0aW9uXCIgI2J1dHRvbkNvbnRhaW5lcj5cclxuICBAZm9yKGl0ZW0gb2YgcGFyc2VkSXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XHJcbiAgPGxpXHJcbiAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW1cIlxyXG4gICAgcm9sZT1cInByZXNlbnRhdGlvblwiXHJcbiAgICByZHRBbnlSb3V0ZUFjdGl2ZT1cIm1lbnUtYmFyLWl0ZW0tcm91dGUtYWN0aXZlXCJcclxuICAgIFt3YXRjaGVkUm91dGVzXT1cImdldENoaWxkUm91dGVzKGl0ZW0pXCJcclxuICAgIChyZHRLZXlMaXN0ZW5lcik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXHJcbiAgICAjYW5jaG9yRWxcclxuICA+XHJcbiAgICBAaWYoIWl0ZW0ucm91dGVyTGluayAmJiAhaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgIDxidXR0b25cclxuICAgICAgI2ZvY3VzYWJsZUl0ZW1cclxuICAgICAgY2xhc3M9XCJtZW51LWJhci1pdGVtLWNvbnRlbnRcIlxyXG4gICAgICByb2xlPVwibWVudWl0ZW1cIlxyXG4gICAgICAoY2xpY2spPVwib25JdGVtQ2xpY2soaXRlbSlcIlxyXG4gICAgICAocG9pbnRlcmVudGVyKT1cIm9uSXRlbVBvaW50ZXJFbnRlcihpdGVtKVwiXHJcbiAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5pdGVtcyA/ICdtZW51JyA6IG51bGxcIlxyXG4gICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQ/Lml0ZW1cIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAge3sgaXRlbS5sYWJlbCB9fVxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0tcmlnaHQtY29udGVudFwiPlxyXG4gICAgICAgIEBpZihpdGVtLnNob3J0Y3V0KSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWl0ZW0tc2hvcnRjdXRcIj5cclxuICAgICAgICAgIHt7IGl0ZW0uc2hvcnRjdXQubGFiZWwgfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDwhLS0gVE9ET1xyXG4gICAgICAgICAgPHJkdC1pY29uXHJcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbS5pdGVtc1wiXHJcbiAgICAgICAgICAgIG5hbWU9XCJleHBhbmRfbW9yZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgICAgaW52ZXJ0ZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cmR0LWljb25cclxuICAgICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBbbmFtZV09XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgICBjbGFzcz1cIm1lbnUtYmFyLWl0ZW0taWNvblwiXHJcbiAgICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIC0tPlxyXG4gICAgICAgIEBpZihpdGVtLml0ZW1zKSB7XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWJhci1pdGVtLWljb24gcmR0LW1lbnUtaWNvbi1kb3duXCI+PC9zcGFuPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIH1cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgI2xpbmtCb2R5IGxldC1pdGVtPlxyXG4gICAgICB7eyBpdGVtLmxhYmVsIH19XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwibWVudS1iYXItaXRlbS1yaWdodC1jb250ZW50XCI+XHJcbiAgICAgICAgQGlmKGl0ZW0uc2hvcnRjdXQpIHtcclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaXRlbS1zaG9ydGN1dFwiPlxyXG4gICAgICAgICAge3sgaXRlbS5zaG9ydGN1dC5sYWJlbCB9fVxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPCEtLVxyXG4gICAgICAgIDxyZHQtaWNvblxyXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLmljb25cIlxyXG4gICAgICAgICAgW25hbWVdPVwiaXRlbS5pY29uXCJcclxuICAgICAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1pY29uXCJcclxuICAgICAgICAgIGludmVydGVkXHJcbiAgICAgICAgLz5cclxuICAgICAgLS0+PC9kaXY+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIEBpZihpdGVtLnJvdXRlckxpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS5yb3V0ZXJMaW5rXCJcclxuICAgICAgW3RhcmdldF09XCJpdGVtLnRhcmdldCFcIlxyXG4gICAgICBbYXR0ci50YWJpbmRleF09XCIwXCJcclxuICAgICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiaXRlbS5kYXRhVGVzdElkXCJcclxuICAgID5cclxuICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0JvZHk7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtIH1cIlxyXG4gICAgICAvPlxyXG4gICAgPC9hPlxyXG4gICAgfSBAaWYoaXRlbS5leHRlcm5hbExpbmspIHtcclxuICAgIDxhXHJcbiAgICAgICNmb2N1c2FibGVJdGVtXHJcbiAgICAgIGNsYXNzPVwibWVudS1iYXItaXRlbS1jb250ZW50XCJcclxuICAgICAgcm9sZT1cIm1lbnVpdGVtXCJcclxuICAgICAgKGNsaWNrKT1cIm9uSXRlbUNsaWNrKGl0ZW0pXCJcclxuICAgICAgW2hyZWZdPVwiaXRlbS5leHRlcm5hbExpbmtcIlxyXG4gICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcclxuICAgICAgW2F0dHIudGFiaW5kZXhdPVwiMFwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cIml0ZW0uZGF0YVRlc3RJZFwiXHJcbiAgICA+XHJcbiAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtCb2R5OyBjb250ZXh0OiB7ICRpbXBsaWNpdDogaXRlbSB9XCJcclxuICAgICAgLz5cclxuICAgIDwvYT5cclxuICAgIH0gQGlmIChpdGVtLml0ZW1zKSB7XHJcbiAgICA8cmR0LW1lbnUtb3ZlcmxheVxyXG4gICAgICBbaXRlbV09XCIkYW55KGl0ZW0pXCJcclxuICAgICAgW2V4cGFuZGVkXT1cIml0ZW0gPT09IGV4cGFuZGVkQ2hpbGQ/Lml0ZW1cIlxyXG4gICAgICBbYXV0b2ZvY3VzSXRlbV09XCJhdXRvZm9jdXNTdWJtZW51SXRlbVwiXHJcbiAgICAgIFtwcmVmZXJyZWRIb3Jpem9udGFsRGlyXT1cInByZWZlcnJlZEhvcml6b250YWxEaXJcIlxyXG4gICAgICBbcHJlZmVycmVkVmVydGljYWxEaXJdPVwicHJlZmVycmVkVmVydGljYWxEaXJcIlxyXG4gICAgICBbbGV2ZWxdPVwiMFwiXHJcbiAgICAgIFthbmNob3JFbGVtZW50XT1cImFuY2hvckVsXCJcclxuICAgIC8+XHJcbiAgICB9XHJcbiAgPC9saT5cclxuICB9XHJcbjwvdWw+XHJcbiJdfQ==
|