mis-crystal-design-system 17.0.3 → 17.0.4

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 (70) hide show
  1. package/analytics/analytics.service.d.ts +1 -1
  2. package/esm2022/analytics/analytics.service.mjs +3 -3
  3. package/esm2022/filter/filter-panel/filter-panel.component.mjs +19 -19
  4. package/esm2022/slider/slider.component.mjs +2 -2
  5. package/esm2022/table/actions-cell/actions-cell.component.mjs +389 -0
  6. package/esm2022/table/public_api.mjs +5 -3
  7. package/esm2022/table/sort-icons.directive.mjs +139 -0
  8. package/esm2022/table/table.component.mjs +286 -109
  9. package/esm2022/table/table.module.mjs +41 -6
  10. package/esm2022/toast/public_api.mjs +3 -1
  11. package/esm2022/toast/toast.component.mjs +73 -16
  12. package/esm2022/toast/toast.constants.mjs +7 -0
  13. package/esm2022/toast/toast.data.service.mjs +1 -1
  14. package/esm2022/toast/toast.interface.mjs +2 -0
  15. package/esm2022/toast/toast.service.mjs +14 -7
  16. package/fesm2022/mis-crystal-design-system-action-list.mjs.map +1 -1
  17. package/fesm2022/mis-crystal-design-system-analytics.mjs +2 -2
  18. package/fesm2022/mis-crystal-design-system-analytics.mjs.map +1 -1
  19. package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
  20. package/fesm2022/mis-crystal-design-system-button.mjs.map +1 -1
  21. package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
  22. package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
  23. package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  24. package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  25. package/fesm2022/mis-crystal-design-system-drawer.mjs.map +1 -1
  26. package/fesm2022/mis-crystal-design-system-dropdown.mjs.map +1 -1
  27. package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  28. package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
  29. package/fesm2022/mis-crystal-design-system-filter.mjs +18 -18
  30. package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
  31. package/fesm2022/mis-crystal-design-system-input-stepper.mjs.map +1 -1
  32. package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
  33. package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
  34. package/fesm2022/mis-crystal-design-system-menu.mjs.map +1 -1
  35. package/fesm2022/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
  36. package/fesm2022/mis-crystal-design-system-modal.mjs.map +1 -1
  37. package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs.map +1 -1
  38. package/fesm2022/mis-crystal-design-system-nested-multi-select-dropdown.mjs.map +1 -1
  39. package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
  40. package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
  41. package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
  42. package/fesm2022/mis-crystal-design-system-slider.mjs +2 -2
  43. package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
  44. package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
  45. package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  46. package/fesm2022/mis-crystal-design-system-star-rating.mjs.map +1 -1
  47. package/fesm2022/mis-crystal-design-system-switch.mjs.map +1 -1
  48. package/fesm2022/mis-crystal-design-system-table.mjs +1143 -411
  49. package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
  50. package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
  51. package/fesm2022/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  52. package/fesm2022/mis-crystal-design-system-toast.mjs +93 -22
  53. package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
  54. package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
  55. package/fesm2022/mis-crystal-design-system-virtual-scroll.mjs.map +1 -1
  56. package/fesm2022/mis-crystal-design-system-widgets.mjs.map +1 -1
  57. package/filter/filter-panel/filter-panel.component.d.ts +4 -3
  58. package/package.json +35 -35
  59. package/table/actions-cell/actions-cell.component.d.ts +45 -0
  60. package/table/filter/filter.component.d.ts +1 -1
  61. package/table/public_api.d.ts +4 -2
  62. package/table/sort-icons.directive.d.ts +36 -0
  63. package/table/table.component.d.ts +56 -10
  64. package/table/table.module.d.ts +8 -4
  65. package/toast/public_api.d.ts +2 -0
  66. package/toast/toast.component.d.ts +13 -1
  67. package/toast/toast.constants.d.ts +5 -0
  68. package/toast/toast.data.service.d.ts +3 -2
  69. package/toast/toast.interface.d.ts +6 -0
  70. package/toast/toast.service.d.ts +2 -1
@@ -0,0 +1,139 @@
1
+ import { Directive, input, output, signal, } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class SortIconsDirective {
4
+ constructor(el, renderer) {
5
+ this.el = el;
6
+ this.renderer = renderer;
7
+ // Convert inputs to signals
8
+ this.column = input();
9
+ this.activeSort = input();
10
+ this.activeSorts = input();
11
+ this.multiColumnSort = input(false);
12
+ // Convert output to signal
13
+ this.sortChange = output();
14
+ this.multiSortChange = output();
15
+ // Internal state as signals
16
+ this.currentDirection = signal('');
17
+ }
18
+ ngOnInit() {
19
+ // Create a container for the icons
20
+ const container = this.renderer.createElement('div');
21
+ this.renderer?.setStyle(container, 'display', 'inline-flex');
22
+ this.renderer?.setStyle(container, 'align-items', 'center');
23
+ const iconContainer = this.renderer.createElement('div');
24
+ this.renderer?.setStyle(iconContainer, 'display', 'inline-flex');
25
+ this.renderer?.setStyle(iconContainer, 'flex-direction', 'column');
26
+ this.renderer?.setStyle(iconContainer, 'align-items', 'center');
27
+ this.upIcon = this.renderer.createElement('img');
28
+ this.renderer?.setAttribute(this.upIcon, 'src', this.column()?.sortAscIcon);
29
+ this.renderer?.setStyle(this.upIcon, 'opacity', '0.5');
30
+ this.renderer?.setStyle(this.upIcon, 'transition', 'opacity 0.3s ease');
31
+ this.renderer?.setStyle(this.upIcon, 'width', '9px');
32
+ this.renderer?.setStyle(this.upIcon, 'cursor', 'pointer');
33
+ this.renderer?.listen(this.upIcon, 'click', () => this.setSortDirection('ASC'));
34
+ this.downIcon = this.renderer.createElement('img');
35
+ this.renderer?.setAttribute(this.downIcon, 'src', this.column()?.sortDescIcon);
36
+ this.renderer?.setStyle(this.downIcon, 'opacity', '0.5');
37
+ this.renderer?.setStyle(this.downIcon, 'transition', 'opacity 0.3s ease');
38
+ this.renderer?.setStyle(this.downIcon, 'width', '9px');
39
+ this.renderer?.setStyle(this.downIcon, 'cursor', 'pointer');
40
+ this.renderer?.listen(this.downIcon, 'click', () => this.setSortDirection('DESC'));
41
+ this.renderer?.appendChild(iconContainer, this.upIcon);
42
+ this.renderer?.appendChild(iconContainer, this.downIcon);
43
+ this.renderer?.appendChild(container, iconContainer);
44
+ if (this.multiColumnSort()) {
45
+ this.sortOrderElement = this.renderer.createElement('span');
46
+ this.renderer?.setStyle(this.sortOrderElement, 'font-size', '12px');
47
+ this.renderer?.setStyle(this.sortOrderElement, 'font-weight', 'bold');
48
+ this.renderer?.setStyle(this.sortOrderElement, 'color', '#000');
49
+ this.renderer?.appendChild(container, this.sortOrderElement);
50
+ }
51
+ this.renderer?.appendChild(this.el.nativeElement, container);
52
+ this.updateIconStyles();
53
+ }
54
+ ngOnChanges(changes) {
55
+ if (changes['activeSort'] || changes['activeSorts']) {
56
+ this.updateIconStyles();
57
+ }
58
+ }
59
+ setSortDirection(direction) {
60
+ if (this.multiColumnSort()) {
61
+ this.handleMultiColumnSort(direction);
62
+ }
63
+ else {
64
+ this.handleSingleColumnSort(direction);
65
+ }
66
+ }
67
+ handleSingleColumnSort(direction) {
68
+ if (this.currentDirection() === direction) {
69
+ this.currentDirection.set(''); // Reset sorting if the same direction is clicked
70
+ }
71
+ else {
72
+ this.currentDirection.set(direction);
73
+ }
74
+ this.sortChange.emit({
75
+ column: this.column()?.data || '',
76
+ direction: this.currentDirection()
77
+ });
78
+ this.updateIconStyles();
79
+ }
80
+ handleMultiColumnSort(direction) {
81
+ const existingSortIndex = this.activeSorts().findIndex(sort => sort.column === this.column()?.data);
82
+ if (existingSortIndex !== -1) {
83
+ if (this.activeSorts()[existingSortIndex].direction !== direction) {
84
+ this.activeSorts()[existingSortIndex].direction = direction;
85
+ }
86
+ else {
87
+ return;
88
+ }
89
+ }
90
+ else {
91
+ this.activeSorts().push({
92
+ column: this.column()?.data || '',
93
+ direction
94
+ });
95
+ }
96
+ this.multiSortChange.emit([...this.activeSorts()]);
97
+ this.updateIconStyles();
98
+ }
99
+ updateIconStyles() {
100
+ if (this.multiColumnSort()) {
101
+ this.updateMultiColumnIconStyles();
102
+ }
103
+ else {
104
+ this.updateSingleColumnIconStyles();
105
+ }
106
+ }
107
+ updateSingleColumnIconStyles() {
108
+ const isActiveColumn = this.activeSort()?.column === this.column()?.data;
109
+ setTimeout(() => {
110
+ this.renderer?.setStyle(this.upIcon, 'opacity', isActiveColumn && this.currentDirection() === 'ASC' ? '1' : '0.5');
111
+ this.renderer?.setStyle(this.downIcon, 'opacity', isActiveColumn && this.currentDirection() === 'DESC' ? '1' : '0.5');
112
+ }, 0);
113
+ }
114
+ updateMultiColumnIconStyles() {
115
+ const columnSort = this.activeSorts().find(sort => sort.column === this.column()?.data);
116
+ setTimeout(() => {
117
+ this.renderer?.setStyle(this.upIcon, 'opacity', columnSort?.direction === 'ASC' ? '1' : '0.5');
118
+ this.renderer?.setStyle(this.downIcon, 'opacity', columnSort?.direction === 'DESC' ? '1' : '0.5');
119
+ if (this.sortOrderElement) {
120
+ const sortIndex = this.activeSorts().findIndex(sort => sort.column === this.column()?.data);
121
+ if (sortIndex !== -1) {
122
+ this.renderer?.setProperty(this.sortOrderElement, 'textContent', (sortIndex + 1).toString());
123
+ }
124
+ else {
125
+ this.renderer?.setProperty(this.sortOrderElement, 'textContent', '');
126
+ }
127
+ }
128
+ }, 0);
129
+ }
130
+ static { this.ɵfac = function SortIconsDirective_Factory(t) { return new (t || SortIconsDirective)(i0.ɵɵdirectiveInject(i0.ElementRef), i0.ɵɵdirectiveInject(i0.Renderer2)); }; }
131
+ static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: SortIconsDirective, selectors: [["", "appSortIcons", ""]], inputs: { column: [i0.ɵɵInputFlags.SignalBased, "column"], activeSort: [i0.ɵɵInputFlags.SignalBased, "activeSort"], activeSorts: [i0.ɵɵInputFlags.SignalBased, "activeSorts"], multiColumnSort: [i0.ɵɵInputFlags.SignalBased, "multiColumnSort"] }, outputs: { sortChange: "sortChange", multiSortChange: "multiSortChange" }, features: [i0.ɵɵNgOnChangesFeature] }); }
132
+ }
133
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SortIconsDirective, [{
134
+ type: Directive,
135
+ args: [{
136
+ selector: '[appSortIcons]',
137
+ }]
138
+ }], () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }], null); })();
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC1pY29ucy5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy90YWJsZS9zb3J0LWljb25zLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQVNULEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDOztBQWdCdkIsTUFBTSxPQUFPLGtCQUFrQjtJQW1CN0IsWUFBb0IsRUFBYyxFQUFVLFFBQW1CO1FBQTNDLE9BQUUsR0FBRixFQUFFLENBQVk7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBbEIvRCw0QkFBNEI7UUFDNUIsV0FBTSxHQUFHLEtBQUssRUFBYyxDQUFDO1FBQzdCLGVBQVUsR0FBRyxLQUFLLEVBQWEsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLEtBQUssRUFBZSxDQUFDO1FBQ25DLG9CQUFlLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRXhDLDJCQUEyQjtRQUMzQixlQUFVLEdBQUcsTUFBTSxFQUFhLENBQUM7UUFDakMsb0JBQWUsR0FBRyxNQUFNLEVBQWUsQ0FBQztRQUV4Qyw0QkFBNEI7UUFDNUIscUJBQWdCLEdBQUcsTUFBTSxDQUFzQixFQUFFLENBQUMsQ0FBQztJQU9lLENBQUM7SUFFbkUsUUFBUTtRQUVOLG1DQUFtQztRQUNuQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFFNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEs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Q0FBQyxDQUFDLENBQUMsS0FBSyxDQUM5QyxDQUFDO1lBQ0YsSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQ3JCLElBQUksQ0FBQyxRQUFRLEVBQ2IsU0FBUyxFQUNULFVBQVUsRUFBRSxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FDL0MsQ0FBQztZQUVGLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQzVGLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNwQixJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7aUJBQzlGO3FCQUFNO29CQUNMLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7aUJBQ3RFO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO21GQWpLVSxrQkFBa0I7b0VBQWxCLGtCQUFrQjs7aUZBQWxCLGtCQUFrQjtjQUg5QixTQUFTO2VBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjthQUMzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNvcnRTdGF0ZSB7XG4gIGNvbHVtbjogc3RyaW5nO1xuICBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnIHwgJyc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU29ydENvbHVtbiB7XG4gIGRhdGE6IHN0cmluZztcbiAgc29ydEFzY0ljb24/OiBzdHJpbmc7XG4gIHNvcnREZXNjSWNvbj86IHN0cmluZztcbn1cblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2FwcFNvcnRJY29uc10nLFxufSlcbmV4cG9ydCBjbGFzcyBTb3J0SWNvbnNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8vIENvbnZlcnQgaW5wdXRzIHRvIHNpZ25hbHNcbiAgY29sdW1uID0gaW5wdXQ8U29ydENvbHVtbj4oKTtcbiAgYWN0aXZlU29ydCA9IGlucHV0PFNvcnRTdGF0ZT4oKTtcbiAgYWN0aXZlU29ydHMgPSBpbnB1dDxTb3J0U3RhdGVbXT4oKTtcbiAgbXVsdGlDb2x1bW5Tb3J0ID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuICBcbiAgLy8gQ29udmVydCBvdXRwdXQgdG8gc2lnbmFsXG4gIHNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlPigpO1xuICBtdWx0aVNvcnRDaGFuZ2UgPSBvdXRwdXQ8U29ydFN0YXRlW10+KCk7XG5cbiAgLy8gSW50ZXJuYWwgc3RhdGUgYXMgc2lnbmFsc1xuICBjdXJyZW50RGlyZWN0aW9uID0gc2lnbmFsPCdBU0MnIHwgJ0RFU0MnIHwgJyc+KCcnKTtcblxuICAvLyBBc3NldHNcbiAgcHJpdmF0ZSB1cEljb24hOiBIVE1MSW1hZ2VFbGVtZW50O1xuICBwcml2YXRlIGRvd25JY29uITogSFRNTEltYWdlRWxlbWVudDtcbiAgcHJpdmF0ZSBzb3J0T3JkZXJFbGVtZW50PzogSFRNTFNwYW5FbGVtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMikge31cblxuICBuZ09uSW5pdCgpIHtcbiAgICBcbiAgICAvLyBDcmVhdGUgYSBjb250YWluZXIgZm9yIHRoZSBpY29uc1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoY29udGFpbmVyLCAnZGlzcGxheScsICdpbmxpbmUtZmxleCcpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKGNvbnRhaW5lciwgJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpO1xuXG4gICAgY29uc3QgaWNvbkNvbnRhaW5lciA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoaWNvbkNvbnRhaW5lciwgJ2Rpc3BsYXknLCAnaW5saW5lLWZsZXgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShpY29uQ29udGFpbmVyLCAnZmxleC1kaXJlY3Rpb24nLCAnY29sdW1uJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoaWNvbkNvbnRhaW5lciwgJ2FsaWduLWl0ZW1zJywgJ2NlbnRlcicpO1xuXG4gICAgdGhpcy51cEljb24gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldEF0dHJpYnV0ZSh0aGlzLnVwSWNvbiwgJ3NyYycsIHRoaXMuY29sdW1uKCk/LnNvcnRBc2NJY29uKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnVwSWNvbiwgJ29wYWNpdHknLCAnMC41Jyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy51cEljb24sICd0cmFuc2l0aW9uJywgJ29wYWNpdHkgMC4zcyBlYXNlJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy51cEljb24sICd3aWR0aCcsICc5cHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnVwSWNvbiwgJ2N1cnNvcicsICdwb2ludGVyJyk7XG4gICAgdGhpcy5yZW5kZXJlcj8ubGlzdGVuKHRoaXMudXBJY29uLCAnY2xpY2snLCAoKSA9PiB0aGlzLnNldFNvcnREaXJlY3Rpb24oJ0FTQycpKTtcblxuICAgIHRoaXMuZG93bkljb24gPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldEF0dHJpYnV0ZSh0aGlzLmRvd25JY29uLCAnc3JjJywgdGhpcy5jb2x1bW4oKT8uc29ydERlc2NJY29uKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAnb3BhY2l0eScsICcwLjUnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAndHJhbnNpdGlvbicsICdvcGFjaXR5IDAuM3MgZWFzZScpO1xuICAgIHRoaXMucmVuZGVyZXI/LnNldFN0eWxlKHRoaXMuZG93bkljb24sICd3aWR0aCcsICc5cHgnKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLmRvd25JY29uLCAnY3Vyc29yJywgJ3BvaW50ZXInKTtcbiAgICB0aGlzLnJlbmRlcmVyPy5saXN0ZW4odGhpcy5kb3duSWNvbiwgJ2NsaWNrJywgKCkgPT4gdGhpcy5zZXRTb3J0RGlyZWN0aW9uKCdERVNDJykpO1xuXG4gICAgdGhpcy5yZW5kZXJlcj8uYXBwZW5kQ2hpbGQoaWNvbkNvbnRhaW5lciwgdGhpcy51cEljb24pO1xuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKGljb25Db250YWluZXIsIHRoaXMuZG93bkljb24pO1xuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKGNvbnRhaW5lciwgaWNvbkNvbnRhaW5lcik7XG5cbiAgICBpZiAodGhpcy5tdWx0aUNvbHVtblNvcnQoKSkge1xuICAgICAgdGhpcy5zb3J0T3JkZXJFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZSh0aGlzLnNvcnRPcmRlckVsZW1lbnQsICdmb250LXNpemUnLCAnMTJweCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5zb3J0T3JkZXJFbGVtZW50LCAnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUodGhpcy5zb3J0T3JkZXJFbGVtZW50LCAnY29sb3InLCAnIzAwMCcpO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uYXBwZW5kQ2hpbGQoY29udGFpbmVyLCB0aGlzLnNvcnRPcmRlckVsZW1lbnQpO1xuICAgIH1cblxuICAgIHRoaXMucmVuZGVyZXI/LmFwcGVuZENoaWxkKHRoaXMuZWwubmF0aXZlRWxlbWVudCwgY29udGFpbmVyKTtcbiAgICB0aGlzLnVwZGF0ZUljb25TdHlsZXMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snYWN0aXZlU29ydCddIHx8IGNoYW5nZXNbJ2FjdGl2ZVNvcnRzJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlSWNvblN0eWxlcygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0U29ydERpcmVjdGlvbihkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubXVsdGlDb2x1bW5Tb3J0KCkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlDb2x1bW5Tb3J0KGRpcmVjdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlU2luZ2xlQ29sdW1uU29ydChkaXJlY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlU2luZ2xlQ29sdW1uU29ydChkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudERpcmVjdGlvbigpID09PSBkaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbi5zZXQoJycpOyAvLyBSZXNldCBzb3J0aW5nIGlmIHRoZSBzYW1lIGRpcmVjdGlvbiBpcyBjbGlja2VkXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudERpcmVjdGlvbi5zZXQoZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCh7IFxuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbigpPy5kYXRhIHx8ICcnLCBcbiAgICAgIGRpcmVjdGlvbjogdGhpcy5jdXJyZW50RGlyZWN0aW9uKClcbiAgICB9KTtcbiAgICB0aGlzLnVwZGF0ZUljb25TdHlsZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlTXVsdGlDb2x1bW5Tb3J0KGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQycpOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZ1NvcnRJbmRleCA9IHRoaXMuYWN0aXZlU29ydHMoKS5maW5kSW5kZXgoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gdGhpcy5jb2x1bW4oKT8uZGF0YSk7XG4gICAgXG4gICAgaWYgKGV4aXN0aW5nU29ydEluZGV4ICE9PSAtMSkge1xuICAgICAgaWYgKHRoaXMuYWN0aXZlU29ydHMoKVtleGlzdGluZ1NvcnRJbmRleF0uZGlyZWN0aW9uICE9PSBkaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTb3J0cygpW2V4aXN0aW5nU29ydEluZGV4XS5kaXJlY3Rpb24gPSBkaXJlY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlU29ydHMoKS5wdXNoKHsgXG4gICAgICAgIGNvbHVtbjogdGhpcy5jb2x1bW4oKT8uZGF0YSB8fCAnJywgXG4gICAgICAgIGRpcmVjdGlvblxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubXVsdGlTb3J0Q2hhbmdlLmVtaXQoWy4uLnRoaXMuYWN0aXZlU29ydHMoKV0pO1xuICAgIHRoaXMudXBkYXRlSWNvblN0eWxlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJY29uU3R5bGVzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpQ29sdW1uU29ydCgpKSB7XG4gICAgICB0aGlzLnVwZGF0ZU11bHRpQ29sdW1uSWNvblN0eWxlcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZVNpbmdsZUNvbHVtbkljb25TdHlsZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNpbmdsZUNvbHVtbkljb25TdHlsZXMoKTogdm9pZCB7XG4gICAgY29uc3QgaXNBY3RpdmVDb2x1bW4gPSB0aGlzLmFjdGl2ZVNvcnQoKT8uY29sdW1uID09PSB0aGlzLmNvbHVtbigpPy5kYXRhO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy51cEljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgaXNBY3RpdmVDb2x1bW4gJiYgdGhpcy5jdXJyZW50RGlyZWN0aW9uKCkgPT09ICdBU0MnID8gJzEnIDogJzAuNSdcbiAgICAgICk7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5kb3duSWNvbixcbiAgICAgICAgJ29wYWNpdHknLFxuICAgICAgICBpc0FjdGl2ZUNvbHVtbiAmJiB0aGlzLmN1cnJlbnREaXJlY3Rpb24oKSA9PT0gJ0RFU0MnID8gJzEnIDogJzAuNSdcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU11bHRpQ29sdW1uSWNvblN0eWxlcygpOiB2b2lkIHtcbiAgICBjb25zdCBjb2x1bW5Tb3J0ID0gdGhpcy5hY3RpdmVTb3J0cygpLmZpbmQoc29ydCA9PiBzb3J0LmNvbHVtbiA9PT0gdGhpcy5jb2x1bW4oKT8uZGF0YSk7XG4gICAgXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVyPy5zZXRTdHlsZShcbiAgICAgICAgdGhpcy51cEljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgY29sdW1uU29ydD8uZGlyZWN0aW9uID09PSAnQVNDJyA/ICcxJyA6ICcwLjUnXG4gICAgICApO1xuICAgICAgdGhpcy5yZW5kZXJlcj8uc2V0U3R5bGUoXG4gICAgICAgIHRoaXMuZG93bkljb24sXG4gICAgICAgICdvcGFjaXR5JyxcbiAgICAgICAgY29sdW1uU29ydD8uZGlyZWN0aW9uID09PSAnREVTQycgPyAnMScgOiAnMC41J1xuICAgICAgKTtcblxuICAgICAgaWYgKHRoaXMuc29ydE9yZGVyRWxlbWVudCkge1xuICAgICAgICBjb25zdCBzb3J0SW5kZXggPSB0aGlzLmFjdGl2ZVNvcnRzKCkuZmluZEluZGV4KHNvcnQgPT4gc29ydC5jb2x1bW4gPT09IHRoaXMuY29sdW1uKCk/LmRhdGEpO1xuICAgICAgICBpZiAoc29ydEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXI/LnNldFByb3BlcnR5KHRoaXMuc29ydE9yZGVyRWxlbWVudCwgJ3RleHRDb250ZW50JywgKHNvcnRJbmRleCArIDEpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVuZGVyZXI/LnNldFByb3BlcnR5KHRoaXMuc29ydE9yZGVyRWxlbWVudCwgJ3RleHRDb250ZW50JywgJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMCk7XG4gIH1cbn0iXX0=