@skyux/popovers 5.9.4 → 6.0.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/documentation.json +9 -9
  2. package/esm2020/index.mjs +24 -0
  3. package/esm2020/lib/modules/dropdown/dropdown-button.component.mjs +14 -0
  4. package/esm2020/lib/modules/dropdown/dropdown-extensions.mjs +14 -0
  5. package/esm2020/lib/modules/dropdown/dropdown-item.component.mjs +67 -0
  6. package/esm2020/lib/modules/dropdown/dropdown-menu.component.mjs +300 -0
  7. package/esm2020/lib/modules/dropdown/dropdown.component.mjs +360 -0
  8. package/esm2020/lib/modules/dropdown/dropdown.module.mjs +60 -0
  9. package/esm2020/lib/modules/dropdown/types/dropdown-horizontal-alignment.mjs +2 -0
  10. package/esm2020/lib/modules/dropdown/types/dropdown-menu-change.mjs +2 -0
  11. package/esm2020/lib/modules/dropdown/types/dropdown-message-type.mjs +40 -0
  12. package/esm2020/lib/modules/dropdown/types/dropdown-message.mjs +2 -0
  13. package/esm2020/lib/modules/dropdown/types/dropdown-trigger-type.mjs +2 -0
  14. package/esm2020/lib/modules/popover/popover-adapter.service.mjs +74 -0
  15. package/esm2020/lib/modules/popover/popover-animation-state.mjs +2 -0
  16. package/esm2020/lib/modules/popover/popover-animation.mjs +19 -0
  17. package/esm2020/lib/modules/popover/popover-content.component.mjs +240 -0
  18. package/esm2020/lib/modules/popover/popover-context.mjs +10 -0
  19. package/esm2020/lib/modules/popover/popover-extensions.mjs +29 -0
  20. package/esm2020/lib/modules/popover/popover.component.mjs +205 -0
  21. package/esm2020/lib/modules/popover/popover.directive.mjs +193 -0
  22. package/esm2020/lib/modules/popover/popover.module.mjs +55 -0
  23. package/esm2020/lib/modules/popover/types/popover-adapter-arrow-coordinates.mjs +2 -0
  24. package/esm2020/lib/modules/popover/types/popover-adapter-elements.mjs +2 -0
  25. package/esm2020/lib/modules/popover/types/popover-alignment.mjs +2 -0
  26. package/esm2020/lib/modules/popover/types/popover-message-type.mjs +24 -0
  27. package/esm2020/lib/modules/popover/types/popover-message.mjs +2 -0
  28. package/esm2020/lib/modules/popover/types/popover-placement.mjs +2 -0
  29. package/esm2020/lib/modules/popover/types/popover-position.mjs +2 -0
  30. package/esm2020/lib/modules/popover/types/popover-trigger.mjs +2 -0
  31. package/esm2020/lib/modules/popover/types/popover-type.mjs +2 -0
  32. package/esm2020/lib/modules/shared/sky-popovers-resources.module.mjs +47 -0
  33. package/esm2020/skyux-popovers.mjs +5 -0
  34. package/esm2020/testing/dropdown/dropdown-fixture.mjs +139 -0
  35. package/esm2020/testing/dropdown/dropdown-testing.module.mjs +15 -0
  36. package/esm2020/testing/dropdown/popovers-fixture-dropdown-item.mjs +2 -0
  37. package/esm2020/testing/dropdown/popovers-fixture-dropdown-menu.mjs +2 -0
  38. package/esm2020/testing/dropdown/popovers-fixture-dropdown.mjs +2 -0
  39. package/esm2020/testing/popover/popover-fixture.mjs +86 -0
  40. package/esm2020/testing/popover/popover-testing.module.mjs +29 -0
  41. package/esm2020/testing/public-api.mjs +8 -0
  42. package/esm2020/testing/skyux-popovers-testing.mjs +5 -0
  43. package/fesm2015/{skyux-popovers-testing.js → skyux-popovers-testing.mjs} +9 -9
  44. package/fesm2015/skyux-popovers-testing.mjs.map +1 -0
  45. package/fesm2015/skyux-popovers.mjs +1698 -0
  46. package/fesm2015/skyux-popovers.mjs.map +1 -0
  47. package/fesm2020/skyux-popovers-testing.mjs +272 -0
  48. package/fesm2020/skyux-popovers-testing.mjs.map +1 -0
  49. package/{fesm2015/skyux-popovers.js → fesm2020/skyux-popovers.mjs} +52 -93
  50. package/fesm2020/skyux-popovers.mjs.map +1 -0
  51. package/package.json +39 -15
  52. package/testing/package.json +5 -5
  53. package/bundles/skyux-popovers-testing.umd.js +0 -688
  54. package/bundles/skyux-popovers.umd.js +0 -2217
  55. package/esm2015/index.js +0 -24
  56. package/esm2015/index.js.map +0 -1
  57. package/esm2015/lib/modules/dropdown/dropdown-button.component.js +0 -17
  58. package/esm2015/lib/modules/dropdown/dropdown-button.component.js.map +0 -1
  59. package/esm2015/lib/modules/dropdown/dropdown-extensions.js +0 -14
  60. package/esm2015/lib/modules/dropdown/dropdown-extensions.js.map +0 -1
  61. package/esm2015/lib/modules/dropdown/dropdown-item.component.js +0 -75
  62. package/esm2015/lib/modules/dropdown/dropdown-item.component.js.map +0 -1
  63. package/esm2015/lib/modules/dropdown/dropdown-menu.component.js +0 -308
  64. package/esm2015/lib/modules/dropdown/dropdown-menu.component.js.map +0 -1
  65. package/esm2015/lib/modules/dropdown/dropdown.component.js +0 -366
  66. package/esm2015/lib/modules/dropdown/dropdown.component.js.map +0 -1
  67. package/esm2015/lib/modules/dropdown/dropdown.module.js +0 -60
  68. package/esm2015/lib/modules/dropdown/dropdown.module.js.map +0 -1
  69. package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js +0 -2
  70. package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js.map +0 -1
  71. package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js +0 -2
  72. package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js.map +0 -1
  73. package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js +0 -40
  74. package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js.map +0 -1
  75. package/esm2015/lib/modules/dropdown/types/dropdown-message.js +0 -2
  76. package/esm2015/lib/modules/dropdown/types/dropdown-message.js.map +0 -1
  77. package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js +0 -2
  78. package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js.map +0 -1
  79. package/esm2015/lib/modules/popover/popover-adapter.service.js +0 -74
  80. package/esm2015/lib/modules/popover/popover-adapter.service.js.map +0 -1
  81. package/esm2015/lib/modules/popover/popover-animation-state.js +0 -2
  82. package/esm2015/lib/modules/popover/popover-animation-state.js.map +0 -1
  83. package/esm2015/lib/modules/popover/popover-animation.js +0 -19
  84. package/esm2015/lib/modules/popover/popover-animation.js.map +0 -1
  85. package/esm2015/lib/modules/popover/popover-content.component.js +0 -248
  86. package/esm2015/lib/modules/popover/popover-content.component.js.map +0 -1
  87. package/esm2015/lib/modules/popover/popover-context.js +0 -10
  88. package/esm2015/lib/modules/popover/popover-context.js.map +0 -1
  89. package/esm2015/lib/modules/popover/popover-extensions.js +0 -29
  90. package/esm2015/lib/modules/popover/popover-extensions.js.map +0 -1
  91. package/esm2015/lib/modules/popover/popover.component.js +0 -210
  92. package/esm2015/lib/modules/popover/popover.component.js.map +0 -1
  93. package/esm2015/lib/modules/popover/popover.directive.js +0 -195
  94. package/esm2015/lib/modules/popover/popover.directive.js.map +0 -1
  95. package/esm2015/lib/modules/popover/popover.module.js +0 -56
  96. package/esm2015/lib/modules/popover/popover.module.js.map +0 -1
  97. package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js +0 -2
  98. package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js.map +0 -1
  99. package/esm2015/lib/modules/popover/types/popover-adapter-elements.js +0 -2
  100. package/esm2015/lib/modules/popover/types/popover-adapter-elements.js.map +0 -1
  101. package/esm2015/lib/modules/popover/types/popover-alignment.js +0 -2
  102. package/esm2015/lib/modules/popover/types/popover-alignment.js.map +0 -1
  103. package/esm2015/lib/modules/popover/types/popover-message-type.js +0 -24
  104. package/esm2015/lib/modules/popover/types/popover-message-type.js.map +0 -1
  105. package/esm2015/lib/modules/popover/types/popover-message.js +0 -2
  106. package/esm2015/lib/modules/popover/types/popover-message.js.map +0 -1
  107. package/esm2015/lib/modules/popover/types/popover-placement.js +0 -2
  108. package/esm2015/lib/modules/popover/types/popover-placement.js.map +0 -1
  109. package/esm2015/lib/modules/popover/types/popover-position.js +0 -2
  110. package/esm2015/lib/modules/popover/types/popover-position.js.map +0 -1
  111. package/esm2015/lib/modules/popover/types/popover-trigger.js +0 -2
  112. package/esm2015/lib/modules/popover/types/popover-trigger.js.map +0 -1
  113. package/esm2015/lib/modules/popover/types/popover-type.js +0 -2
  114. package/esm2015/lib/modules/popover/types/popover-type.js.map +0 -1
  115. package/esm2015/lib/modules/shared/sky-popovers-resources.module.js +0 -47
  116. package/esm2015/lib/modules/shared/sky-popovers-resources.module.js.map +0 -1
  117. package/esm2015/skyux-popovers.js +0 -5
  118. package/esm2015/skyux-popovers.js.map +0 -1
  119. package/esm2015/testing/dropdown/dropdown-fixture.js +0 -144
  120. package/esm2015/testing/dropdown/dropdown-fixture.js.map +0 -1
  121. package/esm2015/testing/dropdown/dropdown-testing.module.js +0 -15
  122. package/esm2015/testing/dropdown/dropdown-testing.module.js.map +0 -1
  123. package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js +0 -2
  124. package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js.map +0 -1
  125. package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js +0 -2
  126. package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js.map +0 -1
  127. package/esm2015/testing/dropdown/popovers-fixture-dropdown.js +0 -2
  128. package/esm2015/testing/dropdown/popovers-fixture-dropdown.js.map +0 -1
  129. package/esm2015/testing/popover/popover-fixture.js +0 -86
  130. package/esm2015/testing/popover/popover-fixture.js.map +0 -1
  131. package/esm2015/testing/popover/popover-testing.module.js +0 -29
  132. package/esm2015/testing/popover/popover-testing.module.js.map +0 -1
  133. package/esm2015/testing/public-api.js +0 -8
  134. package/esm2015/testing/public-api.js.map +0 -1
  135. package/esm2015/testing/skyux-popovers-testing.js +0 -5
  136. package/esm2015/testing/skyux-popovers-testing.js.map +0 -1
  137. package/fesm2015/skyux-popovers-testing.js.map +0 -1
  138. package/fesm2015/skyux-popovers.js.map +0 -1
@@ -364,7 +364,7 @@
364
364
  "name": "NgModule"
365
365
  },
366
366
  "arguments": {
367
- "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 entryComponents: [SkyPopoverContentComponent],\n}"
367
+ "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}"
368
368
  }
369
369
  }
370
370
  ],
@@ -381,7 +381,7 @@
381
381
  "sources": [
382
382
  {
383
383
  "fileName": "projects/popovers/src/modules/popover/popover.module.ts",
384
- "line": 34,
384
+ "line": 33,
385
385
  "character": 13
386
386
  }
387
387
  ]
@@ -764,7 +764,7 @@
764
764
  "sources": [
765
765
  {
766
766
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-item.component.ts",
767
- "line": 88,
767
+ "line": 86,
768
768
  "character": 9
769
769
  }
770
770
  ],
@@ -2480,7 +2480,7 @@
2480
2480
  "sources": [
2481
2481
  {
2482
2482
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2483
- "line": 201,
2483
+ "line": 200,
2484
2484
  "character": 9
2485
2485
  }
2486
2486
  ],
@@ -2509,7 +2509,7 @@
2509
2509
  "sources": [
2510
2510
  {
2511
2511
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2512
- "line": 216,
2512
+ "line": 215,
2513
2513
  "character": 9
2514
2514
  }
2515
2515
  ],
@@ -2538,7 +2538,7 @@
2538
2538
  "sources": [
2539
2539
  {
2540
2540
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2541
- "line": 246,
2541
+ "line": 245,
2542
2542
  "character": 9
2543
2543
  }
2544
2544
  ],
@@ -2567,7 +2567,7 @@
2567
2567
  "sources": [
2568
2568
  {
2569
2569
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2570
- "line": 231,
2570
+ "line": 230,
2571
2571
  "character": 9
2572
2572
  }
2573
2573
  ],
@@ -2633,7 +2633,7 @@
2633
2633
  "sources": [
2634
2634
  {
2635
2635
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2636
- "line": 196,
2636
+ "line": 195,
2637
2637
  "character": 9
2638
2638
  }
2639
2639
  ],
@@ -2670,7 +2670,7 @@
2670
2670
  "sources": [
2671
2671
  {
2672
2672
  "fileName": "projects/popovers/src/modules/dropdown/dropdown-menu.component.ts",
2673
- "line": 261,
2673
+ "line": 260,
2674
2674
  "character": 9
2675
2675
  }
2676
2676
  ],
@@ -0,0 +1,24 @@
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
+ export * from './lib/modules/popover/types/popover-type';
15
+ // Components and directives must be exported to support Angular's "partial" Ivy compiler.
16
+ // Obscure names are used to indicate types are not part of the public API.
17
+ export { SkyDropdownItemComponent as λ1 } from './lib/modules/dropdown/dropdown-item.component';
18
+ export { SkyDropdownButtonComponent as λ2 } from './lib/modules/dropdown/dropdown-button.component';
19
+ export { SkyDropdownComponent as λ3 } from './lib/modules/dropdown/dropdown.component';
20
+ export { SkyDropdownMenuComponent as λ4 } from './lib/modules/dropdown/dropdown-menu.component';
21
+ export { SkyPopoverContentComponent as λ5 } from './lib/modules/popover/popover-content.component';
22
+ export { SkyPopoverComponent as λ6 } from './lib/modules/popover/popover.component';
23
+ export { SkyPopoverDirective as λ7 } from './lib/modules/popover/popover.directive';
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsNERBQTRELENBQUM7QUFDM0UsY0FBYyxtREFBbUQsQ0FBQztBQUNsRSxjQUFjLCtDQUErQyxDQUFDO0FBQzlELGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxvREFBb0QsQ0FBQztBQUNuRSxjQUFjLHdDQUF3QyxDQUFDO0FBRXZELGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsa0RBQWtELENBQUM7QUFDakUsY0FBYywrQ0FBK0MsQ0FBQztBQUM5RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywwQ0FBMEMsQ0FBQztBQUV6RCwwRkFBMEY7QUFDMUYsMkVBQTJFO0FBQzNFLE9BQU8sRUFBRSx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLElBQUksRUFBRSxFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDcEcsT0FBTyxFQUFFLG9CQUFvQixJQUFJLEVBQUUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSx3QkFBd0IsSUFBSSxFQUFFLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNoRyxPQUFPLEVBQUUsMEJBQTBCLElBQUksRUFBRSxFQUFFLE1BQU0saURBQWlELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixJQUFJLEVBQUUsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxFQUFFLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vdHlwZXMvZHJvcGRvd24taG9yaXpvbnRhbC1hbGlnbm1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi90eXBlcy9kcm9wZG93bi1tZW51LWNoYW5nZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL3R5cGVzL2Ryb3Bkb3duLW1lc3NhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi90eXBlcy9kcm9wZG93bi1tZXNzYWdlLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi90eXBlcy9kcm9wZG93bi10cmlnZ2VyLXR5cGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi5tb2R1bGUnO1xuXG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci5tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3R5cGVzL3BvcG92ZXItYWxpZ25tZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci90eXBlcy9wb3BvdmVyLW1lc3NhZ2UnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3R5cGVzL3BvcG92ZXItbWVzc2FnZS10eXBlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci90eXBlcy9wb3BvdmVyLXBsYWNlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvdHlwZXMvcG9wb3Zlci1wb3NpdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvdHlwZXMvcG9wb3Zlci10cmlnZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21vZHVsZXMvcG9wb3Zlci90eXBlcy9wb3BvdmVyLXR5cGUnO1xuXG4vLyBDb21wb25lbnRzIGFuZCBkaXJlY3RpdmVzIG11c3QgYmUgZXhwb3J0ZWQgdG8gc3VwcG9ydCBBbmd1bGFyJ3MgXCJwYXJ0aWFsXCIgSXZ5IGNvbXBpbGVyLlxuLy8gT2JzY3VyZSBuYW1lcyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0eXBlcyBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkuXG5leHBvcnQgeyBTa3lEcm9wZG93bkl0ZW1Db21wb25lbnQgYXMgzrsxIH0gZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudCc7XG5leHBvcnQgeyBTa3lEcm9wZG93bkJ1dHRvbkNvbXBvbmVudCBhcyDOuzIgfSBmcm9tICcuL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLWJ1dHRvbi5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RHJvcGRvd25Db21wb25lbnQgYXMgzrszIH0gZnJvbSAnLi9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5RHJvcGRvd25NZW51Q29tcG9uZW50IGFzIM67NCB9IGZyb20gJy4vbGliL21vZHVsZXMvZHJvcGRvd24vZHJvcGRvd24tbWVudS5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5UG9wb3ZlckNvbnRlbnRDb21wb25lbnQgYXMgzrs1IH0gZnJvbSAnLi9saWIvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXItY29udGVudC5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5UG9wb3ZlckNvbXBvbmVudCBhcyDOuzYgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci5jb21wb25lbnQnO1xuZXhwb3J0IHsgU2t5UG9wb3ZlckRpcmVjdGl2ZSBhcyDOuzcgfSBmcm9tICcuL2xpYi9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci5kaXJlY3RpdmUnO1xuIl19
@@ -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.3.2", ngImport: i0, type: SkyDropdownButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9
+ SkyDropdownButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", type: SkyDropdownButtonComponent, selector: "sky-dropdown-button", ngImport: i0, template: "<ng-content></ng-content>\n" });
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", 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,67 @@
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
+ const isFocusable = this.buttonElement &&
51
+ this.buttonElement.getAttribute('disabled') === null;
52
+ return isFocusable;
53
+ }
54
+ resetState() {
55
+ this.isActive = false;
56
+ this.changeDetector.markForCheck();
57
+ }
58
+ }
59
+ SkyDropdownItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDropdownItemComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
60
+ SkyDropdownItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", 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 });
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDropdownItemComponent, decorators: [{
62
+ type: Component,
63
+ 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"] }]
64
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }]; }, propDecorators: { ariaRole: [{
65
+ type: Input
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3BvcG92ZXJzL3NyYy9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsS0FBSyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7OztBQUV2Qjs7R0FFRztBQVFILE1BQU0sT0FBTyx3QkFBd0I7SUE0Qm5DLFlBQ1MsVUFBc0IsRUFDckIsY0FBaUMsRUFDakMsUUFBbUI7UUFGcEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUNyQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQVR0QixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFRdkIsQ0FBQztJQS9CSjs7Ozs7OztPQU9HO0lBQ0gsSUFDVyxRQUFRLENBQUMsS0FBeUI7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELElBQVcsUUFBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDakUsQ0FBQztJQWNNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUV0QywwQ0FBMEM7UUFDMUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUN6QywwQkFBMEI7UUFDMUIsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVNLFlBQVksQ0FBQyxpQkFBMEI7UUFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFFckIsSUFBSSxpQkFBaUIsRUFBRTtZQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0lBRU0sV0FBVztRQUNoQixNQUFNLFdBQVcsR0FDZixJQUFJLENBQUMsYUFBYTtZQUNsQixJQUFJLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsS0FBSyxJQUFJLENBQUM7UUFDdkQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7O3FIQW5FVSx3QkFBd0I7eUdBQXhCLHdCQUF3QiwyRkNyQnJDLDZOQVVBOzJGRFdhLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxtQkFBbUIsbUJBR1osdUJBQXVCLENBQUMsTUFBTSxpQkFDaEMsaUJBQWlCLENBQUMsSUFBSTt5SkFZMUIsUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgUmVuZGVyZXIyLFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBpdGVtcyB0byBkaXNwbGF5IG9uIHRoZSBkcm9wZG93biBtZW51LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZHJvcGRvd24taXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZHJvcGRvd24taXRlbS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RHJvcGRvd25JdGVtQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gQVJJQSByb2xlIGZvciB0aGUgZHJvcGRvd24gbWVudSBpdGVtXG4gICAqIFt0byBzdXBwb3J0IGFjY2Vzc2liaWxpdHldKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvbGVhcm4vYWNjZXNzaWJpbGl0eSlcbiAgICogYnkgaW5kaWNhdGluZyBob3cgdGhlIGl0ZW0gZnVuY3Rpb25zIGFuZCB3aGF0IGl0IGNvbnRyb2xzLiBGb3IgaW5mb3JtYXRpb24gYWJvdXRcbiAgICogaG93IGFuIEFSSUEgcm9sZSBpbmRpY2F0ZXMgd2hhdCBhbiBpdGVtIHJlcHJlc2VudHMgb24gYSB3ZWIgcGFnZSwgc2VlIHRoZVxuICAgKiBbV0FJLUFSSUEgcm9sZXMgbW9kZWxdKGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS9yb2xlcykuXG4gICAqIEBkZWZhdWx0IFwibWVudWl0ZW1cIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhcmlhUm9sZSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYXJpYVJvbGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXJpYVJvbGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXJpYVJvbGUgfHwgJ21lbnVpdGVtJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnV0dG9uRWxlbWVudCgpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbixhJyk7XG4gIH1cblxuICBwdWJsaWMgaXNBY3RpdmUgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNEaXNhYmxlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2FyaWFSb2xlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRGlzYWJsZWQgPSAhdGhpcy5pc0ZvY3VzYWJsZSgpO1xuXG4gICAgLy8gTWFrZSBzdXJlIGFuY2hvciBlbGVtZW50cyBhcmUgdGFiLWFibGUuXG4gICAgY29uc3QgYnV0dG9uRWxlbWVudCA9IHRoaXMuYnV0dG9uRWxlbWVudDtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChidXR0b25FbGVtZW50KSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShidXR0b25FbGVtZW50LCAndGFiSW5kZXgnLCAnMCcpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzRWxlbWVudChlbmFibGVOYXRpdmVGb2N1czogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgaWYgKGVuYWJsZU5hdGl2ZUZvY3VzKSB7XG4gICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBpc0ZvY3VzYWJsZSgpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc0ZvY3VzYWJsZSA9XG4gICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgPT09IG51bGw7XG4gICAgcmV0dXJuIGlzRm9jdXNhYmxlO1xuICB9XG5cbiAgcHVibGljIHJlc2V0U3RhdGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJza3ktZHJvcGRvd24taXRlbVwiXG4gIFthdHRyLnJvbGVdPVwiYXJpYVJvbGVcIlxuICBbbmdDbGFzc109XCJ7XG4gICAgJ3NreS1kcm9wZG93bi1pdGVtLWFjdGl2ZSc6IGlzQWN0aXZlLFxuICAgICdza3ktZHJvcGRvd24taXRlbS1kaXNhYmxlZCc6IGlzRGlzYWJsZWRcbiAgfVwiXG4+XG4gIDxuZy1jb250ZW50PiA8L25nLWNvbnRlbnQ+XG48L2Rpdj5cbiJdfQ==
@@ -0,0 +1,300 @@
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
+ switch (message.type) {
85
+ case SkyDropdownMessageType.Open:
86
+ case SkyDropdownMessageType.Close:
87
+ this.reset();
88
+ break;
89
+ case SkyDropdownMessageType.FocusFirstItem:
90
+ this.focusFirstItem();
91
+ break;
92
+ case SkyDropdownMessageType.FocusNextItem:
93
+ this.focusNextItem();
94
+ break;
95
+ case SkyDropdownMessageType.FocusPreviousItem:
96
+ this.focusPreviousItem();
97
+ break;
98
+ case SkyDropdownMessageType.FocusLastItem:
99
+ this.focusLastItem();
100
+ break;
101
+ }
102
+ });
103
+ this.menuChanges
104
+ .pipe(takeUntil(this.ngUnsubscribe))
105
+ .subscribe((change) => {
106
+ // Close the dropdown when a menu item is selected.
107
+ if (change.selectedItem) {
108
+ this.sendMessage(SkyDropdownMessageType.Close);
109
+ this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
110
+ }
111
+ if (change.items) {
112
+ // Update the popover style and position whenever the number of items changes.
113
+ this.sendMessage(SkyDropdownMessageType.Reposition);
114
+ }
115
+ });
116
+ }
117
+ // Reset dropdown whenever the menu items change.
118
+ this.menuItems.changes
119
+ .pipe(takeUntil(this.ngUnsubscribe))
120
+ .subscribe((items) => {
121
+ this.reset();
122
+ this.menuChanges.emit({
123
+ items: items.toArray(),
124
+ });
125
+ });
126
+ this.addEventListeners();
127
+ }
128
+ ngOnDestroy() {
129
+ this.ngUnsubscribe.next();
130
+ this.ngUnsubscribe.complete();
131
+ }
132
+ focusFirstItem() {
133
+ if (!this.hasFocusableItems) {
134
+ return;
135
+ }
136
+ this.menuIndex = 0;
137
+ const firstItem = this.getItemByIndex(this.menuIndex);
138
+ if (firstItem && firstItem.isFocusable()) {
139
+ this.focusItem(firstItem);
140
+ }
141
+ else {
142
+ this.focusNextItem();
143
+ }
144
+ }
145
+ focusLastItem() {
146
+ if (!this.hasFocusableItems) {
147
+ return;
148
+ }
149
+ this.menuIndex = this.menuItems.length - 1;
150
+ const lastItem = this.getItemByIndex(this.menuIndex);
151
+ if (lastItem && lastItem.isFocusable()) {
152
+ this.focusItem(lastItem);
153
+ }
154
+ else {
155
+ this.focusPreviousItem();
156
+ }
157
+ }
158
+ focusPreviousItem() {
159
+ if (!this.hasFocusableItems) {
160
+ return;
161
+ }
162
+ this.menuIndex--;
163
+ const previousItem = this.getItemByIndex(this.menuIndex);
164
+ if (previousItem && previousItem.isFocusable()) {
165
+ this.focusItem(previousItem);
166
+ }
167
+ else {
168
+ this.focusPreviousItem();
169
+ }
170
+ }
171
+ focusNextItem() {
172
+ if (!this.hasFocusableItems) {
173
+ return;
174
+ }
175
+ this.menuIndex++;
176
+ const nextItem = this.getItemByIndex(this.menuIndex);
177
+ if (nextItem && nextItem.isFocusable()) {
178
+ this.focusItem(nextItem);
179
+ }
180
+ else {
181
+ this.focusNextItem();
182
+ }
183
+ }
184
+ reset() {
185
+ this._menuIndex = -1;
186
+ this.resetItemsActiveState();
187
+ this.changeDetector.markForCheck();
188
+ }
189
+ resetItemsActiveState() {
190
+ this.menuItems.forEach((item) => {
191
+ item.resetState();
192
+ });
193
+ }
194
+ focusItem(item) {
195
+ this.resetItemsActiveState();
196
+ item.focusElement(this.useNativeFocus);
197
+ this.menuChanges.emit({
198
+ activeIndex: this.menuIndex,
199
+ });
200
+ }
201
+ getItemByIndex(index) {
202
+ return this.menuItems.find((_, i) => i === index);
203
+ }
204
+ selectItemByEventTarget(target) {
205
+ const selectedItem = this.menuItems.find((item, i) => {
206
+ const found = item.elementRef.nativeElement.contains(target);
207
+ if (found) {
208
+ this.menuIndex = i;
209
+ this.menuChanges.next({
210
+ activeIndex: this.menuIndex,
211
+ });
212
+ }
213
+ return found;
214
+ });
215
+ /* istanbul ignore else */
216
+ if (selectedItem) {
217
+ this.menuChanges.next({
218
+ selectedItem,
219
+ });
220
+ }
221
+ }
222
+ sendMessage(type) {
223
+ this.dropdownComponent.messageStream.next({ type });
224
+ }
225
+ addEventListeners() {
226
+ const dropdownMenuElement = this.elementRef.nativeElement;
227
+ observableFromEvent(dropdownMenuElement, 'click')
228
+ .pipe(takeUntil(this.ngUnsubscribe))
229
+ .subscribe((event) => {
230
+ this.selectItemByEventTarget(event.target);
231
+ });
232
+ observableFromEvent(dropdownMenuElement, 'keydown')
233
+ .pipe(takeUntil(this.ngUnsubscribe))
234
+ .subscribe((event) => {
235
+ const key = event.key.toLowerCase();
236
+ switch (key) {
237
+ case 'escape':
238
+ this.sendMessage(SkyDropdownMessageType.Close);
239
+ this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
240
+ event.stopPropagation();
241
+ event.preventDefault();
242
+ break;
243
+ case 'arrowdown':
244
+ case 'down':
245
+ this.focusNextItem();
246
+ event.preventDefault();
247
+ break;
248
+ case 'arrowup':
249
+ case 'up':
250
+ this.focusPreviousItem();
251
+ event.preventDefault();
252
+ break;
253
+ case 'tab':
254
+ if (this.dropdownComponent.dismissOnBlur) {
255
+ this.sendMessage(SkyDropdownMessageType.Close);
256
+ }
257
+ this.sendMessage(SkyDropdownMessageType.FocusTriggerButton);
258
+ break;
259
+ }
260
+ });
261
+ observableFromEvent(dropdownMenuElement, 'mouseenter')
262
+ .pipe(takeUntil(this.ngUnsubscribe))
263
+ .subscribe(() => {
264
+ this.dropdownComponent.isMouseEnter = true;
265
+ });
266
+ observableFromEvent(dropdownMenuElement, 'mouseleave')
267
+ .pipe(takeUntil(this.ngUnsubscribe))
268
+ .subscribe(() => {
269
+ this.dropdownComponent.isMouseEnter = false;
270
+ // Allow the dropdown component to set isMouseEnter before checking if the close action
271
+ // should be taken.
272
+ setTimeout(() => {
273
+ if (this.dropdownComponent.trigger === 'hover' &&
274
+ this.dropdownComponent.isMouseEnter === false) {
275
+ this.sendMessage(SkyDropdownMessageType.Close);
276
+ }
277
+ });
278
+ });
279
+ }
280
+ }
281
+ SkyDropdownMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDropdownMenuComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyDropdownComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
282
+ SkyDropdownMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.2", 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 });
283
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImport: i0, type: SkyDropdownMenuComponent, decorators: [{
284
+ type: Component,
285
+ 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"] }]
286
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyDropdownComponent, decorators: [{
287
+ type: Optional
288
+ }] }]; }, propDecorators: { ariaLabelledBy: [{
289
+ type: Input
290
+ }], ariaRole: [{
291
+ type: Input
292
+ }], useNativeFocus: [{
293
+ type: Input
294
+ }], menuChanges: [{
295
+ type: Output
296
+ }], menuItems: [{
297
+ type: ContentChildren,
298
+ args: [SkyDropdownItemComponent, { descendants: true }]
299
+ }] } });
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvcG9wb3ZlcnMvc3JjL2xpYi9tb2R1bGVzL2Ryb3Bkb3duL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3BvcG92ZXJzL3NyYy9saWIvbW9kdWxlcy9kcm9wZG93bi9kcm9wZG93bi1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsaUJBQWlCLEdBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUc1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7O0FBRXZFLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmOzs7R0FHRztBQVFILE1BQU0sT0FBTyx3QkFBd0I7SUF5Rm5DLFlBQ1UsY0FBaUMsRUFDakMsVUFBc0IsRUFDVixpQkFBdUM7UUFGbkQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixzQkFBaUIsR0FBakIsaUJBQWlCLENBQXNCO1FBN0M3RDs7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Q0FBQyxDQUFDO1FBRUwsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsWUFBWSxDQUFDO2FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUM1Qyx1RkFBdUY7WUFDdkYsbUJBQW1CO1lBQ25CLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFDRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxLQUFLLE9BQU87b0JBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUM3QztvQkFDQSxJQUFJLENBQUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoRDtZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztxSEFsVlUsd0JBQXdCO3lHQUF4Qix3QkFBd0Isa09BOEVsQix3QkFBd0IsZ0RDbkgzQywrTUFRQTsyRkQ2QmEsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJOzswQkE4RmxDLFFBQVE7NENBckZKLGNBQWM7c0JBRHBCLEtBQUs7Z0JBYUssUUFBUTtzQkFEbEIsS0FBSztnQkFpQkssY0FBYztzQkFEeEIsS0FBSztnQkFtQkMsV0FBVztzQkFEakIsTUFBTTtnQkEyQkEsU0FBUztzQkFEZixlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN1YmplY3QsIGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZHJvcGRvd24taXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5RHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuL2Ryb3Bkb3duLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lEcm9wZG93bk1lbnVDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2Ryb3Bkb3duLW1lbnUtY2hhbmdlJztcbmltcG9ydCB7IFNreURyb3Bkb3duTWVzc2FnZSB9IGZyb20gJy4vdHlwZXMvZHJvcGRvd24tbWVzc2FnZSc7XG5pbXBvcnQgeyBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9kcm9wZG93bi1tZXNzYWdlLXR5cGUnO1xuXG5sZXQgbmV4dElkID0gMDtcbi8qKlxuICogQ3JlYXRlcyBhIG1lbnUgdGhhdCBjb250YWlucyBkcm9wZG93biBtZW51IGl0ZW1zLlxuICpcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LWRyb3Bkb3duLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24tbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLW1lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIFNreURyb3Bkb3duTWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIEhUTUwgZWxlbWVudCBJRCAod2l0aG91dCB0aGUgbGVhZGluZyBgI2ApIG9mIHRoZSBlbGVtZW50IHRoYXQgbGFiZWxzXG4gICAqIHRoZSBkcm9wZG93biBtZW51LiBUaGlzIHNldHMgdGhlIGRyb3Bkb3duIG1lbnUncyBgYXJpYS1sYWJlbGxlZGJ5YCBhdHRyaWJ1dGVcbiAgICogW3RvIHN1cHBvcnQgYWNjZXNzaWJpbGl0eV0oaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9sZWFybi9hY2Nlc3NpYmlsaXR5KS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYW4gQVJJQSByb2xlIGZvciB0aGUgZHJvcGRvd24gbWVudVxuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpXG4gICAqIGJ5IGluZGljYXRpbmcgaG93IHRoZSBkcm9wZG93biBtZW51IGZ1bmN0aW9ucyBhbmQgd2hhdCBpdCBjb250cm9scy4gVGhlIGRyb3Bkb3duIGJ1dHRvblxuICAgKiBpbmhlcml0cyB0aGlzIHZhbHVlIHRvIHNldCBpdHMgYGFyaWEtaGFzcG9wdXBgIHByb3BlcnR5LiBGb3IgaW5mb3JtYXRpb25cbiAgICogYWJvdXQgaG93IGFuIEFSSUEgcm9sZSBpbmRpY2F0ZXMgd2hhdCBhbiBpdGVtIHJlcHJlc2VudHMgb24gYSB3ZWIgcGFnZSwgc2VlIHRoZVxuICAgKiBbV0FJLUFSSUEgcm9sZXMgbW9kZWxdKGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvUEYvYXJpYS9yb2xlcykuXG4gICAqIEBkZWZhdWx0IFwibWVudVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFyaWFSb2xlKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hcmlhUm9sZSA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBhcmlhUm9sZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcmlhUm9sZSB8fCAnbWVudSc7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gdXNlIHRoZSBicm93c2VyJ3MgbmF0aXZlIGZvY3VzIGZ1bmN0aW9uIHdoZW4gdXNlcnMgbmF2aWdhdGUgdGhyb3VnaCBtZW51XG4gICAqIGl0ZW1zIHdpdGggdGhlIGtleWJvYXJkLiBUbyBkaXNhYmxlIHRoZSBuYXRpdmUgZm9jdXMgZnVuY3Rpb24sIHNldCB0aGlzIHByb3BlcnR5IHRvIGBmYWxzZWAuXG4gICAqIEZvciBleGFtcGxlLCB0byBsZXQgdXNlcnMgaW50ZXJhY3Qgd2l0aCB0aGUgZHJvcGRvd24gbWVudSBidXQga2VlcCB0aGUga2V5Ym9hcmQgZm9jdXMgb24gYVxuICAgKiBkaWZmZXJlbnQgZWxlbWVudCwgc2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCB1c2VOYXRpdmVGb2N1cyh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3VzZU5hdGl2ZUZvY3VzID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHVzZU5hdGl2ZUZvY3VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl91c2VOYXRpdmVGb2N1cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdXNlTmF0aXZlRm9jdXM7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgZHJvcGRvd24gbWVudSdzIGFjdGl2ZSBpbmRleCBvciBzZWxlY3RlZCBpdGVtIGNoYW5nZXMuIFRoaXMgZXZlbnQgcHJvdmlkZXMgYW5cbiAgICogb2JzZXJ2YWJsZSB0byBlbWl0IGNoYW5nZXMsIGFuZCB0aGUgcmVzcG9uc2UgaXMgb2ZcbiAgICogdGhlIFNreURyb3Bkb3duTWVudUNoYW5nZSB0eXBlLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBtZW51Q2hhbmdlcyA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5RHJvcGRvd25NZW51Q2hhbmdlPigpO1xuXG4gIHB1YmxpYyBkcm9wZG93bk1lbnVJZCA9IGBza3ktZHJvcGRvd24tbWVudS0keysrbmV4dElkfWA7XG5cbiAgcHJpdmF0ZSBnZXQgaGFzRm9jdXNhYmxlSXRlbXMoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLm1lbnVJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmlzRm9jdXNhYmxlKCkpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHNldCBtZW51SW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh2YWx1ZSA8IDApIHtcbiAgICAgIHZhbHVlID0gdGhpcy5tZW51SXRlbXMubGVuZ3RoIC0gMTtcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPj0gdGhpcy5tZW51SXRlbXMubGVuZ3RoKSB7XG4gICAgICB2YWx1ZSA9IDA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWVudUluZGV4ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG1lbnVJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9tZW51SW5kZXg7XG4gIH1cblxuICBAQ29udGVudENoaWxkcmVuKFNreURyb3Bkb3duSXRlbUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KVxuICBwdWJsaWMgbWVudUl0ZW1zITogUXVlcnlMaXN0PFNreURyb3Bkb3duSXRlbUNvbXBvbmVudD47XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9hcmlhUm9sZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIHByaXZhdGUgX21lbnVJbmRleCA9IDA7XG5cbiAgcHJpdmF0ZSBfdXNlTmF0aXZlRm9jdXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZHJvcGRvd25Db21wb25lbnQ6IFNreURyb3Bkb3duQ29tcG9uZW50XG4gICkge31cblxuICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuZHJvcGRvd25Db21wb25lbnQpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQubWVudUlkID0gdGhpcy5kcm9wZG93bk1lbnVJZDtcbiAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnQubWVudUFyaWFSb2xlID0gdGhpcy5hcmlhUm9sZTtcblxuICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5tZXNzYWdlU3RyZWFtXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBTa3lEcm9wZG93bk1lc3NhZ2UpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLk9wZW46XG4gICAgICAgICAgICBjYXNlIFNreURyb3Bkb3duTWVzc2FnZVR5cGUuQ2xvc2U6XG4gICAgICAgICAgICAgIHRoaXMucmVzZXQoKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5Gb2N1c0ZpcnN0SXRlbTpcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0ZpcnN0SXRlbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkZvY3VzTmV4dEl0ZW06XG4gICAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbSgpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkZvY3VzUHJldmlvdXNJdGVtOlxuICAgICAgICAgICAgICB0aGlzLmZvY3VzUHJldmlvdXNJdGVtKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNMYXN0SXRlbTpcbiAgICAgICAgICAgICAgdGhpcy5mb2N1c0xhc3RJdGVtKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMubWVudUNoYW5nZXNcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZTogU2t5RHJvcGRvd25NZW51Q2hhbmdlKSA9PiB7XG4gICAgICAgICAgLy8gQ2xvc2UgdGhlIGRyb3Bkb3duIHdoZW4gYSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgaWYgKGNoYW5nZS5zZWxlY3RlZEl0ZW0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNUcmlnZ2VyQnV0dG9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2hhbmdlLml0ZW1zKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHBvcG92ZXIgc3R5bGUgYW5kIHBvc2l0aW9uIHdoZW5ldmVyIHRoZSBudW1iZXIgb2YgaXRlbXMgY2hhbmdlcy5cbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5SZXBvc2l0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFJlc2V0IGRyb3Bkb3duIHdoZW5ldmVyIHRoZSBtZW51IGl0ZW1zIGNoYW5nZS5cbiAgICB0aGlzLm1lbnVJdGVtcy5jaGFuZ2VzXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGl0ZW1zOiBRdWVyeUxpc3Q8U2t5RHJvcGRvd25JdGVtQ29tcG9uZW50PikgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0KCk7XG4gICAgICAgIHRoaXMubWVudUNoYW5nZXMuZW1pdCh7XG4gICAgICAgICAgaXRlbXM6IGl0ZW1zLnRvQXJyYXkoKSxcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNGb2N1c2FibGVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudUluZGV4ID0gMDtcblxuICAgIGNvbnN0IGZpcnN0SXRlbSA9IHRoaXMuZ2V0SXRlbUJ5SW5kZXgodGhpcy5tZW51SW5kZXgpO1xuICAgIGlmIChmaXJzdEl0ZW0gJiYgZmlyc3RJdGVtLmlzRm9jdXNhYmxlKCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZpcnN0SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c0xhc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5oYXNGb2N1c2FibGVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudUluZGV4ID0gdGhpcy5tZW51SXRlbXMubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IGxhc3RJdGVtID0gdGhpcy5nZXRJdGVtQnlJbmRleCh0aGlzLm1lbnVJbmRleCk7XG4gICAgaWYgKGxhc3RJdGVtICYmIGxhc3RJdGVtLmlzRm9jdXNhYmxlKCkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGxhc3RJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c1ByZXZpb3VzSXRlbSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaGFzRm9jdXNhYmxlSXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVJbmRleC0tO1xuXG4gICAgY29uc3QgcHJldmlvdXNJdGVtID0gdGhpcy5nZXRJdGVtQnlJbmRleCh0aGlzLm1lbnVJbmRleCk7XG4gICAgaWYgKHByZXZpb3VzSXRlbSAmJiBwcmV2aW91c0l0ZW0uaXNGb2N1c2FibGUoKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0ocHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBmb2N1c05leHRJdGVtKCkge1xuICAgIGlmICghdGhpcy5oYXNGb2N1c2FibGVJdGVtcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWVudUluZGV4Kys7XG5cbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMuZ2V0SXRlbUJ5SW5kZXgodGhpcy5tZW51SW5kZXgpO1xuICAgIGlmIChuZXh0SXRlbSAmJiBuZXh0SXRlbS5pc0ZvY3VzYWJsZSgpKSB7XG4gICAgICB0aGlzLmZvY3VzSXRlbShuZXh0SXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLl9tZW51SW5kZXggPSAtMTtcbiAgICB0aGlzLnJlc2V0SXRlbXNBY3RpdmVTdGF0ZSgpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0SXRlbXNBY3RpdmVTdGF0ZSgpIHtcbiAgICB0aGlzLm1lbnVJdGVtcy5mb3JFYWNoKChpdGVtOiBTa3lEcm9wZG93bkl0ZW1Db21wb25lbnQpID0+IHtcbiAgICAgIGl0ZW0ucmVzZXRTdGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oaXRlbTogU2t5RHJvcGRvd25JdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgdGhpcy5yZXNldEl0ZW1zQWN0aXZlU3RhdGUoKTtcbiAgICBpdGVtLmZvY3VzRWxlbWVudCh0aGlzLnVzZU5hdGl2ZUZvY3VzKTtcbiAgICB0aGlzLm1lbnVDaGFuZ2VzLmVtaXQoe1xuICAgICAgYWN0aXZlSW5kZXg6IHRoaXMubWVudUluZGV4LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJdGVtQnlJbmRleChpbmRleDogbnVtYmVyKTogU2t5RHJvcGRvd25JdGVtQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZW51SXRlbXMuZmluZCgoXywgaSkgPT4gaSA9PT0gaW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RJdGVtQnlFdmVudFRhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gdGhpcy5tZW51SXRlbXMuZmluZChcbiAgICAgIChpdGVtOiBTa3lEcm9wZG93bkl0ZW1Db21wb25lbnQsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBmb3VuZCA9IGl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCk7XG5cbiAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgdGhpcy5tZW51SW5kZXggPSBpO1xuICAgICAgICAgIHRoaXMubWVudUNoYW5nZXMubmV4dCh7XG4gICAgICAgICAgICBhY3RpdmVJbmRleDogdGhpcy5tZW51SW5kZXgsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm91bmQ7XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHNlbGVjdGVkSXRlbSkge1xuICAgICAgdGhpcy5tZW51Q2hhbmdlcy5uZXh0KHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZW5kTWVzc2FnZSh0eXBlOiBTa3lEcm9wZG93bk1lc3NhZ2VUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5tZXNzYWdlU3RyZWFtLm5leHQoeyB0eXBlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBkcm9wZG93bk1lbnVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRyb3Bkb3duTWVudUVsZW1lbnQsICdjbGljaycpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuc2VsZWN0SXRlbUJ5RXZlbnRUYXJnZXQoZXZlbnQudGFyZ2V0IGFzIEV2ZW50VGFyZ2V0KTtcbiAgICAgIH0pO1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkcm9wZG93bk1lbnVFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgY2FzZSAnZXNjYXBlJzpcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSk7XG4gICAgICAgICAgICB0aGlzLnNlbmRNZXNzYWdlKFNreURyb3Bkb3duTWVzc2FnZVR5cGUuRm9jdXNUcmlnZ2VyQnV0dG9uKTtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICAgIHRoaXMuZm9jdXNOZXh0SXRlbSgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzSXRlbSgpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAndGFiJzpcbiAgICAgICAgICAgIGlmICh0aGlzLmRyb3Bkb3duQ29tcG9uZW50LmRpc21pc3NPbkJsdXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZW5kTWVzc2FnZShTa3lEcm9wZG93bk1lc3NhZ2VUeXBlLkNsb3NlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5Gb2N1c1RyaWdnZXJCdXR0b24pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudChkcm9wZG93bk1lbnVFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50LmlzTW91c2VFbnRlciA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIG9ic2VydmFibGVGcm9tRXZlbnQoZHJvcGRvd25NZW51RWxlbWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC5pc01vdXNlRW50ZXIgPSBmYWxzZTtcbiAgICAgICAgLy8gQWxsb3cgdGhlIGRyb3Bkb3duIGNvbXBvbmVudCB0byBzZXQgaXNNb3VzZUVudGVyIGJlZm9yZSBjaGVja2luZyBpZiB0aGUgY2xvc2UgYWN0aW9uXG4gICAgICAgIC8vIHNob3VsZCBiZSB0YWtlbi5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudC50cmlnZ2VyID09PSAnaG92ZXInICYmXG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duQ29tcG9uZW50LmlzTW91c2VFbnRlciA9PT0gZmFsc2VcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UoU2t5RHJvcGRvd25NZXNzYWdlVHlwZS5DbG9zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LWRyb3Bkb3duLW1lbnUgc2t5LXNoYWRvdyBza3ktZWxldmF0aW9uLTRcIlxuICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICBbYXR0ci5yb2xlXT1cImFyaWFSb2xlXCJcbiAgW2lkXT1cImRyb3Bkb3duTWVudUlkXCJcbj5cbiAgPG5nLWNvbnRlbnQ+IDwvbmctY29udGVudD5cbjwvZGl2PlxuIl19