@skyux/popovers 5.7.2 → 6.0.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/documentation.json +2 -2
- package/esm2020/index.mjs +23 -0
- package/esm2020/lib/modules/dropdown/dropdown-button.component.mjs +14 -0
- package/esm2020/lib/modules/dropdown/dropdown-extensions.mjs +14 -0
- package/esm2020/lib/modules/dropdown/dropdown-item.component.mjs +69 -0
- package/esm2020/lib/modules/dropdown/dropdown-menu.component.mjs +305 -0
- package/esm2020/lib/modules/dropdown/dropdown.component.mjs +359 -0
- package/esm2020/lib/modules/dropdown/dropdown.module.mjs +60 -0
- package/esm2020/lib/modules/dropdown/types/dropdown-horizontal-alignment.mjs +2 -0
- package/esm2020/lib/modules/dropdown/types/dropdown-menu-change.mjs +2 -0
- package/esm2020/lib/modules/dropdown/types/dropdown-message-type.mjs +40 -0
- package/esm2020/lib/modules/dropdown/types/dropdown-message.mjs +2 -0
- package/esm2020/lib/modules/dropdown/types/dropdown-trigger-type.mjs +2 -0
- package/esm2020/lib/modules/popover/popover-adapter.service.mjs +74 -0
- package/esm2020/lib/modules/popover/popover-animation-state.mjs +2 -0
- package/esm2020/lib/modules/popover/popover-animation.mjs +19 -0
- package/esm2020/lib/modules/popover/popover-content.component.mjs +261 -0
- package/esm2020/lib/modules/popover/popover-context.mjs +10 -0
- package/esm2020/lib/modules/popover/popover-extensions.mjs +29 -0
- package/esm2020/lib/modules/popover/popover.component.mjs +198 -0
- package/esm2020/lib/modules/popover/popover.directive.mjs +176 -0
- package/esm2020/lib/modules/popover/popover.module.mjs +55 -0
- package/esm2020/lib/modules/popover/types/popover-adapter-arrow-coordinates.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-adapter-elements.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-alignment.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-message-type.mjs +24 -0
- package/esm2020/lib/modules/popover/types/popover-message.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-placement.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-position.mjs +2 -0
- package/esm2020/lib/modules/popover/types/popover-trigger.mjs +2 -0
- package/esm2020/lib/modules/shared/sky-popovers-resources.module.mjs +47 -0
- package/esm2020/skyux-popovers.mjs +5 -0
- package/esm2020/testing/dropdown/dropdown-fixture.mjs +133 -0
- package/esm2020/testing/dropdown/dropdown-testing.module.mjs +15 -0
- package/esm2020/testing/dropdown/popovers-fixture-dropdown-item.mjs +2 -0
- package/esm2020/testing/dropdown/popovers-fixture-dropdown-menu.mjs +2 -0
- package/esm2020/testing/dropdown/popovers-fixture-dropdown.mjs +2 -0
- package/esm2020/testing/popover/popover-fixture.mjs +86 -0
- package/esm2020/testing/popover/popover-testing.module.mjs +29 -0
- package/esm2020/testing/public-api.mjs +8 -0
- package/esm2020/testing/skyux-popovers-testing.mjs +5 -0
- package/fesm2015/{skyux-popovers-testing.js → skyux-popovers-testing.mjs} +9 -9
- package/fesm2015/skyux-popovers-testing.mjs.map +1 -0
- package/fesm2015/skyux-popovers.mjs +1705 -0
- package/fesm2015/skyux-popovers.mjs.map +1 -0
- package/fesm2020/skyux-popovers-testing.mjs +266 -0
- package/fesm2020/skyux-popovers-testing.mjs.map +1 -0
- package/{fesm2015/skyux-popovers.js → fesm2020/skyux-popovers.mjs} +53 -88
- package/fesm2020/skyux-popovers.mjs.map +1 -0
- package/package.json +40 -16
- package/testing/package.json +5 -5
- package/bundles/skyux-popovers-testing.umd.js +0 -682
- package/bundles/skyux-popovers.umd.js +0 -1889
- package/esm2015/index.js +0 -23
- package/esm2015/index.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown-button.component.js +0 -17
- package/esm2015/lib/modules/dropdown/dropdown-button.component.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown-extensions.js +0 -14
- package/esm2015/lib/modules/dropdown/dropdown-extensions.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown-item.component.js +0 -75
- package/esm2015/lib/modules/dropdown/dropdown-item.component.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown-menu.component.js +0 -311
- package/esm2015/lib/modules/dropdown/dropdown-menu.component.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown.component.js +0 -363
- package/esm2015/lib/modules/dropdown/dropdown.component.js.map +0 -1
- package/esm2015/lib/modules/dropdown/dropdown.module.js +0 -60
- package/esm2015/lib/modules/dropdown/dropdown.module.js.map +0 -1
- package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js +0 -2
- package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js.map +0 -1
- package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js +0 -2
- package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js.map +0 -1
- package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js +0 -40
- package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js.map +0 -1
- package/esm2015/lib/modules/dropdown/types/dropdown-message.js +0 -2
- package/esm2015/lib/modules/dropdown/types/dropdown-message.js.map +0 -1
- package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js +0 -2
- package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-adapter.service.js +0 -74
- package/esm2015/lib/modules/popover/popover-adapter.service.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-animation-state.js +0 -2
- package/esm2015/lib/modules/popover/popover-animation-state.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-animation.js +0 -19
- package/esm2015/lib/modules/popover/popover-animation.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-content.component.js +0 -271
- package/esm2015/lib/modules/popover/popover-content.component.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-context.js +0 -10
- package/esm2015/lib/modules/popover/popover-context.js.map +0 -1
- package/esm2015/lib/modules/popover/popover-extensions.js +0 -29
- package/esm2015/lib/modules/popover/popover-extensions.js.map +0 -1
- package/esm2015/lib/modules/popover/popover.component.js +0 -203
- package/esm2015/lib/modules/popover/popover.component.js.map +0 -1
- package/esm2015/lib/modules/popover/popover.directive.js +0 -176
- package/esm2015/lib/modules/popover/popover.directive.js.map +0 -1
- package/esm2015/lib/modules/popover/popover.module.js +0 -56
- package/esm2015/lib/modules/popover/popover.module.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-adapter-elements.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-adapter-elements.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-alignment.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-alignment.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-message-type.js +0 -24
- package/esm2015/lib/modules/popover/types/popover-message-type.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-message.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-message.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-placement.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-placement.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-position.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-position.js.map +0 -1
- package/esm2015/lib/modules/popover/types/popover-trigger.js +0 -2
- package/esm2015/lib/modules/popover/types/popover-trigger.js.map +0 -1
- package/esm2015/lib/modules/shared/sky-popovers-resources.module.js +0 -47
- package/esm2015/lib/modules/shared/sky-popovers-resources.module.js.map +0 -1
- package/esm2015/skyux-popovers.js +0 -5
- package/esm2015/skyux-popovers.js.map +0 -1
- package/esm2015/testing/dropdown/dropdown-fixture.js +0 -138
- package/esm2015/testing/dropdown/dropdown-fixture.js.map +0 -1
- package/esm2015/testing/dropdown/dropdown-testing.module.js +0 -15
- package/esm2015/testing/dropdown/dropdown-testing.module.js.map +0 -1
- package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js +0 -2
- package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js.map +0 -1
- package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js +0 -2
- package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js.map +0 -1
- package/esm2015/testing/dropdown/popovers-fixture-dropdown.js +0 -2
- package/esm2015/testing/dropdown/popovers-fixture-dropdown.js.map +0 -1
- package/esm2015/testing/popover/popover-fixture.js +0 -86
- package/esm2015/testing/popover/popover-fixture.js.map +0 -1
- package/esm2015/testing/popover/popover-testing.module.js +0 -29
- package/esm2015/testing/popover/popover-testing.module.js.map +0 -1
- package/esm2015/testing/public-api.js +0 -8
- package/esm2015/testing/public-api.js.map +0 -1
- package/esm2015/testing/skyux-popovers-testing.js +0 -5
- package/esm2015/testing/skyux-popovers-testing.js.map +0 -1
- package/fesm2015/skyux-popovers-testing.js.map +0 -1
- package/fesm2015/skyux-popovers.js.map +0 -1
package/documentation.json
CHANGED
|
@@ -363,7 +363,7 @@
|
|
|
363
363
|
"name": "NgModule"
|
|
364
364
|
},
|
|
365
365
|
"arguments": {
|
|
366
|
-
"obj": "{\n declarations: [\n SkyPopoverComponent,\n SkyPopoverContentComponent,\n SkyPopoverDirective,\n ],\n imports: [\n CommonModule,\n SkyAffixModule,\n SkyIconModule,\n SkyOverlayModule,\n SkyPopoversResourcesModule,\n SkyThemeModule,\n ],\n exports: [\n SkyPopoverComponent,\n SkyPopoverContentComponent,\n SkyPopoverDirective,\n ],\n
|
|
366
|
+
"obj": "{\n declarations: [\n SkyPopoverComponent,\n SkyPopoverContentComponent,\n SkyPopoverDirective,\n ],\n imports: [\n CommonModule,\n SkyAffixModule,\n SkyIconModule,\n SkyOverlayModule,\n SkyPopoversResourcesModule,\n SkyThemeModule,\n ],\n exports: [\n SkyPopoverComponent,\n SkyPopoverContentComponent,\n SkyPopoverDirective,\n ],\n}"
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
369
|
],
|
|
@@ -380,7 +380,7 @@
|
|
|
380
380
|
"sources": [
|
|
381
381
|
{
|
|
382
382
|
"fileName": "projects/popovers/src/modules/popover/popover.module.ts",
|
|
383
|
-
"line":
|
|
383
|
+
"line": 33,
|
|
384
384
|
"character": 13
|
|
385
385
|
}
|
|
386
386
|
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export * from './lib/modules/dropdown/types/dropdown-horizontal-alignment';
|
|
2
|
+
export * from './lib/modules/dropdown/types/dropdown-menu-change';
|
|
3
|
+
export * from './lib/modules/dropdown/types/dropdown-message';
|
|
4
|
+
export * from './lib/modules/dropdown/types/dropdown-message-type';
|
|
5
|
+
export * from './lib/modules/dropdown/types/dropdown-trigger-type';
|
|
6
|
+
export * from './lib/modules/dropdown/dropdown.module';
|
|
7
|
+
export * from './lib/modules/popover/popover.module';
|
|
8
|
+
export * from './lib/modules/popover/types/popover-alignment';
|
|
9
|
+
export * from './lib/modules/popover/types/popover-message';
|
|
10
|
+
export * from './lib/modules/popover/types/popover-message-type';
|
|
11
|
+
export * from './lib/modules/popover/types/popover-placement';
|
|
12
|
+
export * from './lib/modules/popover/types/popover-position';
|
|
13
|
+
export * from './lib/modules/popover/types/popover-trigger';
|
|
14
|
+
// Components and directives must be exported to support Angular's "partial" Ivy compiler.
|
|
15
|
+
// Obscure names are used to indicate types are not part of the public API.
|
|
16
|
+
export { SkyDropdownItemComponent as λ1 } from './lib/modules/dropdown/dropdown-item.component';
|
|
17
|
+
export { SkyDropdownButtonComponent as λ2 } from './lib/modules/dropdown/dropdown-button.component';
|
|
18
|
+
export { SkyDropdownComponent as λ3 } from './lib/modules/dropdown/dropdown.component';
|
|
19
|
+
export { SkyDropdownMenuComponent as λ4 } from './lib/modules/dropdown/dropdown-menu.component';
|
|
20
|
+
export { SkyPopoverContentComponent as λ5 } from './lib/modules/popover/popover-content.component';
|
|
21
|
+
export { SkyPopoverComponent as λ6 } from './lib/modules/popover/popover.component';
|
|
22
|
+
export { SkyPopoverDirective as λ7 } from './lib/modules/popover/popover.directive';
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsNkNBQTZDLENBQUM7QUFFNUQsMEZBQTBGO0FBQzFGLDJFQUEyRTtBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLElBQUksRUFBRSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEcsT0FBTyxFQUFFLDBCQUEwQixJQUFJLEVBQUUsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3BHLE9BQU8sRUFBRSxvQkFBb0IsSUFBSSxFQUFFLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUsd0JBQXdCLElBQUksRUFBRSxFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDaEcsT0FBTyxFQUFFLDBCQUEwQixJQUFJLEVBQUUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ25HLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxFQUFFLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRixPQUFPLEVBQUUsbUJBQW1CLElBQUksRUFBRSxFQUFFLE1BQU0seUNBQXlDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL3R5cGVzL2Ryb3Bkb3duLWhvcml6b250YWwtYWxpZ25tZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vdHlwZXMvZHJvcGRvd24tbWVudS1jaGFuZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi90eXBlcy9kcm9wZG93bi1tZXNzYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vdHlwZXMvZHJvcGRvd24tbWVzc2FnZS10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vdHlwZXMvZHJvcGRvd24tdHJpZ2dlci10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24ubW9kdWxlJztcblxuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXIubW9kdWxlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci90eXBlcy9wb3BvdmVyLWFsaWdubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvdHlwZXMvcG9wb3Zlci1tZXNzYWdlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci90eXBlcy9wb3BvdmVyLW1lc3NhZ2UtdHlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvdHlwZXMvcG9wb3Zlci1wbGFjZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3R5cGVzL3BvcG92ZXItcG9zaXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3R5cGVzL3BvcG92ZXItdHJpZ2dlcic7XG5cbi8vIENvbXBvbmVudHMgYW5kIGRpcmVjdGl2ZXMgbXVzdCBiZSBleHBvcnRlZCB0byBzdXBwb3J0IEFuZ3VsYXIncyBcInBhcnRpYWxcIiBJdnkgY29tcGlsZXIuXG4vLyBPYnNjdXJlIG5hbWVzIGFyZSB1c2VkIHRvIGluZGljYXRlIHR5cGVzIGFyZSBub3QgcGFydCBvZiB0aGUgcHVibGljIEFQSS5cbmV4cG9ydCB7IFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCBhcyDOuzEgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmV4cG9ydCB7IFNreURyb3Bkb3duQnV0dG9uQ29tcG9uZW50IGFzIM67MiB9IGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24tYnV0dG9uLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lEcm9wZG93bkNvbXBvbmVudCBhcyDOuzMgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lEcm9wZG93bk1lbnVDb21wb25lbnQgYXMgzrs0IH0gZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1tZW51LmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lQb3BvdmVyQ29udGVudENvbXBvbmVudCBhcyDOuzUgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lQb3BvdmVyQ29tcG9uZW50IGFzIM67NiB9IGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lQb3BvdmVyRGlyZWN0aXZlIGFzIM67NyB9IGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Specifies the button for the dropdown menu.
|
|
5
|
+
*/
|
|
6
|
+
export class SkyDropdownButtonComponent {
|
|
7
|
+
}
|
|
8
|
+
SkyDropdownButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9
|
+
SkyDropdownButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyDropdownButtonComponent, selector: "sky-dropdown-button", ngImport: i0, template: "<ng-content></ng-content>\n" });
|
|
10
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownButtonComponent, decorators: [{
|
|
11
|
+
type: Component,
|
|
12
|
+
args: [{ selector: 'sky-dropdown-button', template: "<ng-content></ng-content>\n" }]
|
|
13
|
+
}] });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9wb3BvdmVycy9zcmMvbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24tYnV0dG9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9wb3BvdmVycy9zcmMvbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24tYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTFDOztHQUVHO0FBS0gsTUFBTSxPQUFPLDBCQUEwQjs7dUhBQTFCLDBCQUEwQjsyR0FBMUIsMEJBQTBCLDJEQ1R2Qyw2QkFDQTsyRkRRYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBidXR0b24gZm9yIHRoZSBkcm9wZG93biBtZW51LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZHJvcGRvd24tYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIFNreURyb3Bkb3duQnV0dG9uQ29tcG9uZW50IHt9XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function parseAffixHorizontalAlignment(alignment) {
|
|
2
|
+
switch (alignment) {
|
|
3
|
+
case 'center':
|
|
4
|
+
return 'center';
|
|
5
|
+
case 'left':
|
|
6
|
+
return 'left';
|
|
7
|
+
case 'right':
|
|
8
|
+
return 'right';
|
|
9
|
+
/* istanbul ignore next */
|
|
10
|
+
default:
|
|
11
|
+
throw `SkyAffixHorizontalAlignment does not have a matching value for '${alignment}'!`;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tZXh0ZW5zaW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9wb3BvdmVycy9zcmMvbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24tZXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLFNBQXlDO0lBRXpDLFFBQVEsU0FBUyxFQUFFO1FBQ2pCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLDBCQUEwQjtRQUMxQjtZQUNFLE1BQU0sbUVBQW1FLFNBQVMsSUFBSSxDQUFDO0tBQzFGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgU2t5RHJvcGRvd25Ib3Jpem9udGFsQWxpZ25tZW50IH0gZnJvbSAnLi90eXBlcy9kcm9wZG93bi1ob3Jpem9udGFsLWFsaWdubWVudCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUFmZml4SG9yaXpvbnRhbEFsaWdubWVudChcbiAgYWxpZ25tZW50OiBTa3lEcm9wZG93bkhvcml6b250YWxBbGlnbm1lbnRcbik6IFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCB7XG4gIHN3aXRjaCAoYWxpZ25tZW50KSB7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgYFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdmFsdWUgZm9yICcke2FsaWdubWVudH0nIWA7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Input, Renderer2, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
/**
|
|
5
|
+
* Specifies the items to display on the dropdown menu.
|
|
6
|
+
*/
|
|
7
|
+
export class SkyDropdownItemComponent {
|
|
8
|
+
constructor(elementRef, changeDetector, renderer) {
|
|
9
|
+
this.elementRef = elementRef;
|
|
10
|
+
this.changeDetector = changeDetector;
|
|
11
|
+
this.renderer = renderer;
|
|
12
|
+
this.isActive = false;
|
|
13
|
+
this.isDisabled = false;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Specifies an ARIA role for the dropdown menu item
|
|
17
|
+
* [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
|
|
18
|
+
* by indicating how the item functions and what it controls. For information about
|
|
19
|
+
* how an ARIA role indicates what an item represents on a web page, see the
|
|
20
|
+
* [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
|
|
21
|
+
* @default "menuitem"
|
|
22
|
+
*/
|
|
23
|
+
set ariaRole(value) {
|
|
24
|
+
this._ariaRole = value;
|
|
25
|
+
}
|
|
26
|
+
get ariaRole() {
|
|
27
|
+
return this._ariaRole || 'menuitem';
|
|
28
|
+
}
|
|
29
|
+
get buttonElement() {
|
|
30
|
+
return this.elementRef.nativeElement.querySelector('button,a');
|
|
31
|
+
}
|
|
32
|
+
ngAfterViewInit() {
|
|
33
|
+
this.isDisabled = !this.isFocusable();
|
|
34
|
+
// Make sure anchor elements are tab-able.
|
|
35
|
+
const buttonElement = this.buttonElement;
|
|
36
|
+
/* istanbul ignore else */
|
|
37
|
+
if (buttonElement) {
|
|
38
|
+
this.renderer.setAttribute(buttonElement, 'tabIndex', '0');
|
|
39
|
+
}
|
|
40
|
+
this.changeDetector.detectChanges();
|
|
41
|
+
}
|
|
42
|
+
focusElement(enableNativeFocus) {
|
|
43
|
+
this.isActive = true;
|
|
44
|
+
if (enableNativeFocus) {
|
|
45
|
+
this.buttonElement.focus();
|
|
46
|
+
}
|
|
47
|
+
this.changeDetector.detectChanges();
|
|
48
|
+
}
|
|
49
|
+
isFocusable() {
|
|
50
|
+
/*tslint:disable no-null-keyword */
|
|
51
|
+
const isFocusable = this.buttonElement &&
|
|
52
|
+
this.buttonElement.getAttribute('disabled') === null;
|
|
53
|
+
/*tslint:enable */
|
|
54
|
+
return isFocusable;
|
|
55
|
+
}
|
|
56
|
+
resetState() {
|
|
57
|
+
this.isActive = false;
|
|
58
|
+
this.changeDetector.markForCheck();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
SkyDropdownItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
62
|
+
SkyDropdownItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyDropdownItemComponent, selector: "sky-dropdown-item", inputs: { ariaRole: "ariaRole" }, ngImport: i0, template: "<div\n class=\"sky-dropdown-item\"\n [attr.role]=\"ariaRole\"\n [ngClass]=\"{\n 'sky-dropdown-item-active': isActive,\n 'sky-dropdown-item-disabled': isDisabled\n }\"\n>\n <ng-content> </ng-content>\n</div>\n", styles: [".sky-dropdown-item{background-color:transparent;border:none;display:block;margin:4px;min-width:160px;text-align:left}.sky-dropdown-item.sky-dropdown-item-active,.sky-dropdown-item:hover{background-color:#eeeeef}.sky-dropdown-item.sky-dropdown-item-disabled{cursor:default}.sky-dropdown-item.sky-dropdown-item-disabled:hover{background-color:transparent}.sky-dropdown-item>a,.sky-dropdown-item>button{background-color:transparent;border:none;color:#212327;cursor:pointer;display:block;padding:3px 20px;text-align:left;width:100%}.sky-dropdown-item>a:hover,.sky-dropdown-item>button:hover{text-decoration:none}.sky-dropdown-item>a[disabled],.sky-dropdown-item>button[disabled]{color:#686c73}.sky-dropdown-item>a[disabled]:hover,.sky-dropdown-item>button[disabled]:hover{cursor:default}.sky-theme-modern .sky-dropdown-item{margin:0}.sky-theme-modern .sky-dropdown-item.sky-dropdown-item-active,.sky-theme-modern .sky-dropdown-item:hover{background-color:transparent}.sky-theme-modern .sky-dropdown-item>a,.sky-theme-modern .sky-dropdown-item>button{padding:8px 20px;transition:box-shadow .15s}.sky-theme-modern .sky-dropdown-item>a:hover,.sky-theme-modern .sky-dropdown-item>button:hover{outline:solid 1px #1870B8;outline-offset:-1px}.sky-theme-modern .sky-dropdown-item>a:focus,.sky-theme-modern .sky-dropdown-item>a:active,.sky-theme-modern .sky-dropdown-item>button:focus,.sky-theme-modern .sky-dropdown-item>button:active{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern .sky-dropdown-item>a:focus:not(:active),.sky-theme-modern .sky-dropdown-item>button:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-item>a,.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-item>button{color:#fbfcfe}\n"], directives: [{ type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownItemComponent, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{ selector: 'sky-dropdown-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-dropdown-item\"\n [attr.role]=\"ariaRole\"\n [ngClass]=\"{\n 'sky-dropdown-item-active': isActive,\n 'sky-dropdown-item-disabled': isDisabled\n }\"\n>\n <ng-content> </ng-content>\n</div>\n", styles: [".sky-dropdown-item{background-color:transparent;border:none;display:block;margin:4px;min-width:160px;text-align:left}.sky-dropdown-item.sky-dropdown-item-active,.sky-dropdown-item:hover{background-color:#eeeeef}.sky-dropdown-item.sky-dropdown-item-disabled{cursor:default}.sky-dropdown-item.sky-dropdown-item-disabled:hover{background-color:transparent}.sky-dropdown-item>a,.sky-dropdown-item>button{background-color:transparent;border:none;color:#212327;cursor:pointer;display:block;padding:3px 20px;text-align:left;width:100%}.sky-dropdown-item>a:hover,.sky-dropdown-item>button:hover{text-decoration:none}.sky-dropdown-item>a[disabled],.sky-dropdown-item>button[disabled]{color:#686c73}.sky-dropdown-item>a[disabled]:hover,.sky-dropdown-item>button[disabled]:hover{cursor:default}.sky-theme-modern .sky-dropdown-item{margin:0}.sky-theme-modern .sky-dropdown-item.sky-dropdown-item-active,.sky-theme-modern .sky-dropdown-item:hover{background-color:transparent}.sky-theme-modern .sky-dropdown-item>a,.sky-theme-modern .sky-dropdown-item>button{padding:8px 20px;transition:box-shadow .15s}.sky-theme-modern .sky-dropdown-item>a:hover,.sky-theme-modern .sky-dropdown-item>button:hover{outline:solid 1px #1870B8;outline-offset:-1px}.sky-theme-modern .sky-dropdown-item>a:focus,.sky-theme-modern .sky-dropdown-item>a:active,.sky-theme-modern .sky-dropdown-item>button:focus,.sky-theme-modern .sky-dropdown-item>button:active{outline:solid 2px #1870B8;outline-offset:-2px}.sky-theme-modern .sky-dropdown-item>a:focus:not(:active),.sky-theme-modern .sky-dropdown-item>button:focus:not(:active){box-shadow:0 1px 8px #0000004d}.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-item>a,.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-item>button{color:#fbfcfe}\n"] }]
|
|
66
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { ariaRole: [{
|
|
67
|
+
type: Input
|
|
68
|
+
}] } });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3BvcG92ZXJzL3NyYy9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7OztBQUV2Qjs7R0FFRztBQVFILE1BQU0sT0FBTyx3QkFBd0I7SUE0Qm5DLFlBQ1MsVUFBc0IsRUFDckIsY0FBaUMsRUFDakMsUUFBbUI7UUFGcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVR0QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFRdkIsQ0FBQztJQS9CSjs7Ozs7OztPQU9HO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQVcsYUFBYTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBY00sZUFBZTtRQUNwQixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRXRDLDBDQUEwQztRQUMxQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3pDLDBCQUEwQjtRQUMxQixJQUFJLGFBQWEsRUFBRTtZQUNqQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQzVEO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sWUFBWSxDQUFDLGlCQUEwQjtRQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUVyQixJQUFJLGlCQUFpQixFQUFFO1lBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxXQUFXO1FBQ2hCLG1DQUFtQztRQUNuQyxNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsYUFBYTtZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDdkQsa0JBQWtCO1FBQ2xCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTSxVQUFVO1FBQ2YsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDOztxSEFyRVUsd0JBQXdCO3lHQUF4Qix3QkFBd0IsMkZDckJyQyw2TkFVQTsyRkRXYSx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU0saUJBQ2hDLGlCQUFpQixDQUFDLElBQUk7eUpBWTFCLFFBQVE7c0JBRGxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIFNwZWNpZmllcyB0aGUgaXRlbXMgdG8gZGlzcGxheSBvbiB0aGUgZHJvcGRvd24gbWVudS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWRyb3Bkb3duLWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24taXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIEFSSUEgcm9sZSBmb3IgdGhlIGRyb3Bkb3duIG1lbnUgaXRlbVxuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpXG4gICAqIGJ5IGluZGljYXRpbmcgaG93IHRoZSBpdGVtIGZ1bmN0aW9ucyBhbmQgd2hhdCBpdCBjb250cm9scy4gRm9yIGluZm9ybWF0aW9uIGFib3V0XG4gICAqIGhvdyBhbiBBUklBIHJvbGUgaW5kaWNhdGVzIHdoYXQgYW4gaXRlbSByZXByZXNlbnRzIG9uIGEgd2ViIHBhZ2UsIHNlZSB0aGVcbiAgICogW1dBSS1BUklBIHJvbGVzIG1vZGVsXShodHRwczovL3d3dy53My5vcmcvV0FJL1BGL2FyaWEvcm9sZXMpLlxuICAgKiBAZGVmYXVsdCBcIm1lbnVpdGVtXCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXJpYVJvbGUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX2FyaWFSb2xlID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFyaWFSb2xlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2FyaWFSb2xlIHx8ICdtZW51aXRlbSc7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1dHRvbkVsZW1lbnQoKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdidXR0b24sYScpO1xuICB9XG5cbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHVibGljIGlzRGlzYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9hcmlhUm9sZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjJcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc0Rpc2FibGVkID0gIXRoaXMuaXNGb2N1c2FibGUoKTtcblxuICAgIC8vIE1ha2Ugc3VyZSBhbmNob3IgZWxlbWVudHMgYXJlIHRhYi1hYmxlLlxuICAgIGNvbnN0IGJ1dHRvbkVsZW1lbnQgPSB0aGlzLmJ1dHRvbkVsZW1lbnQ7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoYnV0dG9uRWxlbWVudCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoYnV0dG9uRWxlbWVudCwgJ3RhYkluZGV4JywgJzAnKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0VsZW1lbnQoZW5hYmxlTmF0aXZlRm9jdXM6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIGlmIChlbmFibGVOYXRpdmVGb2N1cykge1xuICAgICAgdGhpcy5idXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgaXNGb2N1c2FibGUoKTogYm9vbGVhbiB7XG4gICAgLyp0c2xpbnQ6ZGlzYWJsZSBuby1udWxsLWtleXdvcmQgKi9cbiAgICBjb25zdCBpc0ZvY3VzYWJsZSA9XG4gICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgPT09IG51bGw7XG4gICAgLyp0c2xpbnQ6ZW5hYmxlICovXG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZHJvcGRvd24taXRlbVwiXG4gIFthdHRyLnJvbGVdPVwiYXJpYVJvbGVcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS1kcm9wZG93bi1pdGVtLWFjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdza3ktZHJvcGRvd24taXRlbS1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfVwiXG4+XG4gIDxuZy1jb250ZW50PiA8L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, Optional, Output, QueryList, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
import { Subject, fromEvent as observableFromEvent } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { SkyDropdownItemComponent } from './dropdown-item.component';
|
|
5
|
+
import { SkyDropdownComponent } from './dropdown.component';
|
|
6
|
+
import { SkyDropdownMessageType } from './types/dropdown-message-type';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "./dropdown.component";
|
|
9
|
+
let nextId = 0;
|
|
10
|
+
/**
|
|
11
|
+
* Creates a menu that contains dropdown menu items.
|
|
12
|
+
*
|
|
13
|
+
*/
|
|
14
|
+
export class SkyDropdownMenuComponent {
|
|
15
|
+
constructor(changeDetector, elementRef, dropdownComponent) {
|
|
16
|
+
this.changeDetector = changeDetector;
|
|
17
|
+
this.elementRef = elementRef;
|
|
18
|
+
this.dropdownComponent = dropdownComponent;
|
|
19
|
+
/**
|
|
20
|
+
* Fires when the dropdown menu's active index or selected item changes. This event provides an
|
|
21
|
+
* observable to emit changes, and the response is of
|
|
22
|
+
* the SkyDropdownMenuChange type.
|
|
23
|
+
*/
|
|
24
|
+
this.menuChanges = new EventEmitter();
|
|
25
|
+
this.dropdownMenuId = `sky-dropdown-menu-${++nextId}`;
|
|
26
|
+
this.ngUnsubscribe = new Subject();
|
|
27
|
+
this._menuIndex = 0;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Specifies an ARIA role for the dropdown menu
|
|
31
|
+
* [to support accessibility](https://developer.blackbaud.com/skyux/learn/accessibility)
|
|
32
|
+
* by indicating how the dropdown menu functions and what it controls. The dropdown button
|
|
33
|
+
* inherits this value to set its `aria-haspopup` property. For information
|
|
34
|
+
* about how an ARIA role indicates what an item represents on a web page, see the
|
|
35
|
+
* [WAI-ARIA roles model](https://www.w3.org/WAI/PF/aria/roles).
|
|
36
|
+
* @default "menu"
|
|
37
|
+
*/
|
|
38
|
+
set ariaRole(value) {
|
|
39
|
+
this._ariaRole = value;
|
|
40
|
+
}
|
|
41
|
+
get ariaRole() {
|
|
42
|
+
return this._ariaRole || 'menu';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Indicates whether to use the browser's native focus function when users navigate through menu
|
|
46
|
+
* items with the keyboard. To disable the native focus function, set this property to `false`.
|
|
47
|
+
* For example, to let users interact with the dropdown menu but keep the keyboard focus on a
|
|
48
|
+
* different element, set this property to `false`.
|
|
49
|
+
* @default true
|
|
50
|
+
*/
|
|
51
|
+
set useNativeFocus(value) {
|
|
52
|
+
this._useNativeFocus = value;
|
|
53
|
+
}
|
|
54
|
+
get useNativeFocus() {
|
|
55
|
+
if (this._useNativeFocus === undefined) {
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return this._useNativeFocus;
|
|
59
|
+
}
|
|
60
|
+
get hasFocusableItems() {
|
|
61
|
+
const found = this.menuItems.find((item) => item.isFocusable());
|
|
62
|
+
return found !== undefined;
|
|
63
|
+
}
|
|
64
|
+
set menuIndex(value) {
|
|
65
|
+
if (value < 0) {
|
|
66
|
+
value = this.menuItems.length - 1;
|
|
67
|
+
}
|
|
68
|
+
if (value >= this.menuItems.length) {
|
|
69
|
+
value = 0;
|
|
70
|
+
}
|
|
71
|
+
this._menuIndex = value;
|
|
72
|
+
}
|
|
73
|
+
get menuIndex() {
|
|
74
|
+
return this._menuIndex;
|
|
75
|
+
}
|
|
76
|
+
ngAfterContentInit() {
|
|
77
|
+
/* istanbul ignore else */
|
|
78
|
+
if (this.dropdownComponent) {
|
|
79
|
+
this.dropdownComponent.menuId = this.dropdownMenuId;
|
|
80
|
+
this.dropdownComponent.menuAriaRole = this.ariaRole;
|
|
81
|
+
this.dropdownComponent.messageStream
|
|
82
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
83
|
+
.subscribe((message) => {
|
|
84
|
+
/* tslint:disable-next-line:switch-default */
|
|
85
|
+
switch (message.type) {
|
|
86
|
+
case SkyDropdownMessageType.Open:
|
|
87
|
+
case SkyDropdownMessageType.Close:
|
|
88
|
+
this.reset();
|
|
89
|
+
break;
|
|
90
|
+
case SkyDropdownMessageType.FocusFirstItem:
|
|
91
|
+
this.focusFirstItem();
|
|
92
|
+
break;
|
|
93
|
+
case SkyDropdownMessageType.FocusNextItem:
|
|
94
|
+
this.focusNextItem();
|
|
95
|
+
break;
|
|
96
|
+
case SkyDropdownMessageType.FocusPreviousItem:
|
|
97
|
+
this.focusPreviousItem();
|
|
98
|
+
break;
|
|
99
|
+
case SkyDropdownMessageType.FocusLastItem:
|
|
100
|
+
this.focusLastItem();
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
this.menuChanges
|
|
105
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
106
|
+
.subscribe((change) => {
|
|
107
|
+
// Close the dropdown when a menu item is selected.
|
|
108
|
+
if (change.selectedItem) {
|
|
109
|
+
this.sendMessage(SkyDropdownMessageType.Close);
|
|
110
|
+
this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
|
|
111
|
+
}
|
|
112
|
+
if (change.items) {
|
|
113
|
+
// Update the popover style and position whenever the number of items changes.
|
|
114
|
+
this.sendMessage(SkyDropdownMessageType.Reposition);
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
// Reset dropdown whenever the menu items change.
|
|
119
|
+
this.menuItems.changes
|
|
120
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
121
|
+
.subscribe((items) => {
|
|
122
|
+
this.reset();
|
|
123
|
+
this.menuChanges.emit({
|
|
124
|
+
items: items.toArray(),
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
this.addEventListeners();
|
|
128
|
+
}
|
|
129
|
+
ngOnDestroy() {
|
|
130
|
+
this.ngUnsubscribe.next();
|
|
131
|
+
this.ngUnsubscribe.complete();
|
|
132
|
+
this.ngUnsubscribe = undefined;
|
|
133
|
+
}
|
|
134
|
+
focusFirstItem() {
|
|
135
|
+
if (!this.hasFocusableItems) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
this.menuIndex = 0;
|
|
139
|
+
const firstItem = this.getItemByIndex(this.menuIndex);
|
|
140
|
+
if (firstItem && firstItem.isFocusable()) {
|
|
141
|
+
this.focusItem(firstItem);
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
this.focusNextItem();
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
focusLastItem() {
|
|
148
|
+
if (!this.hasFocusableItems) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
this.menuIndex = this.menuItems.length - 1;
|
|
152
|
+
const lastItem = this.getItemByIndex(this.menuIndex);
|
|
153
|
+
if (lastItem && lastItem.isFocusable()) {
|
|
154
|
+
this.focusItem(lastItem);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
this.focusPreviousItem();
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
focusPreviousItem() {
|
|
161
|
+
if (!this.hasFocusableItems) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
this.menuIndex--;
|
|
165
|
+
const previousItem = this.getItemByIndex(this.menuIndex);
|
|
166
|
+
if (previousItem && previousItem.isFocusable()) {
|
|
167
|
+
this.focusItem(previousItem);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
this.focusPreviousItem();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
focusNextItem() {
|
|
174
|
+
if (!this.hasFocusableItems) {
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
this.menuIndex++;
|
|
178
|
+
const nextItem = this.getItemByIndex(this.menuIndex);
|
|
179
|
+
if (nextItem && nextItem.isFocusable()) {
|
|
180
|
+
this.focusItem(nextItem);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
this.focusNextItem();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
reset() {
|
|
187
|
+
this._menuIndex = -1;
|
|
188
|
+
this.resetItemsActiveState();
|
|
189
|
+
this.changeDetector.markForCheck();
|
|
190
|
+
}
|
|
191
|
+
resetItemsActiveState() {
|
|
192
|
+
this.menuItems.forEach((item) => {
|
|
193
|
+
item.resetState();
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
focusItem(item) {
|
|
197
|
+
this.resetItemsActiveState();
|
|
198
|
+
item.focusElement(this.useNativeFocus);
|
|
199
|
+
this.menuChanges.emit({
|
|
200
|
+
activeIndex: this.menuIndex,
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
getItemByIndex(index) {
|
|
204
|
+
return this.menuItems.find((item, i) => {
|
|
205
|
+
return i === index;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
selectItemByEventTarget(target) {
|
|
209
|
+
const selectedItem = this.menuItems.find((item, i) => {
|
|
210
|
+
const found = item.elementRef.nativeElement.contains(target);
|
|
211
|
+
if (found) {
|
|
212
|
+
this.menuIndex = i;
|
|
213
|
+
this.menuChanges.next({
|
|
214
|
+
activeIndex: this.menuIndex,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
return found;
|
|
218
|
+
});
|
|
219
|
+
/* istanbul ignore else */
|
|
220
|
+
if (selectedItem) {
|
|
221
|
+
this.menuChanges.next({
|
|
222
|
+
selectedItem,
|
|
223
|
+
});
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
sendMessage(type) {
|
|
227
|
+
this.dropdownComponent.messageStream.next({ type });
|
|
228
|
+
}
|
|
229
|
+
addEventListeners() {
|
|
230
|
+
const dropdownMenuElement = this.elementRef.nativeElement;
|
|
231
|
+
observableFromEvent(dropdownMenuElement, 'click')
|
|
232
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
233
|
+
.subscribe((event) => {
|
|
234
|
+
this.selectItemByEventTarget(event.target);
|
|
235
|
+
});
|
|
236
|
+
observableFromEvent(dropdownMenuElement, 'keydown')
|
|
237
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
238
|
+
.subscribe((event) => {
|
|
239
|
+
const key = event.key.toLowerCase();
|
|
240
|
+
/*tslint:disable-next-line:switch-default*/
|
|
241
|
+
switch (key) {
|
|
242
|
+
case 'escape':
|
|
243
|
+
this.sendMessage(SkyDropdownMessageType.Close);
|
|
244
|
+
this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
|
|
245
|
+
event.stopPropagation();
|
|
246
|
+
event.preventDefault();
|
|
247
|
+
break;
|
|
248
|
+
case 'arrowdown':
|
|
249
|
+
case 'down':
|
|
250
|
+
this.focusNextItem();
|
|
251
|
+
event.preventDefault();
|
|
252
|
+
break;
|
|
253
|
+
case 'arrowup':
|
|
254
|
+
case 'up':
|
|
255
|
+
this.focusPreviousItem();
|
|
256
|
+
event.preventDefault();
|
|
257
|
+
break;
|
|
258
|
+
case 'tab':
|
|
259
|
+
if (this.dropdownComponent.dismissOnBlur) {
|
|
260
|
+
this.sendMessage(SkyDropdownMessageType.Close);
|
|
261
|
+
}
|
|
262
|
+
this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
});
|
|
266
|
+
observableFromEvent(dropdownMenuElement, 'mouseenter')
|
|
267
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
268
|
+
.subscribe(() => {
|
|
269
|
+
this.dropdownComponent.isMouseEnter = true;
|
|
270
|
+
});
|
|
271
|
+
observableFromEvent(dropdownMenuElement, 'mouseleave')
|
|
272
|
+
.pipe(takeUntil(this.ngUnsubscribe))
|
|
273
|
+
.subscribe(() => {
|
|
274
|
+
this.dropdownComponent.isMouseEnter = false;
|
|
275
|
+
// Allow the dropdown component to set isMouseEnter before checking if the close action
|
|
276
|
+
// should be taken.
|
|
277
|
+
setTimeout(() => {
|
|
278
|
+
if (this.dropdownComponent.trigger === 'hover' &&
|
|
279
|
+
this.dropdownComponent.isMouseEnter === false) {
|
|
280
|
+
this.sendMessage(SkyDropdownMessageType.Close);
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
SkyDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyDropdownComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
287
|
+
SkyDropdownMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: SkyDropdownMenuComponent, selector: "sky-dropdown-menu", inputs: { ariaLabelledBy: "ariaLabelledBy", ariaRole: "ariaRole", useNativeFocus: "useNativeFocus" }, outputs: { menuChanges: "menuChanges" }, queries: [{ propertyName: "menuItems", predicate: SkyDropdownItemComponent, descendants: true }], ngImport: i0, template: "<div\n class=\"sky-dropdown-menu sky-shadow sky-elevation-4\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.role]=\"ariaRole\"\n [id]=\"dropdownMenuId\"\n>\n <ng-content> </ng-content>\n</div>\n", styles: [".sky-dropdown-menu{overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px);display:flex;flex-direction:column;background-color:#fff}.sky-dropdown-menu button{overflow:hidden;text-overflow:ellipsis}.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-menu{background-color:#252a2e;color:#fff}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: SkyDropdownMenuComponent, decorators: [{
|
|
289
|
+
type: Component,
|
|
290
|
+
args: [{ selector: 'sky-dropdown-menu', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n class=\"sky-dropdown-menu sky-shadow sky-elevation-4\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [attr.role]=\"ariaRole\"\n [id]=\"dropdownMenuId\"\n>\n <ng-content> </ng-content>\n</div>\n", styles: [".sky-dropdown-menu{overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px);display:flex;flex-direction:column;background-color:#fff}.sky-dropdown-menu button{overflow:hidden;text-overflow:ellipsis}.sky-theme-modern.sky-theme-mode-dark .sky-dropdown-menu{background-color:#252a2e;color:#fff}\n"] }]
|
|
291
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyDropdownComponent, decorators: [{
|
|
292
|
+
type: Optional
|
|
293
|
+
}] }]; }, propDecorators: { ariaLabelledBy: [{
|
|
294
|
+
type: Input
|
|
295
|
+
}], ariaRole: [{
|
|
296
|
+
type: Input
|
|
297
|
+
}], useNativeFocus: [{
|
|
298
|
+
type: Input
|
|
299
|
+
}], menuChanges: [{
|
|
300
|
+
type: Output
|
|
301
|
+
}], menuItems: [{
|
|
302
|
+
type: ContentChildren,
|
|
303
|
+
args: [SkyDropdownItemComponent, { descendants: true }]
|
|
304
|
+
}] } });
|
|
305
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3BvcG92ZXJzL3NyYy9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBRXZFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmOzs7R0FHRztBQVFILE1BQU0sT0FBTyx3QkFBd0I7SUF5Rm5DLFlBQ1UsY0FBaUMsRUFDakMsVUFBc0IsRUFDVixpQkFBdUM7UUFGbkQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBN0M3RDs7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b25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0LCBmcm9tRXZlbnQgYXMgb2JzZXJ2YWJsZUZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lEcm9wZG93bkl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IFNreURyb3Bkb3duQ29tcG9uZW50IH0gZnJvbSAnLi9kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RHJvcGRvd25NZW51Q2hhbmdlIH0gZnJvbSAnLi90eXBlcy9kcm9wZG93bi1tZW51LWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lEcm9wZG93bk1lc3NhZ2UgfSBmcm9tICcuL3R5cGVzL2Ryb3Bkb3duLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5RHJvcGRvd25NZXNzYWdlVHlwZSB9IGZyb20gJy4vdHlwZXMvZHJvcGRvd24tbWVzc2FnZS10eXBlJztcblxubGV0IG5leHRJZCA9IDA7XG4vKipcbiAqIENyZWF0ZXMgYSBtZW51IHRoYXQgY29udGFpbnMgZHJvcGRvd24gbWVudSBpdGVtcy5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1kcm9wZG93bi1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lEcm9wZG93bk1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBIVE1MIGVsZW1lbnQgSUQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgYCNgKSBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgZHJvcGRvd24gbWVudS4gVGhpcyBzZXRzIHRoZSBkcm9wZG93biBtZW51J3MgYGFyaWEtbGFiZWxsZWRieWAgYXR0cmlidXRlXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXJpYUxhYmVsbGVkQnk6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIEFSSUEgcm9sZSBmb3IgdGhlIGRyb3Bkb3duIG1lbnVcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KVxuICAgKiBieSBpbmRpY2F0aW5nIGhvdyB0aGUgZHJvcGRvd24gbWVudSBmdW5jdGlvbnMgYW5kIHdoYXQgaXQgY29udHJvbHMuIFRoZSBkcm9wZG93biBidXR0b25cbiAgICogaW5oZXJpdHMgdGhpcyB2YWx1ZSB0byBzZXQgaXRzIGBhcmlhLWhhc3BvcHVwYCBwcm9wZXJ0eS4gRm9yIGluZm9ybWF0aW9uXG4gICAqIGFib3V0IGhvdyBhbiBBUklBIHJvbGUgaW5kaWNhdGVzIHdoYXQgYW4gaXRlbSByZXByZXNlbnRzIG9uIGEgd2ViIHBhZ2UsIHNlZSB0aGVcbiAgICogW1dBSS1BUklBIHJvbGVzIG1vZGVsXShodHRwczovL3d3dy53My5vcmcvV0FJL1BGL2FyaWEvcm9sZXMpLlxuICAgKiBAZGVmYXVsdCBcIm1lbnVcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhUm9sZSh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5fYXJpYVJvbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYVJvbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXJpYVJvbGUgfHwgJ21lbnUnO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSB0aGUgYnJvd3NlcidzIG5hdGl2ZSBmb2N1cyBmdW5jdGlvbiB3aGVuIHVzZXJzIG5hdmlnYXRlIHRocm91Z2ggbWVudVxuICAgKiBpdGVtcyB3aXRoIHRoZSBrZXlib2FyZC4gVG8gZGlzYWJsZSB0aGUgbmF0aXZlIGZvY3VzIGZ1bmN0aW9uLCBzZXQgdGhpcyBwcm9wZXJ0eSB0byBgZmFsc2VgLlxuICAgKiBGb3IgZXhhbXBsZSwgdG8gbGV0IHVzZXJzIGludGVyYWN0IHdpdGggdGhlIGRyb3Bkb3duIG1lbnUgYnV0IGtlZXAgdGhlIGtleWJvYXJkIGZvY3VzIG9uIGFcbiAgICogZGlmZmVyZW50IGVsZW1lbnQsIHNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdXNlTmF0aXZlRm9jdXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl91c2VOYXRpdmVGb2N1cyA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCB1c2VOYXRpdmVGb2N1cygpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5fdXNlTmF0aXZlRm9jdXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3VzZU5hdGl2ZUZvY3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGRyb3Bkb3duIG1lbnUncyBhY3RpdmUgaW5kZXggb3Igc2VsZWN0ZWQgaXRlbSBjaGFuZ2VzLiBUaGlzIGV2ZW50IHByb3ZpZGVzIGFuXG4gICAqIG9ic2VydmFibGUgdG8gZW1pdCBjaGFuZ2VzLCBhbmQgdGhlIHJlc3BvbnNlIGlzIG9mXG4gICAqIHRoZSBTa3lEcm9wZG93bk1lbnVDaGFuZ2UgdHlwZS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgbWVudUNoYW5nZXMgPSBuZXcgRXZlbnRFbWl0dGVyPFNreURyb3Bkb3duTWVudUNoYW5nZT4oKTtcblxuICBwdWJsaWMgZHJvcGRvd25NZW51SWQgPSBgc2t5LWRyb3Bkb3duLW1lbnUtJHsrK25leHRJZH1gO1xuXG4gIHByaXZhdGUgZ2V0IGhhc0ZvY3VzYWJsZUl0ZW1zKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5tZW51SXRlbXMuZmluZCgoaXRlbSkgPT4gaXRlbS5pc0ZvY3VzYWJsZSgpKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgbWVudUluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodmFsdWUgPCAwKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID49IHRoaXMubWVudUl0ZW1zLmxlbmd0aCkge1xuICAgICAgdmFsdWUgPSAwO1xuICAgIH1cblxuICAgIHRoaXMuX21lbnVJbmRleCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBtZW51SW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWVudUluZGV4O1xuICB9XG5cbiAgQENvbnRlbnRDaGlsZHJlbihTa3lEcm9wZG93bkl0ZW1Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgcHVibGljIG1lbnVJdGVtczogUXVlcnlMaXN0PFNreURyb3Bkb3duSXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKTtcblxuICBwcml2YXRlIF9hcmlhUm9sZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgX21lbnVJbmRleCA9IDA7XG5cbiAgcHJpdmF0ZSBfdXNlTmF0aXZlRm9jdXM6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZHJvcGRvd25Db21wb25lbnQ6IFNreURyb3Bkb3duQ29tcG9uZW50XG4gICkge31cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZHJvcGRvd25Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQubWVudUlkID0gdGhpcy5kcm9wZG93bk1lbnVJZDtcbiAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQubWVudUFyaWFSb2xlID0gdGhpcy5hcmlhUm9sZTtcblxuICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5tZXNzYWdlU3RyZWFtXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lEcm9wZG93bk1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3dpdGNoLWRlZmF1bHQgKi9cbiAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLk9wZW46XG4gICAgICAgICAgICBjYXNlIFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2U6XG4gICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5Gb2N1c0ZpcnN0SXRlbTpcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkZvY3VzTmV4dEl0ZW06XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkZvY3VzUHJldmlvdXNJdGVtOlxuICAgICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNJdGVtKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNMYXN0SXRlbTpcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0xhc3RJdGVtKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWVudUNoYW5nZXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU2t5RHJvcGRvd25NZW51Q2hhbmdlKSA9PiB7XG4gICAgICAgICAgLy8gQ2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgaWYgKGNoYW5nZS5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNUcmlnZ2VyQnV0dG9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hhbmdlLml0ZW1zKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvcG92ZXIgc3R5bGUgYW5kIHBvc2l0aW9uIHdoZW5ldmVyIHRoZSBudW1iZXIgb2YgaXRlbXMgY2hhbmdlcy5cbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5SZXBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGRyb3Bkb3duIHdoZW5ldmVyIHRoZSBtZW51IGl0ZW1zIGNoYW5nZS5cbiAgICB0aGlzLm1lbnVJdGVtcy5jaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBRdWVyeUxpc3Q8U2t5RHJvcGRvd25JdGVtQ29tcG9uZW50PikgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMubWVudUNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLnRvQXJyYXkoKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0ZpcnN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzRm9jdXNhYmxlSXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJbmRleCA9IDA7XG5cbiAgICBjb25zdCBmaXJzdEl0ZW0gPSB0aGlzLmdldEl0ZW1CeUluZGV4KHRoaXMubWVudUluZGV4KTtcbiAgICBpZiAoZmlyc3RJdGVtICYmIGZpcnN0SXRlbS5pc0ZvY3VzYWJsZSgpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShmaXJzdEl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEl0ZW0oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzRm9jdXNhYmxlSXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJbmRleCA9IHRoaXMubWVudUl0ZW1zLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBsYXN0SXRlbSA9IHRoaXMuZ2V0SXRlbUJ5SW5kZXgodGhpcy5tZW51SW5kZXgpO1xuICAgIGlmIChsYXN0SXRlbSAmJiBsYXN0SXRlbS5pc0ZvY3VzYWJsZSgpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShsYXN0SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNQcmV2aW91c0l0ZW0oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNQcmV2aW91c0l0ZW0oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0ZvY3VzYWJsZUl0ZW1zKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5tZW51SW5kZXgtLTtcblxuICAgIGNvbnN0IHByZXZpb3VzSXRlbSA9IHRoaXMuZ2V0SXRlbUJ5SW5kZXgodGhpcy5tZW51SW5kZXgpO1xuICAgIGlmIChwcmV2aW91c0l0ZW0gJiYgcHJldmlvdXNJdGVtLmlzRm9jdXNhYmxlKCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNQcmV2aW91c0l0ZW0oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZm9jdXNOZXh0SXRlbSgpIHtcbiAgICBpZiAoIXRoaXMuaGFzRm9jdXNhYmxlSXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJbmRleCsrO1xuXG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmdldEl0ZW1CeUluZGV4KHRoaXMubWVudUluZGV4KTtcbiAgICBpZiAobmV4dEl0ZW0gJiYgbmV4dEl0ZW0uaXNGb2N1c2FibGUoKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEl0ZW0oKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fbWVudUluZGV4ID0gLTE7XG4gICAgdGhpcy5yZXNldEl0ZW1zQWN0aXZlU3RhdGUoKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldEl0ZW1zQWN0aXZlU3RhdGUoKSB7XG4gICAgdGhpcy5tZW51SXRlbXMuZm9yRWFjaCgoaXRlbTogU2t5RHJvcGRvd25JdGVtQ29tcG9uZW50KSA9PiB7XG4gICAgICBpdGVtLnJlc2V0U3RhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNJdGVtKGl0ZW06IFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRJdGVtc0FjdGl2ZVN0YXRlKCk7XG4gICAgaXRlbS5mb2N1c0VsZW1lbnQodGhpcy51c2VOYXRpdmVGb2N1cyk7XG4gICAgdGhpcy5tZW51Q2hhbmdlcy5lbWl0KHtcbiAgICAgIGFjdGl2ZUluZGV4OiB0aGlzLm1lbnVJbmRleCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SXRlbUJ5SW5kZXgoaW5kZXg6IG51bWJlcik6IFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zLmZpbmQoKGl0ZW06IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gaSA9PT0gaW5kZXg7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEl0ZW1CeUV2ZW50VGFyZ2V0KHRhcmdldDogRXZlbnRUYXJnZXQpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLm1lbnVJdGVtcy5maW5kKFxuICAgICAgKGl0ZW06IFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCwgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvdW5kID0gaXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY29udGFpbnModGFyZ2V0KTtcblxuICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICB0aGlzLm1lbnVJbmRleCA9IGk7XG4gICAgICAgICAgdGhpcy5tZW51Q2hhbmdlcy5uZXh0KHtcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiB0aGlzLm1lbnVJbmRleCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3VuZDtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoc2VsZWN0ZWRJdGVtKSB7XG4gICAgICB0aGlzLm1lbnVDaGFuZ2VzLm5leHQoe1xuICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNlbmRNZXNzYWdlKHR5cGU6IFNreURyb3Bkb3duTWVzc2FnZVR5cGUpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50Lm1lc3NhZ2VTdHJlYW0ubmV4dCh7IHR5cGUgfSk7XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGRyb3Bkb3duTWVudUVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQoZHJvcGRvd25NZW51RWxlbWVudCwgJ2NsaWNrJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5zZWxlY3RJdGVtQnlFdmVudFRhcmdldChldmVudC50YXJnZXQpO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGRyb3Bkb3duTWVudUVsZW1lbnQsICdrZXlkb3duJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6c3dpdGNoLWRlZmF1bHQqL1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UpO1xuICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkZvY3VzVHJpZ2dlckJ1dHRvbik7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgICAgICB0aGlzLmZvY3VzTmV4dEl0ZW0oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgIGNhc2UgJ3VwJzpcbiAgICAgICAgICAgIHRoaXMuZm9jdXNQcmV2aW91c0l0ZW0oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bkNvbXBvbmVudC5kaXNtaXNzT25CbHVyKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNUcmlnZ2VyQnV0dG9uKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQoZHJvcGRvd25NZW51RWxlbWVudCwgJ21vdXNlZW50ZXInKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5pc01vdXNlRW50ZXIgPSB0cnVlO1xuICAgICAgfSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGRyb3Bkb3duTWVudUVsZW1lbnQsICdtb3VzZWxlYXZlJylcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQuaXNNb3VzZUVudGVyID0gZmFsc2U7XG4gICAgICAgIC8vIEFsbG93IHRoZSBkcm9wZG93biBjb21wb25lbnQgdG8gc2V0IGlzTW91c2VFbnRlciBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIGNsb3NlIGFjdGlvblxuICAgICAgICAvLyBzaG91bGQgYmUgdGFrZW4uXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQudHJpZ2dlciA9PT0gJ2hvdmVyJyAmJlxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5pc01vdXNlRW50ZXIgPT09IGZhbHNlXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cInNreS1kcm9wZG93bi1tZW51IHNreS1zaGFkb3cgc2t5LWVsZXZhdGlvbi00XCJcbiAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgW2F0dHIucm9sZV09XCJhcmlhUm9sZVwiXG4gIFtpZF09XCJkcm9wZG93bk1lbnVJZFwiXG4+XG4gIDxuZy1jb250ZW50PiA8L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
|