@seniorsistemas/data-seniorx-core 2.3.0 → 3.0.0
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/core/constants/autocomplete.const.d.ts +4 -0
- package/core/constants/context-selector.const.d.ts +1 -0
- package/core/constants/gantt.const.d.ts +7 -0
- package/core/constants/hyperlink.const.d.ts +1 -0
- package/core/constants/inline-edit.const.d.ts +4 -0
- package/core/constants/kanban.const.d.ts +2 -0
- package/core/constants/pin-code-field.const.d.ts +5 -0
- package/core/constants/rating-scale.const.d.ts +1 -0
- package/core/constants/spotlight.const.d.ts +8 -0
- package/core/constants/star-rating.const.d.ts +4 -0
- package/core/constants/stepper.const.d.ts +1 -0
- package/core/constants/tiered-menu.const.d.ts +3 -0
- package/core/types/autocomplete.type.d.ts +9 -0
- package/core/types/chat.type.d.ts +12 -0
- package/core/types/checkbox-list.type.d.ts +12 -0
- package/core/types/gantt.type.d.ts +22 -0
- package/core/types/grid-menu.type.d.ts +13 -0
- package/core/types/hyperlink.type.d.ts +1 -0
- package/core/types/image-cropper.type.d.ts +20 -0
- package/core/types/inline-edit.type.d.ts +26 -0
- package/core/types/kanban.type.d.ts +36 -0
- package/core/types/panel.type.d.ts +16 -0
- package/core/types/profile-picture-picker.type.d.ts +9 -0
- package/core/types/rating-scale.type.d.ts +5 -0
- package/core/types/select-button.type.d.ts +1 -0
- package/core/types/spotlight.type.d.ts +34 -0
- package/core/types/star-rating.type.d.ts +1 -0
- package/core/types/stepper.type.d.ts +20 -0
- package/core/types/table-column.type.d.ts +3 -1
- package/core/types/table-options.type.d.ts +8 -2
- package/core/types/table.type.d.ts +1 -1
- package/core/types/tiered-menu.type.d.ts +16 -0
- package/core/types/tree.type.d.ts +25 -0
- package/core/types/workspace-switch.type.d.ts +6 -0
- package/core/utils/body-scroll.util.d.ts +2 -0
- package/core/utils/roving-focus.util.d.ts +2 -0
- package/core/utils/selection.util.d.ts +3 -0
- package/core/utils/tree.util.d.ts +4 -0
- package/esm2022/core/constants/autocomplete.const.mjs +5 -0
- package/esm2022/core/constants/context-selector.const.mjs +2 -0
- package/esm2022/core/constants/gantt.const.mjs +7 -0
- package/esm2022/core/constants/hyperlink.const.mjs +2 -1
- package/esm2022/core/constants/inline-edit.const.mjs +5 -0
- package/esm2022/core/constants/kanban.const.mjs +3 -0
- package/esm2022/core/constants/pin-code-field.const.mjs +6 -0
- package/esm2022/core/constants/rating-scale.const.mjs +2 -0
- package/esm2022/core/constants/spotlight.const.mjs +9 -0
- package/esm2022/core/constants/star-rating.const.mjs +5 -0
- package/esm2022/core/constants/stepper.const.mjs +2 -0
- package/esm2022/core/constants/table.const.mjs +2 -2
- package/esm2022/core/constants/tiered-menu.const.mjs +4 -0
- package/esm2022/core/types/autocomplete.type.mjs +2 -0
- package/esm2022/core/types/chat.type.mjs +2 -0
- package/esm2022/core/types/checkbox-list.type.mjs +2 -0
- package/esm2022/core/types/gantt.type.mjs +2 -0
- package/esm2022/core/types/grid-menu.type.mjs +2 -0
- package/esm2022/core/types/hyperlink.type.mjs +1 -1
- package/esm2022/core/types/image-cropper.type.mjs +2 -0
- package/esm2022/core/types/inline-edit.type.mjs +2 -0
- package/esm2022/core/types/kanban.type.mjs +2 -0
- package/esm2022/core/types/panel.type.mjs +9 -0
- package/esm2022/core/types/profile-picture-picker.type.mjs +2 -0
- package/esm2022/core/types/rating-scale.type.mjs +2 -0
- package/esm2022/core/types/select-button.type.mjs +1 -1
- package/esm2022/core/types/spotlight.type.mjs +2 -0
- package/esm2022/core/types/star-rating.type.mjs +2 -0
- package/esm2022/core/types/stepper.type.mjs +7 -0
- package/esm2022/core/types/table-column.type.mjs +1 -1
- package/esm2022/core/types/table-options.type.mjs +1 -1
- package/esm2022/core/types/table.type.mjs +1 -1
- package/esm2022/core/types/tiered-menu.type.mjs +2 -0
- package/esm2022/core/types/tree.type.mjs +2 -0
- package/esm2022/core/types/workspace-switch.type.mjs +2 -0
- package/esm2022/core/utils/body-scroll.util.mjs +19 -0
- package/esm2022/core/utils/combobox.util.mjs +3 -2
- package/esm2022/core/utils/roving-focus.util.mjs +20 -0
- package/esm2022/core/utils/selection.util.mjs +13 -0
- package/esm2022/core/utils/string.util.mjs +8 -3
- package/esm2022/core/utils/tree.util.mjs +23 -0
- package/esm2022/features/accordion/accordion.component.mjs +2 -2
- package/esm2022/features/accordion/{accordion-item.component.mjs → components/accordion-item/accordion-item.component.mjs} +7 -7
- package/esm2022/features/autocomplete/autocomplete.component.mjs +501 -0
- package/esm2022/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.mjs +30 -0
- package/esm2022/features/breadcrumb/breadcrumb.component.mjs +2 -2
- package/esm2022/features/card-list/card/card.component.mjs +63 -99
- package/esm2022/features/chat/chat.component.mjs +126 -0
- package/esm2022/features/checkbox-list/checkbox-list.component.mjs +125 -0
- package/esm2022/features/combobox/combobox.component.mjs +20 -8
- package/esm2022/features/context-selector/context-selector.component.mjs +198 -0
- package/esm2022/features/filters/filters.component.mjs +1 -1
- package/esm2022/features/gantt/components/gantt-side-table/gantt-side-table.component.mjs +17 -0
- package/esm2022/features/gantt/gantt-date.utils.mjs +97 -0
- package/esm2022/features/gantt/gantt.component.mjs +89 -0
- package/esm2022/features/gantt/gantt.engine.mjs +662 -0
- package/esm2022/features/grid-menu/grid-menu.component.mjs +104 -0
- package/esm2022/features/hyperlink/hyperlink.component.mjs +7 -4
- package/esm2022/features/icon-picker/icon-picker.component.mjs +3 -3
- package/esm2022/features/image-cropper/image-cropper.component.mjs +218 -0
- package/esm2022/features/image-cropper/services/image-cropper.service.mjs +50 -0
- package/esm2022/features/infinite-scroll/infinite-scroll.directive.mjs +89 -0
- package/esm2022/features/info-sign/info-sign.component.mjs +3 -3
- package/esm2022/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +38 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.mjs +29 -0
- package/esm2022/features/inline-edit/components/inline-edit-item/inline-edit-item.component.mjs +131 -0
- package/esm2022/features/inline-edit/fields/inline-edit-field.mjs +17 -0
- package/esm2022/features/inline-edit/fields/inline-edit-number-field.mjs +15 -0
- package/esm2022/features/inline-edit/fields/inline-edit-text-field.mjs +11 -0
- package/esm2022/features/inline-edit/fields/inline-edit-textarea-field.mjs +15 -0
- package/esm2022/features/inline-edit/inline-edit.component.mjs +27 -0
- package/esm2022/features/interactive-content/interactive-content.directive.mjs +140 -0
- package/esm2022/features/kanban/components/kanban-column/kanban-column.component.mjs +88 -0
- package/esm2022/features/kanban/components/kanban-item/kanban-item.component.mjs +72 -0
- package/esm2022/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.mjs +19 -0
- package/esm2022/features/kanban/directives/kanban-template.directive.mjs +22 -0
- package/esm2022/features/kanban/kanban.component.mjs +198 -0
- package/esm2022/features/kanban/services/kanban-event.service.mjs +27 -0
- package/esm2022/features/loading-state/loading-state.component.mjs +3 -62
- package/esm2022/features/mouse-events/directives/double-click.directive.mjs +34 -0
- package/esm2022/features/mouse-events/directives/long-press.directive.mjs +61 -0
- package/esm2022/features/paginator/paginator.component.mjs +8 -3
- package/esm2022/features/panel/panel.component.mjs +43 -11
- package/esm2022/features/pin-code-field/pin-code-field.component.mjs +234 -0
- package/esm2022/features/profile-picture-picker/profile-picture-picker.component.mjs +330 -0
- package/esm2022/features/rating-scale/rating-scale.component.mjs +86 -0
- package/esm2022/features/row-card-list/row-card/row-card.component.mjs +3 -3
- package/esm2022/features/scaffold/scaffold.component.mjs +4 -6
- package/esm2022/features/select-button/select-button.component.mjs +7 -4
- package/esm2022/features/speech-recognition/services/speech-recognition.service.mjs +148 -0
- package/esm2022/features/speech-recognition/services/text-to-speech.service.mjs +88 -0
- package/esm2022/features/speech-recognition/speech-recognition.component.mjs +243 -0
- package/esm2022/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.mjs +521 -0
- package/esm2022/features/spotlight/directives/spotlight-step.directive.mjs +38 -0
- package/esm2022/features/spotlight/services/spotlight-tour.service.mjs +179 -0
- package/esm2022/features/spotlight/spotlight.component.mjs +160 -0
- package/esm2022/features/star-rating/star-rating.component.mjs +95 -0
- package/esm2022/features/stepper/stepper.component.mjs +86 -0
- package/esm2022/features/switch/switch.component.mjs +12 -8
- package/esm2022/features/tab/{tab-item.component.mjs → components/tab-item/tab-item.component.mjs} +1 -1
- package/esm2022/features/tab/tab.component.mjs +4 -4
- package/esm2022/features/table/components/table-cell-content.component.mjs +14 -5
- package/esm2022/features/table/table.component.mjs +220 -29
- package/esm2022/features/table/utils/table-data.util.mjs +71 -8
- package/esm2022/features/table/utils/table-layout.util.mjs +21 -1
- package/esm2022/features/tiered-menu/components/tiered-menu/tiered-menu.component.mjs +367 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.mjs +11 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs +97 -0
- package/esm2022/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.mjs +181 -0
- package/esm2022/features/tiered-menu/directives/tiered-menu.directive.mjs +246 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.event.service.mjs +16 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.global.service.mjs +12 -0
- package/esm2022/features/tiered-menu/services/tiered-menu.service.mjs +49 -0
- package/esm2022/features/tree/components/tree-node-item/tree-node-item.component.mjs +169 -0
- package/esm2022/features/tree/tree.component.mjs +211 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.mjs +41 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.mjs +38 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.mjs +29 -0
- package/esm2022/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.mjs +35 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-flow.service.mjs +106 -0
- package/esm2022/features/visual-sql-editor/services/visual-sql-editor-state.service.mjs +230 -0
- package/esm2022/features/visual-sql-editor/types/visual-sql-editor.types.mjs +2 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.mjs +72 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-sql.util.mjs +281 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor-text.util.mjs +37 -0
- package/esm2022/features/visual-sql-editor/utils/visual-sql-editor.constants.mjs +89 -0
- package/esm2022/features/visual-sql-editor/visual-sql-editor.component.mjs +172 -630
- package/esm2022/locales/en.json +351 -3
- package/esm2022/locales/es-CO.json +351 -3
- package/esm2022/locales/pt.json +351 -3
- package/esm2022/providers/features.provider.mjs +40 -4
- package/esm2022/public-api.mjs +56 -3
- package/features/accordion/accordion.component.d.ts +1 -1
- package/features/accordion/{accordion-item.component.d.ts → components/accordion-item/accordion-item.component.d.ts} +1 -1
- package/features/autocomplete/autocomplete.component.d.ts +102 -0
- package/features/autocomplete/components/autocomplete-chip/autocomplete-chip.component.d.ts +11 -0
- package/features/card-list/card/card.component.d.ts +14 -34
- package/features/chat/chat.component.d.ts +31 -0
- package/features/checkbox-list/checkbox-list.component.d.ts +26 -0
- package/features/combobox/combobox.component.d.ts +2 -1
- package/features/context-selector/context-selector.component.d.ts +37 -0
- package/features/gantt/components/gantt-side-table/gantt-side-table.component.d.ts +8 -0
- package/features/gantt/gantt-date.utils.d.ts +36 -0
- package/features/gantt/gantt.component.d.ts +24 -0
- package/features/gantt/gantt.engine.d.ts +52 -0
- package/features/grid-menu/grid-menu.component.d.ts +29 -0
- package/features/hyperlink/hyperlink.component.d.ts +2 -1
- package/features/image-cropper/image-cropper.component.d.ts +43 -0
- package/features/image-cropper/services/image-cropper.service.d.ts +13 -0
- package/features/infinite-scroll/infinite-scroll.directive.d.ts +25 -0
- package/features/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-text/inline-edit-text.component.d.ts +13 -0
- package/features/inline-edit/components/fields/inline-edit-textarea/inline-edit-textarea.component.d.ts +13 -0
- package/features/inline-edit/components/inline-edit-item/inline-edit-item.component.d.ts +37 -0
- package/features/inline-edit/fields/inline-edit-field.d.ts +12 -0
- package/features/inline-edit/fields/inline-edit-number-field.d.ts +9 -0
- package/features/inline-edit/fields/inline-edit-text-field.d.ts +7 -0
- package/features/inline-edit/fields/inline-edit-textarea-field.d.ts +9 -0
- package/features/inline-edit/inline-edit.component.d.ts +13 -0
- package/features/interactive-content/interactive-content.directive.d.ts +31 -0
- package/features/kanban/components/kanban-column/kanban-column.component.d.ts +22 -0
- package/features/kanban/components/kanban-item/kanban-item.component.d.ts +23 -0
- package/features/kanban/components/kanban-item-dragging/kanban-item-dragging.component.d.ts +8 -0
- package/features/kanban/directives/kanban-template.directive.d.ts +10 -0
- package/features/kanban/kanban.component.d.ts +32 -0
- package/features/kanban/services/kanban-event.service.d.ts +15 -0
- package/features/loading-state/loading-state.component.d.ts +0 -2
- package/features/mouse-events/directives/double-click.directive.d.ts +11 -0
- package/features/mouse-events/directives/long-press.directive.d.ts +14 -0
- package/features/panel/panel.component.d.ts +12 -3
- package/features/pin-code-field/pin-code-field.component.d.ts +44 -0
- package/features/profile-picture-picker/profile-picture-picker.component.d.ts +77 -0
- package/features/rating-scale/rating-scale.component.d.ts +24 -0
- package/features/select-button/select-button.component.d.ts +2 -1
- package/features/speech-recognition/services/speech-recognition.service.d.ts +29 -0
- package/features/speech-recognition/services/text-to-speech.service.d.ts +24 -0
- package/features/speech-recognition/speech-recognition.component.d.ts +50 -0
- package/features/spotlight/components/spotlight-overlay/spotlight-overlay.component.d.ts +59 -0
- package/features/spotlight/directives/spotlight-step.directive.d.ts +13 -0
- package/features/spotlight/services/spotlight-tour.service.d.ts +46 -0
- package/features/spotlight/spotlight.component.d.ts +59 -0
- package/features/star-rating/star-rating.component.d.ts +26 -0
- package/features/stepper/stepper.component.d.ts +23 -0
- package/features/switch/switch.component.d.ts +2 -1
- package/features/tab/tab.component.d.ts +1 -1
- package/features/table/components/table-cell-content.component.d.ts +4 -3
- package/features/table/table.component.d.ts +40 -5
- package/features/table/utils/table-data.util.d.ts +1 -0
- package/features/table/utils/table-layout.util.d.ts +1 -0
- package/features/tiered-menu/components/tiered-menu/tiered-menu.component.d.ts +49 -0
- package/features/tiered-menu/components/tiered-menu-divider/tiered-menu-divider.component.d.ts +5 -0
- package/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.d.ts +19 -0
- package/features/tiered-menu/components/tiered-menu-nested/tiered-menu-nested.component.d.ts +26 -0
- package/features/tiered-menu/directives/tiered-menu.directive.d.ts +44 -0
- package/features/tiered-menu/services/tiered-menu.event.service.d.ts +13 -0
- package/features/tiered-menu/services/tiered-menu.global.service.d.ts +7 -0
- package/features/tiered-menu/services/tiered-menu.service.d.ts +14 -0
- package/features/tree/components/tree-node-item/tree-node-item.component.d.ts +37 -0
- package/features/tree/tree.component.d.ts +37 -0
- package/features/visual-sql-editor/components/visual-sql-editor-field-modal/visual-sql-editor-field-modal.component.d.ts +18 -0
- package/features/visual-sql-editor/components/visual-sql-editor-filter-modal/visual-sql-editor-filter-modal.component.d.ts +17 -0
- package/features/visual-sql-editor/components/visual-sql-editor-join-modal/visual-sql-editor-join-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-sort-modal/visual-sql-editor-sort-modal.component.d.ts +13 -0
- package/features/visual-sql-editor/components/visual-sql-editor-source-modal/visual-sql-editor-source-modal.component.d.ts +15 -0
- package/features/visual-sql-editor/services/visual-sql-editor-flow.service.d.ts +26 -0
- package/features/visual-sql-editor/services/visual-sql-editor-state.service.d.ts +72 -0
- package/features/visual-sql-editor/types/visual-sql-editor.types.d.ts +182 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sanitize.util.d.ts +14 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-sql.util.d.ts +81 -0
- package/features/visual-sql-editor/utils/visual-sql-editor-text.util.d.ts +15 -0
- package/features/visual-sql-editor/utils/visual-sql-editor.constants.d.ts +36 -0
- package/features/visual-sql-editor/visual-sql-editor.component.d.ts +37 -199
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs +14883 -6353
- package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
- package/package.json +8 -8
- package/public-api.d.ts +72 -2
- package/src/locales/en.json +353 -15
- package/src/locales/es-CO.json +352 -14
- package/src/locales/pt.json +352 -14
- package/styles/sdc-global-variables.scss +1 -1
- package/styles.css +1 -1
- /package/features/tab/{tab-item.component.d.ts → components/tab-item/tab-item.component.d.ts} +0 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { ApplicationRef, ChangeDetectionStrategy, ChangeDetectorRef, Component, HostListener, Injector, ViewEncapsulation, createComponent, inject } from '@angular/core';
|
|
2
|
+
import { Subject, takeUntil } from 'rxjs';
|
|
3
|
+
import { enableBodyScroll, disableBodyScroll } from '../../../../core/utils/body-scroll.util';
|
|
4
|
+
import { TieredMenuEventService } from '../../services/tiered-menu.event.service';
|
|
5
|
+
import { TieredMenuService } from '../../services/tiered-menu.service';
|
|
6
|
+
import { TieredMenuDividerComponent } from '../tiered-menu-divider/tiered-menu-divider.component';
|
|
7
|
+
import { TieredMenuItemComponent } from '../tiered-menu-item/tiered-menu-item.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
// Menu layout constants
|
|
10
|
+
const TIERED_MENU_ITEM_HEIGHT = 37;
|
|
11
|
+
const TIERED_MENU_DIVIDER_HEIGHT = 5;
|
|
12
|
+
const TIERED_MENU_PADDING = 8;
|
|
13
|
+
const TIERED_MENU_DEFAULT_WIDTH = 176;
|
|
14
|
+
const TIERED_MENU_EXTRA_PADDING = 8;
|
|
15
|
+
export class TieredMenuComponent {
|
|
16
|
+
appRef = inject(ApplicationRef);
|
|
17
|
+
injector = inject(Injector);
|
|
18
|
+
cdr = inject(ChangeDetectorRef);
|
|
19
|
+
tieredMenuService = inject(TieredMenuService);
|
|
20
|
+
eventService = inject(TieredMenuEventService);
|
|
21
|
+
ariaLabel;
|
|
22
|
+
items = [];
|
|
23
|
+
top = 0;
|
|
24
|
+
left = 0;
|
|
25
|
+
menuTriggerEvent = 'hover';
|
|
26
|
+
isSubmenu = false;
|
|
27
|
+
componentRef = null;
|
|
28
|
+
menuElement = null;
|
|
29
|
+
unsubscribe$ = new Subject();
|
|
30
|
+
onResize() {
|
|
31
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
32
|
+
}
|
|
33
|
+
onDocumentClick(event) {
|
|
34
|
+
const target = event.target;
|
|
35
|
+
if (!(target instanceof Element)) {
|
|
36
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const clickedInside = target.closest('sdc-tiered-menu-item') || target.closest('sdc-tiered-menu-divider');
|
|
40
|
+
if (!clickedInside) {
|
|
41
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
onKeydownHandler(event) {
|
|
45
|
+
const currentItem = this.getCurrentNavigableItem();
|
|
46
|
+
const action = this.getKeydownAction(event, currentItem);
|
|
47
|
+
if (action) {
|
|
48
|
+
action();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
ngOnInit() {
|
|
52
|
+
this.subscribeEvents();
|
|
53
|
+
if (!this.isSubmenu) {
|
|
54
|
+
this.tieredMenuService.items = this.items;
|
|
55
|
+
this.tieredMenuService.currentItems = this.items;
|
|
56
|
+
this.tieredMenuService.currentItem = this.items[0] ?? null;
|
|
57
|
+
disableBodyScroll();
|
|
58
|
+
requestAnimationFrame(() => this.focusCurrentItem());
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
ngOnDestroy() {
|
|
62
|
+
this.unsubscribe$.next();
|
|
63
|
+
this.unsubscribe$.complete();
|
|
64
|
+
}
|
|
65
|
+
focusCurrentItem() {
|
|
66
|
+
const id = this.tieredMenuService.currentItem?.id;
|
|
67
|
+
if (!id) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
document.getElementById(id)?.focus();
|
|
71
|
+
}
|
|
72
|
+
incrementCurrentItem() {
|
|
73
|
+
if (!this.tieredMenuService.currentItem) {
|
|
74
|
+
this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0] ?? null;
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!this.items.includes(this.tieredMenuService.currentItem)) {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
let nextItem = this.tieredMenuService.currentItem;
|
|
81
|
+
let iterations = 0;
|
|
82
|
+
const maxIterations = this.tieredMenuService.currentItems.length;
|
|
83
|
+
do {
|
|
84
|
+
const currentIndex = this.tieredMenuService.currentItems.indexOf(nextItem) + 1;
|
|
85
|
+
nextItem =
|
|
86
|
+
currentIndex < this.tieredMenuService.currentItems.length
|
|
87
|
+
? this.tieredMenuService.currentItems[currentIndex]
|
|
88
|
+
: this.tieredMenuService.currentItems[0];
|
|
89
|
+
iterations++;
|
|
90
|
+
} while (nextItem?.divider && iterations < maxIterations);
|
|
91
|
+
// Only update if we found a non-divider item
|
|
92
|
+
if (!nextItem?.divider) {
|
|
93
|
+
this.tieredMenuService.currentItem = nextItem;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
decrementCurrentItem() {
|
|
97
|
+
if (!this.tieredMenuService.currentItem) {
|
|
98
|
+
this.tieredMenuService.currentItem = this.tieredMenuService.currentItems[0] ?? null;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (!this.items.includes(this.tieredMenuService.currentItem)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
let previousItem = this.tieredMenuService.currentItem;
|
|
105
|
+
let iterations = 0;
|
|
106
|
+
const maxIterations = this.tieredMenuService.currentItems.length;
|
|
107
|
+
do {
|
|
108
|
+
const currentIndex = this.tieredMenuService.currentItems.indexOf(previousItem) - 1;
|
|
109
|
+
previousItem =
|
|
110
|
+
currentIndex >= 0
|
|
111
|
+
? this.tieredMenuService.currentItems[currentIndex]
|
|
112
|
+
: this.tieredMenuService.currentItems[this.tieredMenuService.currentItems.length - 1];
|
|
113
|
+
iterations++;
|
|
114
|
+
} while (previousItem?.divider && iterations < maxIterations);
|
|
115
|
+
// Only update if we found a non-divider item
|
|
116
|
+
if (!previousItem?.divider) {
|
|
117
|
+
this.tieredMenuService.currentItem = previousItem;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
createMenu(items, position) {
|
|
121
|
+
if (this.componentRef || !items.length) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
this.componentRef = createComponent(TieredMenuComponent, {
|
|
125
|
+
environmentInjector: this.appRef.injector,
|
|
126
|
+
elementInjector: this.injector
|
|
127
|
+
});
|
|
128
|
+
this.appRef.attachView(this.componentRef.hostView);
|
|
129
|
+
const hostElement = this.componentRef.location.nativeElement;
|
|
130
|
+
document.body.appendChild(hostElement);
|
|
131
|
+
this.componentRef.instance.items = items;
|
|
132
|
+
this.componentRef.instance.isSubmenu = true;
|
|
133
|
+
this.menuElement = hostElement.querySelector('.sdc-tiered-menu');
|
|
134
|
+
this.setMenuPosition(position);
|
|
135
|
+
}
|
|
136
|
+
destroy(propagate = true) {
|
|
137
|
+
if (this.componentRef) {
|
|
138
|
+
// Recursively destroy nested submenus before destroying this component,
|
|
139
|
+
// because componentRef.destroy() cancels subscriptions (ngOnDestroy), which
|
|
140
|
+
// would prevent the child from cleaning up its own submenus.
|
|
141
|
+
this.componentRef.instance.destroy(false);
|
|
142
|
+
this.appRef.detachView(this.componentRef.hostView);
|
|
143
|
+
this.componentRef.destroy();
|
|
144
|
+
this.componentRef = null;
|
|
145
|
+
this.menuElement = null;
|
|
146
|
+
}
|
|
147
|
+
if (propagate) {
|
|
148
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
setMenuPosition(position) {
|
|
152
|
+
if (!this.componentRef) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const { top, right, bottom, left } = position;
|
|
156
|
+
const menuWidth = this.menuElement?.getBoundingClientRect().width ?? TIERED_MENU_DEFAULT_WIDTH;
|
|
157
|
+
const itemsCount = this.countMenuItems(false);
|
|
158
|
+
const dividersCount = this.countMenuItems(true);
|
|
159
|
+
const menuHeight = itemsCount * TIERED_MENU_ITEM_HEIGHT + dividersCount * TIERED_MENU_DIVIDER_HEIGHT + TIERED_MENU_PADDING + TIERED_MENU_EXTRA_PADDING;
|
|
160
|
+
this.setMenuHorizontalPosition(left, right, menuWidth);
|
|
161
|
+
this.setMenuVerticalPosition(top, bottom, menuHeight);
|
|
162
|
+
}
|
|
163
|
+
countMenuItems(isDivider) {
|
|
164
|
+
if (!this.componentRef) {
|
|
165
|
+
return 0;
|
|
166
|
+
}
|
|
167
|
+
return this.componentRef.instance.items.reduce((count, item) => (item.divider === isDivider ? count + 1 : count), 0);
|
|
168
|
+
}
|
|
169
|
+
setMenuHorizontalPosition(left, right, menuWidth) {
|
|
170
|
+
if (!this.componentRef) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
this.componentRef.instance.left = this.hasSpaceOnRight(right, menuWidth) ? right : left - menuWidth;
|
|
174
|
+
}
|
|
175
|
+
setMenuVerticalPosition(top, bottom, menuHeight) {
|
|
176
|
+
if (!this.componentRef) {
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
const hasSpaceAtBottom = this.hasSpaceAtBottom(bottom, menuHeight);
|
|
180
|
+
this.componentRef.instance.top = hasSpaceAtBottom ? window.scrollY + top : Math.max(window.innerHeight - menuHeight, window.scrollY);
|
|
181
|
+
}
|
|
182
|
+
hasSpaceOnRight(right, menuWidth) {
|
|
183
|
+
return window.innerWidth - right > menuWidth;
|
|
184
|
+
}
|
|
185
|
+
hasSpaceAtBottom(bottom, menuHeight) {
|
|
186
|
+
return window.innerHeight - bottom > menuHeight;
|
|
187
|
+
}
|
|
188
|
+
subscribeEvents() {
|
|
189
|
+
this.eventService.incrementCurrentItemEvent.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
190
|
+
this.incrementCurrentItem();
|
|
191
|
+
this.focusCurrentItem();
|
|
192
|
+
});
|
|
193
|
+
this.eventService.decrementCurrentItemEvent.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
194
|
+
this.decrementCurrentItem();
|
|
195
|
+
this.focusCurrentItem();
|
|
196
|
+
});
|
|
197
|
+
this.eventService.selectItemEvent.pipe(takeUntil(this.unsubscribe$)).subscribe((item) => {
|
|
198
|
+
if (!item) {
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
if (item.submenu) {
|
|
202
|
+
this.eventService.openItemMenuEvent.emit(item);
|
|
203
|
+
}
|
|
204
|
+
else if (item.command) {
|
|
205
|
+
item.command();
|
|
206
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
207
|
+
}
|
|
208
|
+
else {
|
|
209
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
this.eventService.closeAllMenusEvent.pipe(takeUntil(this.unsubscribe$)).subscribe(() => {
|
|
213
|
+
this.destroy(false);
|
|
214
|
+
this.tieredMenuService.currentItem = null;
|
|
215
|
+
this.resetCurrentItems();
|
|
216
|
+
this.items = this.tieredMenuService.markAllItemsAsClosed(this.items);
|
|
217
|
+
this.tieredMenuService.items = this.tieredMenuService.markAllItemsAsClosed(this.tieredMenuService.items);
|
|
218
|
+
enableBodyScroll();
|
|
219
|
+
this.cdr.markForCheck();
|
|
220
|
+
});
|
|
221
|
+
this.eventService.openItemMenuEvent.pipe(takeUntil(this.unsubscribe$)).subscribe((item) => {
|
|
222
|
+
if (!item) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (this.tieredMenuService.currentItem?.parent &&
|
|
226
|
+
item.parent &&
|
|
227
|
+
!this.tieredMenuService.searchTheHierarchy(this.tieredMenuService.currentItem.parent, item)) {
|
|
228
|
+
this.closeCurrentItemAncestors(item);
|
|
229
|
+
}
|
|
230
|
+
this.openItemSubmenu(item);
|
|
231
|
+
});
|
|
232
|
+
this.eventService.closeItemMenuEvent.pipe(takeUntil(this.unsubscribe$)).subscribe((item) => {
|
|
233
|
+
if (!item) {
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
// Only process if this item belongs to the current menu or is an ancestor item
|
|
237
|
+
const isInCurrentItems = this.items.some((entry) => entry.id === item.id);
|
|
238
|
+
const isAncestorOfCurrentItem = this.tieredMenuService.currentItem &&
|
|
239
|
+
this.tieredMenuService.searchTheHierarchy(item, this.tieredMenuService.currentItem);
|
|
240
|
+
if (!isInCurrentItems && !isAncestorOfCurrentItem) {
|
|
241
|
+
return;
|
|
242
|
+
}
|
|
243
|
+
if (item.parent) {
|
|
244
|
+
item.parent.isOpen = false;
|
|
245
|
+
}
|
|
246
|
+
this.tieredMenuService.currentItems =
|
|
247
|
+
item.parent?.parent?.submenu ?? this.tieredMenuService.items;
|
|
248
|
+
this.tieredMenuService.currentItem = item.parent ?? null;
|
|
249
|
+
this.destroy(false);
|
|
250
|
+
requestAnimationFrame(() => this.focusCurrentItem());
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
closeCurrentItemAncestors(targetItem) {
|
|
254
|
+
let current = this.tieredMenuService.currentItem;
|
|
255
|
+
if (!current) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
// Close ancestors by direct state mutation instead of emitting events to avoid re-entrancy
|
|
259
|
+
while (current && current.parent !== targetItem.parent) {
|
|
260
|
+
current.isOpen = false;
|
|
261
|
+
current = current.parent ?? null;
|
|
262
|
+
}
|
|
263
|
+
if (current) {
|
|
264
|
+
current.isOpen = false;
|
|
265
|
+
}
|
|
266
|
+
// Single change detection run after closing all ancestors
|
|
267
|
+
this.cdr.detectChanges();
|
|
268
|
+
}
|
|
269
|
+
openItemSubmenu(item) {
|
|
270
|
+
if (!item.submenu || item.isOpen || !this.items.includes(item)) {
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
const itemElement = document.getElementById(item.id ?? '');
|
|
274
|
+
if (!itemElement) {
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
this.createMenu(item.submenu, itemElement.getBoundingClientRect());
|
|
278
|
+
this.tieredMenuService.currentItems = item.submenu;
|
|
279
|
+
this.tieredMenuService.currentItem = item.submenu[0] ?? null;
|
|
280
|
+
item.isOpen = true;
|
|
281
|
+
requestAnimationFrame(() => this.focusCurrentItem());
|
|
282
|
+
}
|
|
283
|
+
getCurrentNavigableItem() {
|
|
284
|
+
const currentItem = this.tieredMenuService.currentItem;
|
|
285
|
+
if (!currentItem || !this.items.includes(currentItem)) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
return currentItem;
|
|
289
|
+
}
|
|
290
|
+
getKeydownAction(event, currentItem) {
|
|
291
|
+
switch (event.key) {
|
|
292
|
+
case 'Escape':
|
|
293
|
+
return () => this.closeAllMenus(event, true);
|
|
294
|
+
case 'Tab':
|
|
295
|
+
return () => this.closeAllMenus(event, false);
|
|
296
|
+
case ' ':
|
|
297
|
+
case 'Enter':
|
|
298
|
+
return () => this.selectCurrentItem(event, currentItem);
|
|
299
|
+
case 'ArrowUp':
|
|
300
|
+
return () => this.moveCurrentItem(event, false);
|
|
301
|
+
case 'ArrowDown':
|
|
302
|
+
return () => this.moveCurrentItem(event, true);
|
|
303
|
+
case 'ArrowLeft':
|
|
304
|
+
return () => this.closeCurrentItemMenu(event, currentItem);
|
|
305
|
+
case 'ArrowRight':
|
|
306
|
+
return () => this.openCurrentItemMenu(event, currentItem);
|
|
307
|
+
default:
|
|
308
|
+
return null;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
resetCurrentItems() {
|
|
312
|
+
this.tieredMenuService.currentItems = this.tieredMenuService.items;
|
|
313
|
+
}
|
|
314
|
+
closeAllMenus(event, preventDefault) {
|
|
315
|
+
this.eventService.closeAllMenusEvent.emit();
|
|
316
|
+
if (preventDefault) {
|
|
317
|
+
event.preventDefault();
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
selectCurrentItem(event, currentItem) {
|
|
321
|
+
if (!currentItem || currentItem.disabled) {
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
this.eventService.selectItemEvent.emit(currentItem);
|
|
325
|
+
event.preventDefault();
|
|
326
|
+
}
|
|
327
|
+
moveCurrentItem(event, increment) {
|
|
328
|
+
if (increment) {
|
|
329
|
+
this.eventService.incrementCurrentItemEvent.emit();
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
this.eventService.decrementCurrentItemEvent.emit();
|
|
333
|
+
}
|
|
334
|
+
event.preventDefault();
|
|
335
|
+
}
|
|
336
|
+
closeCurrentItemMenu(event, currentItem) {
|
|
337
|
+
if (!currentItem) {
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
this.eventService.closeItemMenuEvent.emit(currentItem);
|
|
341
|
+
this.cdr.detectChanges();
|
|
342
|
+
event.preventDefault();
|
|
343
|
+
}
|
|
344
|
+
openCurrentItemMenu(event, currentItem) {
|
|
345
|
+
if (!currentItem || currentItem.disabled) {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
this.eventService.openItemMenuEvent.emit(currentItem);
|
|
349
|
+
event.preventDefault();
|
|
350
|
+
}
|
|
351
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
352
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TieredMenuComponent, isStandalone: true, selector: "sdc-tiered-menu", host: { listeners: { "window:resize": "onResize()", "document:click": "onDocumentClick($event)", "document:keydown": "onKeydownHandler($event)" } }, ngImport: i0, template: "<div\n class=\"sdc-tiered-menu\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel\"\n [style.left.px]=\"left\"\n [style.top.px]=\"top\"\n>\n @for (item of items; track item.id) {\n @if (item.visible && !item.divider) {\n <sdc-tiered-menu-item\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n [highlight]=\"item.isOpen === true\"\n [triggerEvent]=\"menuTriggerEvent\"\n [closeOnClick]=\"false\"\n ></sdc-tiered-menu-item>\n }\n @if (item.divider) {\n <sdc-tiered-menu-divider></sdc-tiered-menu-divider>\n }\n }\n</div>\n", styles: [".sdc-tiered-menu{position:absolute;z-index:9999;display:inline-flex;flex-direction:column;min-width:11rem;max-height:100vh;padding:.25rem 0;overflow-y:auto;border:1px solid #ccc;border-radius:.375rem;background:#fff;box-shadow:0 2px 12px #0000001a}\n"], dependencies: [{ kind: "component", type: TieredMenuItemComponent, selector: "sdc-tiered-menu-item", inputs: ["item", "focused", "highlight", "triggerEvent", "closeOnClick"] }, { kind: "component", type: TieredMenuDividerComponent, selector: "sdc-tiered-menu-divider" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
353
|
+
}
|
|
354
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuComponent, decorators: [{
|
|
355
|
+
type: Component,
|
|
356
|
+
args: [{ selector: 'sdc-tiered-menu', standalone: true, imports: [TieredMenuItemComponent, TieredMenuDividerComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"sdc-tiered-menu\"\n role=\"menu\"\n [attr.aria-label]=\"ariaLabel\"\n [style.left.px]=\"left\"\n [style.top.px]=\"top\"\n>\n @for (item of items; track item.id) {\n @if (item.visible && !item.divider) {\n <sdc-tiered-menu-item\n [item]=\"item\"\n [focused]=\"item === tieredMenuService.currentItem\"\n [highlight]=\"item.isOpen === true\"\n [triggerEvent]=\"menuTriggerEvent\"\n [closeOnClick]=\"false\"\n ></sdc-tiered-menu-item>\n }\n @if (item.divider) {\n <sdc-tiered-menu-divider></sdc-tiered-menu-divider>\n }\n }\n</div>\n", styles: [".sdc-tiered-menu{position:absolute;z-index:9999;display:inline-flex;flex-direction:column;min-width:11rem;max-height:100vh;padding:.25rem 0;overflow-y:auto;border:1px solid #ccc;border-radius:.375rem;background:#fff;box-shadow:0 2px 12px #0000001a}\n"] }]
|
|
357
|
+
}], propDecorators: { onResize: [{
|
|
358
|
+
type: HostListener,
|
|
359
|
+
args: ['window:resize']
|
|
360
|
+
}], onDocumentClick: [{
|
|
361
|
+
type: HostListener,
|
|
362
|
+
args: ['document:click', ['$event']]
|
|
363
|
+
}], onKeydownHandler: [{
|
|
364
|
+
type: HostListener,
|
|
365
|
+
args: ['document:keydown', ['$event']]
|
|
366
|
+
}] } });
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy90aWVyZWQtbWVudS9jb21wb25lbnRzL3RpZXJlZC1tZW51L3RpZXJlZC1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvdGllcmVkLW1lbnUvY29tcG9uZW50cy90aWVyZWQtbWVudS90aWVyZWQtbWVudS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUVULFlBQVksRUFDWixRQUFRLEVBR1IsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixNQUFNLEVBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFMUMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFOUYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDbEcsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7O0FBRXpGLHdCQUF3QjtBQUN4QixNQUFNLHVCQUF1QixHQUFHLEVBQUUsQ0FBQztBQUNuQyxNQUFNLDBCQUEwQixHQUFHLENBQUMsQ0FBQztBQUNyQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsQ0FBQztBQUM5QixNQUFNLHlCQUF5QixHQUFHLEdBQUcsQ0FBQztBQUN0QyxNQUFNLHlCQUF5QixHQUFHLENBQUMsQ0FBQztBQVdw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LENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUTs4QkFxQi9CLFFBQVE7c0JBRGpCLFlBQVk7dUJBQUMsZUFBZTtnQkFNbkIsZUFBZTtzQkFEeEIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFpQmhDLGdCQUFnQjtzQkFEekIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29tcG9uZW50UmVmLFxuICBIb3N0TGlzdGVuZXIsXG4gIEluamVjdG9yLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGNyZWF0ZUNvbXBvbmVudCxcbiAgaW5qZWN0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGVuYWJsZUJvZHlTY3JvbGwsIGRpc2FibGVCb2R5U2Nyb2xsIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS91dGlscy9ib2R5LXNjcm9sbC51dGlsJztcbmltcG9ydCB0eXBlIHsgVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEsIFRpZXJlZE1lbnVUcmlnZ2VyRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3R5cGVzL3RpZXJlZC1tZW51LnR5cGUnO1xuaW1wb3J0IHsgVGllcmVkTWVudUV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpZXJlZC1tZW51LmV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGllcmVkTWVudVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90aWVyZWQtbWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IFRpZXJlZE1lbnVEaXZpZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vdGllcmVkLW1lbnUtZGl2aWRlci90aWVyZWQtbWVudS1kaXZpZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUaWVyZWRNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3RpZXJlZC1tZW51LWl0ZW0vdGllcmVkLW1lbnUtaXRlbS5jb21wb25lbnQnO1xuXG4vLyBNZW51IGxheW91dCBjb25zdGFudHNcbmNvbnN0IFRJRVJFRF9NRU5VX0lURU1fSEVJR0hUID0gMzc7XG5jb25zdCBUSUVSRURfTUVOVV9ESVZJREVSX0hFSUdIVCA9IDU7XG5jb25zdCBUSUVSRURfTUVOVV9QQURESU5HID0gODtcbmNvbnN0IFRJRVJFRF9NRU5VX0RFRkFVTFRfV0lEVEggPSAxNzY7XG5jb25zdCBUSUVSRURfTUVOVV9FWFRSQV9QQURESU5HID0gODtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2RjLXRpZXJlZC1tZW51JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1RpZXJlZE1lbnVJdGVtQ29tcG9uZW50LCBUaWVyZWRNZW51RGl2aWRlckNvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90aWVyZWQtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpZXJlZC1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBUaWVyZWRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHJlYWRvbmx5IHRpZXJlZE1lbnVTZXJ2aWNlID0gaW5qZWN0KFRpZXJlZE1lbnVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUV2ZW50U2VydmljZSk7XG5cbiAgcHVibGljIGFyaWFMYWJlbD86IHN0cmluZztcbiAgcHVibGljIGl0ZW1zOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YVtdID0gW107XG4gIHB1YmxpYyB0b3AgPSAwO1xuICBwdWJsaWMgbGVmdCA9IDA7XG4gIHB1YmxpYyBtZW51VHJpZ2dlckV2ZW50OiBUaWVyZWRNZW51VHJpZ2dlckV2ZW50ID0gJ2hvdmVyJztcbiAgcHVibGljIGlzU3VibWVudSA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8VGllcmVkTWVudUNvbXBvbmVudD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBtZW51RWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnKVxuICBwcm90ZWN0ZWQgb25SZXNpemUoKTogdm9pZCB7XG4gICAgdGhpcy5ldmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LmVtaXQoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblxuICAgIGlmICghKHRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQpKSB7XG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5jbG9zZUFsbE1lbnVzRXZlbnQuZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNsaWNrZWRJbnNpZGUgPSB0YXJnZXQuY2xvc2VzdCgnc2RjLXRpZXJlZC1tZW51LWl0ZW0nKSB8fCB0YXJnZXQuY2xvc2VzdCgnc2RjLXRpZXJlZC1tZW51LWRpdmlkZXInKTtcblxuICAgIGlmICghY2xpY2tlZEluc2lkZSkge1xuICAgICAgdGhpcy5ldmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcbiAgcHJvdGVjdGVkIG9uS2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMuZ2V0Q3VycmVudE5hdmlnYWJsZUl0ZW0oKTtcblxuICAgIGNvbnN0IGFjdGlvbiA9IHRoaXMuZ2V0S2V5ZG93bkFjdGlvbihldmVudCwgY3VycmVudEl0ZW0pO1xuXG4gICAgaWYgKGFjdGlvbikge1xuICAgICAgYWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpYmVFdmVudHMoKTtcblxuICAgIGlmICghdGhpcy5pc1N1Ym1lbnUpIHtcbiAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMgPSB0aGlzLml0ZW1zO1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHRoaXMuaXRlbXNbMF0gPz8gbnVsbDtcbiAgICAgIGRpc2FibGVCb2R5U2Nyb2xsKCk7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mb2N1c0N1cnJlbnRJdGVtKCkpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLm5leHQoKTtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0N1cnJlbnRJdGVtKCk6IHZvaWQge1xuICAgIGNvbnN0IGlkID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbT8uaWQ7XG4gICAgaWYgKCFpZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKT8uZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jcmVtZW50Q3VycmVudEl0ZW0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtKSB7XG4gICAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXNbMF0gPz8gbnVsbDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuaXRlbXMuaW5jbHVkZXModGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbmV4dEl0ZW0gPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtO1xuICAgIGxldCBpdGVyYXRpb25zID0gMDtcbiAgICBjb25zdCBtYXhJdGVyYXRpb25zID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMubGVuZ3RoO1xuXG4gICAgZG8ge1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbXMuaW5kZXhPZihuZXh0SXRlbSkgKyAxO1xuICAgICAgbmV4dEl0ZW0gPVxuICAgICAgICBjdXJyZW50SW5kZXggPCB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcy5sZW5ndGhcbiAgICAgICAgICA/IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zW2N1cnJlbnRJbmRleF1cbiAgICAgICAgICA6IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zWzBdO1xuICAgICAgaXRlcmF0aW9ucysrO1xuICAgIH0gd2hpbGUgKG5leHRJdGVtPy5kaXZpZGVyICYmIGl0ZXJhdGlvbnMgPCBtYXhJdGVyYXRpb25zKTtcblxuICAgIC8vIE9ubHkgdXBkYXRlIGlmIHdlIGZvdW5kIGEgbm9uLWRpdmlkZXIgaXRlbVxuICAgIGlmICghbmV4dEl0ZW0/LmRpdmlkZXIpIHtcbiAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPSBuZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRlY3JlbWVudEN1cnJlbnRJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSkge1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zWzBdID8/IG51bGw7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLml0ZW1zLmluY2x1ZGVzKHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzSXRlbSA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW07XG4gICAgbGV0IGl0ZXJhdGlvbnMgPSAwO1xuICAgIGNvbnN0IG1heEl0ZXJhdGlvbnMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcy5sZW5ndGg7XG5cbiAgICBkbyB7XG4gICAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtcy5pbmRleE9mKHByZXZpb3VzSXRlbSkgLSAxO1xuICAgICAgcHJldmlvdXNJdGVtID1cbiAgICAgICAgY3VycmVudEluZGV4ID49IDBcbiAgICAgICAgICA/IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zW2N1cnJlbnRJbmRleF1cbiAgICAgICAgICA6IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zW3RoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgaXRlcmF0aW9ucysrO1xuICAgIH0gd2hpbGUgKHByZXZpb3VzSXRlbT8uZGl2aWRlciAmJiBpdGVyYXRpb25zIDwgbWF4SXRlcmF0aW9ucyk7XG5cbiAgICAvLyBPbmx5IHVwZGF0ZSBpZiB3ZSBmb3VuZCBhIG5vbi1kaXZpZGVyIGl0ZW1cbiAgICBpZiAoIXByZXZpb3VzSXRlbT8uZGl2aWRlcikge1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IHByZXZpb3VzSXRlbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1lbnUoaXRlbXM6IFRpZXJlZE1lbnVJdGVtSW50ZXJuYWxEYXRhW10sIHBvc2l0aW9uOiBET01SZWN0KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY29tcG9uZW50UmVmIHx8ICFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZiA9IGNyZWF0ZUNvbXBvbmVudChUaWVyZWRNZW51Q29tcG9uZW50LCB7XG4gICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmFwcFJlZi5pbmplY3RvcixcbiAgICAgIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuYXBwUmVmLmF0dGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdEVsZW1lbnQpO1xuXG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5pc1N1Ym1lbnUgPSB0cnVlO1xuICAgIHRoaXMubWVudUVsZW1lbnQgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuc2RjLXRpZXJlZC1tZW51Jyk7XG4gICAgdGhpcy5zZXRNZW51UG9zaXRpb24ocG9zaXRpb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95KHByb3BhZ2F0ZSA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IGRlc3Ryb3kgbmVzdGVkIHN1Ym1lbnVzIGJlZm9yZSBkZXN0cm95aW5nIHRoaXMgY29tcG9uZW50LFxuICAgICAgLy8gYmVjYXVzZSBjb21wb25lbnRSZWYuZGVzdHJveSgpIGNhbmNlbHMgc3Vic2NyaXB0aW9ucyAobmdPbkRlc3Ryb3kpLCB3aGljaFxuICAgICAgLy8gd291bGQgcHJldmVudCB0aGUgY2hpbGQgZnJvbSBjbGVhbmluZyB1cCBpdHMgb3duIHN1Ym1lbnVzLlxuICAgICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UuZGVzdHJveShmYWxzZSk7XG5cbiAgICAgIHRoaXMuYXBwUmVmLmRldGFjaFZpZXcodGhpcy5jb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSBudWxsO1xuICAgICAgdGhpcy5tZW51RWxlbWVudCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHByb3BhZ2F0ZSkge1xuICAgICAgdGhpcy5ldmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LmVtaXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE1lbnVQb3NpdGlvbihwb3NpdGlvbjogRE9NUmVjdCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gcG9zaXRpb247XG4gICAgY29uc3QgbWVudVdpZHRoID0gdGhpcy5tZW51RWxlbWVudD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggPz8gVElFUkVEX01FTlVfREVGQVVMVF9XSURUSDtcbiAgICBjb25zdCBpdGVtc0NvdW50ID0gdGhpcy5jb3VudE1lbnVJdGVtcyhmYWxzZSk7XG4gICAgY29uc3QgZGl2aWRlcnNDb3VudCA9IHRoaXMuY291bnRNZW51SXRlbXModHJ1ZSk7XG4gICAgY29uc3QgbWVudUhlaWdodCA9IGl0ZW1zQ291bnQgKiBUSUVSRURfTUVOVV9JVEVNX0hFSUdIVCArIGRpdmlkZXJzQ291bnQgKiBUSUVSRURfTUVOVV9ESVZJREVSX0hFSUdIVCArIFRJRVJFRF9NRU5VX1BBRERJTkcgKyBUSUVSRURfTUVOVV9FWFRSQV9QQURESU5HO1xuXG4gICAgdGhpcy5zZXRNZW51SG9yaXpvbnRhbFBvc2l0aW9uKGxlZnQsIHJpZ2h0LCBtZW51V2lkdGgpO1xuICAgIHRoaXMuc2V0TWVudVZlcnRpY2FsUG9zaXRpb24odG9wLCBib3R0b20sIG1lbnVIZWlnaHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb3VudE1lbnVJdGVtcyhpc0RpdmlkZXI6IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFJlZi5pbnN0YW5jZS5pdGVtcy5yZWR1Y2UoXG4gICAgICAoY291bnQ6IG51bWJlciwgaXRlbTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEpID0+IChpdGVtLmRpdmlkZXIgPT09IGlzRGl2aWRlciA/IGNvdW50ICsgMSA6IGNvdW50KSxcbiAgICAgIDBcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZW51SG9yaXpvbnRhbFBvc2l0aW9uKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgbWVudVdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UubGVmdCA9IHRoaXMuaGFzU3BhY2VPblJpZ2h0KHJpZ2h0LCBtZW51V2lkdGgpID8gcmlnaHQgOiBsZWZ0IC0gbWVudVdpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZW51VmVydGljYWxQb3NpdGlvbih0b3A6IG51bWJlciwgYm90dG9tOiBudW1iZXIsIG1lbnVIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoYXNTcGFjZUF0Qm90dG9tID0gdGhpcy5oYXNTcGFjZUF0Qm90dG9tKGJvdHRvbSwgbWVudUhlaWdodCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UudG9wID0gaGFzU3BhY2VBdEJvdHRvbSA/IHdpbmRvdy5zY3JvbGxZICsgdG9wIDogTWF0aC5tYXgod2luZG93LmlubmVySGVpZ2h0IC0gbWVudUhlaWdodCwgd2luZG93LnNjcm9sbFkpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYXNTcGFjZU9uUmlnaHQocmlnaHQ6IG51bWJlciwgbWVudVdpZHRoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggLSByaWdodCA+IG1lbnVXaWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgaGFzU3BhY2VBdEJvdHRvbShib3R0b206IG51bWJlciwgbWVudUhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbSA+IG1lbnVIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIHN1YnNjcmliZUV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5pbmNyZW1lbnRDdXJyZW50SXRlbUV2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuaW5jcmVtZW50Q3VycmVudEl0ZW0oKTtcbiAgICAgIHRoaXMuZm9jdXNDdXJyZW50SXRlbSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuZGVjcmVtZW50Q3VycmVudEl0ZW1FdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmRlY3JlbWVudEN1cnJlbnRJdGVtKCk7XG4gICAgICB0aGlzLmZvY3VzQ3VycmVudEl0ZW0oKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNlbGVjdEl0ZW1FdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW0uc3VibWVudSkge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vcGVuSXRlbU1lbnVFdmVudC5lbWl0KGl0ZW0pO1xuICAgICAgfSBlbHNlIGlmIChpdGVtLmNvbW1hbmQpIHtcbiAgICAgICAgaXRlbS5jb21tYW5kKCk7XG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlQWxsTWVudXNFdmVudC5lbWl0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5jbG9zZUFsbE1lbnVzRXZlbnQuZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuY2xvc2VBbGxNZW51c0V2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZGVzdHJveShmYWxzZSk7XG4gICAgICB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtID0gbnVsbDtcbiAgICAgIHRoaXMucmVzZXRDdXJyZW50SXRlbXMoKTtcbiAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLm1hcmtBbGxJdGVtc0FzQ2xvc2VkKHRoaXMuaXRlbXMpO1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcyA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UubWFya0FsbEl0ZW1zQXNDbG9zZWQoXG4gICAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuaXRlbXNcbiAgICAgICk7XG4gICAgICBlbmFibGVCb2R5U2Nyb2xsKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLm9wZW5JdGVtTWVudUV2ZW50LnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0/LnBhcmVudCAmJlxuICAgICAgICBpdGVtLnBhcmVudCAmJlxuICAgICAgICAhdGhpcy50aWVyZWRNZW51U2VydmljZS5zZWFyY2hUaGVIaWVyYXJjaHkodGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbS5wYXJlbnQsIGl0ZW0pXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5jbG9zZUN1cnJlbnRJdGVtQW5jZXN0b3JzKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICB0aGlzLm9wZW5JdGVtU3VibWVudShpdGVtKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlSXRlbU1lbnVFdmVudC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCkpLnN1YnNjcmliZSgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBwcm9jZXNzIGlmIHRoaXMgaXRlbSBiZWxvbmdzIHRvIHRoZSBjdXJyZW50IG1lbnUgb3IgaXMgYW4gYW5jZXN0b3IgaXRlbVxuICAgICAgY29uc3QgaXNJbkN1cnJlbnRJdGVtcyA9IHRoaXMuaXRlbXMuc29tZSgoZW50cnkpID0+IGVudHJ5LmlkID09PSBpdGVtLmlkKTtcbiAgICAgIGNvbnN0IGlzQW5jZXN0b3JPZkN1cnJlbnRJdGVtID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSAmJiBcbiAgICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5zZWFyY2hUaGVIaWVyYXJjaHkoaXRlbSwgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSk7XG5cbiAgICAgIGlmICghaXNJbkN1cnJlbnRJdGVtcyAmJiAhaXNBbmNlc3Rvck9mQ3VycmVudEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXRlbS5wYXJlbnQpIHtcbiAgICAgICAgaXRlbS5wYXJlbnQuaXNPcGVuID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zID1cbiAgICAgICAgaXRlbS5wYXJlbnQ/LnBhcmVudD8uc3VibWVudSA/PyB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLml0ZW1zO1xuICAgICAgdGhpcy50aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbSA9IGl0ZW0ucGFyZW50ID8/IG51bGw7XG4gICAgICB0aGlzLmRlc3Ryb3koZmFsc2UpO1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuZm9jdXNDdXJyZW50SXRlbSgpKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VDdXJyZW50SXRlbUFuY2VzdG9ycyh0YXJnZXRJdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSk6IHZvaWQge1xuICAgIGxldCBjdXJyZW50OiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSB8IG51bGwgPSB0aGlzLnRpZXJlZE1lbnVTZXJ2aWNlLmN1cnJlbnRJdGVtO1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENsb3NlIGFuY2VzdG9ycyBieSBkaXJlY3Qgc3RhdGUgbXV0YXRpb24gaW5zdGVhZCBvZiBlbWl0dGluZyBldmVudHMgdG8gYXZvaWQgcmUtZW50cmFuY3lcbiAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50LnBhcmVudCAhPT0gdGFyZ2V0SXRlbS5wYXJlbnQpIHtcbiAgICAgIGN1cnJlbnQuaXNPcGVuID0gZmFsc2U7XG4gICAgICBjdXJyZW50ID0gY3VycmVudC5wYXJlbnQgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY3VycmVudCkge1xuICAgICAgY3VycmVudC5pc09wZW4gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTaW5nbGUgY2hhbmdlIGRldGVjdGlvbiBydW4gYWZ0ZXIgY2xvc2luZyBhbGwgYW5jZXN0b3JzXG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuSXRlbVN1Ym1lbnUoaXRlbTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEpOiB2b2lkIHtcbiAgICBpZiAoIWl0ZW0uc3VibWVudSB8fCBpdGVtLmlzT3BlbiB8fCAhdGhpcy5pdGVtcy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1FbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaXRlbS5pZCA/PyAnJyk7XG5cbiAgICBpZiAoIWl0ZW1FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jcmVhdGVNZW51KGl0ZW0uc3VibWVudSwgaXRlbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpO1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zID0gaXRlbS5zdWJtZW51O1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW0gPSBpdGVtLnN1Ym1lbnVbMF0gPz8gbnVsbDtcbiAgICBpdGVtLmlzT3BlbiA9IHRydWU7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuZm9jdXNDdXJyZW50SXRlbSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q3VycmVudE5hdmlnYWJsZUl0ZW0oKTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEgfCBudWxsIHtcbiAgICBjb25zdCBjdXJyZW50SXRlbSA9IHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW07XG5cbiAgICBpZiAoIWN1cnJlbnRJdGVtIHx8ICF0aGlzLml0ZW1zLmluY2x1ZGVzKGN1cnJlbnRJdGVtKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRJdGVtO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRLZXlkb3duQWN0aW9uKFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGN1cnJlbnRJdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSB8IG51bGxcbiAgKTogKCgpID0+IHZvaWQpIHwgbnVsbCB7XG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgIHJldHVybiAoKSA9PiB0aGlzLmNsb3NlQWxsTWVudXMoZXZlbnQsIHRydWUpO1xuICAgICAgY2FzZSAnVGFiJzpcbiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuY2xvc2VBbGxNZW51cyhldmVudCwgZmFsc2UpO1xuICAgICAgY2FzZSAnICc6XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICAgIHJldHVybiAoKSA9PiB0aGlzLnNlbGVjdEN1cnJlbnRJdGVtKGV2ZW50LCBjdXJyZW50SXRlbSk7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMubW92ZUN1cnJlbnRJdGVtKGV2ZW50LCBmYWxzZSk7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5tb3ZlQ3VycmVudEl0ZW0oZXZlbnQsIHRydWUpO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuY2xvc2VDdXJyZW50SXRlbU1lbnUoZXZlbnQsIGN1cnJlbnRJdGVtKTtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICByZXR1cm4gKCkgPT4gdGhpcy5vcGVuQ3VycmVudEl0ZW1NZW51KGV2ZW50LCBjdXJyZW50SXRlbSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJlc2V0Q3VycmVudEl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMudGllcmVkTWVudVNlcnZpY2UuY3VycmVudEl0ZW1zID0gdGhpcy50aWVyZWRNZW51U2VydmljZS5pdGVtcztcbiAgfVxuXG4gIHByaXZhdGUgY2xvc2VBbGxNZW51cyhldmVudDogS2V5Ym9hcmRFdmVudCwgcHJldmVudERlZmF1bHQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmV2ZW50U2VydmljZS5jbG9zZUFsbE1lbnVzRXZlbnQuZW1pdCgpO1xuXG4gICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0Q3VycmVudEl0ZW0oXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgY3VycmVudEl0ZW06IFRpZXJlZE1lbnVJdGVtSW50ZXJuYWxEYXRhIHwgbnVsbFxuICApOiB2b2lkIHtcbiAgICBpZiAoIWN1cnJlbnRJdGVtIHx8IGN1cnJlbnRJdGVtLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFNlcnZpY2Uuc2VsZWN0SXRlbUV2ZW50LmVtaXQoY3VycmVudEl0ZW0pO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIG1vdmVDdXJyZW50SXRlbShldmVudDogS2V5Ym9hcmRFdmVudCwgaW5jcmVtZW50OiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGluY3JlbWVudCkge1xuICAgICAgdGhpcy5ldmVudFNlcnZpY2UuaW5jcmVtZW50Q3VycmVudEl0ZW1FdmVudC5lbWl0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmRlY3JlbWVudEN1cnJlbnRJdGVtRXZlbnQuZW1pdCgpO1xuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlQ3VycmVudEl0ZW1NZW51KFxuICAgIGV2ZW50OiBLZXlib2FyZEV2ZW50LFxuICAgIGN1cnJlbnRJdGVtOiBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSB8IG51bGxcbiAgKTogdm9pZCB7XG4gICAgaWYgKCFjdXJyZW50SXRlbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlSXRlbU1lbnVFdmVudC5lbWl0KGN1cnJlbnRJdGVtKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkN1cnJlbnRJdGVtTWVudShcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICBjdXJyZW50SXRlbTogVGllcmVkTWVudUl0ZW1JbnRlcm5hbERhdGEgfCBudWxsXG4gICk6IHZvaWQge1xuICAgIGlmICghY3VycmVudEl0ZW0gfHwgY3VycmVudEl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmV2ZW50U2VydmljZS5vcGVuSXRlbU1lbnVFdmVudC5lbWl0KGN1cnJlbnRJdGVtKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2RjLXRpZXJlZC1tZW51XCJcbiAgcm9sZT1cIm1lbnVcIlxuICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gIFtzdHlsZS5sZWZ0LnB4XT1cImxlZnRcIlxuICBbc3R5bGUudG9wLnB4XT1cInRvcFwiXG4+XG4gIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0uaWQpIHtcbiAgQGlmIChpdGVtLnZpc2libGUgJiYgIWl0ZW0uZGl2aWRlcikge1xuICA8c2RjLXRpZXJlZC1tZW51LWl0ZW1cbiAgICBbaXRlbV09XCJpdGVtXCJcbiAgICBbZm9jdXNlZF09XCJpdGVtID09PSB0aWVyZWRNZW51U2VydmljZS5jdXJyZW50SXRlbVwiXG4gICAgW2hpZ2hsaWdodF09XCJpdGVtLmlzT3BlbiA9PT0gdHJ1ZVwiXG4gICAgW3RyaWdnZXJFdmVudF09XCJtZW51VHJpZ2dlckV2ZW50XCJcbiAgICBbY2xvc2VPbkNsaWNrXT1cImZhbHNlXCJcbiAgPjwvc2RjLXRpZXJlZC1tZW51LWl0ZW0+XG4gIH1cbiAgQGlmIChpdGVtLmRpdmlkZXIpIHtcbiAgPHNkYy10aWVyZWQtbWVudS1kaXZpZGVyPjwvc2RjLXRpZXJlZC1tZW51LWRpdmlkZXI+XG4gIH1cbiAgfVxuPC9kaXY+XG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class TieredMenuDividerComponent {
|
|
4
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuDividerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: TieredMenuDividerComponent, isStandalone: true, selector: "sdc-tiered-menu-divider", ngImport: i0, template: "<div class=\"sdc-tiered-menu-divider\"></div>\n", styles: [".sdc-tiered-menu-divider{height:1px;margin:.125rem 0;background:#ccc}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
6
|
+
}
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuDividerComponent, decorators: [{
|
|
8
|
+
type: Component,
|
|
9
|
+
args: [{ selector: 'sdc-tiered-menu-divider', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-tiered-menu-divider\"></div>\n", styles: [".sdc-tiered-menu-divider{height:1px;margin:.125rem 0;background:#ccc}\n"] }]
|
|
10
|
+
}] });
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUtZGl2aWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RpZXJlZC1tZW51L2NvbXBvbmVudHMvdGllcmVkLW1lbnUtZGl2aWRlci90aWVyZWQtbWVudS1kaXZpZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvdGllcmVkLW1lbnUvY29tcG9uZW50cy90aWVyZWQtbWVudS1kaXZpZGVyL3RpZXJlZC1tZW51LWRpdmlkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVdEYsTUFBTSxPQUFPLDBCQUEwQjt3R0FBMUIsMEJBQTBCOzRGQUExQiwwQkFBMEIsbUZDVnZDLGlEQUNBOzs0RkRTYSwwQkFBMEI7a0JBUnRDLFNBQVM7K0JBQ0UseUJBQXlCLGNBQ3ZCLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy10aWVyZWQtbWVudS1kaXZpZGVyJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RpZXJlZC1tZW51LWRpdmlkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90aWVyZWQtbWVudS1kaXZpZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZFxufSlcbmV4cG9ydCBjbGFzcyBUaWVyZWRNZW51RGl2aWRlckNvbXBvbmVudCB7fVxuIiwiPGRpdiBjbGFzcz1cInNkYy10aWVyZWQtbWVudS1kaXZpZGVyXCI+PC9kaXY+XG4iXX0=
|
package/esm2022/features/tiered-menu/components/tiered-menu-item/tiered-menu-item.component.mjs
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { CommonModule } from '@angular/common';
|
|
2
|
+
import { ChangeDetectionStrategy, Component, HostListener, Input, ViewEncapsulation, inject } from '@angular/core';
|
|
3
|
+
import { TIERED_MENU_SUBMENU_OPEN_DELAY_MS } from '../../../../core/constants/tiered-menu.const';
|
|
4
|
+
import { TieredMenuEventService } from '../../services/tiered-menu.event.service';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
export class TieredMenuItemComponent {
|
|
8
|
+
eventService = inject(TieredMenuEventService);
|
|
9
|
+
item;
|
|
10
|
+
focused = false;
|
|
11
|
+
highlight = false;
|
|
12
|
+
triggerEvent = 'click';
|
|
13
|
+
closeOnClick = false;
|
|
14
|
+
showTimeoutId;
|
|
15
|
+
ngOnDestroy() {
|
|
16
|
+
window.clearTimeout(this.showTimeoutId);
|
|
17
|
+
}
|
|
18
|
+
onClick() {
|
|
19
|
+
if (this.item.disabled) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (this.item.submenu) {
|
|
23
|
+
if (!this.item.isOpen) {
|
|
24
|
+
this.eventService.openItemMenuEvent.emit(this.item);
|
|
25
|
+
}
|
|
26
|
+
else if (this.closeOnClick) {
|
|
27
|
+
this.eventService.closeItemMenuEvent.emit(this.item);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// submenu is open and closeOnClick is false, do nothing
|
|
31
|
+
}
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
this.eventService.selectItemEvent.emit(this.item);
|
|
35
|
+
}
|
|
36
|
+
onTouchEnd(event) {
|
|
37
|
+
// Prevent synthetic click event from firing after touchend
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
if (this.item.disabled) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (this.item.submenu) {
|
|
43
|
+
if (!this.item.isOpen) {
|
|
44
|
+
this.eventService.openItemMenuEvent.emit(this.item);
|
|
45
|
+
}
|
|
46
|
+
else if (this.closeOnClick) {
|
|
47
|
+
this.eventService.closeItemMenuEvent.emit(this.item);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// submenu is open and closeOnClick is false, do nothing
|
|
51
|
+
}
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
this.eventService.selectItemEvent.emit(this.item);
|
|
55
|
+
}
|
|
56
|
+
onMouseEnter() {
|
|
57
|
+
if (this.item.disabled || this.triggerEvent !== 'hover' || this.item.isOpen) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
this.showTimeoutId = window.setTimeout(() => {
|
|
61
|
+
this.eventService.openItemMenuEvent.emit(this.item);
|
|
62
|
+
}, TIERED_MENU_SUBMENU_OPEN_DELAY_MS);
|
|
63
|
+
}
|
|
64
|
+
onMouseLeave() {
|
|
65
|
+
window.clearTimeout(this.showTimeoutId);
|
|
66
|
+
}
|
|
67
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
68
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: TieredMenuItemComponent, isStandalone: true, selector: "sdc-tiered-menu-item", inputs: { item: "item", focused: "focused", highlight: "highlight", triggerEvent: "triggerEvent", closeOnClick: "closeOnClick" }, host: { listeners: { "click": "onClick()", "touchend": "onTouchEnd($event)", "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()" } }, ngImport: i0, template: "<div\n class=\"sdc-tiered-menu-item\"\n role=\"menuitem\"\n [attr.id]=\"item.id\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [class.sdc-tiered-menu-item--open]=\"item.isOpen\"\n [class.sdc-tiered-menu-item--focused]=\"focused\"\n [class.sdc-tiered-menu-item--disabled]=\"item.disabled\"\n>\n <span class=\"sdc-tiered-menu-item__content\">\n <span\n class=\"sdc-tiered-menu-item__icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"sdc-tiered-menu-item__label\">{{ item.label }}</span>\n </span>\n\n @if (item.submenu) {\n <span class=\"sdc-tiered-menu-item__submenu-icon fas\">\n <i class=\"fas fa-chevron-right\"></i>\n </span>\n }\n</div>\n", styles: [".sdc-tiered-menu-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-tiered-menu-item:hover{background:#e9e6e6}.sdc-tiered-menu-item--focused{background:#ccc!important}.sdc-tiered-menu-item--open{background:#e4e2e2}.sdc-tiered-menu-item--disabled{opacity:.5;cursor:default}.sdc-tiered-menu-item__content{display:inline-flex;align-items:center}.sdc-tiered-menu-item__label{margin:0 .75rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: TieredMenuItemComponent, decorators: [{
|
|
71
|
+
type: Component,
|
|
72
|
+
args: [{ selector: 'sdc-tiered-menu-item', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, template: "<div\n class=\"sdc-tiered-menu-item\"\n role=\"menuitem\"\n [attr.id]=\"item.id\"\n [tabindex]=\"focused && !item.disabled ? 0 : -1\"\n [attr.aria-disabled]=\"item.disabled || null\"\n [attr.aria-haspopup]=\"item.submenu ? 'menu' : null\"\n [attr.aria-expanded]=\"item.submenu ? item.isOpen : null\"\n [attr.data-key]=\"item.dataKey\"\n [class.sdc-tiered-menu-item--open]=\"item.isOpen\"\n [class.sdc-tiered-menu-item--focused]=\"focused\"\n [class.sdc-tiered-menu-item--disabled]=\"item.disabled\"\n>\n <span class=\"sdc-tiered-menu-item__content\">\n <span\n class=\"sdc-tiered-menu-item__icon\"\n [ngClass]=\"item.iconClass\"\n ></span>\n <span class=\"sdc-tiered-menu-item__label\">{{ item.label }}</span>\n </span>\n\n @if (item.submenu) {\n <span class=\"sdc-tiered-menu-item__submenu-icon fas\">\n <i class=\"fas fa-chevron-right\"></i>\n </span>\n }\n</div>\n", styles: [".sdc-tiered-menu-item{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-tiered-menu-item:hover{background:#e9e6e6}.sdc-tiered-menu-item--focused{background:#ccc!important}.sdc-tiered-menu-item--open{background:#e4e2e2}.sdc-tiered-menu-item--disabled{opacity:.5;cursor:default}.sdc-tiered-menu-item__content{display:inline-flex;align-items:center}.sdc-tiered-menu-item__label{margin:0 .75rem}\n"] }]
|
|
73
|
+
}], propDecorators: { item: [{
|
|
74
|
+
type: Input,
|
|
75
|
+
args: [{ required: true }]
|
|
76
|
+
}], focused: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], highlight: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}], triggerEvent: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], closeOnClick: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}], onClick: [{
|
|
85
|
+
type: HostListener,
|
|
86
|
+
args: ['click']
|
|
87
|
+
}], onTouchEnd: [{
|
|
88
|
+
type: HostListener,
|
|
89
|
+
args: ['touchend', ['$event']]
|
|
90
|
+
}], onMouseEnter: [{
|
|
91
|
+
type: HostListener,
|
|
92
|
+
args: ['mouseenter']
|
|
93
|
+
}], onMouseLeave: [{
|
|
94
|
+
type: HostListener,
|
|
95
|
+
args: ['mouseleave']
|
|
96
|
+
}] } });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGllcmVkLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL3RpZXJlZC1tZW51L2NvbXBvbmVudHMvdGllcmVkLW1lbnUtaXRlbS90aWVyZWQtbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvdGllcmVkLW1lbnUvY29tcG9uZW50cy90aWVyZWQtbWVudS1pdGVtL3RpZXJlZC1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsaUJBQWlCLEVBQ2pCLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUtqRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7O0FBV2xGLE1BQU0sT0FBTyx1QkFBdUI7SUFDakIsWUFBWSxHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRXBDLElBQUksQ0FBOEI7SUFDcEQsT0FBTyxHQUFHLEtBQUssQ0FBQztJQUNoQixTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLFlBQVksR0FBMkIsT0FBTyxDQUFDO0lBQy9DLFlBQVksR0FBRyxLQUFLLENBQUM7SUFFdEIsYUFBYSxDQUFVO0lBRS9CLFdBQVc7UUFDVCxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBR1MsT0FBTztRQUNmLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN2QixPQUFPO1FB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Q0FBQztnQkF5QjFCLFlBQVk7c0JBRHJCLFlBQVk7dUJBQUMsWUFBWTtnQkFZaEIsWUFBWTtzQkFEckIsWUFBWTt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVElFUkVEX01FTlVfU1VCTUVOVV9PUEVOX0RFTEFZX01TIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9jb25zdGFudHMvdGllcmVkLW1lbnUuY29uc3QnO1xuaW1wb3J0IHR5cGUge1xuICBUaWVyZWRNZW51SXRlbUludGVybmFsRGF0YSxcbiAgVGllcmVkTWVudVRyaWdnZXJFdmVudFxufSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3R5cGVzL3RpZXJlZC1tZW51LnR5cGUnO1xuaW1wb3J0IHsgVGllcmVkTWVudUV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RpZXJlZC1tZW51LmV2ZW50LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtdGllcmVkLW1lbnUtaXRlbScsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vdGllcmVkLW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RpZXJlZC1tZW51LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkXG59KVxuZXhwb3J0IGNsYXNzIFRpZXJlZE1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBldmVudFNlcnZpY2UgPSBpbmplY3QoVGllcmVkTWVudUV2ZW50U2VydmljZSk7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaXRlbSE6IFRpZXJlZE1lbnVJdGVtSW50ZXJuYWxEYXRhO1xuICBASW5wdXQoKSBmb2N1c2VkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGhpZ2hsaWdodCA9IGZhbHNlO1xuICBASW5wdXQoKSB0cmlnZ2VyRXZlbnQ6IFRpZXJlZE1lbnVUcmlnZ2VyRXZlbnQgPSAnY2xpY2snO1xuICBASW5wdXQoKSBjbG9zZU9uQ2xpY2sgPSBmYWxzZTtcblxuICBwcml2YXRlIHNob3dUaW1lb3V0SWQ/OiBudW1iZXI7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0SWQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBwcm90ZWN0ZWQgb25DbGljaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pdGVtLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXRlbS5zdWJtZW51KSB7XG4gICAgICBpZiAoIXRoaXMuaXRlbS5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uub3Blbkl0ZW1NZW51RXZlbnQuZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmNsb3NlT25DbGljaykge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5jbG9zZUl0ZW1NZW51RXZlbnQuZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3VibWVudSBpcyBvcGVuIGFuZCBjbG9zZU9uQ2xpY2sgaXMgZmFsc2UsIGRvIG5vdGhpbmdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZXZlbnRTZXJ2aWNlLnNlbGVjdEl0ZW1FdmVudC5lbWl0KHRoaXMuaXRlbSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIHByb3RlY3RlZCBvblRvdWNoRW5kKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgLy8gUHJldmVudCBzeW50aGV0aWMgY2xpY2sgZXZlbnQgZnJvbSBmaXJpbmcgYWZ0ZXIgdG91Y2hlbmRcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIFxuICAgIGlmICh0aGlzLml0ZW0uZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pdGVtLnN1Ym1lbnUpIHtcbiAgICAgIGlmICghdGhpcy5pdGVtLmlzT3Blbikge1xuICAgICAgICB0aGlzLmV2ZW50U2VydmljZS5vcGVuSXRlbU1lbnVFdmVudC5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY2xvc2VPbkNsaWNrKSB7XG4gICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlSXRlbU1lbnVFdmVudC5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWJtZW51IGlzIG9wZW4gYW5kIGNsb3NlT25DbGljayBpcyBmYWxzZSwgZG8gbm90aGluZ1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5ldmVudFNlcnZpY2Uuc2VsZWN0SXRlbUV2ZW50LmVtaXQodGhpcy5pdGVtKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZW50ZXInKVxuICBwcm90ZWN0ZWQgb25Nb3VzZUVudGVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLml0ZW0uZGlzYWJsZWQgfHwgdGhpcy50cmlnZ2VyRXZlbnQgIT09ICdob3ZlcicgfHwgdGhpcy5pdGVtLmlzT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1RpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLm9wZW5JdGVtTWVudUV2ZW50LmVtaXQodGhpcy5pdGVtKTtcbiAgICB9LCBUSUVSRURfTUVOVV9TVUJNRU5VX09QRU5fREVMQVlfTVMpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScpXG4gIHByb3RlY3RlZCBvbk1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgd2luZG93LmNsZWFyVGltZW91dCh0aGlzLnNob3dUaW1lb3V0SWQpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2RjLXRpZXJlZC1tZW51LWl0ZW1cIlxuICByb2xlPVwibWVudWl0ZW1cIlxuICBbYXR0ci5pZF09XCJpdGVtLmlkXCJcbiAgW3RhYmluZGV4XT1cImZvY3VzZWQgJiYgIWl0ZW0uZGlzYWJsZWQgPyAwIDogLTFcIlxuICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgfHwgbnVsbFwiXG4gIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5zdWJtZW51ID8gJ21lbnUnIDogbnVsbFwiXG4gIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5zdWJtZW51ID8gaXRlbS5pc09wZW4gOiBudWxsXCJcbiAgW2F0dHIuZGF0YS1rZXldPVwiaXRlbS5kYXRhS2V5XCJcbiAgW2NsYXNzLnNkYy10aWVyZWQtbWVudS1pdGVtLS1vcGVuXT1cIml0ZW0uaXNPcGVuXCJcbiAgW2NsYXNzLnNkYy10aWVyZWQtbWVudS1pdGVtLS1mb2N1c2VkXT1cImZvY3VzZWRcIlxuICBbY2xhc3Muc2RjLXRpZXJlZC1tZW51LWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuPlxuICA8c3BhbiBjbGFzcz1cInNkYy10aWVyZWQtbWVudS1pdGVtX19jb250ZW50XCI+XG4gICAgPHNwYW5cbiAgICAgIGNsYXNzPVwic2RjLXRpZXJlZC1tZW51LWl0ZW1fX2ljb25cIlxuICAgICAgW25nQ2xhc3NdPVwiaXRlbS5pY29uQ2xhc3NcIlxuICAgID48L3NwYW4+XG4gICAgPHNwYW4gY2xhc3M9XCJzZGMtdGllcmVkLW1lbnUtaXRlbV9fbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICA8L3NwYW4+XG5cbiAgQGlmIChpdGVtLnN1Ym1lbnUpIHtcbiAgPHNwYW4gY2xhc3M9XCJzZGMtdGllcmVkLW1lbnUtaXRlbV9fc3VibWVudS1pY29uIGZhc1wiPlxuICAgIDxpIGNsYXNzPVwiZmFzIGZhLWNoZXZyb24tcmlnaHRcIj48L2k+XG4gIDwvc3Bhbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|