@skyux/tabs 8.7.2 → 9.0.0-alpha.1

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 (78) hide show
  1. package/documentation.json +100 -100
  2. package/esm2022/lib/modules/sectioned-form/sectioned-form-section.component.mjs +65 -0
  3. package/esm2022/lib/modules/sectioned-form/sectioned-form.component.mjs +187 -0
  4. package/{esm2020 → esm2022}/lib/modules/sectioned-form/sectioned-form.module.mjs +11 -11
  5. package/{esm2020 → esm2022}/lib/modules/sectioned-form/sectioned-form.service.mjs +4 -4
  6. package/esm2022/lib/modules/shared/sky-tabs-resources.module.mjs +61 -0
  7. package/esm2022/lib/modules/shared/tab-id.service.mjs +50 -0
  8. package/{esm2020 → esm2022}/lib/modules/tabs/tab-button-adapter.service.mjs +4 -4
  9. package/esm2022/lib/modules/tabs/tab-button.component.mjs +162 -0
  10. package/esm2022/lib/modules/tabs/tab.component.mjs +197 -0
  11. package/{esm2020 → esm2022}/lib/modules/tabs/tabs.module.mjs +21 -21
  12. package/esm2022/lib/modules/tabs/tabset-adapter.service.mjs +68 -0
  13. package/{esm2020 → esm2022}/lib/modules/tabs/tabset-nav-button-disabled.pipe.mjs +4 -4
  14. package/esm2022/lib/modules/tabs/tabset-nav-button.component.mjs +149 -0
  15. package/esm2022/lib/modules/tabs/tabset-permalink.service.mjs +128 -0
  16. package/esm2022/lib/modules/tabs/tabset.component.mjs +466 -0
  17. package/esm2022/lib/modules/tabs/tabset.service.mjs +198 -0
  18. package/esm2022/lib/modules/vertical-tabset/vertical-tab-media-query.service.mjs +68 -0
  19. package/esm2022/lib/modules/vertical-tabset/vertical-tab.component.mjs +217 -0
  20. package/esm2022/lib/modules/vertical-tabset/vertical-tabset-adapter.service.mjs +48 -0
  21. package/esm2022/lib/modules/vertical-tabset/vertical-tabset-group.component.mjs +108 -0
  22. package/esm2022/lib/modules/vertical-tabset/vertical-tabset.component.mjs +158 -0
  23. package/{esm2020 → esm2022}/lib/modules/vertical-tabset/vertical-tabset.module.mjs +21 -21
  24. package/esm2022/lib/modules/vertical-tabset/vertical-tabset.service.mjs +169 -0
  25. package/esm2022/testing/tabs/tabset-fixture.mjs +129 -0
  26. package/fesm2022/skyux-tabs-testing.mjs +136 -0
  27. package/{fesm2020 → fesm2022}/skyux-tabs-testing.mjs.map +1 -1
  28. package/fesm2022/skyux-tabs.mjs +2586 -0
  29. package/{fesm2020 → fesm2022}/skyux-tabs.mjs.map +1 -1
  30. package/lib/modules/sectioned-form/sectioned-form-section.component.d.ts +1 -1
  31. package/lib/modules/sectioned-form/sectioned-form.component.d.ts +1 -1
  32. package/lib/modules/tabs/tab-button.component.d.ts +1 -1
  33. package/lib/modules/tabs/tab.component.d.ts +1 -1
  34. package/lib/modules/tabs/tabset-nav-button.component.d.ts +1 -1
  35. package/lib/modules/tabs/tabset.component.d.ts +1 -1
  36. package/lib/modules/vertical-tabset/vertical-tab.component.d.ts +1 -1
  37. package/lib/modules/vertical-tabset/vertical-tabset-group.component.d.ts +1 -1
  38. package/lib/modules/vertical-tabset/vertical-tabset.component.d.ts +1 -1
  39. package/package.json +21 -29
  40. package/esm2020/lib/modules/sectioned-form/sectioned-form-section.component.mjs +0 -67
  41. package/esm2020/lib/modules/sectioned-form/sectioned-form.component.mjs +0 -187
  42. package/esm2020/lib/modules/shared/sky-tabs-resources.module.mjs +0 -61
  43. package/esm2020/lib/modules/shared/tab-id.service.mjs +0 -53
  44. package/esm2020/lib/modules/tabs/tab-button.component.mjs +0 -162
  45. package/esm2020/lib/modules/tabs/tab.component.mjs +0 -198
  46. package/esm2020/lib/modules/tabs/tabset-adapter.service.mjs +0 -68
  47. package/esm2020/lib/modules/tabs/tabset-nav-button.component.mjs +0 -149
  48. package/esm2020/lib/modules/tabs/tabset-permalink.service.mjs +0 -128
  49. package/esm2020/lib/modules/tabs/tabset.component.mjs +0 -429
  50. package/esm2020/lib/modules/tabs/tabset.service.mjs +0 -196
  51. package/esm2020/lib/modules/vertical-tabset/vertical-tab-media-query.service.mjs +0 -71
  52. package/esm2020/lib/modules/vertical-tabset/vertical-tab.component.mjs +0 -216
  53. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-adapter.service.mjs +0 -51
  54. package/esm2020/lib/modules/vertical-tabset/vertical-tabset-group.component.mjs +0 -110
  55. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.component.mjs +0 -159
  56. package/esm2020/lib/modules/vertical-tabset/vertical-tabset.service.mjs +0 -167
  57. package/esm2020/testing/tabs/tabset-fixture.mjs +0 -128
  58. package/fesm2015/skyux-tabs-testing.mjs +0 -147
  59. package/fesm2015/skyux-tabs-testing.mjs.map +0 -1
  60. package/fesm2015/skyux-tabs.mjs +0 -2560
  61. package/fesm2015/skyux-tabs.mjs.map +0 -1
  62. package/fesm2020/skyux-tabs-testing.mjs +0 -135
  63. package/fesm2020/skyux-tabs.mjs +0 -2544
  64. /package/{esm2020 → esm2022}/index.mjs +0 -0
  65. /package/{esm2020 → esm2022}/lib/modules/sectioned-form/types/sectioned-form-message-type.mjs +0 -0
  66. /package/{esm2020 → esm2022}/lib/modules/sectioned-form/types/sectioned-form-message.mjs +0 -0
  67. /package/{esm2020 → esm2022}/lib/modules/tabs/tab-button-view-model.mjs +0 -0
  68. /package/{esm2020 → esm2022}/lib/modules/tabs/tab-index.mjs +0 -0
  69. /package/{esm2020 → esm2022}/lib/modules/tabs/tab-layout-type.mjs +0 -0
  70. /package/{esm2020 → esm2022}/lib/modules/tabs/tabset-active-tab-unregistered-args.mjs +0 -0
  71. /package/{esm2020 → esm2022}/lib/modules/tabs/tabset-buttons-display-mode.mjs +0 -0
  72. /package/{esm2020 → esm2022}/lib/modules/tabs/tabset-nav-button-type.mjs +0 -0
  73. /package/{esm2020 → esm2022}/lib/modules/tabs/tabset-style.mjs +0 -0
  74. /package/{esm2020 → esm2022}/lib/modules/tabs/tabset-tab-indexes-change.mjs +0 -0
  75. /package/{esm2020 → esm2022}/skyux-tabs.mjs +0 -0
  76. /package/{esm2020 → esm2022}/testing/public-api.mjs +0 -0
  77. /package/{esm2020 → esm2022}/testing/skyux-tabs-testing.mjs +0 -0
  78. /package/{esm2020 → esm2022}/testing/tabs/tab-fixture-tab.mjs +0 -0
@@ -1,149 +0,0 @@
1
- var _SkyTabsetNavButtonComponent_instances, _SkyTabsetNavButtonComponent__buttonType, _SkyTabsetNavButtonComponent__disabled, _SkyTabsetNavButtonComponent__tabset, _SkyTabsetNavButtonComponent_activeIndexNumber, _SkyTabsetNavButtonComponent_activeSkyTabIndex, _SkyTabsetNavButtonComponent_currentTabsetSub, _SkyTabsetNavButtonComponent_logger, _SkyTabsetNavButtonComponent_tabCount, _SkyTabsetNavButtonComponent_ngUnsubscribe, _SkyTabsetNavButtonComponent_updateButtonVisibility, _SkyTabsetNavButtonComponent_updateButtonProperties, _SkyTabsetNavButtonComponent_updateTabToSelect;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { Component, Input } from '@angular/core';
4
- import { Subject } from 'rxjs';
5
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@skyux/core";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@skyux/i18n";
10
- import * as i4 from "./tabset-nav-button-disabled.pipe";
11
- const buttonTypeNext = 'next';
12
- const buttonTypePrevious = 'previous';
13
- const buttonTypeFinish = 'finish';
14
- export class SkyTabsetNavButtonComponent {
15
- /**
16
- * The tabset wizard component to associate with the nav button.
17
- * @required
18
- */
19
- get tabset() {
20
- return __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f");
21
- }
22
- set tabset(value) {
23
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__tabset, value, "f");
24
- if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, "f")) {
25
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, "f").unsubscribe();
26
- }
27
- if (value) {
28
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_currentTabsetSub, value.activeChange
29
- .pipe(distinctUntilChanged(), takeUntil(__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f")))
30
- .subscribe((index) => {
31
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_activeSkyTabIndex, index, "f");
32
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_tabCount, __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__tabset, "f")?.tabs?.length, "f");
33
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateTabToSelect).call(this);
34
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonVisibility).call(this);
35
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonProperties).call(this);
36
- }), "f");
37
- }
38
- else {
39
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_logger, "f").error('The SkyTabsetNavButtonComponent requires a reference to the SkyTabsetComponent it controls.');
40
- }
41
- }
42
- /**
43
- * The type of nav button to include.
44
- * @required
45
- */
46
- get buttonType() {
47
- return __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__buttonType, "f");
48
- }
49
- set buttonType(value) {
50
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__buttonType, value, "f");
51
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateTabToSelect).call(this);
52
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonProperties).call(this);
53
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_instances, "m", _SkyTabsetNavButtonComponent_updateButtonVisibility).call(this);
54
- if (value === buttonTypeFinish) {
55
- this.type = 'submit';
56
- }
57
- else {
58
- this.type = 'button';
59
- }
60
- }
61
- /**
62
- * Whether to disable the nav button.
63
- * Defaults to the disabled state of the next tab for `next`, the existence of a previous tab for `previous`,
64
- * and false for `finish`.
65
- */
66
- set disabled(value) {
67
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent__disabled, value, "f");
68
- }
69
- get disabled() {
70
- return __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent__disabled, "f");
71
- }
72
- constructor(logger) {
73
- _SkyTabsetNavButtonComponent_instances.add(this);
74
- this.isVisible = false;
75
- this.type = 'submit';
76
- _SkyTabsetNavButtonComponent__buttonType.set(this, void 0);
77
- _SkyTabsetNavButtonComponent__disabled.set(this, void 0);
78
- _SkyTabsetNavButtonComponent__tabset.set(this, void 0);
79
- _SkyTabsetNavButtonComponent_activeIndexNumber.set(this, void 0);
80
- _SkyTabsetNavButtonComponent_activeSkyTabIndex.set(this, void 0);
81
- _SkyTabsetNavButtonComponent_currentTabsetSub.set(this, void 0);
82
- _SkyTabsetNavButtonComponent_logger.set(this, void 0);
83
- _SkyTabsetNavButtonComponent_tabCount.set(this, void 0);
84
- _SkyTabsetNavButtonComponent_ngUnsubscribe.set(this, new Subject());
85
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_logger, logger, "f");
86
- }
87
- ngOnDestroy() {
88
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f").next();
89
- __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_ngUnsubscribe, "f").complete();
90
- }
91
- buttonClick() {
92
- /* istanbul ignore else */
93
- if (this.tabToSelect && !this.tabToSelect.disabled && this.tabset) {
94
- this.tabset.active = this.tabToSelect.tabIndex;
95
- }
96
- }
97
- }
98
- _SkyTabsetNavButtonComponent__buttonType = new WeakMap(), _SkyTabsetNavButtonComponent__disabled = new WeakMap(), _SkyTabsetNavButtonComponent__tabset = new WeakMap(), _SkyTabsetNavButtonComponent_activeIndexNumber = new WeakMap(), _SkyTabsetNavButtonComponent_activeSkyTabIndex = new WeakMap(), _SkyTabsetNavButtonComponent_currentTabsetSub = new WeakMap(), _SkyTabsetNavButtonComponent_logger = new WeakMap(), _SkyTabsetNavButtonComponent_tabCount = new WeakMap(), _SkyTabsetNavButtonComponent_ngUnsubscribe = new WeakMap(), _SkyTabsetNavButtonComponent_instances = new WeakSet(), _SkyTabsetNavButtonComponent_updateButtonVisibility = function _SkyTabsetNavButtonComponent_updateButtonVisibility() {
99
- const isLastStep = !!__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabCount, "f") && __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") === __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_tabCount, "f") - 1;
100
- if (this.buttonType === buttonTypeFinish) {
101
- this.isVisible = isLastStep;
102
- }
103
- else if (this.buttonType === buttonTypeNext) {
104
- this.isVisible = !isLastStep;
105
- }
106
- else {
107
- this.isVisible = true;
108
- }
109
- }, _SkyTabsetNavButtonComponent_updateButtonProperties = function _SkyTabsetNavButtonComponent_updateButtonProperties() {
110
- if (this.buttonType === buttonTypeNext ||
111
- this.buttonType === buttonTypeFinish) {
112
- this.buttonClassName = 'sky-btn-primary';
113
- }
114
- else {
115
- this.buttonClassName = 'sky-btn-default';
116
- }
117
- this.ariaControls = this.tabToSelect?.tabPanelId;
118
- }, _SkyTabsetNavButtonComponent_updateTabToSelect = function _SkyTabsetNavButtonComponent_updateTabToSelect() {
119
- if (this.tabset?.tabs) {
120
- const tabs = this.tabset.tabs.toArray();
121
- this.tabToSelect = undefined;
122
- // tab index can be a number or a string, but we need the actual number index
123
- __classPrivateFieldSet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, tabs.findIndex((tab) => tab.tabIndex === __classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeSkyTabIndex, "f")), "f");
124
- /* istanbul ignore else */
125
- if (__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") !== undefined) {
126
- if (this.buttonType === buttonTypeNext) {
127
- this.tabToSelect = tabs[__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") + 1];
128
- }
129
- else if (this.buttonType === buttonTypePrevious) {
130
- this.tabToSelect = tabs[__classPrivateFieldGet(this, _SkyTabsetNavButtonComponent_activeIndexNumber, "f") - 1];
131
- }
132
- }
133
- }
134
- };
135
- SkyTabsetNavButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabsetNavButtonComponent, deps: [{ token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component });
136
- SkyTabsetNavButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: SkyTabsetNavButtonComponent, selector: "sky-tabset-nav-button", inputs: { tabset: "tabset", buttonType: "buttonType", buttonText: "buttonText", disabled: "disabled" }, ngImport: i0, template: "<button\n *ngIf=\"isVisible\"\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"\n disabled\n | skyTabsetNavButtonDisabled\n : buttonType\n : !!tabToSelect\n : tabToSelect?.disabled\n \"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n>\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n</button>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i3.SkyLibResourcesPipe, name: "skyLibResources" }, { kind: "pipe", type: i4.SkyTabsetNavButtonDisabledPipe, name: "skyTabsetNavButtonDisabled" }] });
137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabsetNavButtonComponent, decorators: [{
138
- type: Component,
139
- args: [{ selector: 'sky-tabset-nav-button', template: "<button\n *ngIf=\"isVisible\"\n class=\"sky-btn sky-margin-inline-sm\"\n [attr.aria-controls]=\"ariaControls\"\n [disabled]=\"\n disabled\n | skyTabsetNavButtonDisabled\n : buttonType\n : !!tabToSelect\n : tabToSelect?.disabled\n \"\n [ngClass]=\"buttonClassName\"\n [type]=\"type\"\n (click)=\"buttonType === 'finish' ? null : buttonClick()\"\n>\n {{ buttonText || ('skyux_tabs_navigator_' + buttonType | skyLibResources) }}\n</button>\n" }]
140
- }], ctorParameters: function () { return [{ type: i1.SkyLogService }]; }, propDecorators: { tabset: [{
141
- type: Input
142
- }], buttonType: [{
143
- type: Input
144
- }], buttonText: [{
145
- type: Input
146
- }], disabled: [{
147
- type: Input
148
- }] } });
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUc1RCxPQUFPLEVBQUUsT0FBTyxFQUFnQixNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQU9qRSxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFDdEMsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUM7QUFNbEMsTUFBTSxPQUFPLDJCQUEyQjtJQUN0Qzs7O09BR0c7SUFDSCxJQUNXLE1BQU07UUFDZixPQUFPLHVCQUFBLElBQUksNENBQVMsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxNQUFNLENBQUMsS0FBcUM7UUFDckQsdUJBQUEsSUFBSSx3Q0FBWSxLQUFLLE1BQUEsQ0FBQztRQUV0QixJQUFJLHVCQUFBLElBQUkscURBQWtCLEVBQUU7WUFDMUIsdUJBQUEsSUFBSSxxREFBa0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUN0QztRQUVELElBQUksS0FBSyxFQUFFO1lBQ1QsdUJBQUEsSUFBSSxpREFBcUIsS0FBSyxDQUFDLFlBQVk7aUJBQ3hDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLFNBQVMsQ0FBQyx1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d0hBM0pVLDJCQUEyQjs0R0FBM0IsMkJBQTJCLHFLQ25CeEMsOGRBaUJBOzJGREVhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSx1QkFBdUI7b0dBU3RCLE1BQU07c0JBRGhCLEtBQUs7Z0JBa0NLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBdUJDLFVBQVU7c0JBRGhCLEtBQUs7Z0JBU0ssUUFBUTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU2t5TG9nU2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBTa3lUYWJJbmRleCB9IGZyb20gJy4vdGFiLWluZGV4JztcbmltcG9ydCB7IFNreVRhYkNvbXBvbmVudCB9IGZyb20gJy4vdGFiLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTa3lUYWJzZXROYXZCdXR0b25UeXBlIH0gZnJvbSAnLi90YWJzZXQtbmF2LWJ1dHRvbi10eXBlJztcbmltcG9ydCB7IFNreVRhYnNldENvbXBvbmVudCB9IGZyb20gJy4vdGFic2V0LmNvbXBvbmVudCc7XG5cbmNvbnN0IGJ1dHRvblR5cGVOZXh0ID0gJ25leHQnO1xuY29uc3QgYnV0dG9uVHlwZVByZXZpb3VzID0gJ3ByZXZpb3VzJztcbmNvbnN0IGJ1dHRvblR5cGVGaW5pc2ggPSAnZmluaXNoJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXRhYnNldC1uYXYtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnNldC1uYXYtYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGFic2V0TmF2QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFRoZSB0YWJzZXQgd2l6YXJkIGNvbXBvbmVudCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgbmF2IGJ1dHRvbi5cbiAgICogQHJlcXVpcmVkXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHRhYnNldCgpOiBTa3lUYWJzZXRDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNfdGFic2V0O1xuICB9XG5cbiAgcHVibGljIHNldCB0YWJzZXQodmFsdWU6IFNreVRhYnNldENvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI190YWJzZXQgPSB2YWx1ZTtcblxuICAgIGlmICh0aGlzLiNjdXJyZW50VGFic2V0U3ViKSB7XG4gICAgICB0aGlzLiNjdXJyZW50VGFic2V0U3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLiNjdXJyZW50VGFic2V0U3ViID0gdmFsdWUuYWN0aXZlQ2hhbmdlXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLiNuZ1Vuc3Vic2NyaWJlKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaW5kZXg6IFNreVRhYkluZGV4KSA9PiB7XG4gICAgICAgICAgdGhpcy4jYWN0aXZlU2t5VGFiSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLiN0YWJDb3VudCA9IHRoaXMuI190YWJzZXQ/LnRhYnM/Lmxlbmd0aDtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVUYWJUb1NlbGVjdCgpO1xuICAgICAgICAgIHRoaXMuI3VwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTtcbiAgICAgICAgICB0aGlzLiN1cGRhdGVCdXR0b25Qcm9wZXJ0aWVzKCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNsb2dnZXIuZXJyb3IoXG4gICAgICAgICdUaGUgU2t5VGFic2V0TmF2QnV0dG9uQ29tcG9uZW50IHJlcXVpcmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBTa3lUYWJzZXRDb21wb25lbnQgaXQgY29udHJvbHMuJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIHR5cGUgb2YgbmF2IGJ1dHRvbiB0byBpbmNsdWRlLlxuICAgKiBAcmVxdWlyZWRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgYnV0dG9uVHlwZSgpOiBTa3lUYWJzZXROYXZCdXR0b25UeXBlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2J1dHRvblR5cGU7XG4gIH1cblxuICBwdWJsaWMgc2V0IGJ1dHRvblR5cGUodmFsdWU6IFNreVRhYnNldE5hdkJ1dHRvblR5cGUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLiNfYnV0dG9uVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuI3VwZGF0ZVRhYlRvU2VsZWN0KCk7XG4gICAgdGhpcy4jdXBkYXRlQnV0dG9uUHJvcGVydGllcygpO1xuICAgIHRoaXMuI3VwZGF0ZUJ1dHRvblZpc2liaWxpdHkoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gYnV0dG9uVHlwZUZpbmlzaCkge1xuICAgICAgdGhpcy50eXBlID0gJ3N1Ym1pdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZSA9ICdidXR0b24nO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgbGFiZWwgdG8gZGlzcGxheSBvbiB0aGUgbmF2IGJ1dHRvbi4gVGhlIGZvbGxvd2luZyBhcmUgdGhlIGRlZmF1bHRzIGZvciBlYWNoIGBidXR0b25UeXBlYDpcbiAgICogYG5leHRgID0gXCJOZXh0XCIsIGBwcmV2aW91c2AgPSBcIlByZXZpb3VzXCIsIGBmaW5pc2hgID0gXCJGaW5pc2hcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGJ1dHRvblRleHQ/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgbmF2IGJ1dHRvbi5cbiAgICogRGVmYXVsdHMgdG8gdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBuZXh0IHRhYiBmb3IgYG5leHRgLCB0aGUgZXhpc3RlbmNlIG9mIGEgcHJldmlvdXMgdGFiIGZvciBgcHJldmlvdXNgLFxuICAgKiBhbmQgZmFsc2UgZm9yIGBmaW5pc2hgLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuI19kaXNhYmxlZCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy4jX2Rpc2FibGVkO1xuICB9XG5cbiAgcHVibGljIGJ1dHRvbkNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwdWJsaWMgaXNWaXNpYmxlID0gZmFsc2U7XG4gIHB1YmxpYyB0eXBlOiAnc3VibWl0JyB8ICdidXR0b24nID0gJ3N1Ym1pdCc7XG4gIHB1YmxpYyBhcmlhQ29udHJvbHM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBwcm90ZWN0ZWQgdGFiVG9TZWxlY3Q6IFNreVRhYkNvbXBvbmVudCB8IHVuZGVmaW5lZDtcblxuICAjX2J1dHRvblR5cGU6IFNreVRhYnNldE5hdkJ1dHRvblR5cGUgfCB1bmRlZmluZWQ7XG4gICNfZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICNfdGFic2V0OiBTa3lUYWJzZXRDb21wb25lbnQgfCB1bmRlZmluZWQ7XG4gICNhY3RpdmVJbmRleE51bWJlcjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAjYWN0aXZlU2t5VGFiSW5kZXg6IFNreVRhYkluZGV4IHwgdW5kZWZpbmVkO1xuICAjY3VycmVudFRhYnNldFN1YjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuICAjbG9nZ2VyOiBTa3lMb2dTZXJ2aWNlO1xuICAjdGFiQ291bnQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgI25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKGxvZ2dlcjogU2t5TG9nU2VydmljZSkge1xuICAgIHRoaXMuI2xvZ2dlciA9IGxvZ2dlcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLiNuZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgYnV0dG9uQ2xpY2soKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy50YWJUb1NlbGVjdCAmJiAhdGhpcy50YWJUb1NlbGVjdC5kaXNhYmxlZCAmJiB0aGlzLnRhYnNldCkge1xuICAgICAgdGhpcy50YWJzZXQuYWN0aXZlID0gdGhpcy50YWJUb1NlbGVjdC50YWJJbmRleDtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQnV0dG9uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICBjb25zdCBpc0xhc3RTdGVwID1cbiAgICAgICEhdGhpcy4jdGFiQ291bnQgJiYgdGhpcy4jYWN0aXZlSW5kZXhOdW1iZXIgPT09IHRoaXMuI3RhYkNvdW50IC0gMTtcblxuICAgIGlmICh0aGlzLmJ1dHRvblR5cGUgPT09IGJ1dHRvblR5cGVGaW5pc2gpIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gaXNMYXN0U3RlcDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYnV0dG9uVHlwZSA9PT0gYnV0dG9uVHlwZU5leHQpIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gIWlzTGFzdFN0ZXA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAjdXBkYXRlQnV0dG9uUHJvcGVydGllcygpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLmJ1dHRvblR5cGUgPT09IGJ1dHRvblR5cGVOZXh0IHx8XG4gICAgICB0aGlzLmJ1dHRvblR5cGUgPT09IGJ1dHRvblR5cGVGaW5pc2hcbiAgICApIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xhc3NOYW1lID0gJ3NreS1idG4tcHJpbWFyeSc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnV0dG9uQ2xhc3NOYW1lID0gJ3NreS1idG4tZGVmYXVsdCc7XG4gICAgfVxuXG4gICAgdGhpcy5hcmlhQ29udHJvbHMgPSB0aGlzLnRhYlRvU2VsZWN0Py50YWJQYW5lbElkO1xuICB9XG5cbiAgI3VwZGF0ZVRhYlRvU2VsZWN0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRhYnNldD8udGFicykge1xuICAgICAgY29uc3QgdGFicyA9IHRoaXMudGFic2V0LnRhYnMudG9BcnJheSgpO1xuICAgICAgdGhpcy50YWJUb1NlbGVjdCA9IHVuZGVmaW5lZDtcblxuICAgICAgLy8gdGFiIGluZGV4IGNhbiBiZSBhIG51bWJlciBvciBhIHN0cmluZywgYnV0IHdlIG5lZWQgdGhlIGFjdHVhbCBudW1iZXIgaW5kZXhcbiAgICAgIHRoaXMuI2FjdGl2ZUluZGV4TnVtYmVyID0gdGFicy5maW5kSW5kZXgoXG4gICAgICAgICh0YWIpID0+IHRhYi50YWJJbmRleCA9PT0gdGhpcy4jYWN0aXZlU2t5VGFiSW5kZXhcbiAgICAgICk7XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICBpZiAodGhpcy4jYWN0aXZlSW5kZXhOdW1iZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAodGhpcy5idXR0b25UeXBlID09PSBidXR0b25UeXBlTmV4dCkge1xuICAgICAgICAgIHRoaXMudGFiVG9TZWxlY3QgPSB0YWJzW3RoaXMuI2FjdGl2ZUluZGV4TnVtYmVyICsgMV07XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5idXR0b25UeXBlID09PSBidXR0b25UeXBlUHJldmlvdXMpIHtcbiAgICAgICAgICB0aGlzLnRhYlRvU2VsZWN0ID0gdGFic1t0aGlzLiNhY3RpdmVJbmRleE51bWJlciAtIDFdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8YnV0dG9uXG4gICpuZ0lmPVwiaXNWaXNpYmxlXCJcbiAgY2xhc3M9XCJza3ktYnRuIHNreS1tYXJnaW4taW5saW5lLXNtXCJcbiAgW2F0dHIuYXJpYS1jb250cm9sc109XCJhcmlhQ29udHJvbHNcIlxuICBbZGlzYWJsZWRdPVwiXG4gICAgZGlzYWJsZWRcbiAgICAgIHwgc2t5VGFic2V0TmF2QnV0dG9uRGlzYWJsZWRcbiAgICAgICAgOiBidXR0b25UeXBlXG4gICAgICAgIDogISF0YWJUb1NlbGVjdFxuICAgICAgICA6IHRhYlRvU2VsZWN0Py5kaXNhYmxlZFxuICBcIlxuICBbbmdDbGFzc109XCJidXR0b25DbGFzc05hbWVcIlxuICBbdHlwZV09XCJ0eXBlXCJcbiAgKGNsaWNrKT1cImJ1dHRvblR5cGUgPT09ICdmaW5pc2gnID8gbnVsbCA6IGJ1dHRvbkNsaWNrKClcIlxuPlxuICB7eyBidXR0b25UZXh0IHx8ICgnc2t5dXhfdGFic19uYXZpZ2F0b3JfJyArIGJ1dHRvblR5cGUgfCBza3lMaWJSZXNvdXJjZXMpIH19XG48L2J1dHRvbj5cbiJdfQ==
@@ -1,128 +0,0 @@
1
- var _SkyTabsetPermalinkService_instances, _SkyTabsetPermalinkService_popStateChange, _SkyTabsetPermalinkService_subscription, _SkyTabsetPermalinkService_activatedRoute, _SkyTabsetPermalinkService_location, _SkyTabsetPermalinkService_router, _SkyTabsetPermalinkService_getParams;
2
- import { __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
3
- import { Injectable } from '@angular/core';
4
- import { Subject } from 'rxjs';
5
- import * as i0 from "@angular/core";
6
- import * as i1 from "@angular/router";
7
- import * as i2 from "@angular/common";
8
- /**
9
- * @internal
10
- */
11
- export class SkyTabsetPermalinkService {
12
- get popStateChange() {
13
- return __classPrivateFieldGet(this, _SkyTabsetPermalinkService_popStateChange, "f");
14
- }
15
- constructor(activatedRoute, location, router) {
16
- _SkyTabsetPermalinkService_instances.add(this);
17
- _SkyTabsetPermalinkService_popStateChange.set(this, void 0);
18
- _SkyTabsetPermalinkService_subscription.set(this, void 0);
19
- _SkyTabsetPermalinkService_activatedRoute.set(this, void 0);
20
- _SkyTabsetPermalinkService_location.set(this, void 0);
21
- _SkyTabsetPermalinkService_router.set(this, void 0);
22
- __classPrivateFieldSet(this, _SkyTabsetPermalinkService_activatedRoute, activatedRoute, "f");
23
- __classPrivateFieldSet(this, _SkyTabsetPermalinkService_location, location, "f");
24
- __classPrivateFieldSet(this, _SkyTabsetPermalinkService_router, router, "f");
25
- __classPrivateFieldSet(this, _SkyTabsetPermalinkService_popStateChange, new Subject(), "f");
26
- }
27
- ngOnDestroy() {
28
- if (__classPrivateFieldGet(this, _SkyTabsetPermalinkService_subscription, "f")) {
29
- __classPrivateFieldGet(this, _SkyTabsetPermalinkService_subscription, "f").unsubscribe();
30
- }
31
- __classPrivateFieldGet(this, _SkyTabsetPermalinkService_popStateChange, "f").complete();
32
- }
33
- init() {
34
- __classPrivateFieldSet(this, _SkyTabsetPermalinkService_subscription, __classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").subscribe(() => {
35
- __classPrivateFieldGet(this, _SkyTabsetPermalinkService_popStateChange, "f").next();
36
- }), "f");
37
- }
38
- /**
39
- * Returns the value of a URL query param.
40
- */
41
- getParam(name) {
42
- return __classPrivateFieldGet(this, _SkyTabsetPermalinkService_instances, "m", _SkyTabsetPermalinkService_getParams).call(this)[name];
43
- }
44
- /**
45
- * Sets the value of a URL query param.
46
- */
47
- setParam(name, value) {
48
- const params = __classPrivateFieldGet(this, _SkyTabsetPermalinkService_instances, "m", _SkyTabsetPermalinkService_getParams).call(this);
49
- if (value === null) {
50
- delete params[name];
51
- }
52
- else {
53
- params[name] = value;
54
- }
55
- // Update the URL without triggering a navigation state change.
56
- // See: https://stackoverflow.com/a/46486677
57
- const url = __classPrivateFieldGet(this, _SkyTabsetPermalinkService_router, "f")
58
- .createUrlTree([], {
59
- relativeTo: __classPrivateFieldGet(this, _SkyTabsetPermalinkService_activatedRoute, "f"),
60
- queryParams: params,
61
- queryParamsHandling: 'merge',
62
- })
63
- .toString();
64
- // Abort redirect if the current URL is equal to the new URL.
65
- if (__classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").isCurrentPathEqualTo(url)) {
66
- return;
67
- }
68
- __classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").go(url);
69
- }
70
- /**
71
- * Removes the provided query param from the URL.
72
- */
73
- clearParam(name) {
74
- this.setParam(name, null);
75
- }
76
- /**
77
- * Returns a relative URL that includes the provided query parameter. The value is intended to be
78
- * used by an HTML anchor element.
79
- */
80
- getParamHref(name, value) {
81
- if (!name) {
82
- return null;
83
- }
84
- const params = __classPrivateFieldGet(this, _SkyTabsetPermalinkService_instances, "m", _SkyTabsetPermalinkService_getParams).call(this);
85
- params[name] = value;
86
- const baseUrl = __classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").path().split('?')[0];
87
- const paramString = Object.keys(params)
88
- .map((k) => `${k}=${params[k]}`)
89
- .join('&');
90
- return __classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").prepareExternalUrl(`${baseUrl}?${paramString}`);
91
- }
92
- /**
93
- * Converts the provided string into a value that can be safely used in a URL.
94
- */
95
- urlify(value) {
96
- if (!value) {
97
- return '';
98
- }
99
- const sanitized = value
100
- .toLowerCase()
101
- // Remove special characters.
102
- .replace(/[_~`@!#$%^&*()[\]{};:'/\\<>,.?=+|"]/g, '')
103
- // Replace space characters with a dash.
104
- .replace(/\s/g, '-')
105
- // Remove any double-dashes.
106
- .replace(/--/g, '-');
107
- return sanitized;
108
- }
109
- }
110
- _SkyTabsetPermalinkService_popStateChange = new WeakMap(), _SkyTabsetPermalinkService_subscription = new WeakMap(), _SkyTabsetPermalinkService_activatedRoute = new WeakMap(), _SkyTabsetPermalinkService_location = new WeakMap(), _SkyTabsetPermalinkService_router = new WeakMap(), _SkyTabsetPermalinkService_instances = new WeakSet(), _SkyTabsetPermalinkService_getParams = function _SkyTabsetPermalinkService_getParams() {
111
- const params = {};
112
- const path = __classPrivateFieldGet(this, _SkyTabsetPermalinkService_location, "f").path();
113
- if (path.indexOf('?') === -1) {
114
- return params;
115
- }
116
- const existingParamPairs = path.split('?')[1].split('&');
117
- existingParamPairs.forEach((pair) => {
118
- const fragments = pair.split('=');
119
- params[fragments[0]] = decodeURIComponent(fragments[1]);
120
- });
121
- return params;
122
- };
123
- SkyTabsetPermalinkService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabsetPermalinkService, deps: [{ token: i1.ActivatedRoute }, { token: i2.Location }, { token: i1.Router }], target: i0.ɵɵFactoryTarget.Injectable });
124
- SkyTabsetPermalinkService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabsetPermalinkService });
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: SkyTabsetPermalinkService, decorators: [{
126
- type: Injectable
127
- }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.Location }, { type: i1.Router }]; } });
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL3RhYnMvc3JjL2xpYi9tb2R1bGVzL3RhYnMvdGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUd0RCxPQUFPLEVBQWMsT0FBTyxFQUFvQixNQUFNLE1BQU0sQ0FBQzs7OztBQVM3RDs7R0FFRztBQUVILE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sdUJBQUEsSUFBSSxpREFBZ0IsQ0FBQztJQUM5QixDQUFDO0lBVUQsWUFDRSxjQUE4QixFQUM5QixRQUFrQixFQUNsQixNQUFjOztRQVhoQiw0REFBK0I7UUFFL0IsMERBQTRDO1FBRTVDLDREQUFnQztRQUNoQyxzREFBb0I7UUFDcEIsb0RBQWdCO1FBT2QsdUJBQUEsSUFBSSw2Q0FBbUIsY0FBYyxNQUFBLENBQUM7UUFDdEMsdUJBQUEsSUFBSSx1Q0FBYSxRQUFRLE1BQUEsQ0FBQztRQUMxQix1QkFBQSxJQUFJLHFDQUFXLE1BQU0sTUFBQSxDQUFDO1FBRXRCLHVCQUFBLElBQUksNkNBQW1CLElBQUksT0FBTyxFQUFRLE1BQUEsQ0FBQztJQUM3QyxDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLHVCQUFBLElBQUksK0NBQWMsRUFBRTtZQUN0Qix1QkFBQSxJQUFJLCtDQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDbEM7UUFDRCx1QkFBQSxJQUFJLGlEQUFnQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFTSxJQUFJO1FBQ1QsdUJBQUEsSUFBSSwyQ0FBaUIsdUJBQUEsSUFBSSwyQ0FBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakQsdUJBQUEsSUFBSSxpREFB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QUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUU7UUFDNUIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO3NIQS9JVSx5QkFBeUI7MEhBQXpCLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9uTGlrZSB9IGZyb20gJ3J4anMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgUGVybWFsaW5rUGFyYW1zIHtcbiAgW186IHN0cmluZ106IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwdWJsaWMgZ2V0IHBvcFN0YXRlQ2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNwb3BTdGF0ZUNoYW5nZTtcbiAgfVxuXG4gICNwb3BTdGF0ZUNoYW5nZTogU3ViamVjdDx2b2lkPjtcblxuICAjc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb25MaWtlIHwgdW5kZWZpbmVkO1xuXG4gICNhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICNsb2NhdGlvbjogTG9jYXRpb247XG4gICNyb3V0ZXI6IFJvdXRlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgbG9jYXRpb246IExvY2F0aW9uLFxuICAgIHJvdXRlcjogUm91dGVyXG4gICkge1xuICAgIHRoaXMuI2FjdGl2YXRlZFJvdXRlID0gYWN0aXZhdGVkUm91dGU7XG4gICAgdGhpcy4jbG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICB0aGlzLiNyb3V0ZXIgPSByb3V0ZXI7XG5cbiAgICB0aGlzLiNwb3BTdGF0ZUNoYW5nZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3N1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIHRoaXMuI3BvcFN0YXRlQ2hhbmdlLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24gPSB0aGlzLiNsb2NhdGlvbi5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy4jcG9wU3RhdGVDaGFuZ2UubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHZhbHVlIG9mIGEgVVJMIHF1ZXJ5IHBhcmFtLlxuICAgKi9cbiAgcHVibGljIGdldFBhcmFtKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuI2dldFBhcmFtcygpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgVVJMIHF1ZXJ5IHBhcmFtLlxuICAgKi9cbiAgcHVibGljIHNldFBhcmFtKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLiNnZXRQYXJhbXMoKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgZGVsZXRlIHBhcmFtc1tuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zW25hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBVUkwgd2l0aG91dCB0cmlnZ2VyaW5nIGEgbmF2aWdhdGlvbiBzdGF0ZSBjaGFuZ2UuXG4gICAgLy8gU2VlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDY0ODY2NzdcbiAgICBjb25zdCB1cmwgPSB0aGlzLiNyb3V0ZXJcbiAgICAgIC5jcmVhdGVVcmxUcmVlKFtdLCB7XG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuI2FjdGl2YXRlZFJvdXRlLFxuICAgICAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgfSlcbiAgICAgIC50b1N0cmluZygpO1xuXG4gICAgLy8gQWJvcnQgcmVkaXJlY3QgaWYgdGhlIGN1cnJlbnQgVVJMIGlzIGVxdWFsIHRvIHRoZSBuZXcgVVJMLlxuICAgIGlmICh0aGlzLiNsb2NhdGlvbi5pc0N1cnJlbnRQYXRoRXF1YWxUbyh1cmwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jbG9jYXRpb24uZ28odXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbSBmcm9tIHRoZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJQYXJhbShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtKG5hbWUsIG51bGwpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWxhdGl2ZSBVUkwgdGhhdCBpbmNsdWRlcyB0aGUgcHJvdmlkZWQgcXVlcnkgcGFyYW1ldGVyLiBUaGUgdmFsdWUgaXMgaW50ZW5kZWQgdG8gYmVcbiAgICogdXNlZCBieSBhbiBIVE1MIGFuY2hvciBlbGVtZW50LlxuICAgKi9cbiAgcHVibGljIGdldFBhcmFtSHJlZihuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtcyA9IHRoaXMuI2dldFBhcmFtcygpO1xuICAgIHBhcmFtc1tuYW1lXSA9IHZhbHVlO1xuXG4gICAgY29uc3QgYmFzZVVybCA9IHRoaXMuI2xvY2F0aW9uLnBhdGgoKS5zcGxpdCgnPycpWzBdO1xuICAgIGNvbnN0IHBhcmFtU3RyaW5nID0gT2JqZWN0LmtleXMocGFyYW1zKVxuICAgICAgLm1hcCgoaykgPT4gYCR7a309JHtwYXJhbXNba119YClcbiAgICAgIC5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gdGhpcy4jbG9jYXRpb24ucHJlcGFyZUV4dGVybmFsVXJsKGAke2Jhc2VVcmx9PyR7cGFyYW1TdHJpbmd9YCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgdGhlIHByb3ZpZGVkIHN0cmluZyBpbnRvIGEgdmFsdWUgdGhhdCBjYW4gYmUgc2FmZWx5IHVzZWQgaW4gYSBVUkwuXG4gICAqL1xuICBwdWJsaWMgdXJsaWZ5KHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBzYW5pdGl6ZWQgPSB2YWx1ZVxuICAgICAgLnRvTG93ZXJDYXNlKClcblxuICAgICAgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAgICAgIC5yZXBsYWNlKC9bX35gQCEjJCVeJiooKVtcXF17fTs6Jy9cXFxcPD4sLj89K3xcIl0vZywgJycpXG5cbiAgICAgIC8vIFJlcGxhY2Ugc3BhY2UgY2hhcmFjdGVycyB3aXRoIGEgZGFzaC5cbiAgICAgIC5yZXBsYWNlKC9cXHMvZywgJy0nKVxuXG4gICAgICAvLyBSZW1vdmUgYW55IGRvdWJsZS1kYXNoZXMuXG4gICAgICAucmVwbGFjZSgvLS0vZywgJy0nKTtcblxuICAgIHJldHVybiBzYW5pdGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhbGwgcXVlcnkgcGFyYW1zIHRoYXQgZXhpc3QgaW4gdGhlIGN1cnJlbnQgVVJMLlxuICAgKi9cbiAgI2dldFBhcmFtcygpOiBQZXJtYWxpbmtQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogUGVybWFsaW5rUGFyYW1zID0ge307XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy4jbG9jYXRpb24ucGF0aCgpO1xuICAgIGlmIChwYXRoLmluZGV4T2YoJz8nKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfVxuXG4gICAgY29uc3QgZXhpc3RpbmdQYXJhbVBhaXJzID0gcGF0aC5zcGxpdCgnPycpWzFdLnNwbGl0KCcmJyk7XG4gICAgZXhpc3RpbmdQYXJhbVBhaXJzLmZvckVhY2goKHBhaXIpID0+IHtcbiAgICAgIGNvbnN0IGZyYWdtZW50cyA9IHBhaXIuc3BsaXQoJz0nKTtcbiAgICAgIHBhcmFtc1tmcmFnbWVudHNbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KGZyYWdtZW50c1sxXSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcGFyYW1zO1xuICB9XG59XG4iXX0=