@leanix/components 0.4.531 → 0.4.533

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 (157) hide show
  1. package/fesm2022/leanix-components.mjs +365 -365
  2. package/fesm2022/leanix-components.mjs.map +1 -1
  3. package/lib/core-ui/tooltip/tooltip.directive.d.ts +1 -1
  4. package/lib/forms-ui/components/keyboard-select.directive.d.ts +1 -1
  5. package/lib/forms-ui/models/base-select.directive.d.ts +1 -1
  6. package/lib/tab-ui/components/tab-group/tab-group.component.d.ts +1 -1
  7. package/package.json +10 -14
  8. package/esm2022/index.mjs +0 -145
  9. package/esm2022/leanix-components.mjs +0 -5
  10. package/esm2022/lib/core-ui/components/avatar/avatar.component.mjs +0 -40
  11. package/esm2022/lib/core-ui/components/avatar/avatar.helpers.mjs +0 -49
  12. package/esm2022/lib/core-ui/components/avatar/avatar.model.mjs +0 -33
  13. package/esm2022/lib/core-ui/components/avatar-group/avatar-group.component.mjs +0 -75
  14. package/esm2022/lib/core-ui/components/badge/badge.component.mjs +0 -58
  15. package/esm2022/lib/core-ui/components/banner/banner.component.mjs +0 -68
  16. package/esm2022/lib/core-ui/components/banner/banner.models.mjs +0 -12
  17. package/esm2022/lib/core-ui/components/button/button.component.mjs +0 -179
  18. package/esm2022/lib/core-ui/components/button-group/button-group.component.mjs +0 -28
  19. package/esm2022/lib/core-ui/components/card/card.component.mjs +0 -26
  20. package/esm2022/lib/core-ui/components/collapsible/collapsible.component.mjs +0 -52
  21. package/esm2022/lib/core-ui/components/counter/counter.component.mjs +0 -30
  22. package/esm2022/lib/core-ui/components/ellipsis/ellipsis.component.mjs +0 -143
  23. package/esm2022/lib/core-ui/components/empty-state/empty-state.component.mjs +0 -41
  24. package/esm2022/lib/core-ui/components/icon-scale/icon-scale.component.mjs +0 -36
  25. package/esm2022/lib/core-ui/components/skeleton/skeleton.component.mjs +0 -44
  26. package/esm2022/lib/core-ui/components/spinner/spinner.component.mjs +0 -26
  27. package/esm2022/lib/core-ui/components/stepper/stepper.component.mjs +0 -70
  28. package/esm2022/lib/core-ui/components/table/table-header/table-header.component.mjs +0 -128
  29. package/esm2022/lib/core-ui/components/table/table.component.mjs +0 -77
  30. package/esm2022/lib/core-ui/components/tiny-spinner/tiny-spinner.component.mjs +0 -14
  31. package/esm2022/lib/core-ui/components/tokenizer/token/token.component.mjs +0 -20
  32. package/esm2022/lib/core-ui/components/tokenizer/tokenizer-overflow-popover/tokenizer-overflow-popover.component.mjs +0 -44
  33. package/esm2022/lib/core-ui/components/tokenizer/tokenizer.component.mjs +0 -149
  34. package/esm2022/lib/core-ui/core-ui.constants.mjs +0 -240
  35. package/esm2022/lib/core-ui/core-ui.module.mjs +0 -206
  36. package/esm2022/lib/core-ui/directives/after-view-init.directive.mjs +0 -33
  37. package/esm2022/lib/core-ui/directives/autoclose-group.service.mjs +0 -39
  38. package/esm2022/lib/core-ui/directives/autoclose.directive.mjs +0 -43
  39. package/esm2022/lib/core-ui/directives/autofocus.directive.mjs +0 -36
  40. package/esm2022/lib/core-ui/functions/core-css.helpers.mjs +0 -52
  41. package/esm2022/lib/core-ui/functions/highlight-text.function.mjs +0 -80
  42. package/esm2022/lib/core-ui/linkify/linkify.pipe.mjs +0 -146
  43. package/esm2022/lib/core-ui/linkify/unlinkify.pipe.mjs +0 -51
  44. package/esm2022/lib/core-ui/pipes/br.pipe.mjs +0 -24
  45. package/esm2022/lib/core-ui/pipes/contrast-color.pipe.mjs +0 -21
  46. package/esm2022/lib/core-ui/pipes/custom-date.pipe.mjs +0 -28
  47. package/esm2022/lib/core-ui/pipes/display-avatars.pipe.mjs +0 -37
  48. package/esm2022/lib/core-ui/pipes/highlight-range.pipe.mjs +0 -29
  49. package/esm2022/lib/core-ui/pipes/highlight-term.pipe.mjs +0 -57
  50. package/esm2022/lib/core-ui/pipes/lx-is-uuid.pipe.mjs +0 -22
  51. package/esm2022/lib/core-ui/pipes/lx-time-ago.pipe.mjs +0 -29
  52. package/esm2022/lib/core-ui/pipes/lx-translate.pipe.mjs +0 -50
  53. package/esm2022/lib/core-ui/pipes/markdown.pipe.mjs +0 -32
  54. package/esm2022/lib/core-ui/pipes/nbsp.pipe.mjs +0 -17
  55. package/esm2022/lib/core-ui/pipes/sort.pipe.mjs +0 -55
  56. package/esm2022/lib/core-ui/pipes/translation-after.pipe.mjs +0 -29
  57. package/esm2022/lib/core-ui/pipes/translation-before.pipe.mjs +0 -54
  58. package/esm2022/lib/core-ui/pipes/translation-between.pipe.mjs +0 -68
  59. package/esm2022/lib/core-ui/pipes/unescape-curly-braces.pipe.mjs +0 -17
  60. package/esm2022/lib/core-ui/services/resize-observer.service.mjs +0 -112
  61. package/esm2022/lib/core-ui/tooltip/to-cdk-position.function.mjs +0 -74
  62. package/esm2022/lib/core-ui/tooltip/tooltip-position.interface.mjs +0 -7
  63. package/esm2022/lib/core-ui/tooltip/tooltip.component.mjs +0 -26
  64. package/esm2022/lib/core-ui/tooltip/tooltip.directive.mjs +0 -117
  65. package/esm2022/lib/forms-ui/components/basic-dropdown/basic-dropdown.component.mjs +0 -139
  66. package/esm2022/lib/forms-ui/components/basic-dropdown-item/basic-dropdown-item.component.mjs +0 -38
  67. package/esm2022/lib/forms-ui/components/breadcrumb/breadcrumb.component.mjs +0 -55
  68. package/esm2022/lib/forms-ui/components/cdk-options-dropdown/cdk-options-dropdown.component.mjs +0 -215
  69. package/esm2022/lib/forms-ui/components/cdk-options-sub-dropdown/cdk-options-sub-dropdown.component.mjs +0 -135
  70. package/esm2022/lib/forms-ui/components/currency/currency-input.component.mjs +0 -159
  71. package/esm2022/lib/forms-ui/components/currency/currency-symbol-map.constant.mjs +0 -105
  72. package/esm2022/lib/forms-ui/components/currency/currency-symbol.component.mjs +0 -24
  73. package/esm2022/lib/forms-ui/components/date-input/date-input.component.mjs +0 -347
  74. package/esm2022/lib/forms-ui/components/date-picker-ui/date-formatter.mjs +0 -8
  75. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-inner.component.mjs +0 -312
  76. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker-ui.module.mjs +0 -20
  77. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.component.mjs +0 -206
  78. package/esm2022/lib/forms-ui/components/date-picker-ui/datepicker.config.mjs +0 -29
  79. package/esm2022/lib/forms-ui/components/date-picker-ui/daypicker.component.mjs +0 -319
  80. package/esm2022/lib/forms-ui/components/date-picker-ui/isBs3.mjs +0 -2
  81. package/esm2022/lib/forms-ui/components/date-picker-ui/monthpicker.component.mjs +0 -149
  82. package/esm2022/lib/forms-ui/components/date-picker-ui/yearpicker.component.mjs +0 -151
  83. package/esm2022/lib/forms-ui/components/drag-and-drop-list/constants.mjs +0 -5
  84. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list-item/drag-and-drop-list-item.component.mjs +0 -49
  85. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.component.mjs +0 -120
  86. package/esm2022/lib/forms-ui/components/drag-and-drop-list/drag-and-drop-list.module.mjs +0 -39
  87. package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-item/keyboard-sortable-item.directive.mjs +0 -137
  88. package/esm2022/lib/forms-ui/components/drag-and-drop-list/keyboard-sortable-list/keyboard-sortable-list.directive.mjs +0 -38
  89. package/esm2022/lib/forms-ui/components/error-message/error-message.component.mjs +0 -16
  90. package/esm2022/lib/forms-ui/components/expanded-dropdown/expanded-dropdown.component.mjs +0 -26
  91. package/esm2022/lib/forms-ui/components/form-error/form-error.component.mjs +0 -44
  92. package/esm2022/lib/forms-ui/components/icon/icon.component.mjs +0 -45
  93. package/esm2022/lib/forms-ui/components/input/input.component.mjs +0 -48
  94. package/esm2022/lib/forms-ui/components/keyboard-select.directive.mjs +0 -126
  95. package/esm2022/lib/forms-ui/components/multi-select/multi-select-selection/multi-select-selection.component.mjs +0 -28
  96. package/esm2022/lib/forms-ui/components/multi-select/multi-select.component.mjs +0 -318
  97. package/esm2022/lib/forms-ui/components/option/option.component.mjs +0 -99
  98. package/esm2022/lib/forms-ui/components/option-group/option-group.component.mjs +0 -29
  99. package/esm2022/lib/forms-ui/components/option-group-dropdown/option-group-dropdown.component.mjs +0 -123
  100. package/esm2022/lib/forms-ui/components/options-dropdown/options-dropdown.component.mjs +0 -297
  101. package/esm2022/lib/forms-ui/components/options-sub-dropdown/options-sub-dropdown.component.mjs +0 -94
  102. package/esm2022/lib/forms-ui/components/picker/picker-trigger.directive.mjs +0 -47
  103. package/esm2022/lib/forms-ui/components/picker/picker.component.mjs +0 -218
  104. package/esm2022/lib/forms-ui/components/picker-option/picker-option.component.mjs +0 -118
  105. package/esm2022/lib/forms-ui/components/pill-item/pill-item.component.mjs +0 -33
  106. package/esm2022/lib/forms-ui/components/pill-list/pill-list.component.mjs +0 -58
  107. package/esm2022/lib/forms-ui/components/responsive-input/responsive-input.component.mjs +0 -101
  108. package/esm2022/lib/forms-ui/components/select-list/select-list.component.mjs +0 -178
  109. package/esm2022/lib/forms-ui/components/single-select/single-select.component.mjs +0 -290
  110. package/esm2022/lib/forms-ui/components/sorting-dropdown/sorting-dropdown.component.mjs +0 -71
  111. package/esm2022/lib/forms-ui/components/sorting-dropdown-trigger/sorting-dropdown-trigger.component.mjs +0 -21
  112. package/esm2022/lib/forms-ui/components/switch/switch.component.mjs +0 -51
  113. package/esm2022/lib/forms-ui/directives/contenteditable.directive.mjs +0 -130
  114. package/esm2022/lib/forms-ui/directives/form-error.directive.mjs +0 -121
  115. package/esm2022/lib/forms-ui/directives/form-submit.directive.mjs +0 -29
  116. package/esm2022/lib/forms-ui/directives/keyboard-action-source.directive.mjs +0 -63
  117. package/esm2022/lib/forms-ui/directives/mark-invalid.directive.mjs +0 -39
  118. package/esm2022/lib/forms-ui/directives/max-length-counter.directive.mjs +0 -131
  119. package/esm2022/lib/forms-ui/directives/select-dropdown.directive.mjs +0 -32
  120. package/esm2022/lib/forms-ui/directives/selectable-item.directive.mjs +0 -34
  121. package/esm2022/lib/forms-ui/directives/selected-option.directive.mjs +0 -27
  122. package/esm2022/lib/forms-ui/forms-ui.module.mjs +0 -270
  123. package/esm2022/lib/forms-ui/helpers/key-codes.constants.mjs +0 -13
  124. package/esm2022/lib/forms-ui/helpers/keyboard-navigation.helpers.mjs +0 -38
  125. package/esm2022/lib/forms-ui/models/base-select.directive.mjs +0 -183
  126. package/esm2022/lib/forms-ui/models/dropdown-item.interface.mjs +0 -2
  127. package/esm2022/lib/forms-ui/models/single-select-padding.interface.mjs +0 -2
  128. package/esm2022/lib/forms-ui/models/sorting.interface.mjs +0 -7
  129. package/esm2022/lib/forms-ui/pipes/filter-selection.pipe.mjs +0 -33
  130. package/esm2022/lib/forms-ui/pipes/filter-term.pipe.mjs +0 -29
  131. package/esm2022/lib/forms-ui/pipes/format-number.pipe.mjs +0 -66
  132. package/esm2022/lib/forms-ui/validators/date-in-foreseeable-future.validator.mjs +0 -26
  133. package/esm2022/lib/forms-ui/validators/string-not-in-array.validator.mjs +0 -30
  134. package/esm2022/lib/modal-ui/components/modal/modal.component.mjs +0 -264
  135. package/esm2022/lib/modal-ui/components/modal-footer/modal-footer.component.mjs +0 -16
  136. package/esm2022/lib/modal-ui/components/modal-header/modal-header.component.mjs +0 -19
  137. package/esm2022/lib/modal-ui/directives/modal-content.directive.mjs +0 -14
  138. package/esm2022/lib/modal-ui/modal.constants.mjs +0 -18
  139. package/esm2022/lib/modal-ui/modal.module.mjs +0 -47
  140. package/esm2022/lib/popover-ui/components/popover/popover.component.mjs +0 -228
  141. package/esm2022/lib/popover-ui/directives/popover-click.directive.mjs +0 -52
  142. package/esm2022/lib/popover-ui/directives/popover-content.directive.mjs +0 -17
  143. package/esm2022/lib/popover-ui/directives/popover-hover.directive.mjs +0 -88
  144. package/esm2022/lib/popover-ui/popover-ui.module.mjs +0 -21
  145. package/esm2022/lib/shared/date-helpers.mjs +0 -35
  146. package/esm2022/lib/shared/html-helpers.function.mjs +0 -34
  147. package/esm2022/lib/shared/misc-helpers.mjs +0 -24
  148. package/esm2022/lib/shared/observe.mjs +0 -40
  149. package/esm2022/lib/tab-ui/components/tab/tab.component.mjs +0 -118
  150. package/esm2022/lib/tab-ui/components/tab-group/tab-group-key-codes.enum.mjs +0 -12
  151. package/esm2022/lib/tab-ui/components/tab-group/tab-group.component.mjs +0 -150
  152. package/esm2022/lib/tab-ui/tab-ui.module.mjs +0 -20
  153. package/esm2022/ui5/icons/lx-icons.json +0 -177
  154. package/esm2022/ui5/icons/register-icons.mjs +0 -14
  155. package/esm2022/ui5/index.mjs +0 -8
  156. package/esm2022/ui5/leanix-components-ui5.mjs +0 -5
  157. package/esm2022/ui5/ui5.provider.mjs +0 -29
@@ -1,38 +0,0 @@
1
- import { NgClass, NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, ContentChild, HostBinding, Input } from '@angular/core';
3
- import { HighlightTermPipe } from '../../../core-ui/pipes/highlight-term.pipe';
4
- import * as i0 from "@angular/core";
5
- export class BasicDropdownItemComponent {
6
- constructor() {
7
- this.labelFontWeight = 'bold';
8
- this.descriptionFontStyle = 'normal';
9
- }
10
- get hasDescription() {
11
- return !!this.description;
12
- }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BasicDropdownItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
14
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: BasicDropdownItemComponent, isStandalone: true, selector: "lx-basic-dropdown-item", inputs: { label: "label", description: "description", highlightTerm: "highlightTerm", labelFontWeight: "labelFontWeight", descriptionFontStyle: "descriptionFontStyle", descriptionStyleOptions: "descriptionStyleOptions" }, host: { properties: { "class.hasDescription": "this.hasDescription" } }, queries: [{ propertyName: "optionLabelSuffix", first: true, predicate: ["optionLabelSuffix"], descendants: true }], ngImport: i0, template: "@if (optionLabelSuffix) {\n <div [class.boldLabel]=\"labelFontWeight === 'bold'\" class=\"optionLabel\">\n <div [innerHtml]=\"label | lxHighlightTerm: highlightTerm\"></div>\n <ng-content [select]=\"optionLabelSuffix\" />\n </div>\n} @else {\n <div [class.boldLabel]=\"labelFontWeight === 'bold'\" [innerHtml]=\"label | lxHighlightTerm: highlightTerm\"></div>\n}\n<div\n class=\"optionDescription\"\n [style.font-style]=\"descriptionFontStyle\"\n [ngClass]=\"{ maxTextLines: descriptionStyleOptions?.maxLines }\"\n [style.-webkit-line-clamp]=\"descriptionStyleOptions?.maxLines || 'inherit'\"\n [innerHtml]=\"description | lxHighlightTerm: (descriptionStyleOptions?.shouldHighlightTerm ? highlightTerm : undefined)\"\n></div>\n", styles: [":host{display:block;padding:2px 0}:host.hasDescription{padding:4px 0}.boldLabel{font-weight:700}.optionDescription{padding-top:2px;color:#61779d;font-size:var(--lxFontSmallSize, 12px)}.optionDescription.maxTextLines{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:inherit;-webkit-box-orient:vertical}.optionLabel{display:flex;align-items:center;justify-content:space-between}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: HighlightTermPipe, name: "lxHighlightTerm" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BasicDropdownItemComponent, decorators: [{
17
- type: Component,
18
- args: [{ selector: 'lx-basic-dropdown-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgClass, NgIf, HighlightTermPipe], template: "@if (optionLabelSuffix) {\n <div [class.boldLabel]=\"labelFontWeight === 'bold'\" class=\"optionLabel\">\n <div [innerHtml]=\"label | lxHighlightTerm: highlightTerm\"></div>\n <ng-content [select]=\"optionLabelSuffix\" />\n </div>\n} @else {\n <div [class.boldLabel]=\"labelFontWeight === 'bold'\" [innerHtml]=\"label | lxHighlightTerm: highlightTerm\"></div>\n}\n<div\n class=\"optionDescription\"\n [style.font-style]=\"descriptionFontStyle\"\n [ngClass]=\"{ maxTextLines: descriptionStyleOptions?.maxLines }\"\n [style.-webkit-line-clamp]=\"descriptionStyleOptions?.maxLines || 'inherit'\"\n [innerHtml]=\"description | lxHighlightTerm: (descriptionStyleOptions?.shouldHighlightTerm ? highlightTerm : undefined)\"\n></div>\n", styles: [":host{display:block;padding:2px 0}:host.hasDescription{padding:4px 0}.boldLabel{font-weight:700}.optionDescription{padding-top:2px;color:#61779d;font-size:var(--lxFontSmallSize, 12px)}.optionDescription.maxTextLines{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:inherit;-webkit-box-orient:vertical}.optionLabel{display:flex;align-items:center;justify-content:space-between}\n"] }]
19
- }], propDecorators: { label: [{
20
- type: Input
21
- }], description: [{
22
- type: Input
23
- }], highlightTerm: [{
24
- type: Input
25
- }], labelFontWeight: [{
26
- type: Input
27
- }], descriptionFontStyle: [{
28
- type: Input
29
- }], descriptionStyleOptions: [{
30
- type: Input
31
- }], optionLabelSuffix: [{
32
- type: ContentChild,
33
- args: ['optionLabelSuffix']
34
- }], hasDescription: [{
35
- type: HostBinding,
36
- args: ['class.hasDescription']
37
- }] } });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZHJvcGRvd24taXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Jhc2ljLWRyb3Bkb3duLWl0ZW0vYmFzaWMtZHJvcGRvd24taXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Jhc2ljLWRyb3Bkb3duLWl0ZW0vYmFzaWMtZHJvcGRvd24taXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7O0FBVS9FLE1BQU0sT0FBTywwQkFBMEI7SUFSdkM7UUFZVyxvQkFBZSxHQUFzQixNQUFNLENBQUM7UUFDNUMseUJBQW9CLEdBQXdCLFFBQVEsQ0FBQztLQVEvRDtJQUpDLElBQ0ksY0FBYztRQUNoQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7OEdBWlUsMEJBQTBCO2tHQUExQiwwQkFBMEIsNmVDWnZDLHV1QkFlQSxpZERMWSxPQUFPLCtFQUFRLGlCQUFpQjs7MkZBRS9CLDBCQUEwQjtrQkFSdEMsU0FBUzsrQkFDRSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQzs4QkFHbEMsS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQzZCLGlCQUFpQjtzQkFBbkQsWUFBWTt1QkFBQyxtQkFBbUI7Z0JBRzdCLGNBQWM7c0JBRGpCLFdBQVc7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcywgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEhvc3RCaW5kaW5nLCBJbnB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEhpZ2hsaWdodFRlcm1QaXBlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS11aS9waXBlcy9oaWdobGlnaHQtdGVybS5waXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbHgtYmFzaWMtZHJvcGRvd24taXRlbScsXG4gIHRlbXBsYXRlVXJsOiAnYmFzaWMtZHJvcGRvd24taXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydiYXNpYy1kcm9wZG93bi1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdDbGFzcywgTmdJZiwgSGlnaGxpZ2h0VGVybVBpcGVdXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRHJvcGRvd25JdGVtQ29tcG9uZW50IHtcbiAgQElucHV0KCkgbGFiZWwhOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBASW5wdXQoKSBoaWdobGlnaHRUZXJtPzogc3RyaW5nO1xuICBASW5wdXQoKSBsYWJlbEZvbnRXZWlnaHQ6ICdib2xkJyB8ICdub3JtYWwnID0gJ2JvbGQnO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvbkZvbnRTdHlsZTogJ2l0YWxpYycgfCAnbm9ybWFsJyA9ICdub3JtYWwnO1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblN0eWxlT3B0aW9ucz86IHsgbWF4TGluZXM/OiBudW1iZXI7IHNob3VsZEhpZ2hsaWdodFRlcm0/OiBib29sZWFuIH07XG4gIEBDb250ZW50Q2hpbGQoJ29wdGlvbkxhYmVsU3VmZml4Jykgb3B0aW9uTGFiZWxTdWZmaXghOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MuaGFzRGVzY3JpcHRpb24nKVxuICBnZXQgaGFzRGVzY3JpcHRpb24oKSB7XG4gICAgcmV0dXJuICEhdGhpcy5kZXNjcmlwdGlvbjtcbiAgfVxufVxuIiwiQGlmIChvcHRpb25MYWJlbFN1ZmZpeCkge1xuICA8ZGl2IFtjbGFzcy5ib2xkTGFiZWxdPVwibGFiZWxGb250V2VpZ2h0ID09PSAnYm9sZCdcIiBjbGFzcz1cIm9wdGlvbkxhYmVsXCI+XG4gICAgPGRpdiBbaW5uZXJIdG1sXT1cImxhYmVsIHwgbHhIaWdobGlnaHRUZXJtOiBoaWdobGlnaHRUZXJtXCI+PC9kaXY+XG4gICAgPG5nLWNvbnRlbnQgW3NlbGVjdF09XCJvcHRpb25MYWJlbFN1ZmZpeFwiIC8+XG4gIDwvZGl2PlxufSBAZWxzZSB7XG4gIDxkaXYgW2NsYXNzLmJvbGRMYWJlbF09XCJsYWJlbEZvbnRXZWlnaHQgPT09ICdib2xkJ1wiIFtpbm5lckh0bWxdPVwibGFiZWwgfCBseEhpZ2hsaWdodFRlcm06IGhpZ2hsaWdodFRlcm1cIj48L2Rpdj5cbn1cbjxkaXZcbiAgY2xhc3M9XCJvcHRpb25EZXNjcmlwdGlvblwiXG4gIFtzdHlsZS5mb250LXN0eWxlXT1cImRlc2NyaXB0aW9uRm9udFN0eWxlXCJcbiAgW25nQ2xhc3NdPVwieyBtYXhUZXh0TGluZXM6IGRlc2NyaXB0aW9uU3R5bGVPcHRpb25zPy5tYXhMaW5lcyB9XCJcbiAgW3N0eWxlLi13ZWJraXQtbGluZS1jbGFtcF09XCJkZXNjcmlwdGlvblN0eWxlT3B0aW9ucz8ubWF4TGluZXMgfHwgJ2luaGVyaXQnXCJcbiAgW2lubmVySHRtbF09XCJkZXNjcmlwdGlvbiB8IGx4SGlnaGxpZ2h0VGVybTogKGRlc2NyaXB0aW9uU3R5bGVPcHRpb25zPy5zaG91bGRIaWdobGlnaHRUZXJtID8gaGlnaGxpZ2h0VGVybSA6IHVuZGVmaW5lZClcIlxuPjwvZGl2PlxuIl19
@@ -1,55 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Component, Input } from '@angular/core';
3
- import { KeyboardActionSourceDirective } from '../../directives/keyboard-action-source.directive';
4
- import { CdkOptionsDropdownComponent } from '../cdk-options-dropdown/cdk-options-dropdown.component';
5
- import { OptionComponent } from '../option/option.component';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * Breadcrumb component is used to show a list of labels, usually to show the path of user's navigation.
9
- */
10
- export class BreadcrumbComponent {
11
- constructor() {
12
- /**
13
- * Breadcrumbs array to build the component.
14
- */
15
- this.breadcrumbs = [];
16
- /** @internal */
17
- this.viewBreadcrumbs = [];
18
- }
19
- ngOnChanges(changes) {
20
- if (changes['breadcrumbs']) {
21
- this.viewBreadcrumbs = this.breadcrumbs.reduce((viewBreadcrumbs, breadcrumb) => {
22
- if (!breadcrumb.ellipsed) {
23
- // Append normal breadcrumbs to the end of view breadcrumb array
24
- viewBreadcrumbs.push(breadcrumb);
25
- }
26
- else {
27
- // Reduce consecutive ellipsed breadcrumbs into one entry and show dropdown of these
28
- const lastBreadcrumb = viewBreadcrumbs[viewBreadcrumbs.length - 1];
29
- if (lastBreadcrumb && this.isEllipsedBreadcrumb(lastBreadcrumb)) {
30
- lastBreadcrumb.breadcrumbs.push(breadcrumb);
31
- }
32
- else {
33
- viewBreadcrumbs.push({
34
- breadcrumbs: [breadcrumb]
35
- });
36
- }
37
- }
38
- return viewBreadcrumbs;
39
- }, []);
40
- }
41
- }
42
- /** @internal */
43
- isEllipsedBreadcrumb(breadcrumb) {
44
- return !!breadcrumb.breadcrumbs;
45
- }
46
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
47
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: BreadcrumbComponent, isStandalone: true, selector: "lx-breadcrumb", inputs: { breadcrumbs: "breadcrumbs" }, usesOnChanges: true, ngImport: i0, template: "@for (breadcrumb of viewBreadcrumbs; track $index; let last = $last) {\n @if (isEllipsedBreadcrumb(breadcrumb)) {\n <lx-cdk-options-dropdown [align]=\"'right'\" class=\"dropdownContainer\">\n <button class=\"step clickable\" lxKeyboardActionSource>...</button>\n @for (ellipsedBreadcrumbs of breadcrumb.breadcrumbs; track $index) {\n <lx-option [hasSelectedState]=\"false\" (select)=\"ellipsedBreadcrumbs.onClick?.(ellipsedBreadcrumbs)\">\n {{ ellipsedBreadcrumbs.label }}\n </lx-option>\n }\n </lx-cdk-options-dropdown>\n } @else {\n <button class=\"step\" [disabled]=\"!breadcrumb.onClick\" (click)=\"breadcrumb.onClick?.(breadcrumb)\">\n {{ breadcrumb.label }}\n </button>\n }\n\n @if (!last) {\n <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\n }\n}\n", styles: [":host{display:inline-flex;align-items:center;gap:6px}:host .step{color:#526179;text-decoration:none;font-size:var(--lxFontSmallSize, 12px);line-height:16px;font-weight:var(--lxFontNormal, 400);border:none;background-color:unset;padding:0}:host .step:not(:disabled){cursor:pointer}:host .step:not(:disabled):hover,:host .step:not(:disabled):focus-visible{color:#526179;text-decoration:underline}:host i{font-weight:var(--lxFontNormal, 400);color:#2a303d}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: CdkOptionsDropdownComponent, selector: "lx-cdk-options-dropdown", inputs: ["align", "closeOnScroll", "disabled", "maxHeight"] }, { kind: "directive", type: KeyboardActionSourceDirective, selector: "[lxKeyboardActionSource]", exportAs: ["keyboardActionSource"] }, { kind: "component", type: OptionComponent, selector: "lx-option", inputs: ["selected", "isHighlighted", "disabled", "value", "hasSelectedState", "selectIcon"], outputs: ["select", "highlight", "selectedClick", "keyDownAction"] }] }); }
48
- }
49
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: BreadcrumbComponent, decorators: [{
50
- type: Component,
51
- args: [{ selector: 'lx-breadcrumb', standalone: true, imports: [CommonModule, CdkOptionsDropdownComponent, KeyboardActionSourceDirective, OptionComponent], template: "@for (breadcrumb of viewBreadcrumbs; track $index; let last = $last) {\n @if (isEllipsedBreadcrumb(breadcrumb)) {\n <lx-cdk-options-dropdown [align]=\"'right'\" class=\"dropdownContainer\">\n <button class=\"step clickable\" lxKeyboardActionSource>...</button>\n @for (ellipsedBreadcrumbs of breadcrumb.breadcrumbs; track $index) {\n <lx-option [hasSelectedState]=\"false\" (select)=\"ellipsedBreadcrumbs.onClick?.(ellipsedBreadcrumbs)\">\n {{ ellipsedBreadcrumbs.label }}\n </lx-option>\n }\n </lx-cdk-options-dropdown>\n } @else {\n <button class=\"step\" [disabled]=\"!breadcrumb.onClick\" (click)=\"breadcrumb.onClick?.(breadcrumb)\">\n {{ breadcrumb.label }}\n </button>\n }\n\n @if (!last) {\n <i class=\"fa fa-angle-right\" aria-hidden=\"true\"></i>\n }\n}\n", styles: [":host{display:inline-flex;align-items:center;gap:6px}:host .step{color:#526179;text-decoration:none;font-size:var(--lxFontSmallSize, 12px);line-height:16px;font-weight:var(--lxFontNormal, 400);border:none;background-color:unset;padding:0}:host .step:not(:disabled){cursor:pointer}:host .step:not(:disabled):hover,:host .step:not(:disabled):focus-visible{color:#526179;text-decoration:underline}:host i{font-weight:var(--lxFontNormal, 400);color:#2a303d}\n"] }]
52
- }], propDecorators: { breadcrumbs: [{
53
- type: Input
54
- }] } });
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2JyZWFkY3J1bWIvYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ2xHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFjN0Q7O0dBRUc7QUFRSCxNQUFNLE9BQU8sbUJBQW1CO0lBUGhDO1FBUUU7O1dBRUc7UUFDTSxnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFFeEMsZ0JBQWdCO1FBQ2hCLG9CQUFlLEdBQXFCLEVBQUUsQ0FBQztLQTRCeEM7SUExQkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsRUFBRTtnQkFDN0UsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDekIsZ0VBQWdFO29CQUNoRSxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUNuQyxDQUFDO3FCQUFNLENBQUM7b0JBQ04sb0ZBQW9GO29CQUNwRixNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDbkUsSUFBSSxjQUFjLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7d0JBQ2hFLGNBQWMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO29CQUM5QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDbkIsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUMxQixDQUFDLENBQUM7b0JBQ0wsQ0FBQztnQkFDSCxDQUFDO2dCQUNELE9BQU8sZUFBZSxDQUFDO1lBQ3pCLENBQUMsRUFBRSxFQUFzQixDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0I7SUFDaEIsb0JBQW9CLENBQUMsVUFBMEI7UUFDN0MsT0FBTyxDQUFDLENBQUUsVUFBaUMsQ0FBQyxXQUFXLENBQUM7SUFDMUQsQ0FBQzs4R0FsQ1UsbUJBQW1CO2tHQUFuQixtQkFBbUIsc0lDNUJoQyw4ekJBb0JBLGdnQkRNWSxZQUFZLCtCQUFFLDJCQUEyQixpSUFBRSw2QkFBNkIseUdBQUUsZUFBZTs7MkZBRXhGLG1CQUFtQjtrQkFQL0IsU0FBUzsrQkFDRSxlQUFlLGNBR2IsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLDJCQUEyQixFQUFFLDZCQUE2QixFQUFFLGVBQWUsQ0FBQzs4QkFNM0YsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEtleWJvYXJkQWN0aW9uU291cmNlRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9rZXlib2FyZC1hY3Rpb24tc291cmNlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBDZGtPcHRpb25zRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICcuLi9jZGstb3B0aW9ucy1kcm9wZG93bi9jZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWIge1xuICBsYWJlbDogc3RyaW5nO1xuICBlbGxpcHNlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoYnJlYWRjcnVtYjogQnJlYWRjcnVtYikgPT4gdm9pZDtcbn1cblxuaW50ZXJmYWNlIEVsbGlwc2VkQnJlYWRjcnVtYiB7XG4gIGJyZWFkY3J1bWJzOiBCcmVhZGNydW1iW107XG59XG5cbnR5cGUgVmlld0JyZWFkY3J1bWIgPSBCcmVhZGNydW1iIHwgRWxsaXBzZWRCcmVhZGNydW1iO1xuXG4vKipcbiAqIEJyZWFkY3J1bWIgY29tcG9uZW50IGlzIHVzZWQgdG8gc2hvdyBhIGxpc3Qgb2YgbGFiZWxzLCB1c3VhbGx5IHRvIHNob3cgdGhlIHBhdGggb2YgdXNlcidzIG5hdmlnYXRpb24uXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWJyZWFkY3J1bWInLFxuICB0ZW1wbGF0ZVVybDogJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2JyZWFkY3J1bWIuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgQ2RrT3B0aW9uc0Ryb3Bkb3duQ29tcG9uZW50LCBLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSwgT3B0aW9uQ29tcG9uZW50XVxufSlcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgLyoqXG4gICAqIEJyZWFkY3J1bWJzIGFycmF5IHRvIGJ1aWxkIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBicmVhZGNydW1iczogQnJlYWRjcnVtYltdID0gW107XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICB2aWV3QnJlYWRjcnVtYnM6IFZpZXdCcmVhZGNydW1iW10gPSBbXTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2JyZWFkY3J1bWJzJ10pIHtcbiAgICAgIHRoaXMudmlld0JyZWFkY3J1bWJzID0gdGhpcy5icmVhZGNydW1icy5yZWR1Y2UoKHZpZXdCcmVhZGNydW1icywgYnJlYWRjcnVtYikgPT4ge1xuICAgICAgICBpZiAoIWJyZWFkY3J1bWIuZWxsaXBzZWQpIHtcbiAgICAgICAgICAvLyBBcHBlbmQgbm9ybWFsIGJyZWFkY3J1bWJzIHRvIHRoZSBlbmQgb2YgdmlldyBicmVhZGNydW1iIGFycmF5XG4gICAgICAgICAgdmlld0JyZWFkY3J1bWJzLnB1c2goYnJlYWRjcnVtYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUmVkdWNlIGNvbnNlY3V0aXZlIGVsbGlwc2VkIGJyZWFkY3J1bWJzIGludG8gb25lIGVudHJ5IGFuZCBzaG93IGRyb3Bkb3duIG9mIHRoZXNlXG4gICAgICAgICAgY29uc3QgbGFzdEJyZWFkY3J1bWIgPSB2aWV3QnJlYWRjcnVtYnNbdmlld0JyZWFkY3J1bWJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgIGlmIChsYXN0QnJlYWRjcnVtYiAmJiB0aGlzLmlzRWxsaXBzZWRCcmVhZGNydW1iKGxhc3RCcmVhZGNydW1iKSkge1xuICAgICAgICAgICAgbGFzdEJyZWFkY3J1bWIuYnJlYWRjcnVtYnMucHVzaChicmVhZGNydW1iKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmlld0JyZWFkY3J1bWJzLnB1c2goe1xuICAgICAgICAgICAgICBicmVhZGNydW1iczogW2JyZWFkY3J1bWJdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZpZXdCcmVhZGNydW1icztcbiAgICAgIH0sIFtdIGFzIFZpZXdCcmVhZGNydW1iW10pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgaXNFbGxpcHNlZEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogVmlld0JyZWFkY3J1bWIpOiBicmVhZGNydW1iIGlzIEVsbGlwc2VkQnJlYWRjcnVtYiB7XG4gICAgcmV0dXJuICEhKGJyZWFkY3J1bWIgYXMgRWxsaXBzZWRCcmVhZGNydW1iKS5icmVhZGNydW1icztcbiAgfVxufVxuIiwiQGZvciAoYnJlYWRjcnVtYiBvZiB2aWV3QnJlYWRjcnVtYnM7IHRyYWNrICRpbmRleDsgbGV0IGxhc3QgPSAkbGFzdCkge1xuICBAaWYgKGlzRWxsaXBzZWRCcmVhZGNydW1iKGJyZWFkY3J1bWIpKSB7XG4gICAgPGx4LWNkay1vcHRpb25zLWRyb3Bkb3duIFthbGlnbl09XCIncmlnaHQnXCIgY2xhc3M9XCJkcm9wZG93bkNvbnRhaW5lclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cInN0ZXAgY2xpY2thYmxlXCIgbHhLZXlib2FyZEFjdGlvblNvdXJjZT4uLi48L2J1dHRvbj5cbiAgICAgIEBmb3IgKGVsbGlwc2VkQnJlYWRjcnVtYnMgb2YgYnJlYWRjcnVtYi5icmVhZGNydW1iczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxseC1vcHRpb24gW2hhc1NlbGVjdGVkU3RhdGVdPVwiZmFsc2VcIiAoc2VsZWN0KT1cImVsbGlwc2VkQnJlYWRjcnVtYnMub25DbGljaz8uKGVsbGlwc2VkQnJlYWRjcnVtYnMpXCI+XG4gICAgICAgICAge3sgZWxsaXBzZWRCcmVhZGNydW1icy5sYWJlbCB9fVxuICAgICAgICA8L2x4LW9wdGlvbj5cbiAgICAgIH1cbiAgICA8L2x4LWNkay1vcHRpb25zLWRyb3Bkb3duPlxuICB9IEBlbHNlIHtcbiAgICA8YnV0dG9uIGNsYXNzPVwic3RlcFwiIFtkaXNhYmxlZF09XCIhYnJlYWRjcnVtYi5vbkNsaWNrXCIgKGNsaWNrKT1cImJyZWFkY3J1bWIub25DbGljaz8uKGJyZWFkY3J1bWIpXCI+XG4gICAgICB7eyBicmVhZGNydW1iLmxhYmVsIH19XG4gICAgPC9idXR0b24+XG4gIH1cblxuICBAaWYgKCFsYXN0KSB7XG4gICAgPGkgY2xhc3M9XCJmYSBmYS1hbmdsZS1yaWdodFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgfVxufVxuIl19
@@ -1,215 +0,0 @@
1
- import { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';
2
- import { ChangeDetectionStrategy, Component, ContentChild, ContentChildren, Input, ViewChild } from '@angular/core';
3
- import { BehaviorSubject, Subject, combineLatest, fromEvent, merge } from 'rxjs';
4
- import { debounceTime, delay, distinctUntilChanged, filter, map, startWith, switchMap, takeUntil, withLatestFrom } from 'rxjs/operators';
5
- import { TooltipDirective } from '../../../core-ui/tooltip/tooltip.directive';
6
- import { KeyboardActionSourceDirective } from '../../directives/keyboard-action-source.directive';
7
- import { KeyboardSelectAction } from '../keyboard-select.directive';
8
- import { OptionComponent } from '../option/option.component';
9
- import * as i0 from "@angular/core";
10
- const BOTTOM_LEFT_POSITION = {
11
- originX: 'end',
12
- overlayX: 'end',
13
- originY: 'bottom',
14
- overlayY: 'top'
15
- };
16
- const BOTTOM_RIGHT_POSITION = {
17
- originX: 'start',
18
- overlayX: 'start',
19
- originY: 'bottom',
20
- overlayY: 'top'
21
- };
22
- const TOP_LEFT_POSITION = {
23
- originX: 'end',
24
- overlayX: 'end',
25
- originY: 'top',
26
- overlayY: 'bottom'
27
- };
28
- const TOP_RIGHT_POSITION = {
29
- originX: 'start',
30
- overlayX: 'start',
31
- originY: 'top',
32
- overlayY: 'bottom'
33
- };
34
- const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
35
- const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
36
- export class CdkOptionsDropdownComponent {
37
- set open(value) {
38
- if (this.disabled) {
39
- return;
40
- }
41
- this._open = value;
42
- if (this.trigger) {
43
- // Don't emit keyboard actions while the dropdown is not open yet.
44
- this.trigger.dontEmit = !this.open;
45
- }
46
- if (this.open) {
47
- this.isSubdropdownExpanded = false;
48
- this.setInitialHighlightingIndex();
49
- }
50
- this.reloadOverlayPosition(this.open);
51
- }
52
- get open() {
53
- return this._open;
54
- }
55
- get options() {
56
- return this._options.toArray();
57
- }
58
- constructor(changeDetection) {
59
- this.changeDetection = changeDetection;
60
- this.align = 'right';
61
- this.closeOnScroll = false;
62
- this.disabled = false;
63
- this.maxHeight = 'none';
64
- this.highlightedOptionIndex$ = new BehaviorSubject(0);
65
- this._open = false;
66
- this.isSubdropdownExpanded = false;
67
- this.destroyed$ = new Subject();
68
- this.isPositionComputed = true;
69
- }
70
- ngAfterViewInit() {
71
- this.trigger.dontEmit = !this.open;
72
- this.overlay.positions = this.align === 'left' ? LEFT_ALIGN_POSITIONS : RIGHT_ALIGN_POSITIONS;
73
- const optionsChanges$ = this._options.changes.pipe(startWith(this._options), map((options) => options.toArray()));
74
- this.trigger.keyboardActions$
75
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.NEXT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.next(index, options)))
76
- .subscribe(this.highlightedOptionIndex$);
77
- this.trigger.keyboardActions$
78
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.PREV), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.prev(index, options)))
79
- .subscribe(this.highlightedOptionIndex$);
80
- this.trigger.keyboardActions$
81
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.LEFT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
82
- .subscribe(this.highlightedOptionIndex$);
83
- this.trigger.keyboardActions$
84
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.RIGHT), withLatestFrom(this.highlightedOptionIndex$, optionsChanges$, (_, index, options) => this.isSubdropdownExpanded ? this.collapse(index, options) : this.expand(index, options)))
85
- .subscribe(this.highlightedOptionIndex$);
86
- this.trigger.keyboardActions$
87
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.CLOSE))
88
- .subscribe(() => this.closeDropdown());
89
- this.trigger.keyboardActions$
90
- .pipe(filter((keyboardSelectAction) => keyboardSelectAction === KeyboardSelectAction.EXECUTE), withLatestFrom(this.highlightedOptionIndex$, (_, index) => index))
91
- .subscribe((index) => {
92
- this.options[index]?.selectOption();
93
- });
94
- /** Combined stream of all of the child options' select outputs. */
95
- this._options.changes
96
- .pipe(startWith(this._options), switchMap(() => merge(...this._options.map((option) => option.select), ...this._options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
97
- .subscribe((_value) => {
98
- this.closeDropdown();
99
- });
100
- combineLatest([optionsChanges$, this.highlightedOptionIndex$])
101
- .pipe(delay(0), map(([options, index]) => options[index]), distinctUntilChanged(), takeUntil(this.destroyed$))
102
- .subscribe((optionToBeHighlighted) => {
103
- this.options.forEach((option) => option.setHighlighted(optionToBeHighlighted === option));
104
- this.changeDetection.markForCheck();
105
- });
106
- if (this.closeOnScroll) {
107
- fromEvent(window, 'scroll')
108
- .pipe(debounceTime(100), takeUntil(this.destroyed$))
109
- .subscribe(() => {
110
- this.open = false;
111
- this.trigger.blur();
112
- });
113
- }
114
- }
115
- ngOnDestroy() {
116
- this.destroyed$.next();
117
- }
118
- closeDropdown() {
119
- this.tooltips.toArray().forEach((tooltip) => tooltip.hide());
120
- this.open = false;
121
- }
122
- setInitialHighlightingIndex() {
123
- const firstAvailableIndex = this.options.map((option) => !this.optionIsHighlightable(option)).indexOf(false, 0);
124
- this.highlightedOptionIndex$.next(firstAvailableIndex);
125
- }
126
- prev(currentIndex, items) {
127
- if (currentIndex > 0) {
128
- const prevEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).lastIndexOf(false, currentIndex - 1);
129
- return prevEnabledIndex !== -1 ? prevEnabledIndex : currentIndex;
130
- }
131
- else {
132
- return currentIndex;
133
- }
134
- }
135
- next(currentIndex, items) {
136
- if (currentIndex < items.length) {
137
- const nextEnabledIndex = items.map((option) => !this.optionIsHighlightable(option)).indexOf(false, currentIndex + 1);
138
- return nextEnabledIndex !== -1 ? nextEnabledIndex : currentIndex;
139
- }
140
- else {
141
- return currentIndex;
142
- }
143
- }
144
- expand(currentIndex, items) {
145
- if (items[currentIndex]?.hasSubdropdown) {
146
- this.isSubdropdownExpanded = true;
147
- return this.next(currentIndex, items);
148
- }
149
- else {
150
- return currentIndex;
151
- }
152
- }
153
- collapse(currentIndex, items) {
154
- if (this.isSubdropdownExpanded) {
155
- this.isSubdropdownExpanded = false;
156
- return this.prev(currentIndex, items);
157
- }
158
- else {
159
- return currentIndex;
160
- }
161
- }
162
- optionIsHighlightable(option) {
163
- const isToplevelOptionAndAllowed = !option.isSuboption && !this.isSubdropdownExpanded;
164
- const isSecondlevelOptionAndAllowed = option.isSuboption && this.isSubdropdownExpanded;
165
- return !option.disabled && (isToplevelOptionAndAllowed || isSecondlevelOptionAndAllowed);
166
- }
167
- reloadOverlayPosition(open) {
168
- if (open) {
169
- this.isPositionComputed = false;
170
- setTimeout(() => {
171
- const dropdownElement = this.dropdownContainer.nativeElement;
172
- this.overlay.overlayRef.updateSize({
173
- height: dropdownElement.offsetHeight,
174
- width: dropdownElement.offsetWidth
175
- });
176
- this.overlay.overlayRef.updatePosition();
177
- this.isPositionComputed = true;
178
- this.changeDetection.markForCheck();
179
- }, 0);
180
- }
181
- else {
182
- this.changeDetection.markForCheck();
183
- }
184
- }
185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CdkOptionsDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: CdkOptionsDropdownComponent, isStandalone: true, selector: "lx-cdk-options-dropdown", inputs: { align: "align", closeOnScroll: "closeOnScroll", disabled: "disabled", maxHeight: "maxHeight" }, queries: [{ propertyName: "trigger", first: true, predicate: KeyboardActionSourceDirective, descendants: true }, { propertyName: "_options", predicate: OptionComponent, descendants: true }, { propertyName: "tooltips", predicate: TooltipDirective, descendants: true }], viewQueries: [{ propertyName: "dropdownContainer", first: true, predicate: ["dropdown"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\" />\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content />\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
187
- }
188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CdkOptionsDropdownComponent, decorators: [{
189
- type: Component,
190
- args: [{ selector: 'lx-cdk-options-dropdown', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CdkOverlayOrigin, CdkConnectedOverlay], template: "<div (click)=\"open = !open\" class=\"triggerContainer\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\">\n <ng-content select=\"[lxKeyboardActionSource]\" />\n</div>\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"open\"\n (overlayOutsideClick)=\"closeDropdown()\"\n>\n <ul\n #dropdown\n [class.showScrollbar]=\"maxHeight !== 'none'\"\n [style.max-height]=\"maxHeight\"\n [style.visibility]=\"isPositionComputed ? null : 'hidden'\"\n >\n <ng-content />\n </ul>\n</ng-template>\n", styles: [":host{display:inline-block;position:relative}ul{position:absolute;background-color:#fff;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;border:solid 1px #e1e5eb;text-align:left;list-style:none;margin:0;padding-left:0;z-index:20;white-space:nowrap}ul::-webkit-scrollbar{width:.5em;height:.5em;background-color:transparent}ul::-webkit-scrollbar-thumb{background-color:#c2c9d6;border-radius:6px}ul::-webkit-scrollbar-track-piece{background-color:transparent}ul.left{right:0;padding-right:0}ul.showScrollbar{overflow-y:auto}.triggerContainer{display:inline-block}\n"] }]
191
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { dropdownContainer: [{
192
- type: ViewChild,
193
- args: ['dropdown']
194
- }], align: [{
195
- type: Input
196
- }], closeOnScroll: [{
197
- type: Input
198
- }], disabled: [{
199
- type: Input
200
- }], maxHeight: [{
201
- type: Input
202
- }], trigger: [{
203
- type: ContentChild,
204
- args: [KeyboardActionSourceDirective]
205
- }], overlay: [{
206
- type: ViewChild,
207
- args: [CdkConnectedOverlay]
208
- }], _options: [{
209
- type: ContentChildren,
210
- args: [OptionComponent, { descendants: true }]
211
- }], tooltips: [{
212
- type: ContentChildren,
213
- args: [TooltipDirective, { descendants: true }]
214
- }] } });
215
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9wdGlvbnMtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3NyYy9saWIvZm9ybXMtdWkvY29tcG9uZW50cy9jZGstb3B0aW9ucy1kcm9wZG93bi9jZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Nkay1vcHRpb25zLWRyb3Bkb3duL2Nkay1vcHRpb25zLWRyb3Bkb3duLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUVmLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGVBQWUsRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNsRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTdE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SUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBRXpDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ1IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3RDLENBQUM7SUFDSCxDQUFDOzhHQXROVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixrT0E0QnhCLDZCQUE2Qiw4REFHMUIsZUFBZSw4REFHZixnQkFBZ0IseUxBTHRCLG1CQUFtQixnREN6RmhDLG1qQkFrQkEsaW5CRHdDWSxnQkFBZ0IsdUlBQUUsbUJBQW1COzsyRkFFcEMsMkJBQTJCO2tCQVJ2QyxTQUFTOytCQUNFLHlCQUF5QixtQkFHbEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsQ0FBQztzRkFHekIsaUJBQWlCO3NCQUF2QyxTQUFTO3VCQUFDLFVBQVU7Z0JBRVosS0FBSztzQkFBYixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQXNCdUMsT0FBTztzQkFBbkQsWUFBWTt1QkFBQyw2QkFBNkI7Z0JBQ1gsT0FBTztzQkFBdEMsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBRzlCLFFBQVE7c0JBRFAsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUl2RCxRQUFRO3NCQURQLGVBQWU7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRlbGF5LCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHdpdGhMYXRlc3RGcm9tIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUtdWkvdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBLZXlib2FyZEFjdGlvblNvdXJjZURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMva2V5Ym9hcmQtYWN0aW9uLXNvdXJjZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgS2V5Ym9hcmRTZWxlY3RBY3Rpb24gfSBmcm9tICcuLi9rZXlib2FyZC1zZWxlY3QuZGlyZWN0aXZlJztcbmltcG9ydCB7IE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL29wdGlvbi9vcHRpb24uY29tcG9uZW50JztcblxuY29uc3QgQk9UVE9NX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgb3ZlcmxheVk6ICd0b3AnXG59O1xuXG5jb25zdCBCT1RUT01fUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ2JvdHRvbScsXG4gIG92ZXJsYXlZOiAndG9wJ1xufTtcblxuY29uc3QgVE9QX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdlbmQnLFxuICBvcmlnaW5ZOiAndG9wJyxcbiAgb3ZlcmxheVk6ICdib3R0b20nXG59O1xuXG5jb25zdCBUT1BfUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ3RvcCcsXG4gIG92ZXJsYXlZOiAnYm90dG9tJ1xufTtcblxuY29uc3QgTEVGVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX0xFRlRfUE9TSVRJT04sIFRPUF9MRUZUX1BPU0lUSU9OLCBCT1RUT01fUklHSFRfUE9TSVRJT04sIFRPUF9SSUdIVF9QT1NJVElPTl07XG5jb25zdCBSSUdIVF9BTElHTl9QT1NJVElPTlM6IENvbm5lY3RlZFBvc2l0aW9uW10gPSBbQk9UVE9NX1JJR0hUX1BPU0lUSU9OLCBUT1BfUklHSFRfUE9TSVRJT04sIEJPVFRPTV9MRUZUX1BPU0lUSU9OLCBUT1BfTEVGVF9QT1NJVElPTl07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2x4LWNkay1vcHRpb25zLWRyb3Bkb3duJyxcbiAgdGVtcGxhdGVVcmw6ICdjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjZGstb3B0aW9ucy1kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Nka092ZXJsYXlPcmlnaW4sIENka0Nvbm5lY3RlZE92ZXJsYXldXG59KVxuZXhwb3J0IGNsYXNzIENka09wdGlvbnNEcm9wZG93bkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd25Db250YWluZXIhOiBFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpIGFsaWduOiAncmlnaHQnIHwgJ2xlZnQnID0gJ3JpZ2h0JztcbiAgQElucHV0KCkgY2xvc2VPblNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBtYXhIZWlnaHQ6IHN0cmluZyA9ICdub25lJztcblxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3BlbiA9IHZhbHVlO1xuICAgIGlmICh0aGlzLnRyaWdnZXIpIHtcbiAgICAgIC8vIERvbid0IGVtaXQga2V5Ym9hcmQgYWN0aW9ucyB3aGlsZSB0aGUgZHJvcGRvd24gaXMgbm90IG9wZW4geWV0LlxuICAgICAgdGhpcy50cmlnZ2VyLmRvbnRFbWl0ID0gIXRoaXMub3BlbjtcbiAgICB9XG4gICAgaWYgKHRoaXMub3Blbikge1xuICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbEhpZ2hsaWdodGluZ0luZGV4KCk7XG4gICAgfVxuICAgIHRoaXMucmVsb2FkT3ZlcmxheVBvc2l0aW9uKHRoaXMub3Blbik7XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW47XG4gIH1cblxuICBAQ29udGVudENoaWxkKEtleWJvYXJkQWN0aW9uU291cmNlRGlyZWN0aXZlKSB0cmlnZ2VyITogS2V5Ym9hcmRBY3Rpb25Tb3VyY2VEaXJlY3RpdmU7XG4gIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSkgb3ZlcmxheSE6IENka0Nvbm5lY3RlZE92ZXJsYXk7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPcHRpb25Db21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgX29wdGlvbnMhOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PjtcblxuICBAQ29udGVudENoaWxkcmVuKFRvb2x0aXBEaXJlY3RpdmUsIHsgZGVzY2VuZGFudHM6IHRydWUgfSlcbiAgdG9vbHRpcHMhOiBRdWVyeUxpc3Q8VG9vbHRpcERpcmVjdGl2ZT47XG5cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMudG9BcnJheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRlZE9wdGlvbkluZGV4JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcbiAgcHJpdmF0ZSBfb3BlbiA9IGZhbHNlO1xuICBwcml2YXRlIGlzU3ViZHJvcGRvd25FeHBhbmRlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgaXNQb3NpdGlvbkNvbXB1dGVkID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMudHJpZ2dlci5kb250RW1pdCA9ICF0aGlzLm9wZW47XG5cbiAgICB0aGlzLm92ZXJsYXkucG9zaXRpb25zID0gdGhpcy5hbGlnbiA9PT0gJ2xlZnQnID8gTEVGVF9BTElHTl9QT1NJVElPTlMgOiBSSUdIVF9BTElHTl9QT1NJVElPTlM7XG5cbiAgICBjb25zdCBvcHRpb25zQ2hhbmdlcyQgPSB0aGlzLl9vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLl9vcHRpb25zKSxcbiAgICAgIG1hcCgob3B0aW9uczogUXVlcnlMaXN0PE9wdGlvbkNvbXBvbmVudD4pID0+IG9wdGlvbnMudG9BcnJheSgpKVxuICAgICk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5ORVhUKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgb3B0aW9uc0NoYW5nZXMkLCAoXywgaW5kZXgsIG9wdGlvbnMpID0+IHRoaXMubmV4dChpbmRleCwgb3B0aW9ucykpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQpO1xuXG4gICAgdGhpcy50cmlnZ2VyLmtleWJvYXJkQWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uUFJFViksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PiB0aGlzLnByZXYoaW5kZXgsIG9wdGlvbnMpKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChrZXlib2FyZFNlbGVjdEFjdGlvbikgPT4ga2V5Ym9hcmRTZWxlY3RBY3Rpb24gPT09IEtleWJvYXJkU2VsZWN0QWN0aW9uLkxFRlQpLFxuICAgICAgICB3aXRoTGF0ZXN0RnJvbSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLCBvcHRpb25zQ2hhbmdlcyQsIChfLCBpbmRleCwgb3B0aW9ucykgPT5cbiAgICAgICAgICB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCA/IHRoaXMuY29sbGFwc2UoaW5kZXgsIG9wdGlvbnMpIDogdGhpcy5leHBhbmQoaW5kZXgsIG9wdGlvbnMpXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUodGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5SSUdIVCksXG4gICAgICAgIHdpdGhMYXRlc3RGcm9tKHRoaXMuaGlnaGxpZ2h0ZWRPcHRpb25JbmRleCQsIG9wdGlvbnNDaGFuZ2VzJCwgKF8sIGluZGV4LCBvcHRpb25zKSA9PlxuICAgICAgICAgIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkID8gdGhpcy5jb2xsYXBzZShpbmRleCwgb3B0aW9ucykgOiB0aGlzLmV4cGFuZChpbmRleCwgb3B0aW9ucylcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSh0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkKTtcblxuICAgIHRoaXMudHJpZ2dlci5rZXlib2FyZEFjdGlvbnMkXG4gICAgICAucGlwZShmaWx0ZXIoKGtleWJvYXJkU2VsZWN0QWN0aW9uKSA9PiBrZXlib2FyZFNlbGVjdEFjdGlvbiA9PT0gS2V5Ym9hcmRTZWxlY3RBY3Rpb24uQ0xPU0UpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlRHJvcGRvd24oKSk7XG5cbiAgICB0aGlzLnRyaWdnZXIua2V5Ym9hcmRBY3Rpb25zJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoa2V5Ym9hcmRTZWxlY3RBY3Rpb24pID0+IGtleWJvYXJkU2VsZWN0QWN0aW9uID09PSBLZXlib2FyZFNlbGVjdEFjdGlvbi5FWEVDVVRFKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5oaWdobGlnaHRlZE9wdGlvbkluZGV4JCwgKF8sIGluZGV4KSA9PiBpbmRleClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGluZGV4KSA9PiB7XG4gICAgICAgIHRoaXMub3B0aW9uc1tpbmRleF0/LnNlbGVjdE9wdGlvbigpO1xuICAgICAgfSk7XG5cbiAgICAvKiogQ29tYmluZWQgc3RyZWFtIG9mIGFsbCBvZiB0aGUgY2hpbGQgb3B0aW9ucycgc2VsZWN0IG91dHB1dHMuICovXG4gICAgdGhpcy5fb3B0aW9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMuX29wdGlvbnMpLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gbWVyZ2UoLi4udGhpcy5fb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdCksIC4uLnRoaXMuX29wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZENsaWNrKSkpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKF92YWx1ZSkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgIH0pO1xuXG4gICAgY29tYmluZUxhdGVzdChbb3B0aW9uc0NoYW5nZXMkLCB0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgbWFwKChbb3B0aW9ucywgaW5kZXhdOiBbT3B0aW9uQ29tcG9uZW50W10sIG51bWJlcl0pID0+IG9wdGlvbnNbaW5kZXhdKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG9wdGlvblRvQmVIaWdobGlnaHRlZCkgPT4ge1xuICAgICAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiBvcHRpb24uc2V0SGlnaGxpZ2h0ZWQob3B0aW9uVG9CZUhpZ2hsaWdodGVkID09PSBvcHRpb24pKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIGlmICh0aGlzLmNsb3NlT25TY3JvbGwpIHtcbiAgICAgIGZyb21FdmVudCh3aW5kb3csICdzY3JvbGwnKVxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMTAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMudHJpZ2dlci5ibHVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCkge1xuICAgIHRoaXMudG9vbHRpcHMudG9BcnJheSgpLmZvckVhY2goKHRvb2x0aXApID0+IHRvb2x0aXAuaGlkZSgpKTtcbiAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbEhpZ2hsaWdodGluZ0luZGV4KCkge1xuICAgIGNvbnN0IGZpcnN0QXZhaWxhYmxlSW5kZXggPSB0aGlzLm9wdGlvbnMubWFwKChvcHRpb24pID0+ICF0aGlzLm9wdGlvbklzSGlnaGxpZ2h0YWJsZShvcHRpb24pKS5pbmRleE9mKGZhbHNlLCAwKTtcbiAgICB0aGlzLmhpZ2hsaWdodGVkT3B0aW9uSW5kZXgkLm5leHQoZmlyc3RBdmFpbGFibGVJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIHByZXYoY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zOiBPcHRpb25Db21wb25lbnRbXSk6IG51bWJlciB7XG4gICAgaWYgKGN1cnJlbnRJbmRleCA+IDApIHtcbiAgICAgIGNvbnN0IHByZXZFbmFibGVkSW5kZXggPSBpdGVtcy5tYXAoKG9wdGlvbikgPT4gIXRoaXMub3B0aW9uSXNIaWdobGlnaHRhYmxlKG9wdGlvbikpLmxhc3RJbmRleE9mKGZhbHNlLCBjdXJyZW50SW5kZXggLSAxKTtcbiAgICAgIHJldHVybiBwcmV2RW5hYmxlZEluZGV4ICE9PSAtMSA/IHByZXZFbmFibGVkSW5kZXggOiBjdXJyZW50SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBuZXh0KGN1cnJlbnRJbmRleDogbnVtYmVyLCBpdGVtczogT3B0aW9uQ29tcG9uZW50W10pOiBudW1iZXIge1xuICAgIGlmIChjdXJyZW50SW5kZXggPCBpdGVtcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG5leHRFbmFibGVkSW5kZXggPSBpdGVtcy5tYXAoKG9wdGlvbikgPT4gIXRoaXMub3B0aW9uSXNIaWdobGlnaHRhYmxlKG9wdGlvbikpLmluZGV4T2YoZmFsc2UsIGN1cnJlbnRJbmRleCArIDEpO1xuICAgICAgcmV0dXJuIG5leHRFbmFibGVkSW5kZXggIT09IC0xID8gbmV4dEVuYWJsZWRJbmRleCA6IGN1cnJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGN1cnJlbnRJbmRleDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4cGFuZChjdXJyZW50SW5kZXg6IG51bWJlciwgaXRlbXM6IE9wdGlvbkNvbXBvbmVudFtdKSB7XG4gICAgaWYgKGl0ZW1zW2N1cnJlbnRJbmRleF0/Lmhhc1N1YmRyb3Bkb3duKSB7XG4gICAgICB0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCA9IHRydWU7XG4gICAgICByZXR1cm4gdGhpcy5uZXh0KGN1cnJlbnRJbmRleCwgaXRlbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gY3VycmVudEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29sbGFwc2UoY3VycmVudEluZGV4OiBudW1iZXIsIGl0ZW1zOiBPcHRpb25Db21wb25lbnRbXSkge1xuICAgIGlmICh0aGlzLmlzU3ViZHJvcGRvd25FeHBhbmRlZCkge1xuICAgICAgdGhpcy5pc1N1YmRyb3Bkb3duRXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgIHJldHVybiB0aGlzLnByZXYoY3VycmVudEluZGV4LCBpdGVtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcHRpb25Jc0hpZ2hsaWdodGFibGUob3B0aW9uOiBPcHRpb25Db21wb25lbnQpOiBib29sZWFuIHtcbiAgICBjb25zdCBpc1RvcGxldmVsT3B0aW9uQW5kQWxsb3dlZCA9ICFvcHRpb24uaXNTdWJvcHRpb24gJiYgIXRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkO1xuICAgIGNvbnN0IGlzU2Vjb25kbGV2ZWxPcHRpb25BbmRBbGxvd2VkID0gb3B0aW9uLmlzU3Vib3B0aW9uICYmIHRoaXMuaXNTdWJkcm9wZG93bkV4cGFuZGVkO1xuICAgIHJldHVybiAhb3B0aW9uLmRpc2FibGVkICYmIChpc1RvcGxldmVsT3B0aW9uQW5kQWxsb3dlZCB8fCBpc1NlY29uZGxldmVsT3B0aW9uQW5kQWxsb3dlZCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZE92ZXJsYXlQb3NpdGlvbihvcGVuOiBib29sZWFuKSB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHRoaXMuaXNQb3NpdGlvbkNvbXB1dGVkID0gZmFsc2U7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gdGhpcy5kcm9wZG93bkNvbnRhaW5lci5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIHRoaXMub3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xuICAgICAgICAgIGhlaWdodDogZHJvcGRvd25FbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICB3aWR0aDogZHJvcGRvd25FbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm92ZXJsYXkub3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuXG4gICAgICAgIHRoaXMuaXNQb3NpdGlvbkNvbXB1dGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XG4gICAgICB9LCAwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2IChjbGljayk9XCJvcGVuID0gIW9wZW5cIiBjbGFzcz1cInRyaWdnZXJDb250YWluZXJcIiBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiPlxuICA8bmctY29udGVudCBzZWxlY3Q9XCJbbHhLZXlib2FyZEFjdGlvblNvdXJjZV1cIiAvPlxuPC9kaXY+XG48bmctdGVtcGxhdGVcbiAgY2RrQ29ubmVjdGVkT3ZlcmxheVxuICBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcbiAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cIm9wZW5cIlxuICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJjbG9zZURyb3Bkb3duKClcIlxuPlxuICA8dWxcbiAgICAjZHJvcGRvd25cbiAgICBbY2xhc3Muc2hvd1Njcm9sbGJhcl09XCJtYXhIZWlnaHQgIT09ICdub25lJ1wiXG4gICAgW3N0eWxlLm1heC1oZWlnaHRdPVwibWF4SGVpZ2h0XCJcbiAgICBbc3R5bGUudmlzaWJpbGl0eV09XCJpc1Bvc2l0aW9uQ29tcHV0ZWQgPyBudWxsIDogJ2hpZGRlbidcIlxuICA+XG4gICAgPG5nLWNvbnRlbnQgLz5cbiAgPC91bD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -1,135 +0,0 @@
1
- import { CdkConnectedOverlay } from '@angular/cdk/overlay';
2
- import { Component, ContentChildren, Input, ViewChild } from '@angular/core';
3
- import { Subject, combineLatest, fromEvent, merge } from 'rxjs';
4
- import { debounceTime, delay, distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators';
5
- import { AutocloseDirective } from '../../../core-ui/directives/autoclose.directive';
6
- import { executeOnNextTick } from '../../../shared/misc-helpers';
7
- import { OptionComponent } from '../option/option.component';
8
- import * as i0 from "@angular/core";
9
- const BOTTOM_LEFT_POSITION = {
10
- originX: 'start',
11
- overlayX: 'end',
12
- originY: 'top',
13
- overlayY: 'top',
14
- offsetX: -4
15
- };
16
- const BOTTOM_RIGHT_POSITION = {
17
- originX: 'end',
18
- overlayX: 'start',
19
- originY: 'top',
20
- overlayY: 'top',
21
- offsetX: 4
22
- };
23
- const TOP_LEFT_POSITION = {
24
- originX: 'start',
25
- overlayX: 'end',
26
- originY: 'bottom',
27
- overlayY: 'bottom',
28
- offsetX: -4
29
- };
30
- const TOP_RIGHT_POSITION = {
31
- originX: 'end',
32
- overlayX: 'start',
33
- originY: 'bottom',
34
- overlayY: 'bottom',
35
- offsetX: 4
36
- };
37
- const LEFT_ALIGN_POSITIONS = [BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION, BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION];
38
- const RIGHT_ALIGN_POSITIONS = [BOTTOM_RIGHT_POSITION, TOP_RIGHT_POSITION, BOTTOM_LEFT_POSITION, TOP_LEFT_POSITION];
39
- export class CdkOptionsSubDropdownComponent {
40
- constructor(changeDetection) {
41
- this.changeDetection = changeDetection;
42
- this.align = 'right';
43
- this.open = false;
44
- this.isPositionComputed = true;
45
- this.mouseInside$ = new Subject();
46
- this.destroyed$ = new Subject();
47
- }
48
- mouseenter() {
49
- this.mouseInside$.next(true);
50
- }
51
- mouseleave() {
52
- this.mouseInside$.next(false);
53
- }
54
- ngOnDestroy() {
55
- this.destroyed$.next();
56
- }
57
- ngAfterViewInit() {
58
- // To avoid `Expression has changed after it was checked`
59
- executeOnNextTick(() => {
60
- this.trigger.hasSubdropdown = true;
61
- this.overlay.positions = this.align === 'left' ? LEFT_ALIGN_POSITIONS : RIGHT_ALIGN_POSITIONS;
62
- });
63
- merge(this.showByMouse(), this.showByKeyboard())
64
- .pipe(takeUntil(this.destroyed$), distinctUntilChanged())
65
- .subscribe((show) => {
66
- this.open = show;
67
- this.reloadOverlayPosition(this.open);
68
- });
69
- this.options.changes
70
- .pipe(startWith(this.options), switchMap(() => merge(...this.options.map((option) => option.select), ...this.options.map((option) => option.selectedClick))), delay(0), takeUntil(this.destroyed$))
71
- .subscribe(() => {
72
- this.closeDropdown();
73
- });
74
- }
75
- showByKeyboard() {
76
- const optionChange$ = this.options.changes.pipe(startWith(this.options), map((options) => options.toArray()), map((options) => options.map((option) => {
77
- option.isSuboption = true;
78
- return option;
79
- })));
80
- return combineLatest([this.trigger.highlight.asObservable(), optionChange$]).pipe(delay(0), // Need tick delay to get option highlighted and filter it out after
81
- map(([isHighlighted, options]) => isHighlighted || options.some((option) => option.isHighlighted)));
82
- }
83
- showByMouse() {
84
- const mouseEnterTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseenter');
85
- const mouseLeaveTrigger$ = fromEvent(this.trigger.elementRef.nativeElement, 'mouseleave');
86
- const showOnEnterMouse$ = mouseEnterTrigger$.pipe(map(() => true));
87
- const hideOnLeaveMouse$ = mouseLeaveTrigger$.pipe(map(() => false));
88
- // react to trigger mouse leave events, and mouse enter events in the sub-dropdown. We'll use a 300ms
89
- // debounce, so that while navigating from the trigger to the sub-dropdown, all the intermediate events
90
- // are ignored.
91
- const showSubdropdown$ = merge(hideOnLeaveMouse$, this.mouseInside$).pipe(debounceTime(300));
92
- const showOnEnterSubdropdown$ = mouseEnterTrigger$.pipe(switchMap(() => showSubdropdown$));
93
- return merge(showOnEnterMouse$, showOnEnterSubdropdown$);
94
- }
95
- reloadOverlayPosition(open) {
96
- // force a rendering so that the dropdown container's dimensions are computed.
97
- this.changeDetection.markForCheck();
98
- if (open && this.dropdownContainer) {
99
- this.isPositionComputed = false;
100
- setTimeout(() => {
101
- const dropdownElement = this.dropdownContainer.nativeElement;
102
- this.overlay.overlayRef.updateSize({
103
- height: dropdownElement.offsetHeight,
104
- width: dropdownElement.offsetWidth
105
- });
106
- this.overlay.overlayRef.updatePosition();
107
- this.isPositionComputed = true;
108
- }, 0);
109
- }
110
- }
111
- closeDropdown() {
112
- this.open = false;
113
- this.mouseInside$.next(false);
114
- }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CdkOptionsSubDropdownComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.8", type: CdkOptionsSubDropdownComponent, isStandalone: true, selector: "lx-cdk-options-sub-dropdown", inputs: { trigger: "trigger", align: "align" }, queries: [{ propertyName: "options", predicate: OptionComponent, descendants: true }], viewQueries: [{ propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "dropdownContainer", first: true, predicate: ["dropdown"], descendants: true }], ngImport: i0, template: "<ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger.elementRef\" [cdkConnectedOverlayOpen]=\"open\">\n <ul\n (mouseenter)=\"mouseenter()\"\n (mouseleave)=\"mouseleave()\"\n class=\"sub-dropdown\"\n [style.visibility]=\"isPositionComputed ? '' : 'hidden'\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n #dropdown\n >\n <ng-content />\n </ul>\n</ng-template>\n", styles: [".sub-dropdown{height:100%;padding:0;margin:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none;max-height:50vh;overflow-y:auto}\n"], dependencies: [{ kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: AutocloseDirective, selector: "[lxAutoclose]", inputs: ["autocloseGroup"], outputs: ["autoclose"] }] }); }
117
- }
118
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: CdkOptionsSubDropdownComponent, decorators: [{
119
- type: Component,
120
- args: [{ selector: 'lx-cdk-options-sub-dropdown', standalone: true, imports: [CdkConnectedOverlay, AutocloseDirective], template: "<ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger.elementRef\" [cdkConnectedOverlayOpen]=\"open\">\n <ul\n (mouseenter)=\"mouseenter()\"\n (mouseleave)=\"mouseleave()\"\n class=\"sub-dropdown\"\n [style.visibility]=\"isPositionComputed ? '' : 'hidden'\"\n lxAutoclose\n (autoclose)=\"closeDropdown()\"\n #dropdown\n >\n <ng-content />\n </ul>\n</ng-template>\n", styles: [".sub-dropdown{height:100%;padding:0;margin:0;background-color:#fff;border:solid 1px #e1e5eb;border-radius:3px;box-shadow:0 8px 12px 2px #00000026;text-align:left;list-style:none;max-height:50vh;overflow-y:auto}\n"] }]
121
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { trigger: [{
122
- type: Input
123
- }], align: [{
124
- type: Input
125
- }], options: [{
126
- type: ContentChildren,
127
- args: [OptionComponent, { descendants: true }]
128
- }], overlay: [{
129
- type: ViewChild,
130
- args: [CdkConnectedOverlay]
131
- }], dropdownContainer: [{
132
- type: ViewChild,
133
- args: ['dropdown']
134
- }] } });
135
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrLW9wdGlvbnMtc3ViLWRyb3Bkb3duLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9zcmMvbGliL2Zvcm1zLXVpL2NvbXBvbmVudHMvY2RrLW9wdGlvbnMtc3ViLWRyb3Bkb3duL2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvc3JjL2xpYi9mb3Jtcy11aS9jb21wb25lbnRzL2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi9jZGstb3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFxQixNQUFNLHNCQUFzQixDQUFDO0FBQzlFLE9BQU8sRUFHTCxTQUFTLEVBQ1QsZUFBZSxFQUVmLEtBQUssRUFHTCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNyRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRTdELE1BQU0sb0JBQW9CLEdBQXNCO0lBQzlDLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsT0FBTyxFQUFFLEtBQUs7SUFDZCxRQUFR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akMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxZQUFZO29CQUNwQyxLQUFLLEVBQUUsZUFBZSxDQUFDLFdBQVc7aUJBQ25DLENBQUMsQ0FBQztnQkFFSCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDekMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVELGFBQWE7UUFDWCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztRQUNsQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDOzhHQS9HVSw4QkFBOEI7a0dBQTlCLDhCQUE4QiwrSkFJeEIsZUFBZSx5RkFDckIsbUJBQW1CLGdKQ2pFaEMsMFpBYUEsOFFENkNZLG1CQUFtQiw0K0JBQUUsa0JBQWtCOzsyRkFFdEMsOEJBQThCO2tCQVAxQyxTQUFTOytCQUNFLDZCQUE2QixjQUczQixJQUFJLFdBQ1AsQ0FBQyxtQkFBbUIsRUFBRSxrQkFBa0IsQ0FBQztzRkFHekMsT0FBTztzQkFBZixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFFbUQsT0FBTztzQkFBL0QsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUN2QixPQUFPO3NCQUF0QyxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDUCxpQkFBaUI7c0JBQXZDLFNBQVM7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0Nvbm5lY3RlZE92ZXJsYXksIENvbm5lY3RlZFBvc2l0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb21FdmVudCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBdXRvY2xvc2VEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9jb3JlLXVpL2RpcmVjdGl2ZXMvYXV0b2Nsb3NlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBleGVjdXRlT25OZXh0VGljayB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9taXNjLWhlbHBlcnMnO1xuaW1wb3J0IHsgT3B0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vb3B0aW9uL29wdGlvbi5jb21wb25lbnQnO1xuXG5jb25zdCBCT1RUT01fTEVGVF9QT1NJVElPTjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gIG9yaWdpblg6ICdzdGFydCcsXG4gIG92ZXJsYXlYOiAnZW5kJyxcbiAgb3JpZ2luWTogJ3RvcCcsXG4gIG92ZXJsYXlZOiAndG9wJyxcbiAgb2Zmc2V0WDogLTRcbn07XG5cbmNvbnN0IEJPVFRPTV9SSUdIVF9QT1NJVElPTjogQ29ubmVjdGVkUG9zaXRpb24gPSB7XG4gIG9yaWdpblg6ICdlbmQnLFxuICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgb3JpZ2luWTogJ3RvcCcsXG4gIG92ZXJsYXlZOiAndG9wJyxcbiAgb2Zmc2V0WDogNFxufTtcblxuY29uc3QgVE9QX0xFRlRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnc3RhcnQnLFxuICBvdmVybGF5WDogJ2VuZCcsXG4gIG9yaWdpblk6ICdib3R0b20nLFxuICBvdmVybGF5WTogJ2JvdHRvbScsXG4gIG9mZnNldFg6IC00XG59O1xuXG5jb25zdCBUT1BfUklHSFRfUE9TSVRJT046IENvbm5lY3RlZFBvc2l0aW9uID0ge1xuICBvcmlnaW5YOiAnZW5kJyxcbiAgb3ZlcmxheVg6ICdzdGFydCcsXG4gIG9yaWdpblk6ICdib3R0b20nLFxuICBvdmVybGF5WTogJ2JvdHRvbScsXG4gIG9mZnNldFg6IDRcbn07XG5cbmNvbnN0IExFRlRfQUxJR05fUE9TSVRJT05TOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW0JPVFRPTV9MRUZUX1BPU0lUSU9OLCBUT1BfTEVGVF9QT1NJVElPTiwgQk9UVE9NX1JJR0hUX1BPU0lUSU9OLCBUT1BfUklHSFRfUE9TSVRJT05dO1xuY29uc3QgUklHSFRfQUxJR05fUE9TSVRJT05TOiBDb25uZWN0ZWRQb3NpdGlvbltdID0gW0JPVFRPTV9SSUdIVF9QT1NJVElPTiwgVE9QX1JJR0hUX1BPU0lUSU9OLCBCT1RUT01fTEVGVF9QT1NJVElPTiwgVE9QX0xFRlRfUE9TSVRJT05dO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdseC1jZGstb3B0aW9ucy1zdWItZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJ2Nkay1vcHRpb25zLXN1Yi1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjZGstb3B0aW9ucy1zdWItZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0Nka0Nvbm5lY3RlZE92ZXJsYXksIEF1dG9jbG9zZURpcmVjdGl2ZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2RrT3B0aW9uc1N1YkRyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdHJpZ2dlciE6IE9wdGlvbkNvbXBvbmVudDtcbiAgQElucHV0KCkgYWxpZ246ICdyaWdodCcgfCAnbGVmdCcgPSAncmlnaHQnO1xuXG4gIEBDb250ZW50Q2hpbGRyZW4oT3B0aW9uQ29tcG9uZW50LCB7IGRlc2NlbmRhbnRzOiB0cnVlIH0pIG9wdGlvbnMhOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PjtcbiAgQFZpZXdDaGlsZChDZGtDb25uZWN0ZWRPdmVybGF5KSBvdmVybGF5ITogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd24nKSBkcm9wZG93bkNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgb3BlbiA9IGZhbHNlO1xuICBpc1Bvc2l0aW9uQ29tcHV0ZWQgPSB0cnVlO1xuXG4gIHByaXZhdGUgbW91c2VJbnNpZGUkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcblxuICByZWFkb25seSBkZXN0cm95ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgbW91c2VlbnRlcigpIHtcbiAgICB0aGlzLm1vdXNlSW5zaWRlJC5uZXh0KHRydWUpO1xuICB9XG5cbiAgbW91c2VsZWF2ZSgpIHtcbiAgICB0aGlzLm1vdXNlSW5zaWRlJC5uZXh0KGZhbHNlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveWVkJC5uZXh0KCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gVG8gYXZvaWQgYEV4cHJlc3Npb24gaGFzIGNoYW5nZWQgYWZ0ZXIgaXQgd2FzIGNoZWNrZWRgXG4gICAgZXhlY3V0ZU9uTmV4dFRpY2soKCkgPT4ge1xuICAgICAgdGhpcy50cmlnZ2VyLmhhc1N1YmRyb3Bkb3duID0gdHJ1ZTtcbiAgICAgIHRoaXMub3ZlcmxheS5wb3NpdGlvbnMgPSB0aGlzLmFsaWduID09PSAnbGVmdCcgPyBMRUZUX0FMSUdOX1BPU0lUSU9OUyA6IFJJR0hUX0FMSUdOX1BPU0lUSU9OUztcbiAgICB9KTtcblxuICAgIG1lcmdlKHRoaXMuc2hvd0J5TW91c2UoKSwgdGhpcy5zaG93QnlLZXlib2FyZCgpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKChzaG93KSA9PiB7XG4gICAgICAgIHRoaXMub3BlbiA9IHNob3c7XG4gICAgICAgIHRoaXMucmVsb2FkT3ZlcmxheVBvc2l0aW9uKHRoaXMub3Blbik7XG4gICAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucy5jaGFuZ2VzXG4gICAgICAucGlwZShcbiAgICAgICAgc3RhcnRXaXRoKHRoaXMub3B0aW9ucyksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBtZXJnZSguLi50aGlzLm9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3QpLCAuLi50aGlzLm9wdGlvbnMubWFwKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZENsaWNrKSkpLFxuICAgICAgICBkZWxheSgwKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93QnlLZXlib2FyZCgpIHtcbiAgICBjb25zdCBvcHRpb25DaGFuZ2UkID0gdGhpcy5vcHRpb25zLmNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLm9wdGlvbnMpLFxuICAgICAgbWFwKChvcHRpb25zOiBRdWVyeUxpc3Q8T3B0aW9uQ29tcG9uZW50PikgPT4gb3B0aW9ucy50b0FycmF5KCkpLFxuICAgICAgbWFwKChvcHRpb25zKSA9PlxuICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiB7XG4gICAgICAgICAgb3B0aW9uLmlzU3Vib3B0aW9uID0gdHJ1ZTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG5cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy50cmlnZ2VyLmhpZ2hsaWdodC5hc09ic2VydmFibGUoKSwgb3B0aW9uQ2hhbmdlJF0pLnBpcGUoXG4gICAgICBkZWxheSgwKSwgLy8gTmVlZCB0aWNrIGRlbGF5IHRvIGdldCBvcHRpb24gaGlnaGxpZ2h0ZWQgYW5kIGZpbHRlciBpdCBvdXQgYWZ0ZXJcbiAgICAgIG1hcCgoW2lzSGlnaGxpZ2h0ZWQsIG9wdGlvbnNdKSA9PiBpc0hpZ2hsaWdodGVkIHx8IG9wdGlvbnMuc29tZSgob3B0aW9uKSA9PiBvcHRpb24uaXNIaWdobGlnaHRlZCkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0J5TW91c2UoKSB7XG4gICAgY29uc3QgbW91c2VFbnRlclRyaWdnZXIkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudHJpZ2dlci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWVudGVyJyk7XG4gICAgY29uc3QgbW91c2VMZWF2ZVRyaWdnZXIkID0gZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudHJpZ2dlci5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJyk7XG5cbiAgICBjb25zdCBzaG93T25FbnRlck1vdXNlJCA9IG1vdXNlRW50ZXJUcmlnZ2VyJC5waXBlKG1hcCgoKSA9PiB0cnVlKSk7XG4gICAgY29uc3QgaGlkZU9uTGVhdmVNb3VzZSQgPSBtb3VzZUxlYXZlVHJpZ2dlciQucGlwZShtYXAoKCkgPT4gZmFsc2UpKTtcblxuICAgIC8vIHJlYWN0IHRvIHRyaWdnZXIgbW91c2UgbGVhdmUgZXZlbnRzLCBhbmQgbW91c2UgZW50ZXIgZXZlbnRzIGluIHRoZSBzdWItZHJvcGRvd24uIFdlJ2xsIHVzZSBhIDMwMG1zXG4gICAgLy8gZGVib3VuY2UsIHNvIHRoYXQgd2hpbGUgbmF2aWdhdGluZyBmcm9tIHRoZSB0cmlnZ2VyIHRvIHRoZSBzdWItZHJvcGRvd24sIGFsbCB0aGUgaW50ZXJtZWRpYXRlIGV2ZW50c1xuICAgIC8vIGFyZSBpZ25vcmVkLlxuICAgIGNvbnN0IHNob3dTdWJkcm9wZG93biQgPSBtZXJnZShoaWRlT25MZWF2ZU1vdXNlJCwgdGhpcy5tb3VzZUluc2lkZSQpLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpO1xuXG4gICAgY29uc3Qgc2hvd09uRW50ZXJTdWJkcm9wZG93biQgPSBtb3VzZUVudGVyVHJpZ2dlciQucGlwZShzd2l0Y2hNYXAoKCkgPT4gc2hvd1N1YmRyb3Bkb3duJCkpO1xuXG4gICAgcmV0dXJuIG1lcmdlKHNob3dPbkVudGVyTW91c2UkLCBzaG93T25FbnRlclN1YmRyb3Bkb3duJCk7XG4gIH1cblxuICBwcml2YXRlIHJlbG9hZE92ZXJsYXlQb3NpdGlvbihvcGVuOiBib29sZWFuKSB7XG4gICAgLy8gZm9yY2UgYSByZW5kZXJpbmcgc28gdGhhdCB0aGUgZHJvcGRvd24gY29udGFpbmVyJ3MgZGltZW5zaW9ucyBhcmUgY29tcHV0ZWQuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rpb24ubWFya0ZvckNoZWNrKCk7XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5kcm9wZG93bkNvbnRhaW5lcikge1xuICAgICAgdGhpcy5pc1Bvc2l0aW9uQ29tcHV0ZWQgPSBmYWxzZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkcm9wZG93bkVsZW1lbnQgPSB0aGlzLmRyb3Bkb3duQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMub3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xuICAgICAgICAgIGhlaWdodDogZHJvcGRvd25FbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICB3aWR0aDogZHJvcGRvd25FbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMub3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIHRoaXMuaXNQb3NpdGlvbkNvbXB1dGVkID0gdHJ1ZTtcbiAgICAgIH0sIDApO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlRHJvcGRvd24oKSB7XG4gICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgdGhpcy5tb3VzZUluc2lkZSQubmV4dChmYWxzZSk7XG4gIH1cbn1cbiIsIjxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXIuZWxlbWVudFJlZlwiIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJvcGVuXCI+XG4gIDx1bFxuICAgIChtb3VzZWVudGVyKT1cIm1vdXNlZW50ZXIoKVwiXG4gICAgKG1vdXNlbGVhdmUpPVwibW91c2VsZWF2ZSgpXCJcbiAgICBjbGFzcz1cInN1Yi1kcm9wZG93blwiXG4gICAgW3N0eWxlLnZpc2liaWxpdHldPVwiaXNQb3NpdGlvbkNvbXB1dGVkID8gJycgOiAnaGlkZGVuJ1wiXG4gICAgbHhBdXRvY2xvc2VcbiAgICAoYXV0b2Nsb3NlKT1cImNsb3NlRHJvcGRvd24oKVwiXG4gICAgI2Ryb3Bkb3duXG4gID5cbiAgICA8bmctY29udGVudCAvPlxuICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==