@acorex/components 18.10.16 → 18.11.1
Sign up to get free protection for your applications and to get access to all the features.
- package/action-sheet/lib/action-sheet.class.d.ts +8 -0
- package/common/index.d.ts +1 -0
- package/common/lib/types/base/component.types.d.ts +8 -0
- package/common/lib/types/base/events.types.d.ts +21 -0
- package/common/lib/types/base/index.d.ts +2 -0
- package/esm2022/action-sheet/lib/action-sheet.class.mjs +1 -1
- package/esm2022/action-sheet/lib/action-sheet.component.mjs +3 -3
- package/esm2022/common/index.mjs +2 -1
- package/esm2022/common/lib/classes/events.class.mjs +1 -1
- package/esm2022/common/lib/components/base-component.class.mjs +1 -1
- package/esm2022/common/lib/types/base/component.types.mjs +27 -0
- package/esm2022/common/lib/types/base/events.types.mjs +19 -0
- package/esm2022/common/lib/types/base/index.mjs +3 -0
- package/esm2022/menu/index.mjs +4 -4
- package/esm2022/menu/lib/context-menu.component.mjs +232 -0
- package/esm2022/menu/lib/menu-item.component.mjs +310 -0
- package/esm2022/menu/lib/menu.component.mjs +27 -33
- package/esm2022/menu/lib/menu.module.mjs +7 -7
- package/esm2022/menu/lib/menu.service.mjs +10 -8
- package/esm2022/menu/lib/menu.types.mjs +14 -0
- package/fesm2022/acorex-components-action-sheet.mjs +2 -2
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-common.mjs +47 -3
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +536 -161
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/menu/index.d.ts +3 -3
- package/menu/lib/context-menu.component.d.ts +52 -0
- package/menu/lib/menu-item.component.d.ts +60 -0
- package/menu/lib/menu.component.d.ts +10 -11
- package/menu/lib/menu.module.d.ts +9 -9
- package/menu/lib/menu.service.d.ts +14 -3
- package/menu/lib/menu.types.d.ts +38 -0
- package/package.json +43 -43
- package/esm2022/menu/lib/class/popover.class.mjs +0 -2
- package/esm2022/menu/lib/class/root-menu.class.mjs +0 -8
- package/esm2022/menu/lib/menu-item/menu-item.component.mjs +0 -160
- package/menu/lib/class/popover.class.d.ts +0 -2
- package/menu/lib/class/root-menu.class.d.ts +0 -7
- package/menu/lib/menu-item/menu-item.component.d.ts +0 -81
@@ -0,0 +1,310 @@
|
|
1
|
+
import { NXComponent } from '@acorex/components/common';
|
2
|
+
import { afterNextRender, ChangeDetectionStrategy, Component, computed, HostBinding, HostListener, inject, input, output, Renderer2, signal, ViewEncapsulation, } from '@angular/core';
|
3
|
+
import { AXMenuService } from './menu.service';
|
4
|
+
import { AXMenuItemComponentBase, AXRootMenu } from './menu.types';
|
5
|
+
import { AXHtmlUtil, AXUnsubscriber } from '@acorex/core/utils';
|
6
|
+
import * as i0 from "@angular/core";
|
7
|
+
/**
|
8
|
+
* Represents a menu item component used within an `ax-menu`.
|
9
|
+
* @category Components
|
10
|
+
*/
|
11
|
+
export class AXMenuItemComponent extends NXComponent {
|
12
|
+
constructor() {
|
13
|
+
super();
|
14
|
+
this.isOpen = signal(false);
|
15
|
+
this.hasSubItems = signal(false);
|
16
|
+
this.isFirstLevel = signal(false);
|
17
|
+
this.root = inject(AXRootMenu);
|
18
|
+
this.service = inject(AXMenuService);
|
19
|
+
this.scrollableParents = [];
|
20
|
+
this.unsuscriber = inject(AXUnsubscriber);
|
21
|
+
this.renderer = inject(Renderer2);
|
22
|
+
this.arrowIcon = computed(() => {
|
23
|
+
const isRtl = AXHtmlUtil.isRtl(this.nativeElement);
|
24
|
+
return this.root.orientation() == 'horizontal' && this.isFirstLevel() ?
|
25
|
+
"ax-icon-chevron-down" :
|
26
|
+
isRtl ? "ax-icon-chevron-left" : "ax-icon-chevron-right";
|
27
|
+
});
|
28
|
+
this.onClick = output();
|
29
|
+
this.name = input();
|
30
|
+
this.data = input();
|
31
|
+
this.disabled = input();
|
32
|
+
this.color = input();
|
33
|
+
//
|
34
|
+
afterNextRender(() => {
|
35
|
+
this.detectSubItems();
|
36
|
+
this.observeMutations();
|
37
|
+
this.bindScrollEvents();
|
38
|
+
});
|
39
|
+
//
|
40
|
+
this.service.closeAll$
|
41
|
+
.pipe(this.unsuscriber.takeUntilDestroy)
|
42
|
+
.subscribe(() => this.close());
|
43
|
+
this.service.open$
|
44
|
+
.pipe(this.unsuscriber.takeUntilDestroy)
|
45
|
+
.subscribe((item) => {
|
46
|
+
if (this === item) {
|
47
|
+
this.isOpen.set(true);
|
48
|
+
this.calculatePosition();
|
49
|
+
}
|
50
|
+
});
|
51
|
+
//
|
52
|
+
this.service.close$
|
53
|
+
.pipe(this.unsuscriber.takeUntilDestroy)
|
54
|
+
.subscribe(item => {
|
55
|
+
if (this == item) {
|
56
|
+
this.isOpen.set(false);
|
57
|
+
}
|
58
|
+
});
|
59
|
+
//
|
60
|
+
this.service.closeExcept$
|
61
|
+
.pipe(this.unsuscriber.takeUntilDestroy)
|
62
|
+
.subscribe((item) => {
|
63
|
+
this.closeExcept(item);
|
64
|
+
});
|
65
|
+
}
|
66
|
+
closeExcept(item) {
|
67
|
+
const list = [item];
|
68
|
+
//
|
69
|
+
let parent = item.parent;
|
70
|
+
while (parent != null) {
|
71
|
+
list.push(parent);
|
72
|
+
parent = parent.parent;
|
73
|
+
}
|
74
|
+
//
|
75
|
+
if (!list.includes(this)) {
|
76
|
+
this.close();
|
77
|
+
}
|
78
|
+
}
|
79
|
+
observeMutations() {
|
80
|
+
this.mutationObserver = new MutationObserver(() => {
|
81
|
+
this.detectSubItems();
|
82
|
+
});
|
83
|
+
// Start observing changes in child elements
|
84
|
+
this.mutationObserver.observe(this.nativeElement, {
|
85
|
+
childList: true,
|
86
|
+
subtree: true,
|
87
|
+
});
|
88
|
+
}
|
89
|
+
getText() {
|
90
|
+
return this.nativeElement.querySelector('ax-text')?.innerText;
|
91
|
+
}
|
92
|
+
/**
|
93
|
+
* Manually detect all `ax-menu-item` elements and check if this menu item has sub-items.
|
94
|
+
*/
|
95
|
+
detectSubItems() {
|
96
|
+
//
|
97
|
+
const parentEl = this.nativeElement.parentElement?.parentElement;
|
98
|
+
this.parent = parentEl?.tagName == "AX-MENU-ITEM" ? parentEl?.["__axContext__"] : null;
|
99
|
+
//
|
100
|
+
const tag = this.nativeElement.parentElement?.tagName;
|
101
|
+
this.isFirstLevel.set(tag == "AX-MENU" || tag == "AX-CONTEXT-MENU");
|
102
|
+
const subItems = this.nativeElement.querySelectorAll('ax-menu-item');
|
103
|
+
if (subItems.length > 0) {
|
104
|
+
this.hasSubItems.set(true);
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
this.hasSubItems.set(false);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
open() {
|
111
|
+
this.service.closeExcept$.next(this);
|
112
|
+
if (!this.disabled() && this.hasSubItems()) {
|
113
|
+
this.service.open$.next(this);
|
114
|
+
}
|
115
|
+
}
|
116
|
+
close() {
|
117
|
+
this.service.close$.next(this);
|
118
|
+
}
|
119
|
+
/**
|
120
|
+
* Calculate the position of the submenu to avoid it going out of the viewport.
|
121
|
+
*/
|
122
|
+
calculatePosition() {
|
123
|
+
const submenu = this.nativeElement.querySelector('.ax-menu-items');
|
124
|
+
if (!submenu)
|
125
|
+
return;
|
126
|
+
const submenuRect = submenu.getBoundingClientRect();
|
127
|
+
const itemRect = this.nativeElement.getBoundingClientRect();
|
128
|
+
const windowWidth = window.innerWidth;
|
129
|
+
const windowHeight = window.innerHeight;
|
130
|
+
const isRtl = AXHtmlUtil.isRtl(this.nativeElement);
|
131
|
+
let top = null;
|
132
|
+
let left = null;
|
133
|
+
// For first-level menu items
|
134
|
+
if (this.isFirstLevel() && this.root.orientation() === 'horizontal') {
|
135
|
+
top = itemRect.bottom + submenuRect.height > windowHeight
|
136
|
+
? itemRect.top - submenuRect.height // Open upwards
|
137
|
+
: itemRect.bottom; // Open downwards
|
138
|
+
if (isRtl) {
|
139
|
+
// RTL: Align to the right of the parent item
|
140
|
+
left = itemRect.right - submenuRect.width < 0
|
141
|
+
? itemRect.left // Align to the left if not enough space on the right
|
142
|
+
: itemRect.right - submenuRect.width; // Open to the left in RTL
|
143
|
+
}
|
144
|
+
else {
|
145
|
+
// LTR: Align to the left of the parent item
|
146
|
+
left = itemRect.left + submenuRect.width > windowWidth
|
147
|
+
? itemRect.right - submenuRect.width // Align to the right edge in LTR
|
148
|
+
: itemRect.left; // Open to the left
|
149
|
+
}
|
150
|
+
}
|
151
|
+
else {
|
152
|
+
// For nested submenus
|
153
|
+
if (isRtl) {
|
154
|
+
// RTL: Nested submenu opens to the left
|
155
|
+
left = itemRect.left - submenuRect.width < 0
|
156
|
+
? itemRect.right // Align to the right if not enough space on the left
|
157
|
+
: itemRect.left - submenuRect.width; // Open to the left in RTL
|
158
|
+
}
|
159
|
+
else {
|
160
|
+
// LTR: Nested submenu opens to the right
|
161
|
+
left = itemRect.right + submenuRect.width > windowWidth
|
162
|
+
? itemRect.left - submenuRect.width // Open to the left if not enough space
|
163
|
+
: itemRect.right; // Open to the right in LTR
|
164
|
+
}
|
165
|
+
// Adjust top position (align vertically with parent)
|
166
|
+
top = itemRect.top + submenuRect.height > windowHeight
|
167
|
+
? itemRect.top - (itemRect.bottom + submenuRect.height - windowHeight) // Adjust upwards
|
168
|
+
: itemRect.top; // Align with the parent item
|
169
|
+
}
|
170
|
+
// Apply calculated styles for RTL/LTR
|
171
|
+
this.renderer.setStyle(submenu, 'left', `${left}px`);
|
172
|
+
this.renderer.setStyle(submenu, 'top', `${top}px`);
|
173
|
+
this.renderer.setStyle(submenu, 'position', 'fixed'); // Fixed position relative to the viewport
|
174
|
+
}
|
175
|
+
handleClick(e) {
|
176
|
+
e.stopPropagation();
|
177
|
+
if (this.disabled())
|
178
|
+
return;
|
179
|
+
//
|
180
|
+
const event = {
|
181
|
+
sender: this,
|
182
|
+
nativeEvent: e,
|
183
|
+
canceled: false,
|
184
|
+
item: {
|
185
|
+
name: this.name(),
|
186
|
+
text: this.getText(),
|
187
|
+
data: this.data()
|
188
|
+
}
|
189
|
+
};
|
190
|
+
//
|
191
|
+
this.onClick.emit(event);
|
192
|
+
this.root.onItemClick.emit({ ...event, ...{ sender: this.root } });
|
193
|
+
//
|
194
|
+
if (this.hasSubItems() && !event.canceled) {
|
195
|
+
this.open();
|
196
|
+
}
|
197
|
+
else if (!event.canceled) {
|
198
|
+
this.service.closeAll$.next();
|
199
|
+
this.service.closeAllContextMenu$.next({ sender: this.root });
|
200
|
+
}
|
201
|
+
}
|
202
|
+
handleMouseEnter(event) {
|
203
|
+
event.stopPropagation();
|
204
|
+
// Cancel the close delay if the mouse re-enters the element
|
205
|
+
if (this.mouseLeaveTimeout) {
|
206
|
+
clearTimeout(this.mouseLeaveTimeout);
|
207
|
+
this.mouseLeaveTimeout = null; // Reset the timeout
|
208
|
+
}
|
209
|
+
if (!this.isFirstLevel() || this.root.openOn() == 'hover') {
|
210
|
+
this.open();
|
211
|
+
}
|
212
|
+
}
|
213
|
+
handleMouseLeave(event) {
|
214
|
+
event.stopPropagation();
|
215
|
+
if (this.hasSubItems() && this.root.closeOn() === 'leave') {
|
216
|
+
// Clear any previous timeout to avoid multiple triggers
|
217
|
+
if (this.mouseLeaveTimeout) {
|
218
|
+
clearTimeout(this.mouseLeaveTimeout);
|
219
|
+
}
|
220
|
+
// Set a delay before closing the submenu
|
221
|
+
this.mouseLeaveTimeout = setTimeout(() => {
|
222
|
+
this.close();
|
223
|
+
}, 500); // Adjust the delay (500ms in this case) as per your requirement
|
224
|
+
}
|
225
|
+
}
|
226
|
+
onWindowEvent() {
|
227
|
+
this.service.closeAll$.next(); // Close all menus on scroll or resize
|
228
|
+
}
|
229
|
+
/**
|
230
|
+
* Close all menus if clicking outside the root menu and all sub-items.
|
231
|
+
*/
|
232
|
+
onClickOutside(event) {
|
233
|
+
const hostElement = this.root.nativeElement;
|
234
|
+
if (!hostElement.contains(event.target)) {
|
235
|
+
this.service.closeAll$.next(); // Close all menus if click is outside the root and sub-items
|
236
|
+
}
|
237
|
+
}
|
238
|
+
ngOnDestroy() {
|
239
|
+
this.removeScrollEvents();
|
240
|
+
}
|
241
|
+
bindScrollEvents() {
|
242
|
+
this.scrollableParents = AXHtmlUtil.getScrollableParents(this.nativeElement);
|
243
|
+
this.scrollableParents.forEach((parent) => {
|
244
|
+
parent.addEventListener('scroll', this.onContainerScroll.bind(this));
|
245
|
+
});
|
246
|
+
}
|
247
|
+
// Remove scroll event listeners
|
248
|
+
removeScrollEvents() {
|
249
|
+
this.scrollableParents.forEach((parent) => {
|
250
|
+
parent.removeEventListener('scroll', this.onContainerScroll.bind(this));
|
251
|
+
});
|
252
|
+
}
|
253
|
+
/**
|
254
|
+
* Handler for scroll events (window or scrollable parent containers)
|
255
|
+
*/
|
256
|
+
onContainerScroll() {
|
257
|
+
this.service.closeAll$.next(); // Close all menus on scroll
|
258
|
+
}
|
259
|
+
/** @ignore */
|
260
|
+
get __hostClass() {
|
261
|
+
const list = ['ax-el-interactive', 'ax-action-item'];
|
262
|
+
if (this.disabled()) {
|
263
|
+
list.push('ax-state-disabled');
|
264
|
+
}
|
265
|
+
if (this.color()) {
|
266
|
+
list.push(`ax-el-${this.color()}-blank`);
|
267
|
+
}
|
268
|
+
return list;
|
269
|
+
}
|
270
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
271
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMenuItemComponent, selector: "ax-menu-item", inputs: { name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onClick: "onClick" }, host: { listeners: { "click": "handleClick($event)", "mouseenter": "handleMouseEnter($event)", "mouseleave": "handleMouseLeave($event)", "window:scroll": "onWindowEvent($event)", "window:resize": "onWindowEvent($event)", "document:click": "onClickOutside($event)" }, properties: { "class": "this.__hostClass" } }, providers: [
|
272
|
+
{
|
273
|
+
provide: AXMenuItemComponentBase,
|
274
|
+
useExisting: AXMenuItemComponent
|
275
|
+
},
|
276
|
+
AXUnsubscriber
|
277
|
+
], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems()) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} ax-menu-item-child-icon\"></i>\n }\n</div>\n<div class=\"ax-menu-items ax-action-list ax-action-list-vertical\" [class.ax-state-open]=\"isOpen()\">\n <ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n</div>", changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
278
|
+
}
|
279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuItemComponent, decorators: [{
|
280
|
+
type: Component,
|
281
|
+
args: [{ selector: 'ax-menu-item', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
282
|
+
{
|
283
|
+
provide: AXMenuItemComponentBase,
|
284
|
+
useExisting: AXMenuItemComponent
|
285
|
+
},
|
286
|
+
AXUnsubscriber
|
287
|
+
], template: "<div class=\"ax-action-item-prefix\">\n <ng-content select=\"ax-prefix\"></ng-content>\n <ng-content select=\"ax-text\"></ng-content>\n</div>\n<div class=\"ax-action-item-suffix\">\n <ng-content select=\"ax-suffix\"></ng-content>\n @if (hasSubItems()) {\n <i class=\"ax-icon ax-icon-solid {{ arrowIcon() }} ax-menu-item-child-icon\"></i>\n }\n</div>\n<div class=\"ax-menu-items ax-action-list ax-action-list-vertical\" [class.ax-state-open]=\"isOpen()\">\n <ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n</div>" }]
|
288
|
+
}], ctorParameters: () => [], propDecorators: { handleClick: [{
|
289
|
+
type: HostListener,
|
290
|
+
args: ["click", ['$event']]
|
291
|
+
}], handleMouseEnter: [{
|
292
|
+
type: HostListener,
|
293
|
+
args: ["mouseenter", ['$event']]
|
294
|
+
}], handleMouseLeave: [{
|
295
|
+
type: HostListener,
|
296
|
+
args: ["mouseleave", ['$event']]
|
297
|
+
}], onWindowEvent: [{
|
298
|
+
type: HostListener,
|
299
|
+
args: ['window:scroll', ['$event']]
|
300
|
+
}, {
|
301
|
+
type: HostListener,
|
302
|
+
args: ['window:resize', ['$event']]
|
303
|
+
}], onClickOutside: [{
|
304
|
+
type: HostListener,
|
305
|
+
args: ['document:click', ['$event']]
|
306
|
+
}], __hostClass: [{
|
307
|
+
type: HostBinding,
|
308
|
+
args: ['class']
|
309
|
+
}] } });
|
310
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDMUUsT0FBTyxFQUNMLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFNBQVMsRUFDVCxNQUFNLEVBQ04saUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvQyxPQUFPLEVBQTRCLHVCQUF1QixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDOztBQUloRTs7O0dBR0c7QUFjSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsV0FBVztJQWtDbEQ7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQWpDQSxXQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLGdCQUFXLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRzdCLFNBQUksR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHNUIsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxzQkFBaUIsR0FBa0IsRUFBRSxDQUFD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Q0FBQTtJQUNiLENBQUM7OEdBM1RVLG1CQUFtQjtrR0FBbkIsbUJBQW1CLGkzQkFSbkI7WUFDVDtnQkFDRSxPQUFPLEVBQUUsdUJBQXVCO2dCQUNoQyxXQUFXLEVBQUUsbUJBQW1CO2FBQ2pDO1lBQ0QsY0FBYztTQUNmLGlEQ3BDSCxtaUJBWU07OzJGRDBCTyxtQkFBbUI7a0JBYi9CLFNBQVM7K0JBQ0UsY0FBYyxpQkFFVCxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSx1QkFBdUI7NEJBQ2hDLFdBQVcscUJBQXFCO3lCQUNqQzt3QkFDRCxjQUFjO3FCQUNmO3dEQXlNTyxXQUFXO3NCQURsQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkE2QnpCLGdCQUFnQjtzQkFEdkIsWUFBWTt1QkFBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBZ0I5QixnQkFBZ0I7c0JBRHZCLFlBQVk7dUJBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW1COUIsYUFBYTtzQkFGcEIsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN4QyxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFTakMsY0FBYztzQkFEckIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF1Q3RDLFdBQVc7c0JBRGQsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhTdHlsZUNvbG9yVHlwZSwgTlhDb21wb25lbnQgfSBmcm9tICdAYWNvcmV4L2NvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7XG4gIGFmdGVyTmV4dFJlbmRlcixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXIsXG4gIGluamVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBzaWduYWwsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFYTWVudVNlcnZpY2UgfSBmcm9tICcuL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBBWE1lbnVJdGVtQ2xpY2tCYXNlRXZlbnQsIEFYTWVudUl0ZW1Db21wb25lbnRCYXNlLCBBWFJvb3RNZW51IH0gZnJvbSAnLi9tZW51LnR5cGVzJztcbmltcG9ydCB7IEFYSHRtbFV0aWwsIEFYVW5zdWJzY3JpYmVyIH0gZnJvbSAnQGFjb3JleC9jb3JlL3V0aWxzJztcblxuZXhwb3J0IHR5cGUgQVhNZW51SXRlbUNsaWNrRXZlbnQgPSBBWE1lbnVJdGVtQ2xpY2tCYXNlRXZlbnQ8QVhNZW51SXRlbUNvbXBvbmVudD47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1lbnUgaXRlbSBjb21wb25lbnQgdXNlZCB3aXRoaW4gYW4gYGF4LW1lbnVgLlxuICogQGNhdGVnb3J5IENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXgtbWVudS1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBBWE1lbnVJdGVtQ29tcG9uZW50QmFzZSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1lbnVJdGVtQ29tcG9uZW50XG4gICAgfSxcbiAgICBBWFVuc3Vic2NyaWJlclxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBWE1lbnVJdGVtQ29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuXG4gIHByb3RlY3RlZCBpc09wZW4gPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaGFzU3ViSXRlbXMgPSBzaWduYWwoZmFsc2UpO1xuICBwcm90ZWN0ZWQgaXNGaXJzdExldmVsID0gc2lnbmFsKGZhbHNlKTtcbiAgcHJpdmF0ZSBtdXRhdGlvbk9ic2VydmVyITogTXV0YXRpb25PYnNlcnZlcjtcblxuICBwcm90ZWN0ZWQgcm9vdCA9IGluamVjdChBWFJvb3RNZW51KTtcbiAgcHJvdGVjdGVkIHBhcmVudD86IEFYTWVudUl0ZW1Db21wb25lbnQgfCBudWxsO1xuXG4gIHByaXZhdGUgc2VydmljZSA9IGluamVjdChBWE1lbnVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBzY3JvbGxhYmxlUGFyZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gIHByaXZhdGUgdW5zdXNjcmliZXIgPSBpbmplY3QoQVhVbnN1YnNjcmliZXIpO1xuICBwcml2YXRlIHJlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMilcblxuXG4gIHByb3RlY3RlZCBhcnJvd0ljb24gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNSdGwgPSBBWEh0bWxVdGlsLmlzUnRsKHRoaXMubmF0aXZlRWxlbWVudCk7XG4gICAgcmV0dXJuIHRoaXMucm9vdC5vcmllbnRhdGlvbigpID09ICdob3Jpem9udGFsJyAmJiB0aGlzLmlzRmlyc3RMZXZlbCgpID9cbiAgICAgIFwiYXgtaWNvbi1jaGV2cm9uLWRvd25cIiA6XG4gICAgICBpc1J0bCA/IFwiYXgtaWNvbi1jaGV2cm9uLWxlZnRcIiA6IFwiYXgtaWNvbi1jaGV2cm9uLXJpZ2h0XCI7XG4gIH0pXG5cblxuICBvbkNsaWNrID0gb3V0cHV0PEFYTWVudUl0ZW1DbGlja0V2ZW50PigpO1xuXG4gIG5hbWUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gIGRhdGEgPSBpbnB1dDxhbnk+KCk7XG4gIGRpc2FibGVkID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgY29sb3IgPSBpbnB1dDxBWFN0eWxlQ29sb3JUeXBlPigpO1xuXG5cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vXG4gICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0U3ViSXRlbXMoKTtcbiAgICAgIHRoaXMub2JzZXJ2ZU11dGF0aW9ucygpO1xuICAgICAgdGhpcy5iaW5kU2Nyb2xsRXZlbnRzKCk7XG4gICAgfSk7XG4gICAgLy9cbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkXG4gICAgICAucGlwZSh0aGlzLnVuc3VzY3JpYmVyLnRha2VVbnRpbERlc3Ryb3kpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XG5cbiAgICB0aGlzLnNlcnZpY2Uub3BlbiRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKCh0aGlzIGFzIGFueSkgPT09IGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmlzT3Blbi5zZXQodHJ1ZSk7XG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5jbG9zZSRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoaXRlbSA9PiB7XG4gICAgICAgIGlmICgodGhpcyBhcyBhbnkpID09IGl0ZW0pIHtcbiAgICAgICAgICB0aGlzLmlzT3Blbi5zZXQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAvL1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUV4Y2VwdCRcbiAgICAgIC5waXBlKHRoaXMudW5zdXNjcmliZXIudGFrZVVudGlsRGVzdHJveSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW0pID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZUV4Y2VwdChpdGVtIGFzIEFYTWVudUl0ZW1Db21wb25lbnQpO1xuICAgICAgfSk7XG4gIH1cblxuXG4gIHByaXZhdGUgY2xvc2VFeGNlcHQoaXRlbTogQVhNZW51SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGxpc3Q6IEFYTWVudUl0ZW1Db21wb25lbnRbXSA9IFtpdGVtXVxuICAgIC8vXG4gICAgbGV0IHBhcmVudCA9IGl0ZW0ucGFyZW50O1xuICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkge1xuICAgICAgbGlzdC5wdXNoKHBhcmVudCk7XG4gICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50O1xuICAgIH1cbiAgICAvL1xuICAgIGlmICghbGlzdC5pbmNsdWRlcyh0aGlzKSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBvYnNlcnZlTXV0YXRpb25zKCkge1xuICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcbiAgICAgIHRoaXMuZGV0ZWN0U3ViSXRlbXMoKTtcbiAgICB9KTtcblxuICAgIC8vIFN0YXJ0IG9ic2VydmluZyBjaGFuZ2VzIGluIGNoaWxkIGVsZW1lbnRzXG4gICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5uYXRpdmVFbGVtZW50LCB7XG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cblxuICBwcml2YXRlIGdldFRleHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KCdheC10ZXh0Jyk/LmlubmVyVGV4dDtcbiAgfVxuXG5cbiAgLyoqXG4gICAgKiBNYW51YWxseSBkZXRlY3QgYWxsIGBheC1tZW51LWl0ZW1gIGVsZW1lbnRzIGFuZCBjaGVjayBpZiB0aGlzIG1lbnUgaXRlbSBoYXMgc3ViLWl0ZW1zLlxuICAgICovXG4gIHByaXZhdGUgZGV0ZWN0U3ViSXRlbXMoKSB7XG4gICAgLy9cbiAgICBjb25zdCBwYXJlbnRFbCA9IHRoaXMubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50Py5wYXJlbnRFbGVtZW50O1xuICAgIHRoaXMucGFyZW50ID0gcGFyZW50RWw/LnRhZ05hbWUgPT0gXCJBWC1NRU5VLUlURU1cIiA/IHBhcmVudEVsPy5bXCJfX2F4Q29udGV4dF9fXCJdIGFzIEFYTWVudUl0ZW1Db21wb25lbnQgOiBudWxsO1xuICAgIC8vXG4gICAgY29uc3QgdGFnID0gdGhpcy5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ/LnRhZ05hbWU7XG4gICAgdGhpcy5pc0ZpcnN0TGV2ZWwuc2V0KHRhZyA9PSBcIkFYLU1FTlVcIiB8fCB0YWcgPT0gXCJBWC1DT05URVhULU1FTlVcIik7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnYXgtbWVudS1pdGVtJyk7XG4gICAgaWYgKHN1Ykl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuaGFzU3ViSXRlbXMuc2V0KHRydWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhc1N1Ykl0ZW1zLnNldChmYWxzZSk7XG4gICAgfVxuICB9XG5cblxuICBvcGVuKCkge1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUV4Y2VwdCQubmV4dCh0aGlzKTtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQoKSAmJiB0aGlzLmhhc1N1Ykl0ZW1zKCkpIHtcbiAgICAgIHRoaXMuc2VydmljZS5vcGVuJC5uZXh0KHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIHRoaXMuc2VydmljZS5jbG9zZSQubmV4dCh0aGlzKTtcbiAgfVxuXG5cbiAgLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBzdWJtZW51IHRvIGF2b2lkIGl0IGdvaW5nIG91dCBvZiB0aGUgdmlld3BvcnQuXG4gKi9cbiAgcHJpdmF0ZSBjYWxjdWxhdGVQb3NpdGlvbigpIHtcbiAgICBjb25zdCBzdWJtZW51ID0gdGhpcy5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5heC1tZW51LWl0ZW1zJyk7XG4gICAgaWYgKCFzdWJtZW51KSByZXR1cm47XG5cbiAgICBjb25zdCBzdWJtZW51UmVjdCA9IHN1Ym1lbnUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgaXRlbVJlY3QgPSB0aGlzLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3Qgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcbiAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICBjb25zdCBpc1J0bCA9IEFYSHRtbFV0aWwuaXNSdGwodGhpcy5uYXRpdmVFbGVtZW50KTtcblxuICAgIGxldCB0b3A6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICAgIGxldCBsZWZ0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIEZvciBmaXJzdC1sZXZlbCBtZW51IGl0ZW1zXG4gICAgaWYgKHRoaXMuaXNGaXJzdExldmVsKCkgJiYgdGhpcy5yb290Lm9yaWVudGF0aW9uKCkgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgdG9wID0gaXRlbVJlY3QuYm90dG9tICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0XG4gICAgICAgID8gaXRlbVJlY3QudG9wIC0gc3VibWVudVJlY3QuaGVpZ2h0IC8vIE9wZW4gdXB3YXJkc1xuICAgICAgICA6IGl0ZW1SZWN0LmJvdHRvbTsgLy8gT3BlbiBkb3dud2FyZHNcblxuICAgICAgaWYgKGlzUnRsKSB7XG4gICAgICAgIC8vIFJUTDogQWxpZ24gdG8gdGhlIHJpZ2h0IG9mIHRoZSBwYXJlbnQgaXRlbVxuICAgICAgICBsZWZ0ID0gaXRlbVJlY3QucmlnaHQgLSBzdWJtZW51UmVjdC53aWR0aCA8IDBcbiAgICAgICAgICA/IGl0ZW1SZWN0LmxlZnQgLy8gQWxpZ24gdG8gdGhlIGxlZnQgaWYgbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgcmlnaHRcbiAgICAgICAgICA6IGl0ZW1SZWN0LnJpZ2h0IC0gc3VibWVudVJlY3Qud2lkdGg7IC8vIE9wZW4gdG8gdGhlIGxlZnQgaW4gUlRMXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBMVFI6IEFsaWduIHRvIHRoZSBsZWZ0IG9mIHRoZSBwYXJlbnQgaXRlbVxuICAgICAgICBsZWZ0ID0gaXRlbVJlY3QubGVmdCArIHN1Ym1lbnVSZWN0LndpZHRoID4gd2luZG93V2lkdGhcbiAgICAgICAgICA/IGl0ZW1SZWN0LnJpZ2h0IC0gc3VibWVudVJlY3Qud2lkdGggLy8gQWxpZ24gdG8gdGhlIHJpZ2h0IGVkZ2UgaW4gTFRSXG4gICAgICAgICAgOiBpdGVtUmVjdC5sZWZ0OyAvLyBPcGVuIHRvIHRoZSBsZWZ0XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEZvciBuZXN0ZWQgc3VibWVudXNcbiAgICAgIGlmIChpc1J0bCkge1xuICAgICAgICAvLyBSVEw6IE5lc3RlZCBzdWJtZW51IG9wZW5zIHRvIHRoZSBsZWZ0XG4gICAgICAgIGxlZnQgPSBpdGVtUmVjdC5sZWZ0IC0gc3VibWVudVJlY3Qud2lkdGggPCAwXG4gICAgICAgICAgPyBpdGVtUmVjdC5yaWdodCAvLyBBbGlnbiB0byB0aGUgcmlnaHQgaWYgbm90IGVub3VnaCBzcGFjZSBvbiB0aGUgbGVmdFxuICAgICAgICAgIDogaXRlbVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoOyAvLyBPcGVuIHRvIHRoZSBsZWZ0IGluIFJUTFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTFRSOiBOZXN0ZWQgc3VibWVudSBvcGVucyB0byB0aGUgcmlnaHRcbiAgICAgICAgbGVmdCA9IGl0ZW1SZWN0LnJpZ2h0ICsgc3VibWVudVJlY3Qud2lkdGggPiB3aW5kb3dXaWR0aFxuICAgICAgICAgID8gaXRlbVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoIC8vIE9wZW4gdG8gdGhlIGxlZnQgaWYgbm90IGVub3VnaCBzcGFjZVxuICAgICAgICAgIDogaXRlbVJlY3QucmlnaHQ7IC8vIE9wZW4gdG8gdGhlIHJpZ2h0IGluIExUUlxuICAgICAgfVxuXG4gICAgICAvLyBBZGp1c3QgdG9wIHBvc2l0aW9uIChhbGlnbiB2ZXJ0aWNhbGx5IHdpdGggcGFyZW50KVxuICAgICAgdG9wID0gaXRlbVJlY3QudG9wICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93SGVpZ2h0XG4gICAgICAgID8gaXRlbVJlY3QudG9wIC0gKGl0ZW1SZWN0LmJvdHRvbSArIHN1Ym1lbnVSZWN0LmhlaWdodCAtIHdpbmRvd0hlaWdodCkgLy8gQWRqdXN0IHVwd2FyZHNcbiAgICAgICAgOiBpdGVtUmVjdC50b3A7IC8vIEFsaWduIHdpdGggdGhlIHBhcmVudCBpdGVtXG4gICAgfVxuXG4gICAgLy8gQXBwbHkgY2FsY3VsYXRlZCBzdHlsZXMgZm9yIFJUTC9MVFJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHN1Ym1lbnUsICdsZWZ0JywgYCR7bGVmdH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3VibWVudSwgJ3RvcCcsIGAke3RvcH1weGApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoc3VibWVudSwgJ3Bvc2l0aW9uJywgJ2ZpeGVkJyk7IC8vIEZpeGVkIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSB2aWV3cG9ydFxuICB9XG5cblxuXG4gIEBIb3N0TGlzdGVuZXIoXCJjbGlja1wiLCBbJyRldmVudCddKVxuICBwcml2YXRlIGhhbmRsZUNsaWNrKGU6IE1vdXNlRXZlbnQpIHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHJldHVybjtcbiAgICAvL1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgbmF0aXZlRXZlbnQ6IGUsXG4gICAgICBjYW5jZWxlZDogZmFsc2UsXG4gICAgICBpdGVtOiB7XG4gICAgICAgIG5hbWU6IHRoaXMubmFtZSgpLFxuICAgICAgICB0ZXh0OiB0aGlzLmdldFRleHQoKSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhKClcbiAgICAgIH1cbiAgICB9IGFzIEFYTWVudUl0ZW1DbGlja0V2ZW50O1xuICAgIC8vXG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoZXZlbnQpO1xuICAgIHRoaXMucm9vdC5vbkl0ZW1DbGljay5lbWl0KHsgLi4uZXZlbnQsIC4uLnsgc2VuZGVyOiB0aGlzLnJvb3QgYXMgYW55IH0gfSk7XG4gICAgLy9cbiAgICBpZiAodGhpcy5oYXNTdWJJdGVtcygpICYmICFldmVudC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCFldmVudC5jYW5jZWxlZCkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCk7XG4gICAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGxDb250ZXh0TWVudSQubmV4dCh7IHNlbmRlcjogdGhpcy5yb290IH0pO1xuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgaGFuZGxlTW91c2VFbnRlcihldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIC8vIENhbmNlbCB0aGUgY2xvc2UgZGVsYXkgaWYgdGhlIG1vdXNlIHJlLWVudGVycyB0aGUgZWxlbWVudFxuICAgIGlmICh0aGlzLm1vdXNlTGVhdmVUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZW91dCk7XG4gICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lb3V0ID0gbnVsbDsgLy8gUmVzZXQgdGhlIHRpbWVvdXRcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzRmlyc3RMZXZlbCgpIHx8IHRoaXMucm9vdC5vcGVuT24oKSA9PSAnaG92ZXInKSB7XG4gICAgICB0aGlzLm9wZW4oKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1vdXNlTGVhdmVUaW1lb3V0OiBhbnk7XG5cbiAgQEhvc3RMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIiwgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBoYW5kbGVNb3VzZUxlYXZlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5oYXNTdWJJdGVtcygpICYmIHRoaXMucm9vdC5jbG9zZU9uKCkgPT09ICdsZWF2ZScpIHtcbiAgICAgIC8vIENsZWFyIGFueSBwcmV2aW91cyB0aW1lb3V0IHRvIGF2b2lkIG11bHRpcGxlIHRyaWdnZXJzXG4gICAgICBpZiAodGhpcy5tb3VzZUxlYXZlVGltZW91dCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZW91dCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCBhIGRlbGF5IGJlZm9yZSBjbG9zaW5nIHRoZSBzdWJtZW51XG4gICAgICB0aGlzLm1vdXNlTGVhdmVUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgIH0sIDUwMCk7IC8vIEFkanVzdCB0aGUgZGVsYXkgKDUwMG1zIGluIHRoaXMgY2FzZSkgYXMgcGVyIHlvdXIgcmVxdWlyZW1lbnRcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25XaW5kb3dFdmVudCgpIHtcbiAgICB0aGlzLnNlcnZpY2UuY2xvc2VBbGwkLm5leHQoKTsgLy8gQ2xvc2UgYWxsIG1lbnVzIG9uIHNjcm9sbCBvciByZXNpemVcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSBhbGwgbWVudXMgaWYgY2xpY2tpbmcgb3V0c2lkZSB0aGUgcm9vdCBtZW51IGFuZCBhbGwgc3ViLWl0ZW1zLlxuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLnJvb3QubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvc3RFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCkgLy8gQ2xvc2UgYWxsIG1lbnVzIGlmIGNsaWNrIGlzIG91dHNpZGUgdGhlIHJvb3QgYW5kIHN1Yi1pdGVtc1xuICAgIH1cbiAgfVxuXG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVTY3JvbGxFdmVudHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYmluZFNjcm9sbEV2ZW50cygpIHtcbiAgICB0aGlzLnNjcm9sbGFibGVQYXJlbnRzID0gQVhIdG1sVXRpbC5nZXRTY3JvbGxhYmxlUGFyZW50cyh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy5zY3JvbGxhYmxlUGFyZW50cy5mb3JFYWNoKChwYXJlbnQpID0+IHtcbiAgICAgIHBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uQ29udGFpbmVyU2Nyb2xsLmJpbmQodGhpcykpO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVtb3ZlIHNjcm9sbCBldmVudCBsaXN0ZW5lcnMgXG4gIHByaXZhdGUgcmVtb3ZlU2Nyb2xsRXZlbnRzKCkge1xuICAgIHRoaXMuc2Nyb2xsYWJsZVBhcmVudHMuZm9yRWFjaCgocGFyZW50KSA9PiB7XG4gICAgICBwYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vbkNvbnRhaW5lclNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGZvciBzY3JvbGwgZXZlbnRzICh3aW5kb3cgb3Igc2Nyb2xsYWJsZSBwYXJlbnQgY29udGFpbmVycylcbiAgICovXG4gIHByaXZhdGUgb25Db250YWluZXJTY3JvbGwoKSB7XG4gICAgdGhpcy5zZXJ2aWNlLmNsb3NlQWxsJC5uZXh0KCk7IC8vIENsb3NlIGFsbCBtZW51cyBvbiBzY3JvbGxcbiAgfVxuXG5cblxuICAvKiogQGlnbm9yZSAqL1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IF9faG9zdENsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBsaXN0OiBzdHJpbmdbXSA9IFsnYXgtZWwtaW50ZXJhY3RpdmUnLCAnYXgtYWN0aW9uLWl0ZW0nXTtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICBsaXN0LnB1c2goJ2F4LXN0YXRlLWRpc2FibGVkJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbG9yKCkpIHtcbiAgICAgIGxpc3QucHVzaChgYXgtZWwtJHt0aGlzLmNvbG9yKCl9LWJsYW5rYCk7XG4gICAgfVxuICAgIHJldHVybiBsaXN0XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cImF4LWFjdGlvbi1pdGVtLXByZWZpeFwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJheC1wcmVmaXhcIj48L25nLWNvbnRlbnQ+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LXRleHRcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJheC1hY3Rpb24taXRlbS1zdWZmaXhcIj5cbiAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiYXgtc3VmZml4XCI+PC9uZy1jb250ZW50PlxuICBAaWYgKGhhc1N1Ykl0ZW1zKCkpIHtcbiAgICA8aSBjbGFzcz1cImF4LWljb24gYXgtaWNvbi1zb2xpZCB7eyBhcnJvd0ljb24oKSB9fSBheC1tZW51LWl0ZW0tY2hpbGQtaWNvblwiPjwvaT5cbiAgfVxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiYXgtbWVudS1pdGVtcyBheC1hY3Rpb24tbGlzdCBheC1hY3Rpb24tbGlzdC12ZXJ0aWNhbFwiIFtjbGFzcy5heC1zdGF0ZS1vcGVuXT1cImlzT3BlbigpXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cImF4LW1lbnUtaXRlbSxheC10aXRsZSxuZy1jb250YWluZXJcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj4iXX0=
|
@@ -1,58 +1,52 @@
|
|
1
|
-
import {
|
2
|
-
import {
|
3
|
-
import { AXRootMenu } from './class/root-menu.class';
|
4
|
-
import { AXMenuItemComponent } from './menu-item/menu-item.component';
|
1
|
+
import { NXComponent } from '@acorex/components/common';
|
2
|
+
import { ChangeDetectionStrategy, Component, HostBinding, inject, input, output, ViewEncapsulation, } from '@angular/core';
|
5
3
|
import { AXMenuService } from './menu.service';
|
4
|
+
import { AXRootMenu } from './menu.types';
|
6
5
|
import * as i0 from "@angular/core";
|
6
|
+
import * as i1 from "@angular/common";
|
7
|
+
import * as i2 from "@acorex/components/decorators";
|
8
|
+
import * as i3 from "./menu-item.component";
|
7
9
|
/**
|
8
10
|
* Represents a menu component that displays menu items.
|
9
11
|
* @category Components
|
10
12
|
*/
|
11
|
-
export class AXMenuComponent extends
|
13
|
+
export class AXMenuComponent extends NXComponent {
|
12
14
|
constructor() {
|
13
15
|
super(...arguments);
|
14
16
|
this.orientation = input('horizontal');
|
15
|
-
this.openOn = input('
|
17
|
+
this.openOn = input('hover');
|
18
|
+
this.closeOn = input('leave');
|
16
19
|
this.service = inject(AXMenuService);
|
17
|
-
|
18
|
-
|
19
|
-
ngAfterViewInit() {
|
20
|
-
this.children.forEach((c) => {
|
21
|
-
c.isRoot = true;
|
22
|
-
c.parent = this;
|
23
|
-
});
|
20
|
+
this.onItemClick = output();
|
21
|
+
this.items = input([]);
|
24
22
|
}
|
25
23
|
/** @ignore */
|
26
24
|
get __hostClass() {
|
27
|
-
return `ax-
|
25
|
+
return `ax-action-list-${this.orientation()} ax-action-list`;
|
26
|
+
}
|
27
|
+
close() {
|
28
|
+
this.service.closeAll$.next();
|
28
29
|
}
|
29
30
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
30
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.
|
31
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.0", type: AXMenuComponent, selector: "ax-menu", inputs: { orientation: { classPropertyName: "orientation", publicName: "orientation", isSignal: true, isRequired: false, transformFunction: null }, openOn: { classPropertyName: "openOn", publicName: "openOn", isSignal: true, isRequired: false, transformFunction: null }, closeOn: { classPropertyName: "closeOn", publicName: "closeOn", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onItemClick: "onItemClick" }, host: { properties: { "class": "this.__hostClass" } }, providers: [
|
32
|
+
AXMenuService,
|
31
33
|
{
|
32
34
|
provide: AXRootMenu,
|
33
|
-
useExisting: AXMenuComponent
|
34
|
-
}
|
35
|
-
{
|
36
|
-
provide: AXMenuService,
|
37
|
-
},
|
38
|
-
], queries: [{ propertyName: "children", predicate: AXMenuItemComponent }], usesInheritance: true, ngImport: i0, template: ` <ng-content select="ax-menu-item,ng-container"></ng-content>`, isInline: true, styles: ["ax-menu{width:100%;font-size:.875rem;line-height:1.25rem;color:inherit;position:relative}ax-menu.ax-orientation-horizontal{display:flex}ax-menu.ax-orientation-horizontal ax-menu-item:not(ax-menu.ax-orientation-horizontal ax-menu-item:last-child){margin-inline-end:1rem}ax-menu.ax-orientation-vertical{display:flex;flex-direction:column}ax-menu.ax-orientation-vertical ax-menu-item{justify-content:space-between}ax-menu.ax-orientation-vertical ax-menu-item:not(ax-menu.ax-orientation-vertical ax-menu-item:last-child){margin-bottom:1rem}ax-menu ax-menu-item:hover:not(ax-menu ax-menu-item:hover.ax-state-disabled){color:rgba(var(--ax-color-primary-500))}ax-menu-item{position:relative;display:flex;align-items:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;justify-content:space-between;color:rgba(var(--ax-color-text-default))}ax-menu-item .ax-menu-item-text{white-space:nowrap}ax-menu-item:not(ax-menu-item.ax-state-disabled){cursor:pointer}ax-menu-item .ax-menu-item-start-side{display:flex;align-items:center;gap:.5rem}ax-menu-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-menu-item.ax-state-selected{color:rgba(var(--ax-color-primary-500))}ax-menu-item .ax-menu-item-child-icon{width:fit-content;line-height:1;font-size:10px}ax-menu-item ax-popover{position:absolute}.ax-menu-item-children{padding-top:.5rem;padding-bottom:.5rem}.ax-menu-item-children:not(.ax-menu-item-children:empty){display:flex;min-width:12rem;flex-direction:column;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface))}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item{padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled){background-color:rgba(var(--ax-color-on-surface))}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled) ax-prefix,.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled) ax-suffix{opacity:1}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item ax-prefix,.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item ax-suffix{opacity:.75}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item .ax-menu-item-text{flex:1 1 0%}html[dir=rtl] .ax-parent-horizontal .ax-menu-item-child-icon{transform:rotate(-90deg)}html[dir=rtl] .ax-parent-horizontal .ax-menu-item-child-icon:before{-moz-transform:scale(1,-1);-webkit-transform:scale(1,-1);-o-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scaleY(-1)}.ax-parent-horizontal .ax-menu-item-child-icon{transform:rotate(-90deg)}\n"], encapsulation: i0.ViewEncapsulation.None }); }
|
35
|
+
useExisting: AXMenuComponent
|
36
|
+
}
|
37
|
+
], usesInheritance: true, ngImport: i0, template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-sub-title, ax-placeholder, ax-overlay" }, { kind: "component", type: i3.AXMenuItemComponent, selector: "ax-menu-item", inputs: ["name", "data", "disabled", "color"], outputs: ["onClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
39
38
|
}
|
40
39
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuComponent, decorators: [{
|
41
40
|
type: Component,
|
42
|
-
args: [{ selector: 'ax-menu',
|
41
|
+
args: [{ selector: 'ax-menu', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
42
|
+
AXMenuService,
|
43
43
|
{
|
44
44
|
provide: AXRootMenu,
|
45
|
-
useExisting: AXMenuComponent
|
46
|
-
}
|
47
|
-
|
48
|
-
|
49
|
-
},
|
50
|
-
], styles: ["ax-menu{width:100%;font-size:.875rem;line-height:1.25rem;color:inherit;position:relative}ax-menu.ax-orientation-horizontal{display:flex}ax-menu.ax-orientation-horizontal ax-menu-item:not(ax-menu.ax-orientation-horizontal ax-menu-item:last-child){margin-inline-end:1rem}ax-menu.ax-orientation-vertical{display:flex;flex-direction:column}ax-menu.ax-orientation-vertical ax-menu-item{justify-content:space-between}ax-menu.ax-orientation-vertical ax-menu-item:not(ax-menu.ax-orientation-vertical ax-menu-item:last-child){margin-bottom:1rem}ax-menu ax-menu-item:hover:not(ax-menu ax-menu-item:hover.ax-state-disabled){color:rgba(var(--ax-color-primary-500))}ax-menu-item{position:relative;display:flex;align-items:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;font-weight:500;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s;justify-content:space-between;color:rgba(var(--ax-color-text-default))}ax-menu-item .ax-menu-item-text{white-space:nowrap}ax-menu-item:not(ax-menu-item.ax-state-disabled){cursor:pointer}ax-menu-item .ax-menu-item-start-side{display:flex;align-items:center;gap:.5rem}ax-menu-item.ax-state-disabled{cursor:not-allowed;opacity:.5}ax-menu-item.ax-state-selected{color:rgba(var(--ax-color-primary-500))}ax-menu-item .ax-menu-item-child-icon{width:fit-content;line-height:1;font-size:10px}ax-menu-item ax-popover{position:absolute}.ax-menu-item-children{padding-top:.5rem;padding-bottom:.5rem}.ax-menu-item-children:not(.ax-menu-item-children:empty){display:flex;min-width:12rem;flex-direction:column;border-radius:var(--ax-rounded-border-default);border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface))}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item{padding:.5rem 1rem;font-size:.875rem;line-height:1.25rem}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled){background-color:rgba(var(--ax-color-on-surface))}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled) ax-prefix,.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover:not(.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item:hover.ax-state-disabled) ax-suffix{opacity:1}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item ax-prefix,.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item ax-suffix{opacity:.75}.ax-menu-item-children:not(.ax-menu-item-children:empty) ax-menu-item .ax-menu-item-text{flex:1 1 0%}html[dir=rtl] .ax-parent-horizontal .ax-menu-item-child-icon{transform:rotate(-90deg)}html[dir=rtl] .ax-parent-horizontal .ax-menu-item-child-icon:before{-moz-transform:scale(1,-1);-webkit-transform:scale(1,-1);-o-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scaleY(-1)}.ax-parent-horizontal .ax-menu-item-child-icon{transform:rotate(-90deg)}\n"] }]
|
51
|
-
}], propDecorators: { children: [{
|
52
|
-
type: ContentChildren,
|
53
|
-
args: [AXMenuItemComponent]
|
54
|
-
}], __hostClass: [{
|
45
|
+
useExisting: AXMenuComponent
|
46
|
+
}
|
47
|
+
], template: "<ng-content select=\"ax-menu-item,ax-title,ng-container\"></ng-content>\n\n<ng-container *ngFor=\"let node of items()\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\">\n</ng-container>\n<ng-template #Recursion let-item>\n @if(item.group?.title)\n {\n <ax-title>{{item.group?.title}}</ax-title>\n }\n <ax-menu-item [name]=\"item.name\" [data]=\"item.data\" [disabled]=\"item.disabled\" [color]=\"item.color\">\n <ax-prefix>\n @if(item.icon)\n {\n <ax-icon [icon]=\"item.icon\">\n </ax-icon>\n }\n </ax-prefix>\n @if(item.text)\n {\n <ax-text>{{ item.text }}</ax-text>\n }\n @if(item.suffix)\n {\n <ax-suffix>\n <ax-text>{{ item.suffix.text }}</ax-text>\n </ax-suffix>\n }\n <ng-container *ngFor=\"let child of item.items\" [ngTemplateOutlet]=\"Recursion\"\n [ngTemplateOutletContext]=\"{ $implicit: child }\"></ng-container>\n </ax-menu-item>\n @if(item.break)\n {\n <ax-divider></ax-divider>\n }\n</ng-template>", styles: ["ax-context-menu,ax-menu{width:100%;color:inherit;display:flex;width:max-content}ax-context-menu.ax-menu-container,ax-context-menu .ax-menu-items,ax-menu.ax-menu-container,ax-menu .ax-menu-items{padding-block:.5rem;display:flex;opacity:0;visibility:hidden;transition:opacity .3s;width:max-content;min-width:12rem;height:max-content;position:fixed;flex-direction:column;border-radius:0;border-width:1px;border-color:rgba(var(--ax-color-border-default));background-color:rgba(var(--ax-color-surface));--ax-shadow: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);--ax-shadow-colored: 0 4px 6px -1px var(--ax-shadow-color), 0 2px 4px -2px var(--ax-shadow-color);box-shadow:var(--ax-ring-offset-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-ring-shadow, 0 0 rgba(0, 0, 0, 0)),var(--ax-shadow);border-radius:var(--ax-rounded-border-default);z-index:9999}ax-context-menu.ax-menu-container.ax-state-open,ax-context-menu .ax-menu-items.ax-state-open,ax-menu.ax-menu-container.ax-state-open,ax-menu .ax-menu-items.ax-state-open{opacity:1;visibility:visible}ax-context-menu.ax-action-list-horizontal{padding-inline:1rem}ax-menu.ax-action-list-horizontal{min-width:12rem;gap:.875rem}ax-menu.ax-action-list-horizontal>ax-menu-item{font-weight:500}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-prefix{padding-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:not(ax-menu.ax-action-list-horizontal>ax-menu-item>.ax-action-item-suffix:empty){padding-inline-end:0!important;margin-inline-start:0!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover{background-color:transparent!important}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-prefix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-horizontal>ax-menu-item:hover>.ax-action-item-suffix{color:rgba(var(--ax-color-primary-500))}ax-menu.ax-action-list-vertical{width:max-content;min-width:12rem}ax-menu.ax-action-list-vertical>ax-menu-item{font-weight:500}ax-menu>ax-menu-item{padding-block:.5rem}ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-icon,ax-menu>ax-menu-item:hover:not(ax-menu>ax-menu-item:hover.ax-state-disabled)>ax-text{color:rgba(var(--ax-color-primary-500))}\n"] }]
|
48
|
+
}], propDecorators: { __hostClass: [{
|
55
49
|
type: HostBinding,
|
56
50
|
args: ['class']
|
57
51
|
}] } });
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvbGliL21lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21lbnUvc3JjL2xpYi9tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBaUIsV0FBVyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUErRSxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUM7Ozs7O0FBSXZIOzs7R0FHRztBQWVILE1BQU0sT0FBTyxlQUFnQixTQUFRLFdBQVc7SUFkaEQ7O1FBZUUsZ0JBQVcsR0FBRyxLQUFLLENBQWdCLFlBQVksQ0FBQyxDQUFDO1FBRWpELFdBQU0sR0FBRyxLQUFLLENBQW9CLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLFlBQU8sR0FBRyxLQUFLLENBQXFCLE9BQU8sQ0FBQyxDQUFDO1FBRTdDLFlBQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFaEMsZ0JBQVcsR0FBRyxNQUFNLEVBQXlCLENBQUM7UUFFOUMsVUFBSyxHQUFHLEtBQUssQ0FBZSxFQUFFLENBQUMsQ0FBQztLQVlqQztJQVZDLGNBQWM7SUFDZCxJQUNJLFdBQVc7UUFDYixPQUFPLGtCQUFrQixJQUFJLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDO0lBQy9ELENBQUM7SUFHTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzs4R0F0QlUsZUFBZTtrR0FBZixlQUFlLHlvQkFSZjtZQUNULGFBQWE7WUFDYjtnQkFDRSxPQUFPLEVBQUUsVUFBVTtnQkFDbkIsV0FBVyxFQUFFLGVBQWU7YUFDN0I7U0FDRixpREMvQkgseW5DQW1DYzs7MkZERkQsZUFBZTtrQkFkM0IsU0FBUzsrQkFDRSxTQUFTLGlCQUdKLGlCQUFpQixDQUFDLElBQUksbUJBQ3BCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1QsYUFBYTt3QkFDYjs0QkFDRSxPQUFPLEVBQUUsVUFBVTs0QkFDbkIsV0FBVyxpQkFBaUI7eUJBQzdCO3FCQUNGOzhCQWlCRyxXQUFXO3NCQURkLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYT3JpZW50YXRpb24sIE5YQ29tcG9uZW50IH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2NvbW1vbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBIb3N0QmluZGluZyxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBWE1lbnVTZXJ2aWNlIH0gZnJvbSAnLi9tZW51LnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhNZW51Q2xvc2VUcmlnZ2VyLCBBWE1lbnVJdGVtLCBBWE1lbnVJdGVtQ2xpY2tCYXNlRXZlbnQsIEFYTWVudU9wZW5UcmlnZ2VyLCBBWFJvb3RNZW51IH0gZnJvbSAnLi9tZW51LnR5cGVzJztcblxuZXhwb3J0IHR5cGUgQVhNZW51SXRlbXNDbGlja0V2ZW50ID0gQVhNZW51SXRlbUNsaWNrQmFzZUV2ZW50PEFYTWVudUNvbXBvbmVudD47XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIG1lbnUgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgbWVudSBpdGVtcy5cbiAqIEBjYXRlZ29yeSBDb21wb25lbnRzXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F4LW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIEFYTWVudVNlcnZpY2UsXG4gICAge1xuICAgICAgcHJvdmlkZTogQVhSb290TWVudSxcbiAgICAgIHVzZUV4aXN0aW5nOiBBWE1lbnVDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQVhNZW51Q29tcG9uZW50IGV4dGVuZHMgTlhDb21wb25lbnQge1xuICBvcmllbnRhdGlvbiA9IGlucHV0PEFYT3JpZW50YXRpb24+KCdob3Jpem9udGFsJyk7XG5cbiAgb3Blbk9uID0gaW5wdXQ8QVhNZW51T3BlblRyaWdnZXI+KCdob3ZlcicpO1xuXG4gIGNsb3NlT24gPSBpbnB1dDxBWE1lbnVDbG9zZVRyaWdnZXI+KCdsZWF2ZScpO1xuXG4gIHNlcnZpY2UgPSBpbmplY3QoQVhNZW51U2VydmljZSk7XG5cbiAgb25JdGVtQ2xpY2sgPSBvdXRwdXQ8QVhNZW51SXRlbXNDbGlja0V2ZW50PigpO1xuXG4gIGl0ZW1zID0gaW5wdXQ8QVhNZW51SXRlbVtdPihbXSk7XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBfX2hvc3RDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgYXgtYWN0aW9uLWxpc3QtJHt0aGlzLm9yaWVudGF0aW9uKCl9IGF4LWFjdGlvbi1saXN0YDtcbiAgfVxuXG5cbiAgcHVibGljIGNsb3NlKCkge1xuICAgIHRoaXMuc2VydmljZS5jbG9zZUFsbCQubmV4dCgpO1xuICB9XG59XG4iLCI8bmctY29udGVudCBzZWxlY3Q9XCJheC1tZW51LWl0ZW0sYXgtdGl0bGUsbmctY29udGFpbmVyXCI+PC9uZy1jb250ZW50PlxuXG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBub2RlIG9mIGl0ZW1zKClcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJSZWN1cnNpb25cIlxuICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogbm9kZSB9XCI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjUmVjdXJzaW9uIGxldC1pdGVtPlxuICAgIEBpZihpdGVtLmdyb3VwPy50aXRsZSlcbiAgICB7XG4gICAgPGF4LXRpdGxlPnt7aXRlbS5ncm91cD8udGl0bGV9fTwvYXgtdGl0bGU+XG4gICAgfVxuICAgIDxheC1tZW51LWl0ZW0gW25hbWVdPVwiaXRlbS5uYW1lXCIgW2RhdGFdPVwiaXRlbS5kYXRhXCIgW2Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIiBbY29sb3JdPVwiaXRlbS5jb2xvclwiPlxuICAgICAgICA8YXgtcHJlZml4PlxuICAgICAgICAgICAgQGlmKGl0ZW0uaWNvbilcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgIDxheC1pY29uIFtpY29uXT1cIml0ZW0uaWNvblwiPlxuICAgICAgICAgICAgPC9heC1pY29uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2F4LXByZWZpeD5cbiAgICAgICAgQGlmKGl0ZW0udGV4dClcbiAgICAgICAge1xuICAgICAgICA8YXgtdGV4dD57eyBpdGVtLnRleHQgfX08L2F4LXRleHQ+XG4gICAgICAgIH1cbiAgICAgICAgQGlmKGl0ZW0uc3VmZml4KVxuICAgICAgICB7XG4gICAgICAgIDxheC1zdWZmaXg+XG4gICAgICAgICAgICA8YXgtdGV4dD57eyBpdGVtLnN1ZmZpeC50ZXh0IH19PC9heC10ZXh0PlxuICAgICAgICA8L2F4LXN1ZmZpeD5cbiAgICAgICAgfVxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLml0ZW1zXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiUmVjdXJzaW9uXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogY2hpbGQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvYXgtbWVudS1pdGVtPlxuICAgIEBpZihpdGVtLmJyZWFrKVxuICAgIHtcbiAgICA8YXgtZGl2aWRlcj48L2F4LWRpdmlkZXI+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
@@ -1,4 +1,3 @@
|
|
1
|
-
import { AXButtonModule } from '@acorex/components/button';
|
2
1
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
3
2
|
import { AXLoadingModule } from '@acorex/components/loading';
|
4
3
|
import { AXPopoverModule } from '@acorex/components/popover';
|
@@ -6,23 +5,24 @@ import { AXTranslationModule } from '@acorex/core/translation';
|
|
6
5
|
import { OverlayModule } from '@angular/cdk/overlay';
|
7
6
|
import { CommonModule } from '@angular/common';
|
8
7
|
import { NgModule } from '@angular/core';
|
9
|
-
import { AXMenuItemComponent } from './menu-item/menu-item.component';
|
10
8
|
import { AXMenuComponent } from './menu.component';
|
9
|
+
import { AXContextMenuComponent } from './context-menu.component';
|
10
|
+
import { AXMenuItemComponent } from './menu-item.component';
|
11
11
|
import * as i0 from "@angular/core";
|
12
|
-
const COMPONENT = [AXMenuItemComponent, AXMenuComponent];
|
12
|
+
const COMPONENT = [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent];
|
13
13
|
const MODULES = [AXDecoratorModule, AXLoadingModule, AXTranslationModule, OverlayModule, AXPopoverModule];
|
14
14
|
export class AXMenuModule {
|
15
15
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
16
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, declarations: [AXMenuItemComponent, AXMenuComponent], imports: [CommonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule, OverlayModule, AXPopoverModule
|
17
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, imports: [CommonModule, MODULES
|
16
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, declarations: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent], imports: [CommonModule, AXDecoratorModule, AXLoadingModule, AXTranslationModule, OverlayModule, AXPopoverModule], exports: [AXMenuItemComponent, AXMenuComponent, AXContextMenuComponent] }); }
|
17
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, imports: [CommonModule, MODULES] }); }
|
18
18
|
}
|
19
19
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuModule, decorators: [{
|
20
20
|
type: NgModule,
|
21
21
|
args: [{
|
22
22
|
declarations: [...COMPONENT],
|
23
|
-
imports: [CommonModule, ...MODULES
|
23
|
+
imports: [CommonModule, ...MODULES],
|
24
24
|
exports: [...COMPONENT],
|
25
25
|
providers: [],
|
26
26
|
}]
|
27
27
|
}] });
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvbWVudS9zcmMvbGliL21lbnUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFFNUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxlQUFlLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUNqRixNQUFNLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7QUFRMUcsTUFBTSxPQUFPLFlBQVk7OEdBQVosWUFBWTsrR0FBWixZQUFZLGlCQVROLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxzQkFBc0IsYUFLbkUsWUFBWSxFQUpQLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxhQURyRixtQkFBbUIsRUFBRSxlQUFlLEVBQUUsc0JBQXNCOytHQVNsRSxZQUFZLFlBSmIsWUFBWSxFQUFLLE9BQU87OzJGQUl2QixZQUFZO2tCQU54QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsR0FBRyxPQUFPLENBQUM7b0JBQ25DLE9BQU8sRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDO29CQUN2QixTQUFTLEVBQUUsRUFBRTtpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFYRGVjb3JhdG9yTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2RlY29yYXRvcnMnO1xuaW1wb3J0IHsgQVhMb2FkaW5nTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL2xvYWRpbmcnO1xuaW1wb3J0IHsgQVhQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGFjb3JleC9jb21wb25lbnRzL3BvcG92ZXInO1xuaW1wb3J0IHsgQVhUcmFuc2xhdGlvbk1vZHVsZSB9IGZyb20gJ0BhY29yZXgvY29yZS90cmFuc2xhdGlvbic7XG5pbXBvcnQgeyBPdmVybGF5TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEFYTWVudUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVhDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBWE1lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWl0ZW0uY29tcG9uZW50JztcblxuY29uc3QgQ09NUE9ORU5UID0gW0FYTWVudUl0ZW1Db21wb25lbnQsIEFYTWVudUNvbXBvbmVudCwgQVhDb250ZXh0TWVudUNvbXBvbmVudF07XG5jb25zdCBNT0RVTEVTID0gW0FYRGVjb3JhdG9yTW9kdWxlLCBBWExvYWRpbmdNb2R1bGUsIEFYVHJhbnNsYXRpb25Nb2R1bGUsIE92ZXJsYXlNb2R1bGUsIEFYUG9wb3Zlck1vZHVsZV07XG5cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogWy4uLkNPTVBPTkVOVF0sXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIC4uLk1PRFVMRVNdLFxuICBleHBvcnRzOiBbLi4uQ09NUE9ORU5UXSxcbiAgcHJvdmlkZXJzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgQVhNZW51TW9kdWxlIHsgfVxuIl19
|
@@ -1,17 +1,19 @@
|
|
1
1
|
import { Injectable } from '@angular/core';
|
2
|
-
import {
|
2
|
+
import { Subject } from 'rxjs';
|
3
3
|
import * as i0 from "@angular/core";
|
4
4
|
export class AXMenuService {
|
5
5
|
constructor() {
|
6
|
-
this.
|
6
|
+
this.closeAll$ = new Subject();
|
7
|
+
this.open$ = new Subject();
|
8
|
+
this.close$ = new Subject();
|
9
|
+
this.closeExcept$ = new Subject();
|
10
|
+
this.openContextMenu$ = new Subject();
|
11
|
+
this.closeAllContextMenu$ = new Subject();
|
7
12
|
}
|
8
13
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
9
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuService
|
14
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuService }); }
|
10
15
|
}
|
11
16
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: AXMenuService, decorators: [{
|
12
|
-
type: Injectable
|
13
|
-
args: [{
|
14
|
-
providedIn: 'root',
|
15
|
-
}]
|
17
|
+
type: Injectable
|
16
18
|
}] });
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL21lbnUvc3JjL2xpYi9tZW51LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQUsvQixNQUFNLE9BQU8sYUFBYTtJQUQxQjtRQUVTLGNBQVMsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUN6QyxVQUFLLEdBQXFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDeEQsV0FBTSxHQUFxQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3pELGlCQUFZLEdBQUcsSUFBSSxPQUFPLEVBQTJCLENBQUM7UUFFdEQscUJBQWdCLEdBQUcsSUFBSSxPQUFPLEVBQTBDLENBQUM7UUFDekUseUJBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQTBCLENBQUM7S0FDckU7OEdBUlksYUFBYTtrSEFBYixhQUFhOzsyRkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQVhNZW51SXRlbUNvbXBvbmVudEJhc2UsIEFYUm9vdE1lbnUgfSBmcm9tICcuL21lbnUudHlwZXMnO1xuaW1wb3J0IHsgQVhQb2ludCB9IGZyb20gJ0BhY29yZXgvY29yZS91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBWE1lbnVTZXJ2aWNlIHtcbiAgcHVibGljIGNsb3NlQWxsJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHB1YmxpYyBvcGVuJDogU3ViamVjdDxBWE1lbnVJdGVtQ29tcG9uZW50QmFzZT4gPSBuZXcgU3ViamVjdCgpO1xuICBwdWJsaWMgY2xvc2UkOiBTdWJqZWN0PEFYTWVudUl0ZW1Db21wb25lbnRCYXNlPiA9IG5ldyBTdWJqZWN0KCk7XG4gIHB1YmxpYyBjbG9zZUV4Y2VwdCQgPSBuZXcgU3ViamVjdDxBWE1lbnVJdGVtQ29tcG9uZW50QmFzZT4oKTtcblxuICBwdWJsaWMgb3BlbkNvbnRleHRNZW51JCA9IG5ldyBTdWJqZWN0PHsgc2VuZGVyOiBBWFJvb3RNZW51LCBwb2ludDogQVhQb2ludCB9PigpO1xuICBwdWJsaWMgY2xvc2VBbGxDb250ZXh0TWVudSQgPSBuZXcgU3ViamVjdDx7IHNlbmRlcjogQVhSb290TWVudSB9PigpO1xufVxuIl19
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { NXClickEvent } from '@acorex/components/common';
|
2
|
+
export class AXRootMenu {
|
3
|
+
}
|
4
|
+
export class AXMenuItemComponentBase {
|
5
|
+
}
|
6
|
+
export class AXMenuItem {
|
7
|
+
}
|
8
|
+
export class AXMenuItemClickBaseEvent extends NXClickEvent {
|
9
|
+
constructor() {
|
10
|
+
super(...arguments);
|
11
|
+
this.canceled = false;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9tZW51L3NyYy9saWIvbWVudS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFlBQVksRUFBZSxNQUFNLDJCQUEyQixDQUFDO0FBT3ZHLE1BQU0sT0FBZ0IsVUFBVTtDQU0vQjtBQUVELE1BQU0sT0FBZ0IsdUJBQXVCO0NBQzVDO0FBR0QsTUFBTSxPQUFnQixVQUFVO0NBZ0IvQjtBQUdELE1BQU0sT0FBTyx3QkFBOEQsU0FBUSxZQUFlO0lBQWxHOztRQU1FLGFBQVEsR0FBRyxLQUFLLENBQUM7SUFDbkIsQ0FBQztDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVhPcmllbnRhdGlvbiwgQVhTdHlsZUNvbG9yVHlwZSwgTlhDbGlja0V2ZW50LCBOWENvbXBvbmVudCB9IGZyb20gJ0BhY29yZXgvY29tcG9uZW50cy9jb21tb24nO1xuaW1wb3J0IHsgT3V0cHV0RW1pdHRlclJlZiwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQVhNZW51T3BlblRyaWdnZXIgPSAnY2xpY2snIHwgJ2hvdmVyJztcbmV4cG9ydCB0eXBlIEFYTWVudUNsb3NlVHJpZ2dlciA9ICdjbGljaycgfCAnbGVhdmUnO1xuXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWFJvb3RNZW51IHtcbiAgb3JpZW50YXRpb246IFdyaXRhYmxlU2lnbmFsPEFYT3JpZW50YXRpb24+O1xuICBvcGVuT246IFdyaXRhYmxlU2lnbmFsPEFYTWVudU9wZW5UcmlnZ2VyPjtcbiAgY2xvc2VPbjogV3JpdGFibGVTaWduYWw8QVhNZW51Q2xvc2VUcmlnZ2VyPjtcbiAgb25JdGVtQ2xpY2s6IE91dHB1dEVtaXR0ZXJSZWY8QVhNZW51SXRlbUNsaWNrQmFzZUV2ZW50PjtcbiAgbmF0aXZlRWxlbWVudDogSFRNTERpdkVsZW1lbnQ7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBWE1lbnVJdGVtQ29tcG9uZW50QmFzZSB7XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFYTWVudUl0ZW0ge1xuICBjb2xvcj86IEFYU3R5bGVDb2xvclR5cGVcbiAgbmFtZT86IHN0cmluZztcbiAgdGV4dDogc3RyaW5nO1xuICBkYXRhPzogYW55XG4gIGljb24/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaXRlbXM/OiBBWE1lbnVJdGVtW107XG4gIHN1ZmZpeD86IHtcbiAgICB0ZXh0OiBzdHJpbmdcbiAgfTtcbiAgYnJlYWs/OiBib29sZWFuXG4gIGdyb3VwPzoge1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICB0aXRsZT86IHN0cmluZ1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIEFYTWVudUl0ZW1DbGlja0Jhc2VFdmVudDxUIGV4dGVuZHMgTlhDb21wb25lbnQgPSBOWENvbXBvbmVudD4gZXh0ZW5kcyBOWENsaWNrRXZlbnQ8VD4ge1xuICBpdGVtOiB7XG4gICAgbmFtZT86IHN0cmluZztcbiAgICB0ZXh0OiBzdHJpbmc7XG4gICAgZGF0YT86IGFueVxuICB9O1xuICBjYW5jZWxlZCA9IGZhbHNlO1xufVxuIl19
|