@one-grid-core/angular 0.1.0-beta.5

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 (125) hide show
  1. package/README.md +168 -0
  2. package/esm2022/lib/components/one-grid/one-grid.component.mjs +388 -0
  3. package/esm2022/lib/components/one-grid-body/one-grid-body.component.mjs +570 -0
  4. package/esm2022/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.mjs +90 -0
  5. package/esm2022/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.mjs +31 -0
  6. package/esm2022/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.mjs +67 -0
  7. package/esm2022/lib/components/one-grid-checkbox/one-grid-checkbox.component.mjs +47 -0
  8. package/esm2022/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.mjs +62 -0
  9. package/esm2022/lib/components/one-grid-header/one-grid-header.component.mjs +140 -0
  10. package/esm2022/lib/components/one-grid-pagination/one-grid-pagination.component.mjs +76 -0
  11. package/esm2022/lib/components/one-grid-row-action/one-grid-row-action.component.mjs +193 -0
  12. package/esm2022/lib/components/one-grid-status/one-grid-status.component.mjs +35 -0
  13. package/esm2022/lib/core/directives/one-cell-input-validator.directive.mjs +71 -0
  14. package/esm2022/lib/core/directives/one-cell-renderer-component.directive.mjs +77 -0
  15. package/esm2022/lib/core/directives/one-cell-text-expand.directive.mjs +82 -0
  16. package/esm2022/lib/core/instants/one-grid-api.class.mjs +591 -0
  17. package/esm2022/lib/core/instants/one-row-node.class.mjs +90 -0
  18. package/esm2022/lib/core/models/constants/one-pagination.constant.mjs +2 -0
  19. package/esm2022/lib/core/models/one-column-def-types.model.mjs +2 -0
  20. package/esm2022/lib/core/models/one-event-types.model.mjs +2 -0
  21. package/esm2022/lib/core/models/one-filter.model.mjs +2 -0
  22. package/esm2022/lib/core/models/one-grid-types.model.mjs +2 -0
  23. package/esm2022/lib/core/models/one-master-detail.model.mjs +2 -0
  24. package/esm2022/lib/core/models/one-pagination-types.model.mjs +2 -0
  25. package/esm2022/lib/core/models/one-row.model.mjs +13 -0
  26. package/esm2022/lib/core/models/one-tree-data.model.mjs +2 -0
  27. package/esm2022/lib/core/models/one-validation.model.mjs +2 -0
  28. package/esm2022/lib/core/pipes/cell-action-button-enable.pipe.mjs +21 -0
  29. package/esm2022/lib/core/pipes/cell-action-button-visible.pipe.mjs +17 -0
  30. package/esm2022/lib/core/pipes/cell-disable-resolver.pipe.mjs +26 -0
  31. package/esm2022/lib/core/pipes/cell-editable.pipe.mjs +30 -0
  32. package/esm2022/lib/core/pipes/cell-field-value-empty.pipe.mjs +21 -0
  33. package/esm2022/lib/core/pipes/cell-field-value.pipe.mjs +25 -0
  34. package/esm2022/lib/core/pipes/cell-field.pipe.mjs +20 -0
  35. package/esm2022/lib/core/pipes/cell-invalid.pipe.mjs +21 -0
  36. package/esm2022/lib/core/pipes/cell-key.pipe.mjs +21 -0
  37. package/esm2022/lib/core/pipes/cell-level-padding.pipe.mjs +18 -0
  38. package/esm2022/lib/core/pipes/cell-number-value.pipe.mjs +19 -0
  39. package/esm2022/lib/core/pipes/cell-selected.pipe.mjs +20 -0
  40. package/esm2022/lib/core/pipes/cell-state-group-renderer.pipe.mjs +21 -0
  41. package/esm2022/lib/core/pipes/cell-state-renderer.pipe.mjs +24 -0
  42. package/esm2022/lib/core/pipes/cell-value-getter.pipe.mjs +23 -0
  43. package/esm2022/lib/core/pipes/column-sort-state.pipe.mjs +19 -0
  44. package/esm2022/lib/core/pipes/header-checkbox-checked.pipe.mjs +17 -0
  45. package/esm2022/lib/core/pipes/header-checkbox-disabled.pipe.mjs +17 -0
  46. package/esm2022/lib/core/pipes/header-checkbox-indeterminate.pipe.mjs +17 -0
  47. package/esm2022/lib/core/services/og-column.service.mjs +81 -0
  48. package/esm2022/lib/core/services/one-grid-cell.service.mjs +88 -0
  49. package/esm2022/lib/core/services/one-grid-event.service.mjs +42 -0
  50. package/esm2022/lib/core/services/one-grid-expansion.service.mjs +40 -0
  51. package/esm2022/lib/core/services/one-grid-row.service.mjs +29 -0
  52. package/esm2022/lib/core/services/one-grid-selection.service.mjs +54 -0
  53. package/esm2022/lib/core/services/one-grid-tree-data.service.mjs +59 -0
  54. package/esm2022/lib/helpers/one-cell.helper.mjs +42 -0
  55. package/esm2022/lib/helpers/one-column-def.helper.mjs +28 -0
  56. package/esm2022/lib/helpers/one-filter.helper.mjs +52 -0
  57. package/esm2022/lib/helpers/one-validation.helper.mjs +95 -0
  58. package/esm2022/lib/index.mjs +19 -0
  59. package/esm2022/lib/one-grid.module.mjs +142 -0
  60. package/esm2022/one-grid-core-angular.mjs +5 -0
  61. package/esm2022/public-api.mjs +5 -0
  62. package/fesm2022/one-grid-core-angular.mjs +3573 -0
  63. package/fesm2022/one-grid-core-angular.mjs.map +1 -0
  64. package/index.d.ts +5 -0
  65. package/lib/components/one-grid/one-grid.component.d.ts +139 -0
  66. package/lib/components/one-grid-body/one-grid-body.component.d.ts +176 -0
  67. package/lib/components/one-grid-cell-currency/one-grid-cell-currency.component.d.ts +27 -0
  68. package/lib/components/one-grid-cell-group-renderer/one-grid-cell-group-renderer.component.d.ts +16 -0
  69. package/lib/components/one-grid-cell-option-menu/one-grid-cell-option-menu.component.d.ts +21 -0
  70. package/lib/components/one-grid-checkbox/one-grid-checkbox.component.d.ts +19 -0
  71. package/lib/components/one-grid-checkbox-header/one-grid-checkbox-header.component.d.ts +24 -0
  72. package/lib/components/one-grid-header/one-grid-header.component.d.ts +41 -0
  73. package/lib/components/one-grid-pagination/one-grid-pagination.component.d.ts +21 -0
  74. package/lib/components/one-grid-row-action/one-grid-row-action.component.d.ts +59 -0
  75. package/lib/components/one-grid-status/one-grid-status.component.d.ts +15 -0
  76. package/lib/core/directives/one-cell-input-validator.directive.d.ts +15 -0
  77. package/lib/core/directives/one-cell-renderer-component.directive.d.ts +20 -0
  78. package/lib/core/directives/one-cell-text-expand.directive.d.ts +21 -0
  79. package/lib/core/instants/one-grid-api.class.d.ts +161 -0
  80. package/lib/core/instants/one-row-node.class.d.ts +49 -0
  81. package/lib/core/models/constants/one-pagination.constant.d.ts +1 -0
  82. package/lib/core/models/one-column-def-types.model.d.ts +139 -0
  83. package/lib/core/models/one-event-types.model.d.ts +78 -0
  84. package/lib/core/models/one-filter.model.d.ts +15 -0
  85. package/lib/core/models/one-grid-types.model.d.ts +48 -0
  86. package/lib/core/models/one-master-detail.model.d.ts +18 -0
  87. package/lib/core/models/one-pagination-types.model.d.ts +9 -0
  88. package/lib/core/models/one-row.model.d.ts +38 -0
  89. package/lib/core/models/one-tree-data.model.d.ts +9 -0
  90. package/lib/core/models/one-validation.model.d.ts +9 -0
  91. package/lib/core/pipes/cell-action-button-enable.pipe.d.ts +8 -0
  92. package/lib/core/pipes/cell-action-button-visible.pipe.d.ts +9 -0
  93. package/lib/core/pipes/cell-disable-resolver.pipe.d.ts +9 -0
  94. package/lib/core/pipes/cell-editable.pipe.d.ts +9 -0
  95. package/lib/core/pipes/cell-field-value-empty.pipe.d.ts +7 -0
  96. package/lib/core/pipes/cell-field-value.pipe.d.ts +7 -0
  97. package/lib/core/pipes/cell-field.pipe.d.ts +7 -0
  98. package/lib/core/pipes/cell-invalid.pipe.d.ts +9 -0
  99. package/lib/core/pipes/cell-key.pipe.d.ts +7 -0
  100. package/lib/core/pipes/cell-level-padding.pipe.d.ts +7 -0
  101. package/lib/core/pipes/cell-number-value.pipe.d.ts +7 -0
  102. package/lib/core/pipes/cell-selected.pipe.d.ts +7 -0
  103. package/lib/core/pipes/cell-state-group-renderer.pipe.d.ts +9 -0
  104. package/lib/core/pipes/cell-state-renderer.pipe.d.ts +8 -0
  105. package/lib/core/pipes/cell-value-getter.pipe.d.ts +9 -0
  106. package/lib/core/pipes/column-sort-state.pipe.d.ts +8 -0
  107. package/lib/core/pipes/header-checkbox-checked.pipe.d.ts +9 -0
  108. package/lib/core/pipes/header-checkbox-disabled.pipe.d.ts +9 -0
  109. package/lib/core/pipes/header-checkbox-indeterminate.pipe.d.ts +9 -0
  110. package/lib/core/services/og-column.service.d.ts +22 -0
  111. package/lib/core/services/one-grid-cell.service.d.ts +29 -0
  112. package/lib/core/services/one-grid-event.service.d.ts +17 -0
  113. package/lib/core/services/one-grid-expansion.service.d.ts +13 -0
  114. package/lib/core/services/one-grid-row.service.d.ts +15 -0
  115. package/lib/core/services/one-grid-selection.service.d.ts +17 -0
  116. package/lib/core/services/one-grid-tree-data.service.d.ts +10 -0
  117. package/lib/helpers/one-cell.helper.d.ts +26 -0
  118. package/lib/helpers/one-column-def.helper.d.ts +17 -0
  119. package/lib/helpers/one-filter.helper.d.ts +20 -0
  120. package/lib/helpers/one-validation.helper.d.ts +21 -0
  121. package/lib/index.d.ts +18 -0
  122. package/lib/one-grid.module.d.ts +45 -0
  123. package/package.json +48 -0
  124. package/public-api.d.ts +1 -0
  125. package/scss/_one-grid.scss +999 -0
@@ -0,0 +1,90 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { getCellField } from '../../helpers/one-cell.helper';
3
+ import { CellEditablePipe } from '../../core/pipes/cell-editable.pipe';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../core/services/one-grid-cell.service";
6
+ import * as i2 from "../../core/services/one-grid-event.service";
7
+ import * as i3 from "@angular/forms";
8
+ import * as i4 from "../../core/directives/one-cell-input-validator.directive";
9
+ import * as i5 from "@angular/common";
10
+ export class OneGridCellCurrencyComponent {
11
+ constructor(cellService, eventService) {
12
+ this.cellService = cellService;
13
+ this.eventService = eventService;
14
+ this.value = '';
15
+ this.allowedEdit = false;
16
+ this.getCellField = getCellField;
17
+ this.cellEditablePipe = new CellEditablePipe();
18
+ }
19
+ oneInit(params) {
20
+ this.params = params;
21
+ this.value = params.data[params.columnDef.field];
22
+ this.result = this.value;
23
+ this.allowedEdit = params.context.componentParent.allowedEdit || false;
24
+ this.unsubscribe = this.eventService.addEventListener('cellStateChanged', (payload) => {
25
+ if (this.params.node.rowId === payload.node.rowId) {
26
+ this.result = this.cellService.generateCellState(this.params.node, this.params.columnDef).value;
27
+ }
28
+ });
29
+ }
30
+ refresh(params) {
31
+ // Update params and values when grid data refreshes
32
+ this.params = params;
33
+ this.value = params.data[params.columnDef.field];
34
+ this.result = this.value;
35
+ this.allowedEdit = params.context.componentParent.allowedEdit || false;
36
+ return true;
37
+ }
38
+ get isEditable() {
39
+ if (!this.params.node || !this.params.columnDef)
40
+ return false;
41
+ return this.cellEditablePipe.transform(this.params.node.cellStates, this.params.columnDef, this.params.node, this.cellService.editableFn, this.cellService.updatableFn, this.allowedEdit);
42
+ }
43
+ startEdit(node, column) {
44
+ if (!this.isEditable) {
45
+ return;
46
+ }
47
+ if (node) {
48
+ node.editing[column.field] = true;
49
+ setTimeout(() => {
50
+ const input = document.querySelector(`[data-cell-id="${getCellField(node.rowIndex, column.field)}"] input`);
51
+ if (input) {
52
+ input.focus();
53
+ const value = input.value;
54
+ if (value && ["text"].includes(input.type)) {
55
+ input.setSelectionRange(value.length, value.length);
56
+ }
57
+ }
58
+ }, 10);
59
+ }
60
+ }
61
+ stopEdit(node, column, event) {
62
+ if (node) {
63
+ node.data[column.field] = event.target.value === '' ? null : event.target.value;
64
+ node.cellStates = this.cellService.generateCellStates(node);
65
+ node.editing[column.field] = false;
66
+ this.eventService.dispatchEvent('cellStateChanged', {
67
+ data: { ...node.data },
68
+ node: node,
69
+ column: column
70
+ });
71
+ }
72
+ }
73
+ cancelEdit(node, column) {
74
+ if (node) {
75
+ node.editing[column.field] = false;
76
+ }
77
+ }
78
+ ngOnDestroy() {
79
+ this.unsubscribe?.();
80
+ }
81
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellCurrencyComponent, deps: [{ token: i1.OneGridCellService }, { token: i2.OneGridEventService }], target: i0.ɵɵFactoryTarget.Component }); }
82
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: OneGridCellCurrencyComponent, selector: "app-one-grid-cell-currency", inputs: { allowedEdit: "allowedEdit" }, ngImport: i0, template: "<div class=\"cell-wrapper\"\n [class.editable]=\"isEditable\"\n [attr.data-cell-id]=\"getCellField(params.node?.rowIndex, params.columnDef?.field)\"\n [style.min-width.px]=\"params.columnDef?.minWidth\"\n [style.max-width.px]=\"params.columnDef?.maxWidth\">\n\n @if (params.node?.editing?.[params.columnDef?.field]) {\n <input class=\"one-cell-input\"\n name=\"{{ params.node?.rowIndex }}_{{ params.columnDef?.field }}\"\n oneCellInputValidator\n validationType=\"number\"\n [placeholder]=\"params.columnDef?.cellRendererParams?.placeholder || ''\"\n type=\"text\"\n [(ngModel)]=\"value\"\n [maxLength]=\"250\"\n (blur)=\"stopEdit(params.node, params.columnDef, $event)\"\n (keydown.enter)=\"stopEdit(params.node, params.columnDef, $event)\"\n (keydown.esc)=\"cancelEdit(params.node, params.columnDef)\" />\n }\n @else {\n <div class=\"d-flex justify-content-between px-2 pt-1\"\n [class.one-cell-allowed-edit-active]=\"isEditable\"\n (dblclick)=\"startEdit(params.node, params.columnDef)\">\n <span class=\"currency-code\" style=\"font-weight: bold;\">{{ this.params?.data?.currency?.currencyCode || 'USD' }}</span>\n <span class=\"amount-value\">\n {{ result | number:(this.params?.field === 'amount' ? '1.3-3' : '1.2-2') }}\n </span>\n </div>\n }\n</div>\n", styles: [".one-cell-input{position:absolute;top:0;left:0;width:calc(100% - 1px);height:100%;padding:0 6px;background-color:var(--one-grid-input-bg, var(--bs-input-bg, #fff));border:1px solid var(--one-grid-success, var(--bs-success, #198754));border-radius:var(--one-grid-action-btn-radius, 4px);z-index:5}.one-cell-input:focus{background:var(--one-grid-input-bg, var(--bs-input-bg, #fff));border:1px solid var(--one-grid-success, var(--bs-success, #198754))}:host{display:block;width:100%;height:100%;position:relative}.cell-wrapper{position:relative;width:100%;height:100%}.cell-wrapper.editable:before{content:\"\";position:absolute;top:4px;right:4px;width:4px;height:4px;background-color:var(--one-grid-success, var(--bs-success, #198754));border-radius:50%;z-index:1;opacity:.5;transition:opacity .2s ease}.cell-wrapper.editable:hover:before{opacity:1}\n"], dependencies: [{ kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.OneCellInputValidatorDirective, selector: "[oneCellInputValidator]", inputs: ["validationType", "regex"] }, { kind: "pipe", type: i5.DecimalPipe, name: "number" }] }); }
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellCurrencyComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ standalone: false, selector: 'app-one-grid-cell-currency', template: "<div class=\"cell-wrapper\"\n [class.editable]=\"isEditable\"\n [attr.data-cell-id]=\"getCellField(params.node?.rowIndex, params.columnDef?.field)\"\n [style.min-width.px]=\"params.columnDef?.minWidth\"\n [style.max-width.px]=\"params.columnDef?.maxWidth\">\n\n @if (params.node?.editing?.[params.columnDef?.field]) {\n <input class=\"one-cell-input\"\n name=\"{{ params.node?.rowIndex }}_{{ params.columnDef?.field }}\"\n oneCellInputValidator\n validationType=\"number\"\n [placeholder]=\"params.columnDef?.cellRendererParams?.placeholder || ''\"\n type=\"text\"\n [(ngModel)]=\"value\"\n [maxLength]=\"250\"\n (blur)=\"stopEdit(params.node, params.columnDef, $event)\"\n (keydown.enter)=\"stopEdit(params.node, params.columnDef, $event)\"\n (keydown.esc)=\"cancelEdit(params.node, params.columnDef)\" />\n }\n @else {\n <div class=\"d-flex justify-content-between px-2 pt-1\"\n [class.one-cell-allowed-edit-active]=\"isEditable\"\n (dblclick)=\"startEdit(params.node, params.columnDef)\">\n <span class=\"currency-code\" style=\"font-weight: bold;\">{{ this.params?.data?.currency?.currencyCode || 'USD' }}</span>\n <span class=\"amount-value\">\n {{ result | number:(this.params?.field === 'amount' ? '1.3-3' : '1.2-2') }}\n </span>\n </div>\n }\n</div>\n", styles: [".one-cell-input{position:absolute;top:0;left:0;width:calc(100% - 1px);height:100%;padding:0 6px;background-color:var(--one-grid-input-bg, var(--bs-input-bg, #fff));border:1px solid var(--one-grid-success, var(--bs-success, #198754));border-radius:var(--one-grid-action-btn-radius, 4px);z-index:5}.one-cell-input:focus{background:var(--one-grid-input-bg, var(--bs-input-bg, #fff));border:1px solid var(--one-grid-success, var(--bs-success, #198754))}:host{display:block;width:100%;height:100%;position:relative}.cell-wrapper{position:relative;width:100%;height:100%}.cell-wrapper.editable:before{content:\"\";position:absolute;top:4px;right:4px;width:4px;height:4px;background-color:var(--one-grid-success, var(--bs-success, #198754));border-radius:50%;z-index:1;opacity:.5;transition:opacity .2s ease}.cell-wrapper.editable:hover:before{opacity:1}\n"] }]
87
+ }], ctorParameters: () => [{ type: i1.OneGridCellService }, { type: i2.OneGridEventService }], propDecorators: { allowedEdit: [{
88
+ type: Input
89
+ }] } });
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC1jdXJyZW5jeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvbXBvbmVudHMvb25lLWdyaWQtY2VsbC1jdXJyZW5jeS9vbmUtZ3JpZC1jZWxsLWN1cnJlbmN5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jZWxsLWN1cnJlbmN5L29uZS1ncmlkLWNlbGwtY3VycmVuY3kuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0FBUXZFLE1BQU0sT0FBTyw0QkFBNEI7SUFXdkMsWUFDVSxXQUErQixFQUMvQixZQUFpQztRQURqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsaUJBQVksR0FBWixZQUFZLENBQXFCO1FBWDNDLFVBQUssR0FBVyxFQUFFLENBQUM7UUFHVixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUV0QyxpQkFBWSxHQUFHLFlBQVksQ0FBQztRQUVwQixxQkFBZ0IsR0FBRyxJQUFJLGdCQUFnQixFQUFFLENBQUM7SUFLOUMsQ0FBQztJQUVMLE9BQU8sQ0FBQyxNQUE2QjtRQUVuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxL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LEVBQUUsQ0FBQztZQUVULElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUVoRixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1lBRW5DLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLGtCQUFrQixFQUFFO2dCQUNsRCxJQUFJLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0JBQ3RCLElBQUksRUFBRSxJQUFJO2dCQUNWLE1BQU0sRUFBRSxNQUFNO2FBQ2YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVLENBQUMsSUFBcUIsRUFBRSxNQUF5QjtRQUV6RCxJQUFJLElBQUksRUFBRSxDQUFDO1lBRVQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUVULElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7K0dBaEhVLDRCQUE0QjttR0FBNUIsNEJBQTRCLDBHQ2Z6QywwNENBOEJBOzs0RkRmYSw0QkFBNEI7a0JBTnhDLFNBQVM7aUNBQ0ksS0FBSyxZQUNQLDRCQUE0Qjt5SEFTN0IsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENlbGxTdGF0ZUNoYW5nZWRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1ldmVudC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBPbmVDZWxsUmVuZGVyZXJQYXJhbXMsIE9uZUNvbHVtbkRlZiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IE9uZUdyaWRDZWxsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvb25lLWdyaWQtY2VsbC5zZXJ2aWNlJztcbmltcG9ydCB7IE9uZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgT25lUm93Tm9kZSB9IGZyb20gJy4uLy4uL2NvcmUvaW5zdGFudHMvb25lLXJvdy1ub2RlLmNsYXNzJztcbmltcG9ydCB7IGdldENlbGxGaWVsZCB9IGZyb20gJy4uLy4uL2hlbHBlcnMvb25lLWNlbGwuaGVscGVyJztcbmltcG9ydCB7IENlbGxFZGl0YWJsZVBpcGUgfSBmcm9tICcuLi8uLi9jb3JlL3BpcGVzL2NlbGwtZWRpdGFibGUucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgc2VsZWN0b3I6ICdhcHAtb25lLWdyaWQtY2VsbC1jdXJyZW5jeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9vbmUtZ3JpZC1jZWxsLWN1cnJlbmN5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29uZS1ncmlkLWNlbGwtY3VycmVuY3kuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDZWxsQ3VycmVuY3lDb21wb25lbnQge1xuICBcbiAgdmFsdWU6IHN0cmluZyA9ICcnO1xuICByZXN1bHQ6IGFueTtcbiAgcGFyYW1zITogT25lQ2VsbFJlbmRlcmVyUGFyYW1zO1xuICBASW5wdXQoKSBhbGxvd2VkRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGdldENlbGxGaWVsZCA9IGdldENlbGxGaWVsZDtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZT86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgY2VsbEVkaXRhYmxlUGlwZSA9IG5ldyBDZWxsRWRpdGFibGVQaXBlKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZWxsU2VydmljZTogT25lR3JpZENlbGxTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBPbmVHcmlkRXZlbnRTZXJ2aWNlXG4gICkgeyB9XG5cbiAgb25lSW5pdChwYXJhbXM6IE9uZUNlbGxSZW5kZXJlclBhcmFtcyk6IHZvaWQge1xuXG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy52YWx1ZSA9IHBhcmFtcy5kYXRhW3BhcmFtcy5jb2x1bW5EZWYuZmllbGRdO1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFsbG93ZWRFZGl0ID0gcGFyYW1zLmNvbnRleHQuY29tcG9uZW50UGFyZW50LmFsbG93ZWRFZGl0IHx8IGZhbHNlO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMuZXZlbnRTZXJ2aWNlLmFkZEV2ZW50TGlzdGVuZXIoJ2NlbGxTdGF0ZUNoYW5nZWQnLCAocGF5bG9hZDogQ2VsbFN0YXRlQ2hhbmdlZEV2ZW50PGFueT4pID0+IHtcbiAgICAgIGlmICh0aGlzLnBhcmFtcy5ub2RlLnJvd0lkID09PSBwYXlsb2FkLm5vZGUucm93SWQpIHtcblxuICAgICAgICB0aGlzLnJlc3VsdCA9IHRoaXMuY2VsbFNlcnZpY2UuZ2VuZXJhdGVDZWxsU3RhdGUodGhpcy5wYXJhbXMubm9kZSwgdGhpcy5wYXJhbXMuY29sdW1uRGVmKS52YWx1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlZnJlc2gocGFyYW1zOiBPbmVDZWxsUmVuZGVyZXJQYXJhbXMpOiBib29sZWFuIHtcbiAgICAvLyBVcGRhdGUgcGFyYW1zIGFuZCB2YWx1ZXMgd2hlbiBncmlkIGRhdGEgcmVmcmVzaGVzXG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gICAgdGhpcy52YWx1ZSA9IHBhcmFtcy5kYXRhW3BhcmFtcy5jb2x1bW5EZWYuZmllbGRdO1xuICAgIHRoaXMucmVzdWx0ID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFsbG93ZWRFZGl0ID0gcGFyYW1zLmNvbnRleHQuY29tcG9uZW50UGFyZW50LmFsbG93ZWRFZGl0IHx8IGZhbHNlO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBnZXQgaXNFZGl0YWJsZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMucGFyYW1zLm5vZGUgfHwgIXRoaXMucGFyYW1zLmNvbHVtbkRlZikgcmV0dXJuIGZhbHNlO1xuXG4gICAgcmV0dXJuIHRoaXMuY2VsbEVkaXRhYmxlUGlwZS50cmFuc2Zvcm0oXG4gICAgICB0aGlzLnBhcmFtcy5ub2RlLmNlbGxTdGF0ZXMsXG4gICAgICB0aGlzLnBhcmFtcy5jb2x1bW5EZWYsXG4gICAgICB0aGlzLnBhcmFtcy5ub2RlLFxuICAgICAgdGhpcy5jZWxsU2VydmljZS5lZGl0YWJsZUZuLFxuICAgICAgdGhpcy5jZWxsU2VydmljZS51cGRhdGFibGVGbixcbiAgICAgIHRoaXMuYWxsb3dlZEVkaXRcbiAgICApO1xuICB9XG5cbiAgc3RhcnRFZGl0KG5vZGU6IE9uZVJvd05vZGU8YW55PiwgY29sdW1uOiBPbmVDb2x1bW5EZWY8YW55Pikge1xuXG4gICAgaWYgKCF0aGlzLmlzRWRpdGFibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobm9kZSkge1xuXG4gICAgICBub2RlLmVkaXRpbmdbY29sdW1uLmZpZWxkXSA9IHRydWU7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihgW2RhdGEtY2VsbC1pZD1cIiR7Z2V0Q2VsbEZpZWxkKG5vZGUucm93SW5kZXgsIGNvbHVtbi5maWVsZCl9XCJdIGlucHV0YCk7XG5cbiAgICAgICAgaWYgKGlucHV0KSB7XG5cbiAgICAgICAgICBpbnB1dC5mb2N1cygpO1xuXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dC52YWx1ZTtcblxuICAgICAgICAgIGlmICh2YWx1ZSAmJiBbXCJ0ZXh0XCJdLmluY2x1ZGVzKGlucHV0LnR5cGUpKSB7XG5cbiAgICAgICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHZhbHVlLmxlbmd0aCwgdmFsdWUubGVuZ3RoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDEwKTtcbiAgICB9XG4gIH1cblxuICBzdG9wRWRpdChub2RlOiBPbmVSb3dOb2RlPGFueT4sIGNvbHVtbjogT25lQ29sdW1uRGVmPGFueT4sIGV2ZW50OiBhbnkpIHtcblxuICAgIGlmIChub2RlKSB7XG5cbiAgICAgIG5vZGUuZGF0YVtjb2x1bW4uZmllbGRdID0gZXZlbnQudGFyZ2V0LnZhbHVlID09PSAnJyA/IG51bGwgOiBldmVudC50YXJnZXQudmFsdWU7XG5cbiAgICAgIG5vZGUuY2VsbFN0YXRlcyA9IHRoaXMuY2VsbFNlcnZpY2UuZ2VuZXJhdGVDZWxsU3RhdGVzKG5vZGUpO1xuXG4gICAgICBub2RlLmVkaXRpbmdbY29sdW1uLmZpZWxkXSA9IGZhbHNlO1xuXG4gICAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCdjZWxsU3RhdGVDaGFuZ2VkJywge1xuICAgICAgICBkYXRhOiB7IC4uLm5vZGUuZGF0YSB9LFxuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICBjb2x1bW46IGNvbHVtblxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsRWRpdChub2RlOiBPbmVSb3dOb2RlPGFueT4sIGNvbHVtbjogT25lQ29sdW1uRGVmPGFueT4pIHtcblxuICAgIGlmIChub2RlKSB7XG5cbiAgICAgIG5vZGUuZWRpdGluZ1tjb2x1bW4uZmllbGRdID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG5cbiAgICB0aGlzLnVuc3Vic2NyaWJlPy4oKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNlbGwtd3JhcHBlclwiXG4gICAgIFtjbGFzcy5lZGl0YWJsZV09XCJpc0VkaXRhYmxlXCJcbiAgICAgW2F0dHIuZGF0YS1jZWxsLWlkXT1cImdldENlbGxGaWVsZChwYXJhbXMubm9kZT8ucm93SW5kZXgsIHBhcmFtcy5jb2x1bW5EZWY/LmZpZWxkKVwiXG4gICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwicGFyYW1zLmNvbHVtbkRlZj8ubWluV2lkdGhcIlxuICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cInBhcmFtcy5jb2x1bW5EZWY/Lm1heFdpZHRoXCI+XG5cbiAgICBAaWYgKHBhcmFtcy5ub2RlPy5lZGl0aW5nPy5bcGFyYW1zLmNvbHVtbkRlZj8uZmllbGRdKSB7XG4gICAgICA8aW5wdXQgY2xhc3M9XCJvbmUtY2VsbC1pbnB1dFwiXG4gICAgICAgIG5hbWU9XCJ7eyBwYXJhbXMubm9kZT8ucm93SW5kZXggfX1fe3sgcGFyYW1zLmNvbHVtbkRlZj8uZmllbGQgfX1cIlxuICAgICAgICBvbmVDZWxsSW5wdXRWYWxpZGF0b3JcbiAgICAgICAgdmFsaWRhdGlvblR5cGU9XCJudW1iZXJcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGFyYW1zLmNvbHVtbkRlZj8uY2VsbFJlbmRlcmVyUGFyYW1zPy5wbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZVwiXG4gICAgICAgIFttYXhMZW5ndGhdPVwiMjUwXCJcbiAgICAgICAgKGJsdXIpPVwic3RvcEVkaXQocGFyYW1zLm5vZGUsIHBhcmFtcy5jb2x1bW5EZWYsICRldmVudClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzdG9wRWRpdChwYXJhbXMubm9kZSwgcGFyYW1zLmNvbHVtbkRlZiwgJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLmVzYyk9XCJjYW5jZWxFZGl0KHBhcmFtcy5ub2RlLCBwYXJhbXMuY29sdW1uRGVmKVwiIC8+XG4gICAgfVxuICAgIEBlbHNlIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gcHgtMiBwdC0xXCJcbiAgICAgICAgW2NsYXNzLm9uZS1jZWxsLWFsbG93ZWQtZWRpdC1hY3RpdmVdPVwiaXNFZGl0YWJsZVwiXG4gICAgICAgIChkYmxjbGljayk9XCJzdGFydEVkaXQocGFyYW1zLm5vZGUsIHBhcmFtcy5jb2x1bW5EZWYpXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiY3VycmVuY3ktY29kZVwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+e3sgdGhpcy5wYXJhbXM/LmRhdGE/LmN1cnJlbmN5Py5jdXJyZW5jeUNvZGUgfHwgJ1VTRCcgfX08L3NwYW4+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYW1vdW50LXZhbHVlXCI+XG4gICAgICAgICAge3sgcmVzdWx0IHwgbnVtYmVyOih0aGlzLnBhcmFtcz8uZmllbGQgPT09ICdhbW91bnQnID8gJzEuMy0zJyA6ICcxLjItMicpIH19XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19
@@ -0,0 +1,31 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class OneGridCellGroupRendererComponent {
4
+ constructor() {
5
+ this.masterDetail = false;
6
+ this.expansionChanged = new EventEmitter();
7
+ }
8
+ invokeChangedClick() {
9
+ // if (this.masterDetail && !this.node.expanded) {
10
+ // this.detailCellRendererParams.getDetailRowData({ data: this.node.data, node: this.node, successCallback: (rows) => { this.node.setDetailRowData(rows) }});
11
+ // }
12
+ this.expansionChanged.emit({ rowIndex: this.node.rowIndex, data: this.node.data, node: this.node });
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellGroupRendererComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: OneGridCellGroupRendererComponent, selector: "one-grid-cell-group-renderer", inputs: { node: "node", masterDetail: "masterDetail", detailCellRendererParams: "detailCellRendererParams", detailRendererComponent: "detailRendererComponent" }, outputs: { expansionChanged: "expansionChanged" }, ngImport: i0, template: "@if (node.expandable) {\n <span class=\"cell-group-renderer\" [style.padding-left.px]=\"6\" (click)=\"invokeChangedClick()\">\n @if (node.children?.length > 0 || masterDetail) {\n <i [class.node-expanded]=\"node.expanded\" class=\"bi bi-chevron-right expansion-icon\"></i>\n }\n </span>\n}\n", styles: [""] }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellGroupRendererComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ standalone: false, selector: 'one-grid-cell-group-renderer', template: "@if (node.expandable) {\n <span class=\"cell-group-renderer\" [style.padding-left.px]=\"6\" (click)=\"invokeChangedClick()\">\n @if (node.children?.length > 0 || masterDetail) {\n <i [class.node-expanded]=\"node.expanded\" class=\"bi bi-chevron-right expansion-icon\"></i>\n }\n </span>\n}\n" }]
20
+ }], propDecorators: { node: [{
21
+ type: Input
22
+ }], masterDetail: [{
23
+ type: Input
24
+ }], detailCellRendererParams: [{
25
+ type: Input
26
+ }], detailRendererComponent: [{
27
+ type: Input
28
+ }], expansionChanged: [{
29
+ type: Output
30
+ }] } });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC1ncm91cC1yZW5kZXJlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvbXBvbmVudHMvb25lLWdyaWQtY2VsbC1ncm91cC1yZW5kZXJlci9vbmUtZ3JpZC1jZWxsLWdyb3VwLXJlbmRlcmVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jZWxsLWdyb3VwLXJlbmRlcmVyL29uZS1ncmlkLWNlbGwtZ3JvdXAtcmVuZGVyZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBUSxNQUFNLGVBQWUsQ0FBQzs7QUFZN0UsTUFBTSxPQUFPLGlDQUFpQztJQU45QztRQVNXLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRzdCLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO0tBVzNFO0lBVEMsa0JBQWtCO1FBRWhCLGtEQUFrRDtRQUVsRCwrSkFBK0o7UUFDL0osSUFBSTtRQUVKLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN0RyxDQUFDOytHQWhCVSxpQ0FBaUM7bUdBQWpDLGlDQUFpQyx5UkNaOUMsb1VBT0E7OzRGREthLGlDQUFpQztrQkFON0MsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsOEJBQThCOzhCQU0vQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNJLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPbmVSb3dOb2RlIH0gZnJvbSAnLi4vLi4vY29yZS9pbnN0YW50cy9vbmUtcm93LW5vZGUuY2xhc3MnO1xuaW1wb3J0IHsgRXhwYW5zaW9uQ2hhbmdlZEV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvb25lLWV2ZW50LXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IE9uZURldGFpbENlbGxSZW5kZXJlclBhcmFtcyB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1tYXN0ZXItZGV0YWlsLm1vZGVsJztcbmltcG9ydCB7IE9uZUNlbGxSZW5kZXJlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS10cmVlLWRhdGEubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHNlbGVjdG9yOiAnb25lLWdyaWQtY2VsbC1ncm91cC1yZW5kZXJlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vbmUtZ3JpZC1jZWxsLWdyb3VwLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29uZS1ncmlkLWNlbGwtZ3JvdXAtcmVuZGVyZXIuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDZWxsR3JvdXBSZW5kZXJlckNvbXBvbmVudDxUPiB7XG5cbiAgQElucHV0KCkgbm9kZTogT25lUm93Tm9kZTxUPjtcbiAgQElucHV0KCkgbWFzdGVyRGV0YWlsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRldGFpbENlbGxSZW5kZXJlclBhcmFtczogT25lRGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zO1xuICBASW5wdXQoKSBkZXRhaWxSZW5kZXJlckNvbXBvbmVudDogVHlwZTxPbmVDZWxsUmVuZGVyZXJDb21wb25lbnQ+O1xuICBAT3V0cHV0KCkgZXhwYW5zaW9uQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RXhwYW5zaW9uQ2hhbmdlZEV2ZW50PFQ+PigpO1xuXG4gIGludm9rZUNoYW5nZWRDbGljaygpIHtcblxuICAgIC8vIGlmICh0aGlzLm1hc3RlckRldGFpbCAmJiAhdGhpcy5ub2RlLmV4cGFuZGVkKSB7XG5cbiAgICAvLyAgIHRoaXMuZGV0YWlsQ2VsbFJlbmRlcmVyUGFyYW1zLmdldERldGFpbFJvd0RhdGEoeyBkYXRhOiB0aGlzLm5vZGUuZGF0YSwgbm9kZTogdGhpcy5ub2RlLCBzdWNjZXNzQ2FsbGJhY2s6IChyb3dzKSA9PiB7IHRoaXMubm9kZS5zZXREZXRhaWxSb3dEYXRhKHJvd3MpIH19KTtcbiAgICAvLyB9XG5cbiAgICB0aGlzLmV4cGFuc2lvbkNoYW5nZWQuZW1pdCh7IHJvd0luZGV4OiB0aGlzLm5vZGUucm93SW5kZXgsIGRhdGE6IHRoaXMubm9kZS5kYXRhLCBub2RlOiB0aGlzLm5vZGUgfSk7XG4gIH1cbn1cbiIsIkBpZiAobm9kZS5leHBhbmRhYmxlKSB7XG4gICAgPHNwYW4gY2xhc3M9XCJjZWxsLWdyb3VwLXJlbmRlcmVyXCIgW3N0eWxlLnBhZGRpbmctbGVmdC5weF09XCI2XCIgKGNsaWNrKT1cImludm9rZUNoYW5nZWRDbGljaygpXCI+XG4gICAgICAgIEBpZiAobm9kZS5jaGlsZHJlbj8ubGVuZ3RoID4gMCB8fCBtYXN0ZXJEZXRhaWwpIHtcbiAgICAgICAgICAgIDxpIFtjbGFzcy5ub2RlLWV4cGFuZGVkXT1cIm5vZGUuZXhwYW5kZWRcIiBjbGFzcz1cImJpIGJpLWNoZXZyb24tcmlnaHQgZXhwYW5zaW9uLWljb25cIj48L2k+XG4gICAgICAgIH1cbiAgICA8L3NwYW4+XG59XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class OneGridCellOptionMenuComponent {
4
+ constructor(elementRef) {
5
+ this.elementRef = elementRef;
6
+ this.column = null;
7
+ this.node = null;
8
+ this.options = [];
9
+ this.cellOptionMenuSelect = new EventEmitter();
10
+ this.cellOptionMenuClose = new EventEmitter();
11
+ }
12
+ // Click outside
13
+ onDocumentClick(event) {
14
+ const target = event.target;
15
+ if (!this.elementRef.nativeElement.contains(target)) {
16
+ this.close();
17
+ }
18
+ }
19
+ // Escape key
20
+ onEscape() {
21
+ this.close();
22
+ }
23
+ // Scroll closes menu (prevents misalignment)
24
+ onScroll() {
25
+ this.close();
26
+ }
27
+ // Option selected
28
+ onOptionSelected(option) {
29
+ this.cellOptionMenuSelect.emit({
30
+ column: this.column,
31
+ node: this.node,
32
+ option: option
33
+ });
34
+ this.close();
35
+ }
36
+ // Single close method
37
+ close() {
38
+ this.node.cellOptions[this.column.field] = false;
39
+ this.cellOptionMenuClose.emit();
40
+ }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellOptionMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: OneGridCellOptionMenuComponent, selector: "one-grid-cell-option-menu", inputs: { column: "column", node: "node", options: "options" }, outputs: { cellOptionMenuSelect: "cellOptionMenuSelect", cellOptionMenuClose: "cellOptionMenuClose" }, host: { listeners: { "document:click": "onDocumentClick($event)", "document:keydown.escape": "onEscape()", "document:scroll": "onScroll()" } }, ngImport: i0, template: "<div class=\"cell-option-menu\" #menuEl>\n @for (opt of options; track opt.value) {\n <div class=\"cell-option-menu-item\" (click)=\"onOptionSelected(opt)\">\n <!-- <span [style.padding-right.px]=\"8\"><lucide-icon name=\"check\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon></span> -->\n <span>{{ opt.text }}</span> \n </div>\n }\n</div>", styles: [""] }); }
43
+ }
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCellOptionMenuComponent, decorators: [{
45
+ type: Component,
46
+ args: [{ selector: 'one-grid-cell-option-menu', standalone: false, template: "<div class=\"cell-option-menu\" #menuEl>\n @for (opt of options; track opt.value) {\n <div class=\"cell-option-menu-item\" (click)=\"onOptionSelected(opt)\">\n <!-- <span [style.padding-right.px]=\"8\"><lucide-icon name=\"check\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon></span> -->\n <span>{{ opt.text }}</span> \n </div>\n }\n</div>" }]
47
+ }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { column: [{
48
+ type: Input
49
+ }], node: [{
50
+ type: Input
51
+ }], options: [{
52
+ type: Input
53
+ }], cellOptionMenuSelect: [{
54
+ type: Output
55
+ }], cellOptionMenuClose: [{
56
+ type: Output
57
+ }], onDocumentClick: [{
58
+ type: HostListener,
59
+ args: ['document:click', ['$event']]
60
+ }], onEscape: [{
61
+ type: HostListener,
62
+ args: ['document:keydown.escape']
63
+ }], onScroll: [{
64
+ type: HostListener,
65
+ args: ['document:scroll']
66
+ }] } });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2VsbC1vcHRpb24tbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbmUtZ3JpZC9zcmMvbGliL2NvbXBvbmVudHMvb25lLWdyaWQtY2VsbC1vcHRpb24tbWVudS9vbmUtZ3JpZC1jZWxsLW9wdGlvbi1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jZWxsLW9wdGlvbi1tZW51L29uZS1ncmlkLWNlbGwtb3B0aW9uLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7O0FBVzVHLE1BQU0sT0FBTyw4QkFBOEI7SUFRekMsWUFBb0IsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQU5qQyxXQUFNLEdBQWlCLElBQUksQ0FBQztRQUM1QixTQUFJLEdBQWUsSUFBSSxDQUFDO1FBQ3hCLFlBQU8sR0FBd0IsRUFBRSxDQUFDO1FBQ2pDLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBQ3ZFLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFWixDQUFDO0lBRTlDLGdCQUFnQjtJQUVoQixlQUFlLENBQUMsS0FBaUI7UUFFL0IsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQXFCLENBQUM7UUFFM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBRXBELElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtJQUViLFFBQVE7UUFFTixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsNkNBQTZDO0lBRTdDLFFBQVE7UUFFTixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsa0JBQWtCO0lBQ2xCLGdCQUFnQixDQUFDLE1BQVc7UUFFMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQztZQUM3QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQsc0JBQXNCO0lBQ2QsS0FBSztRQUVYLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNsQyxDQUFDOytHQXBEVSw4QkFBOEI7bUdBQTlCLDhCQUE4Qix3WENYM0MsaVlBT007OzRGRElPLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDRSwyQkFBMkIsY0FDekIsS0FBSzsrRUFNUixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQU1QLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFhMUMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFRdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lUm93Tm9kZSB9IGZyb20gJy4uLy4uL2NvcmUvaW5zdGFudHMvb25lLXJvdy1ub2RlLmNsYXNzJztcbmltcG9ydCB7IE9uZUNvbHVtbkRlZiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IENlbGxPcHRpb25NZW51U2VsZWN0ZWRFdmVudCwgT25lQ2VsbE9wdGlvbk1lbnUgfSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtZXZlbnQtdHlwZXMubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvbmUtZ3JpZC1jZWxsLW9wdGlvbi1tZW51JyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi9vbmUtZ3JpZC1jZWxsLW9wdGlvbi1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29uZS1ncmlkLWNlbGwtb3B0aW9uLW1lbnUuY29tcG9uZW50LnNjc3MnLFxufSlcbmV4cG9ydCBjbGFzcyBPbmVHcmlkQ2VsbE9wdGlvbk1lbnVDb21wb25lbnQge1xuXG4gIEBJbnB1dCgpIGNvbHVtbjogT25lQ29sdW1uRGVmID0gbnVsbDtcbiAgQElucHV0KCkgbm9kZTogT25lUm93Tm9kZSA9IG51bGw7XG4gIEBJbnB1dCgpIG9wdGlvbnM6IE9uZUNlbGxPcHRpb25NZW51W10gPSBbXTtcbiAgQE91dHB1dCgpIGNlbGxPcHRpb25NZW51U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsT3B0aW9uTWVudVNlbGVjdGVkRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjZWxsT3B0aW9uTWVudUNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAvLyBDbGljayBvdXRzaWRlXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoIXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcblxuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEVzY2FwZSBrZXlcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZSgpIHtcblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8vIFNjcm9sbCBjbG9zZXMgbWVudSAocHJldmVudHMgbWlzYWxpZ25tZW50KVxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpzY3JvbGwnKVxuICBvblNjcm9sbCgpIHtcblxuICAgIHRoaXMuY2xvc2UoKTtcbiAgfVxuXG4gIC8vIE9wdGlvbiBzZWxlY3RlZFxuICBvbk9wdGlvblNlbGVjdGVkKG9wdGlvbjogYW55KSB7XG5cbiAgICB0aGlzLmNlbGxPcHRpb25NZW51U2VsZWN0LmVtaXQoe1xuICAgICAgY29sdW1uOiB0aGlzLmNvbHVtbixcbiAgICAgIG5vZGU6IHRoaXMubm9kZSxcbiAgICAgIG9wdGlvbjogb3B0aW9uXG4gICAgfSk7XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgLy8gU2luZ2xlIGNsb3NlIG1ldGhvZFxuICBwcml2YXRlIGNsb3NlKCkge1xuXG4gICAgdGhpcy5ub2RlLmNlbGxPcHRpb25zW3RoaXMuY29sdW1uLmZpZWxkXSA9IGZhbHNlO1xuICAgIHRoaXMuY2VsbE9wdGlvbk1lbnVDbG9zZS5lbWl0KCk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjZWxsLW9wdGlvbi1tZW51XCIgI21lbnVFbD5cbiAgICBAZm9yIChvcHQgb2Ygb3B0aW9uczsgdHJhY2sgb3B0LnZhbHVlKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjZWxsLW9wdGlvbi1tZW51LWl0ZW1cIiAoY2xpY2spPVwib25PcHRpb25TZWxlY3RlZChvcHQpXCI+XG4gICAgICAgICAgICA8IS0tIDxzcGFuIFtzdHlsZS5wYWRkaW5nLXJpZ2h0LnB4XT1cIjhcIj48bHVjaWRlLWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTZcIiBbc3Ryb2tlV2lkdGhdPVwiMlwiPjwvbHVjaWRlLWljb24+PC9zcGFuPiAtLT5cbiAgICAgICAgICAgIDxzcGFuPnt7IG9wdC50ZXh0IH19PC9zcGFuPiBcbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+Il19
@@ -0,0 +1,47 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../core/services/one-grid-selection.service";
4
+ import * as i2 from "../../core/services/one-grid-event.service";
5
+ export class OneGridCheckboxComponent {
6
+ constructor(selectionService, eventService) {
7
+ this.selectionService = selectionService;
8
+ this.eventService = eventService;
9
+ this.allowedEdit = false;
10
+ this.onRowSelection = new EventEmitter();
11
+ }
12
+ onToggleSelection(event) {
13
+ const isChecked = event.target.checked;
14
+ const { rowId, rowIndex, data } = this.node;
15
+ const selectionMode = this.selectionService.getSelectionMode();
16
+ if (selectionMode === 'single') {
17
+ this.api.deselectAll();
18
+ if (isChecked) {
19
+ this.node.setSelected(true);
20
+ }
21
+ this.api.toggleSelection(rowId, isChecked);
22
+ }
23
+ else {
24
+ // Multi-select mode
25
+ this.selectionService.toggleSelection(rowId, isChecked);
26
+ this.node.setSelected(isChecked);
27
+ }
28
+ this.node.cellStates = { ...this.node.cellStates };
29
+ this.eventService.dispatchEvent('selectionChanged', { rowIndex, selected: isChecked, data, node: this.node });
30
+ this.onRowSelection.emit({ rowIndex, selected: isChecked, data, node: this.node });
31
+ }
32
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCheckboxComponent, deps: [{ token: i1.OneGridSelectionService }, { token: i2.OneGridEventService }], target: i0.ɵɵFactoryTarget.Component }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: OneGridCheckboxComponent, selector: "one-grid-checkbox", inputs: { node: "node", allowedEdit: "allowedEdit", api: "api" }, outputs: { onRowSelection: "onRowSelection" }, ngImport: i0, template: "\n<div class=\"one-grid-checkbox\">\n <input type=\"checkbox\"\n [name]=\"node.rowId\"\n [class.disabled]=\"!(allowedEdit)\"\n [checked]=\"node.selected\"\n (change)=\"onToggleSelection($event)\"/>\n</div>", styles: [""] }); }
34
+ }
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCheckboxComponent, decorators: [{
36
+ type: Component,
37
+ args: [{ standalone: false, selector: 'one-grid-checkbox', template: "\n<div class=\"one-grid-checkbox\">\n <input type=\"checkbox\"\n [name]=\"node.rowId\"\n [class.disabled]=\"!(allowedEdit)\"\n [checked]=\"node.selected\"\n (change)=\"onToggleSelection($event)\"/>\n</div>" }]
38
+ }], ctorParameters: () => [{ type: i1.OneGridSelectionService }, { type: i2.OneGridEventService }], propDecorators: { node: [{
39
+ type: Input
40
+ }], allowedEdit: [{
41
+ type: Input
42
+ }], api: [{
43
+ type: Input
44
+ }], onRowSelection: [{
45
+ type: Output
46
+ }] } });
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2hlY2tib3guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb25lLWdyaWQvc3JjL2xpYi9jb21wb25lbnRzL29uZS1ncmlkLWNoZWNrYm94L29uZS1ncmlkLWNoZWNrYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jaGVja2JveC9vbmUtZ3JpZC1jaGVja2JveC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBYXZFLE1BQU0sT0FBTyx3QkFBd0I7SUFPbkMsWUFDVSxnQkFBeUMsRUFDekMsWUFBaUM7UUFEakMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUF5QjtRQUN6QyxpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFObEMsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFNUIsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBNEIsQ0FBQztJQUtyRSxDQUFDO0lBRUosaUJBQWlCLENBQUMsS0FBVTtRQUUxQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUN2QyxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzVDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRS9ELElBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBRS9CLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFdkIsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFFZCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRTdDLENBQUM7YUFBTSxDQUFDO1lBRU4sb0JBQW9CO1lBQ3BCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBRXhELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUVuRCxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFOUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7K0dBMUNVLHdCQUF3QjttR0FBeEIsd0JBQXdCLDBLQ2JyQyw4T0FPTTs7NEZETU8sd0JBQXdCO2tCQU5wQyxTQUFTO2lDQUNJLEtBQUssWUFDUCxtQkFBbUI7OEhBTXBCLElBQUk7c0JBQVosS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9uZVJvd05vZGUgfSBmcm9tICcuLi8uLi9jb3JlL2luc3RhbnRzL29uZS1yb3ctbm9kZS5jbGFzcyc7XG5pbXBvcnQgeyBPbmVHcmlkU2VsZWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvb25lLWdyaWQtc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgT25lR3JpZEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2VydmljZXMvb25lLWdyaWQtZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBPbmVHcmlkQXBpIH0gZnJvbSAnLi4vLi4vY29yZS9pbnN0YW50cy9vbmUtZ3JpZC1hcGkuY2xhc3MnO1xuaW1wb3J0IHsgT25lR3JpZFJvd0FjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvb25lLWdyaWQtdHlwZXMubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHNlbGVjdG9yOiAnb25lLWdyaWQtY2hlY2tib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vb25lLWdyaWQtY2hlY2tib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vb25lLWdyaWQtY2hlY2tib3guY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDaGVja2JveENvbXBvbmVudDxUPiB7XG5cbiAgQElucHV0KCkgbm9kZTogT25lUm93Tm9kZTxUPjtcbiAgQElucHV0KCkgYWxsb3dlZEVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXBpITogT25lR3JpZEFwaTxUPjtcbiAgQE91dHB1dCgpIG9uUm93U2VsZWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxPbmVHcmlkUm93QWN0aW9uRXZlbnQ8VD4+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlOiBPbmVHcmlkU2VsZWN0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogT25lR3JpZEV2ZW50U2VydmljZVxuICApIHt9XG5cbiAgb25Ub2dnbGVTZWxlY3Rpb24oZXZlbnQ6IGFueSkge1xuXG4gICAgY29uc3QgaXNDaGVja2VkID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG4gICAgY29uc3QgeyByb3dJZCwgcm93SW5kZXgsIGRhdGEgfSA9IHRoaXMubm9kZTtcbiAgICBjb25zdCBzZWxlY3Rpb25Nb2RlID0gdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGlvbk1vZGUoKTtcblxuICAgIGlmIChzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgXG4gICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xuXG4gICAgICBpZiAoaXNDaGVja2VkKSB7XG5cbiAgICAgICAgdGhpcy5ub2RlLnNldFNlbGVjdGVkKHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFwaS50b2dnbGVTZWxlY3Rpb24ocm93SWQsIGlzQ2hlY2tlZCk7XG5cbiAgICB9IGVsc2Uge1xuXG4gICAgICAvLyBNdWx0aS1zZWxlY3QgbW9kZVxuICAgICAgdGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnRvZ2dsZVNlbGVjdGlvbihyb3dJZCwgaXNDaGVja2VkKTtcblxuICAgICAgdGhpcy5ub2RlLnNldFNlbGVjdGVkKGlzQ2hlY2tlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlLmNlbGxTdGF0ZXMgPSB7IC4uLnRoaXMubm9kZS5jZWxsU3RhdGVzIH07XG5cbiAgICB0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCdzZWxlY3Rpb25DaGFuZ2VkJywgeyByb3dJbmRleCwgc2VsZWN0ZWQ6IGlzQ2hlY2tlZCwgZGF0YSwgbm9kZTogdGhpcy5ub2RlIH0pO1xuXG4gICAgdGhpcy5vblJvd1NlbGVjdGlvbi5lbWl0KHsgcm93SW5kZXgsIHNlbGVjdGVkOiBpc0NoZWNrZWQsIGRhdGEsIG5vZGU6IHRoaXMubm9kZSB9KTtcbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwib25lLWdyaWQtY2hlY2tib3hcIj5cbiAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgW25hbWVdPVwibm9kZS5yb3dJZFwiXG4gICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIhKGFsbG93ZWRFZGl0KVwiXG4gICAgICAgIFtjaGVja2VkXT1cIm5vZGUuc2VsZWN0ZWRcIlxuICAgICAgICAoY2hhbmdlKT1cIm9uVG9nZ2xlU2VsZWN0aW9uKCRldmVudClcIi8+XG48L2Rpdj4iXX0=
@@ -0,0 +1,62 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "../../core/services/one-grid-event.service";
4
+ import * as i2 from "../../core/services/one-grid-selection.service";
5
+ import * as i3 from "../../core/pipes/header-checkbox-disabled.pipe";
6
+ import * as i4 from "../../core/pipes/header-checkbox-checked.pipe";
7
+ import * as i5 from "../../core/pipes/header-checkbox-indeterminate.pipe";
8
+ export class OneGridCheckboxHeaderComponent {
9
+ constructor(eventService, selectionService) {
10
+ this.eventService = eventService;
11
+ this.selectionService = selectionService;
12
+ this.allowedEdit = false;
13
+ this.state = 'unchecked';
14
+ this.rowNodes = [];
15
+ }
16
+ ngOnInit() {
17
+ this.selectionMode = this.api.rowSelection;
18
+ /**
19
+ * Listen Row Node Selection Changed Event
20
+ */
21
+ this.eventService.addEventListener('selectionChanged', (payload) => {
22
+ this.rowNodes = this.api.getAllRowNodes();
23
+ const rowIds = this.rowNodes && this.rowNodes.length > 0 ? this.rowNodes.map((node) => node.rowId) : [];
24
+ this.state = this.selectionService.getSelectAllState(rowIds);
25
+ });
26
+ /**
27
+ * Listen Row Data Changed Event
28
+ */
29
+ this.eventService.addEventListener('rowDataChanged', (payload) => {
30
+ this.rowNodes = this.api.getAllRowNodes();
31
+ const rowIds = this.rowNodes && this.rowNodes.length > 0 ? this.rowNodes.map((node) => node.rowId) : [];
32
+ this.state = this.selectionService.getSelectAllState(rowIds);
33
+ });
34
+ }
35
+ /**
36
+ * Toggle Selection Action
37
+ */
38
+ toggleSelectionAll(event) {
39
+ if (this.selectionMode === 'single')
40
+ return;
41
+ const checked = event.target.checked;
42
+ if (this.rowNodes && this.rowNodes.length > 0) {
43
+ if (checked) {
44
+ this.api.selectAll();
45
+ }
46
+ else {
47
+ this.api.deselectAll();
48
+ }
49
+ }
50
+ }
51
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCheckboxHeaderComponent, deps: [{ token: i1.OneGridEventService }, { token: i2.OneGridSelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
52
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: OneGridCheckboxHeaderComponent, selector: "one-grid-checkbox-header", inputs: { api: "api", allowedEdit: "allowedEdit" }, ngImport: i0, template: "<div class=\"one-grid-checkbox\">\n <input\n [id]=\"api.id\"\n [type]=\"'checkbox'\"\n [class.disabled]=\"rowNodes | headerCheckboxDisabled:selectionMode:allowedEdit\"\n [checked]=\"rowNodes | headerCheckboxChecked:selectionMode:state\"\n [indeterminate]=\"rowNodes | headerCheckboxIndeterminate:selectionMode:state\"\n (change)=\"toggleSelectionAll($event)\" />\n</div>", styles: [""], dependencies: [{ kind: "pipe", type: i3.HeaderCheckboxDisabledPipe, name: "headerCheckboxDisabled" }, { kind: "pipe", type: i4.HeaderCheckboxCheckedPipe, name: "headerCheckboxChecked" }, { kind: "pipe", type: i5.HeaderCheckboxIndeterminatePipe, name: "headerCheckboxIndeterminate" }] }); }
53
+ }
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridCheckboxHeaderComponent, decorators: [{
55
+ type: Component,
56
+ args: [{ standalone: false, selector: 'one-grid-checkbox-header', template: "<div class=\"one-grid-checkbox\">\n <input\n [id]=\"api.id\"\n [type]=\"'checkbox'\"\n [class.disabled]=\"rowNodes | headerCheckboxDisabled:selectionMode:allowedEdit\"\n [checked]=\"rowNodes | headerCheckboxChecked:selectionMode:state\"\n [indeterminate]=\"rowNodes | headerCheckboxIndeterminate:selectionMode:state\"\n (change)=\"toggleSelectionAll($event)\" />\n</div>" }]
57
+ }], ctorParameters: () => [{ type: i1.OneGridEventService }, { type: i2.OneGridSelectionService }], propDecorators: { api: [{
58
+ type: Input
59
+ }], allowedEdit: [{
60
+ type: Input
61
+ }] } });
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtY2hlY2tib3gtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jaGVja2JveC1oZWFkZXIvb25lLWdyaWQtY2hlY2tib3gtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1jaGVja2JveC1oZWFkZXIvb25lLWdyaWQtY2hlY2tib3gtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7Ozs7O0FBaUJ6RCxNQUFNLE9BQU8sOEJBQThCO0lBU3pDLFlBQ1UsWUFBaUMsRUFDakMsZ0JBQXlDO1FBRHpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNqQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQXlCO1FBUjFDLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBRS9CLFVBQUssR0FBcUIsV0FBVyxDQUFDO1FBQ3RDLGFBQVEsR0FBb0IsRUFBRSxDQUFDO0lBTWxDLENBQUM7SUFFTCxRQUFRO1FBRU4sSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUUzQzs7V0FFRztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxPQUFpQyxFQUFFLEVBQUU7WUFFM0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBRTFDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQW1CLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBRXZILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9ELENBQUMsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBK0IsRUFBRSxFQUFFO1lBRXZGLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUUxQyxNQUFNLE1BQU0sR0FBYSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFtQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVqSSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNILGtCQUFrQixDQUFDLEtBQVU7UUFFM0IsSUFBSSxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBRTVDLE1BQU0sT0FBTyxHQUFZLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBRTlDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUU5QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUVaLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLENBQUM7WUFFdkIsQ0FBQztpQkFBTSxDQUFDO2dCQUVOLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDOytHQS9EVSw4QkFBOEI7bUdBQTlCLDhCQUE4QixvSENqQjNDLGlhQVFNOzs0RkRTTyw4QkFBOEI7a0JBTjFDLFNBQVM7aUNBQ0ksS0FBSyxZQUNQLDBCQUEwQjs4SEFNM0IsR0FBRztzQkFBWCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9uZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9vbmUtZ3JpZC1zZWxlY3Rpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPbmVSb3dOb2RlIH0gZnJvbSAnLi4vLi4vY29yZS9pbnN0YW50cy9vbmUtcm93LW5vZGUuY2xhc3MnO1xuaW1wb3J0IHsgT25lR3JpZEFwaSB9IGZyb20gJy4uLy4uL2NvcmUvaW5zdGFudHMvb25lLWdyaWQtYXBpLmNsYXNzJztcbmltcG9ydCB7IE9uZUdyaWRFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL29uZS1ncmlkLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgT25lQ2hlY2tib3hTdGF0ZSwgUm93RGF0YUNoYW5nZWRFdmVudCxcbiAgUm93U2VsZWN0aW9uTW9kZSxcbiAgU2VsZWN0aW9uQ2hhbmdlZEV2ZW50LFxufSBmcm9tICcuLi8uLi9jb3JlL21vZGVscy9vbmUtZXZlbnQtdHlwZXMubW9kZWwnXG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiBmYWxzZSxcbiAgc2VsZWN0b3I6ICdvbmUtZ3JpZC1jaGVja2JveC1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vb25lLWdyaWQtY2hlY2tib3gtaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL29uZS1ncmlkLWNoZWNrYm94LWhlYWRlci5jb21wb25lbnQuc2NzcycsXG59KVxuZXhwb3J0IGNsYXNzIE9uZUdyaWRDaGVja2JveEhlYWRlckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQElucHV0KCkgYXBpITogT25lR3JpZEFwaTxUPjtcbiAgQElucHV0KCkgYWxsb3dlZEVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgc3RhdGU6IE9uZUNoZWNrYm94U3RhdGUgPSAndW5jaGVja2VkJztcbiAgcHVibGljIHJvd05vZGVzOiBPbmVSb3dOb2RlPFQ+W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGlvbk1vZGU6IFJvd1NlbGVjdGlvbk1vZGU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IE9uZUdyaWRFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZWxlY3Rpb25TZXJ2aWNlOiBPbmVHcmlkU2VsZWN0aW9uU2VydmljZVxuICApIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuXG4gICAgdGhpcy5zZWxlY3Rpb25Nb2RlID0gdGhpcy5hcGkucm93U2VsZWN0aW9uO1xuXG4gICAgLyoqXG4gICAgICogTGlzdGVuIFJvdyBOb2RlIFNlbGVjdGlvbiBDaGFuZ2VkIEV2ZW50XG4gICAgICovXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uQ2hhbmdlZCcsIChwYXlsb2FkOiBTZWxlY3Rpb25DaGFuZ2VkRXZlbnQ8VD4pID0+IHtcblxuICAgICAgdGhpcy5yb3dOb2RlcyA9IHRoaXMuYXBpLmdldEFsbFJvd05vZGVzKCk7XG5cbiAgICAgIGNvbnN0IHJvd0lkcyA9IHRoaXMucm93Tm9kZXMgJiYgdGhpcy5yb3dOb2Rlcy5sZW5ndGggPiAwID8gdGhpcy5yb3dOb2Rlcy5tYXAoKG5vZGU6IE9uZVJvd05vZGU8VD4pID0+IG5vZGUucm93SWQpIDogW107XG5cbiAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0U2VsZWN0QWxsU3RhdGUocm93SWRzKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIExpc3RlbiBSb3cgRGF0YSBDaGFuZ2VkIEV2ZW50XG4gICAgICovXG4gICAgdGhpcy5ldmVudFNlcnZpY2UuYWRkRXZlbnRMaXN0ZW5lcigncm93RGF0YUNoYW5nZWQnLCAocGF5bG9hZDogUm93RGF0YUNoYW5nZWRFdmVudDxUPikgPT4ge1xuXG4gICAgICB0aGlzLnJvd05vZGVzID0gdGhpcy5hcGkuZ2V0QWxsUm93Tm9kZXMoKTtcblxuICAgICAgY29uc3Qgcm93SWRzOiBzdHJpbmdbXSA9IHRoaXMucm93Tm9kZXMgJiYgdGhpcy5yb3dOb2Rlcy5sZW5ndGggPiAwID8gdGhpcy5yb3dOb2Rlcy5tYXAoKG5vZGU6IE9uZVJvd05vZGU8VD4pID0+IG5vZGUucm93SWQpIDogW107XG5cbiAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnNlbGVjdGlvblNlcnZpY2UuZ2V0U2VsZWN0QWxsU3RhdGUocm93SWRzKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgU2VsZWN0aW9uIEFjdGlvblxuICAgKi9cbiAgdG9nZ2xlU2VsZWN0aW9uQWxsKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnKSByZXR1cm47XG5cbiAgICBjb25zdCBjaGVja2VkOiBib29sZWFuID0gZXZlbnQudGFyZ2V0LmNoZWNrZWQ7XG5cbiAgICBpZiAodGhpcy5yb3dOb2RlcyAmJiB0aGlzLnJvd05vZGVzLmxlbmd0aCA+IDApIHtcblxuICAgICAgaWYgKGNoZWNrZWQpIHtcblxuICAgICAgICB0aGlzLmFwaS5zZWxlY3RBbGwoKTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLmFwaS5kZXNlbGVjdEFsbCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9uZS1ncmlkLWNoZWNrYm94XCI+XG4gICAgPGlucHV0XG4gICAgICAgIFtpZF09XCJhcGkuaWRcIlxuICAgICAgICBbdHlwZV09XCInY2hlY2tib3gnXCJcbiAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cInJvd05vZGVzIHwgaGVhZGVyQ2hlY2tib3hEaXNhYmxlZDpzZWxlY3Rpb25Nb2RlOmFsbG93ZWRFZGl0XCJcbiAgICAgICAgW2NoZWNrZWRdPVwicm93Tm9kZXMgfCBoZWFkZXJDaGVja2JveENoZWNrZWQ6c2VsZWN0aW9uTW9kZTpzdGF0ZVwiXG4gICAgICAgIFtpbmRldGVybWluYXRlXT1cInJvd05vZGVzIHwgaGVhZGVyQ2hlY2tib3hJbmRldGVybWluYXRlOnNlbGVjdGlvbk1vZGU6c3RhdGVcIlxuICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdGlvbkFsbCgkZXZlbnQpXCIgLz5cbjwvZGl2PiJdfQ==
@@ -0,0 +1,140 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { Subject, Subscription } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "../../core/services/one-grid-event.service";
5
+ import * as i2 from "@angular/common";
6
+ import * as i3 from "lucide-angular";
7
+ import * as i4 from "../one-grid-checkbox-header/one-grid-checkbox-header.component";
8
+ import * as i5 from "../../core/pipes/column-sort-state.pipe";
9
+ export class OneGridHeaderComponent {
10
+ constructor(eventService, cdr) {
11
+ this.eventService = eventService;
12
+ this.cdr = cdr;
13
+ this.scrollLeft = 0;
14
+ this.allowedEdit = false;
15
+ this.enableGroupColumnDefs = false;
16
+ this.groupColumnDefs = [];
17
+ this.columnDefs = [];
18
+ this.sortModel = [];
19
+ this.destroy$ = new Subject();
20
+ this.subscriptions = new Subscription();
21
+ this.draggedIndex = null;
22
+ // Track resize state
23
+ this.resizing = false;
24
+ this.resizeColumnIndex = null;
25
+ this.startX = 0;
26
+ this.startWidth = 0;
27
+ // Arrow function to preserve 'this' context
28
+ this.onResizeMove = (event) => {
29
+ if (!this.resizing || this.resizeColumnIndex === null)
30
+ return;
31
+ // Calculate how far the mouse has moved
32
+ const deltaX = event.clientX - this.startX;
33
+ // Calculate new width (with minimum of 50px)
34
+ const newWidth = Math.max(50, this.startWidth + deltaX);
35
+ // Update the column width
36
+ this.api.updateColumn(this.columnDefs[this.resizeColumnIndex].id, { width: newWidth });
37
+ };
38
+ this.onResizeEnd = () => {
39
+ // Clean up
40
+ this.resizing = false;
41
+ this.resizeColumnIndex = null;
42
+ document.body.style.cursor = '';
43
+ // Remove document listeners
44
+ document.removeEventListener('mousemove', this.onResizeMove);
45
+ document.removeEventListener('mouseup', this.onResizeEnd);
46
+ };
47
+ }
48
+ ngOnInit() {
49
+ // Listen Column Changed Event
50
+ this.subscriptions.add(this.eventService.addEventListener('columnChanged', (payload) => {
51
+ const { groups, columns } = payload;
52
+ if (groups) {
53
+ this.groupColumnDefs = groups;
54
+ }
55
+ if (columns) {
56
+ this.columnDefs = columns;
57
+ }
58
+ // this.cdr.markForCheck();
59
+ }));
60
+ }
61
+ onHeaderMenuOptionClick(columnDef) {
62
+ }
63
+ onHeaderMenuSortClick(colId) {
64
+ const currentSort = this.sortModel.find(sort => sort.colId === colId)?.sort ?? null;
65
+ const nextSort = this.cycleSort(currentSort);
66
+ this.sortModel = nextSort ? [{ colId, sort: nextSort }] : [];
67
+ this.api.onSortChanged(this.sortModel);
68
+ }
69
+ // Cycle Sorting Model
70
+ cycleSort(current) {
71
+ switch (current) {
72
+ case null: return 'asc';
73
+ case 'asc': return 'desc';
74
+ case 'desc': return null;
75
+ default: return null;
76
+ }
77
+ }
78
+ onResizeStart(event, columnIndex) {
79
+ // Prevent text selection and default behavior
80
+ event.preventDefault();
81
+ event.stopPropagation();
82
+ // Store initial values
83
+ this.resizing = true;
84
+ this.resizeColumnIndex = columnIndex;
85
+ this.startX = event.clientX;
86
+ this.startWidth = this.columnDefs[columnIndex].width;
87
+ // Add document-level listeners for drag and release
88
+ document.addEventListener('mousemove', this.onResizeMove);
89
+ document.addEventListener('mouseup', this.onResizeEnd);
90
+ // Add a class to body to maintain cursor during drag
91
+ document.body.style.cursor = 'col-resize';
92
+ }
93
+ // Track the dragged column index
94
+ onDragColumnStart(event, index) {
95
+ this.draggedIndex = index;
96
+ // Optional: Set drag image/effect
97
+ if (event.dataTransfer) {
98
+ event.dataTransfer.effectAllowed = 'move';
99
+ }
100
+ }
101
+ onDragColumnOver(event, targetIndex) {
102
+ event.preventDefault();
103
+ // Skip if dragging over itself or no drag in progress
104
+ if (this.draggedIndex === null || this.draggedIndex === targetIndex) {
105
+ return;
106
+ }
107
+ // IMMEDIATELY reorder columns
108
+ this.api.reorderColumnDefs(this.draggedIndex, targetIndex);
109
+ // Update draggedIndex to the new position
110
+ this.draggedIndex = targetIndex;
111
+ }
112
+ onDragColumnEnd(event) {
113
+ this.draggedIndex = null;
114
+ }
115
+ onDropColumn(event) {
116
+ event.preventDefault();
117
+ this.draggedIndex = null;
118
+ }
119
+ /**
120
+ * Clear All Subscriptions
121
+ */
122
+ ngOnDestroy() {
123
+ this.destroy$.complete();
124
+ }
125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridHeaderComponent, deps: [{ token: i1.OneGridEventService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
126
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: OneGridHeaderComponent, selector: "one-grid-header", inputs: { scrollLeft: "scrollLeft", allowedEdit: "allowedEdit", enableGroupColumnDefs: "enableGroupColumnDefs", api: "api" }, ngImport: i0, template: "<div class=\"one-grid-header\">\n @if (enableGroupColumnDefs) {\n <div class=\"one-group-header-row\" [style.transform]=\"'translateX(-' + scrollLeft + 'px)'\">\n <ng-container *ngTemplateOutlet=\"groupColumns; context: { groups: groupColumnDefs }\"></ng-container>\n </div>\n }\n <div class=\"one-grid-header-viewport\">\n <div class=\"one-header-row\" [style.transform]=\"'translateX(-' + scrollLeft + 'px)'\">\n <ng-container *ngTemplateOutlet=\"headerColumns; context: { columns: columnDefs }\"></ng-container>\n </div>\n </div>\n</div>\n\n<!-- Group Header Cell Template -->\n<ng-template #groupColumns let-groups=\"groups\">\n @for(group of groups; track group.id) {\n <div class=\"one-group-header-cell\"\n [style.width.px]=\"group.width\"\n [ngClass]=\"group._resolvedGroupClass\"\n [ngStyle]=\"group._resolvedGroupStyle\">\n <div class=\"one-group-header-cell-text\">\n {{ group.headerName }}\n </div>\n </div>\n }\n</ng-template>\n\n<!-- Header Cell Template -->\n<ng-template #headerColumns let-columns=\"columns\">\n @for (col of columns; let colIndex = $index; track col.id) {\n <div class=\"one-grid-header-column\"\n [attr.data-index]=\"colIndex\"\n [style.width.px]=\"col.width\"\n [style.min-width.px]=\"col.minWidth\"\n [style.max-width.px]=\"col.maxWidth\"\n [draggable]=\"col?.dragable\"\n (dragstart)=\"onDragColumnStart($event, colIndex)\"\n (dragover)=\"onDragColumnOver($event, colIndex)\"\n (dragend)=\"onDragColumnEnd($event)\"\n (drop)=\"onDropColumn($event)\">\n <div class=\"one-grid-header-cell\"\n [ngClass]=\"col._resolvedHeaderClass\"\n [ngStyle]=\"col._resolvedHeaderStyle\"\n >\n <span class=\"one-grid-header-cell-group\">\n @if (col?.headerCheckboxSelection) {\n <one-grid-checkbox-header\n [api]=\"api\"\n [allowedEdit]=\"allowedEdit\"\n />\n }\n\n {{ col?.headerName ?? '' }}\n </span>\n\n <!-- Og Resize Handler -->\n @if (col?.resizable) {\n <div class=\"og-resize-handle\" (mousedown)=\"onResizeStart($event, colIndex)\">\n <i class=\"bi bi-grip-vertical\"></i>\n </div>\n }\n\n <div class=\"one-grid-header-cell-group\">\n\n <!-- Sort Menu Button -->\n @if (col?.sortable) {\n <div class=\"one-grid-header-menu-button\" (click)=\"onHeaderMenuSortClick(col.field)\">\n\n @if ((col.field | columnSortState:api.sortModel) === 'asc') {\n <lucide-icon name=\"arrow-up-a-z\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n @else if ((col.field | columnSortState:api.sortModel) === 'desc') {\n <lucide-icon name=\"arrow-down-z-a\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n @else {\n <lucide-icon name=\"arrow-down-up\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n </div>\n }\n\n <!-- Og Option Menu Button -->\n @if (col && !col.suppressHeaderMenuButton) {\n <div class=\"one-grid-header-menu-button\" (click)=\"onHeaderMenuOptionClick(col)\">\n <i class=\"bi bi-three-dots-vertical\"></i>\n </div>\n }\n </div>\n </div>\n </div>\n }\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.LucideAngularComponent, selector: "lucide-angular, lucide-icon, i-lucide, span-lucide", inputs: ["class", "name", "img", "color", "absoluteStrokeWidth", "size", "strokeWidth"] }, { kind: "component", type: i4.OneGridCheckboxHeaderComponent, selector: "one-grid-checkbox-header", inputs: ["api", "allowedEdit"] }, { kind: "pipe", type: i5.ColumnSortStatePipe, name: "columnSortState" }] }); }
127
+ }
128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: OneGridHeaderComponent, decorators: [{
129
+ type: Component,
130
+ args: [{ standalone: false, selector: 'one-grid-header', template: "<div class=\"one-grid-header\">\n @if (enableGroupColumnDefs) {\n <div class=\"one-group-header-row\" [style.transform]=\"'translateX(-' + scrollLeft + 'px)'\">\n <ng-container *ngTemplateOutlet=\"groupColumns; context: { groups: groupColumnDefs }\"></ng-container>\n </div>\n }\n <div class=\"one-grid-header-viewport\">\n <div class=\"one-header-row\" [style.transform]=\"'translateX(-' + scrollLeft + 'px)'\">\n <ng-container *ngTemplateOutlet=\"headerColumns; context: { columns: columnDefs }\"></ng-container>\n </div>\n </div>\n</div>\n\n<!-- Group Header Cell Template -->\n<ng-template #groupColumns let-groups=\"groups\">\n @for(group of groups; track group.id) {\n <div class=\"one-group-header-cell\"\n [style.width.px]=\"group.width\"\n [ngClass]=\"group._resolvedGroupClass\"\n [ngStyle]=\"group._resolvedGroupStyle\">\n <div class=\"one-group-header-cell-text\">\n {{ group.headerName }}\n </div>\n </div>\n }\n</ng-template>\n\n<!-- Header Cell Template -->\n<ng-template #headerColumns let-columns=\"columns\">\n @for (col of columns; let colIndex = $index; track col.id) {\n <div class=\"one-grid-header-column\"\n [attr.data-index]=\"colIndex\"\n [style.width.px]=\"col.width\"\n [style.min-width.px]=\"col.minWidth\"\n [style.max-width.px]=\"col.maxWidth\"\n [draggable]=\"col?.dragable\"\n (dragstart)=\"onDragColumnStart($event, colIndex)\"\n (dragover)=\"onDragColumnOver($event, colIndex)\"\n (dragend)=\"onDragColumnEnd($event)\"\n (drop)=\"onDropColumn($event)\">\n <div class=\"one-grid-header-cell\"\n [ngClass]=\"col._resolvedHeaderClass\"\n [ngStyle]=\"col._resolvedHeaderStyle\"\n >\n <span class=\"one-grid-header-cell-group\">\n @if (col?.headerCheckboxSelection) {\n <one-grid-checkbox-header\n [api]=\"api\"\n [allowedEdit]=\"allowedEdit\"\n />\n }\n\n {{ col?.headerName ?? '' }}\n </span>\n\n <!-- Og Resize Handler -->\n @if (col?.resizable) {\n <div class=\"og-resize-handle\" (mousedown)=\"onResizeStart($event, colIndex)\">\n <i class=\"bi bi-grip-vertical\"></i>\n </div>\n }\n\n <div class=\"one-grid-header-cell-group\">\n\n <!-- Sort Menu Button -->\n @if (col?.sortable) {\n <div class=\"one-grid-header-menu-button\" (click)=\"onHeaderMenuSortClick(col.field)\">\n\n @if ((col.field | columnSortState:api.sortModel) === 'asc') {\n <lucide-icon name=\"arrow-up-a-z\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n @else if ((col.field | columnSortState:api.sortModel) === 'desc') {\n <lucide-icon name=\"arrow-down-z-a\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n @else {\n <lucide-icon name=\"arrow-down-up\" [size]=\"16\" [strokeWidth]=\"2\"></lucide-icon>\n }\n </div>\n }\n\n <!-- Og Option Menu Button -->\n @if (col && !col.suppressHeaderMenuButton) {\n <div class=\"one-grid-header-menu-button\" (click)=\"onHeaderMenuOptionClick(col)\">\n <i class=\"bi bi-three-dots-vertical\"></i>\n </div>\n }\n </div>\n </div>\n </div>\n }\n</ng-template>\n" }]
131
+ }], ctorParameters: () => [{ type: i1.OneGridEventService }, { type: i0.ChangeDetectorRef }], propDecorators: { scrollLeft: [{
132
+ type: Input
133
+ }], allowedEdit: [{
134
+ type: Input
135
+ }], enableGroupColumnDefs: [{
136
+ type: Input
137
+ }], api: [{
138
+ type: Input
139
+ }] } });
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25lLWdyaWQtaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1oZWFkZXIvb25lLWdyaWQtaGVhZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29uZS1ncmlkL3NyYy9saWIvY29tcG9uZW50cy9vbmUtZ3JpZC1oZWFkZXIvb25lLWdyaWQtaGVhZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7QUFZN0MsTUFBTSxPQUFPLHNCQUFzQjtJQXFCakMsWUFDVSxZQUFpQyxFQUNqQyxHQUFzQjtRQUR0QixpQkFBWSxHQUFaLFlBQVksQ0FBcUI7UUFDakMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFyQnZCLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QiwwQkFBcUIsR0FBWSxLQUFLLENBQUM7UUFHdEMsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBQzFDLGVBQVUsR0FBc0IsRUFBRSxDQUFDO1FBRXJDLGNBQVMsR0FBc0IsRUFBRSxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQy9CLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNuQyxpQkFBWSxHQUFrQixJQUFJLENBQUM7UUFFM0MscUJBQXFCO1FBQ2IsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixzQkFBaUIsR0FBa0IsSUFBSSxDQUFDO1FBQ3hDLFdBQU0sR0FBRyxDQUFDLENBQUM7UUFDWCxlQUFVLEdBQUcsQ0FB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RUFBRSxDQUFDO1lBRXBFLE9BQU87UUFDVCxDQUFDO1FBRUQsOEJBQThCO1FBQzlCLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUUzRCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUM7SUFDbEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFnQjtRQUU5QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQWdCO1FBRTNCLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXO1FBRVQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOytHQTNLVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixxTENkbkMsbytIQTJGQTs7NEZEN0VhLHNCQUFzQjtrQkFObEMsU0FBUztpQ0FDSSxLQUFLLFlBQ1AsaUJBQWlCO3dIQU1sQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT25lQ29sdW1uRGVmLCBPbmVHcm91cENvbHVtbkRlZiB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1jb2x1bW4tZGVmLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT25lR3JpZEFwaSB9IGZyb20gJy4uLy4uL2NvcmUvaW5zdGFudHMvb25lLWdyaWQtYXBpLmNsYXNzJztcbmltcG9ydCB7IE9uZVNvcnRNb2RlbCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1ncmlkLXR5cGVzLm1vZGVsJztcbmltcG9ydCB7IENvbHVtbkNoYW5nZWRFdmVudCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzL29uZS1ldmVudC10eXBlcy5tb2RlbCc7XG5pbXBvcnQgeyBPbmVHcmlkRXZlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS9zZXJ2aWNlcy9vbmUtZ3JpZC1ldmVudC5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICBzZWxlY3RvcjogJ29uZS1ncmlkLWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9vbmUtZ3JpZC1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vb25lLWdyaWQtaGVhZGVyLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBPbmVHcmlkSGVhZGVyQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIEBJbnB1dCgpIHNjcm9sbExlZnQgPSAwO1xuICBASW5wdXQoKSBhbGxvd2VkRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVHcm91cENvbHVtbkRlZnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgYXBpITogT25lR3JpZEFwaTxUPjtcblxuICBwcm90ZWN0ZWQgZ3JvdXBDb2x1bW5EZWZzOiBPbmVHcm91cENvbHVtbkRlZltdID0gW107XG4gIHByb3RlY3RlZCBjb2x1bW5EZWZzOiBPbmVDb2x1bW5EZWY8VD5bXSA9IFtdO1xuXG4gIHByaXZhdGUgc29ydE1vZGVsOiBPbmVTb3J0TW9kZWw8VD5bXSA9IFtdO1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGRyYWdnZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gVHJhY2sgcmVzaXplIHN0YXRlXG4gIHByaXZhdGUgcmVzaXppbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZXNpemVDb2x1bW5JbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3RhcnRYID0gMDtcbiAgcHJpdmF0ZSBzdGFydFdpZHRoID0gMDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGV2ZW50U2VydmljZTogT25lR3JpZEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICAgIC8vIExpc3RlbiBDb2x1bW4gQ2hhbmdlZCBFdmVudFxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5ldmVudFNlcnZpY2UuYWRkRXZlbnRMaXN0ZW5lcignY29sdW1uQ2hhbmdlZCcsIChwYXlsb2FkOiBDb2x1bW5DaGFuZ2VkRXZlbnQpID0+IHtcblxuICAgICAgY29uc3QgeyBncm91cHMsIGNvbHVtbnMgfSA9IHBheWxvYWQ7XG5cbiAgICAgIGlmIChncm91cHMpIHtcblxuICAgICAgICB0aGlzLmdyb3VwQ29sdW1uRGVmcyA9IGdyb3VwcyBhcyBPbmVHcm91cENvbHVtbkRlZltdO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sdW1ucykge1xuXG4gICAgICAgIHRoaXMuY29sdW1uRGVmcyA9IGNvbHVtbnMgYXMgT25lQ29sdW1uRGVmW107XG4gICAgICB9XG5cbiAgICAgIC8vIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pKTtcbiAgfVxuXG4gIG9uSGVhZGVyTWVudU9wdGlvbkNsaWNrKGNvbHVtbkRlZjogT25lQ29sdW1uRGVmPFQ+KSB7XG5cbiAgfVxuXG4gIG9uSGVhZGVyTWVudVNvcnRDbGljayhjb2xJZDoga2V5b2YgVCkge1xuXG4gICAgY29uc3QgY3VycmVudFNvcnQgPSB0aGlzLnNvcnRNb2RlbC5maW5kKHNvcnQgPT4gc29ydC5jb2xJZCA9PT0gY29sSWQpPy5zb3J0ID8/IG51bGw7XG5cbiAgICBjb25zdCBuZXh0U29ydCA9IHRoaXMuY3ljbGVTb3J0KGN1cnJlbnRTb3J0KTtcblxuICAgIHRoaXMuc29ydE1vZGVsID0gbmV4dFNvcnQgPyBbeyBjb2xJZCwgc29ydDogbmV4dFNvcnQgfV0gOiBbXTtcblxuICAgIHRoaXMuYXBpLm9uU29ydENoYW5nZWQodGhpcy5zb3J0TW9kZWwpO1xuICB9XG5cbiAgLy8gQ3ljbGUgU29ydGluZyBNb2RlbFxuICBwcml2YXRlIGN5Y2xlU29ydChjdXJyZW50OiAnYXNjJyB8ICdkZXNjJyB8IG51bGwpOiAnYXNjJyB8ICdkZXNjJyB8IG51bGwge1xuXG4gICAgc3dpdGNoIChjdXJyZW50KSB7XG5cbiAgICAgIGNhc2UgbnVsbDogcmV0dXJuICdhc2MnO1xuXG4gICAgICBjYXNlICdhc2MnOiByZXR1cm4gJ2Rlc2MnO1xuXG4gICAgICBjYXNlICdkZXNjJzogcmV0dXJuIG51bGw7XG5cbiAgICAgIGRlZmF1bHQ6IHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG9uUmVzaXplU3RhcnQoZXZlbnQ6IE1vdXNlRXZlbnQsIGNvbHVtbkluZGV4OiBudW1iZXIpOiB2b2lkIHtcblxuICAgIC8vIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gYW5kIGRlZmF1bHQgYmVoYXZpb3JcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgLy8gU3RvcmUgaW5pdGlhbCB2YWx1ZXNcbiAgICB0aGlzLnJlc2l6aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkluZGV4ID0gY29sdW1uSW5kZXg7XG4gICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYO1xuICAgIHRoaXMuc3RhcnRXaWR0aCA9IHRoaXMuY29sdW1uRGVmc1tjb2x1bW5JbmRleF0ud2lkdGg7XG5cbiAgICAvLyBBZGQgZG9jdW1lbnQtbGV2ZWwgbGlzdGVuZXJzIGZvciBkcmFnIGFuZCByZWxlYXNlXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vblJlc2l6ZU1vdmUpO1xuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uUmVzaXplRW5kKTtcblxuICAgIC8vIEFkZCBhIGNsYXNzIHRvIGJvZHkgdG8gbWFpbnRhaW4gY3Vyc29yIGR1cmluZyBkcmFnXG4gICAgZG9jdW1lbnQuYm9keS5zdHlsZS5jdXJzb3IgPSAnY29sLXJlc2l6ZSc7XG4gIH1cblxuICAvLyBBcnJvdyBmdW5jdGlvbiB0byBwcmVzZXJ2ZSAndGhpcycgY29udGV4dFxuICBwcml2YXRlIG9uUmVzaXplTW92ZSA9IChldmVudDogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuXG4gICAgaWYgKCF0aGlzLnJlc2l6aW5nIHx8IHRoaXMucmVzaXplQ29sdW1uSW5kZXggPT09IG51bGwpIHJldHVybjtcblxuICAgIC8vIENhbGN1bGF0ZSBob3cgZmFyIHRoZSBtb3VzZSBoYXMgbW92ZWRcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7XG5cbiAgICAvLyBDYWxjdWxhdGUgbmV3IHdpZHRoICh3aXRoIG1pbmltdW0gb2YgNTBweClcbiAgICBjb25zdCBuZXdXaWR0aCA9IE1hdGgubWF4KDUwLCB0aGlzLnN0YXJ0V2lkdGggKyBkZWx0YVgpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjb2x1bW4gd2lkdGhcbiAgICB0aGlzLmFwaS51cGRhdGVDb2x1bW4odGhpcy5jb2x1bW5EZWZzW3RoaXMucmVzaXplQ29sdW1uSW5kZXhdLmlkLCB7IHdpZHRoOiBuZXdXaWR0aCB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25SZXNpemVFbmQgPSAoKTogdm9pZCA9PiB7XG5cbiAgICAvLyBDbGVhbiB1cFxuICAgIHRoaXMucmVzaXppbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkluZGV4ID0gbnVsbDtcbiAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnO1xuXG4gICAgLy8gUmVtb3ZlIGRvY3VtZW50IGxpc3RlbmVyc1xuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25SZXNpemVNb3ZlKTtcbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgdGhpcy5vblJlc2l6ZUVuZCk7XG4gIH1cblxuICAvLyBUcmFjayB0aGUgZHJhZ2dlZCBjb2x1bW4gaW5kZXhcbiAgb25EcmFnQ29sdW1uU3RhcnQoZXZlbnQ6IERyYWdFdmVudCwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBpbmRleDtcblxuICAgIC8vIE9wdGlvbmFsOiBTZXQgZHJhZyBpbWFnZS9lZmZlY3RcbiAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG5cbiAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gJ21vdmUnO1xuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ0NvbHVtbk92ZXIoZXZlbnQ6IERyYWdFdmVudCwgdGFyZ2V0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgIC8vIFNraXAgaWYgZHJhZ2dpbmcgb3ZlciBpdHNlbGYgb3Igbm8gZHJhZyBpbiBwcm9ncmVzc1xuICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gbnVsbCB8fCB0aGlzLmRyYWdnZWRJbmRleCA9PT0gdGFyZ2V0SW5kZXgpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElNTUVESUFURUxZIHJlb3JkZXIgY29sdW1uc1xuICAgIHRoaXMuYXBpLnJlb3JkZXJDb2x1bW5EZWZzKHRoaXMuZHJhZ2dlZEluZGV4LCB0YXJnZXRJbmRleCk7XG5cbiAgICAvLyBVcGRhdGUgZHJhZ2dlZEluZGV4IHRvIHRoZSBuZXcgcG9zaXRpb25cbiAgICB0aGlzLmRyYWdnZWRJbmRleCA9IHRhcmdldEluZGV4O1xuICB9XG5cbiAgb25EcmFnQ29sdW1uRW5kKGV2ZW50OiBEcmFnRXZlbnQpOiB2b2lkIHtcblxuICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIG9uRHJvcENvbHVtbihldmVudDogRHJhZ0V2ZW50KTogdm9pZCB7XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5kcmFnZ2VkSW5kZXggPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIEFsbCBTdWJzY3JpcHRpb25zXG4gICAqL1xuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcblxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm9uZS1ncmlkLWhlYWRlclwiPlxuICAgIEBpZiAoZW5hYmxlR3JvdXBDb2x1bW5EZWZzKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvbmUtZ3JvdXAtaGVhZGVyLXJvd1wiIFtzdHlsZS50cmFuc2Zvcm1dPVwiJ3RyYW5zbGF0ZVgoLScgKyBzY3JvbGxMZWZ0ICsgJ3B4KSdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJncm91cENvbHVtbnM7IGNvbnRleHQ6IHsgZ3JvdXBzOiBncm91cENvbHVtbkRlZnMgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG4gICAgPGRpdiBjbGFzcz1cIm9uZS1ncmlkLWhlYWRlci12aWV3cG9ydFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwib25lLWhlYWRlci1yb3dcIiBbc3R5bGUudHJhbnNmb3JtXT1cIid0cmFuc2xhdGVYKC0nICsgc2Nyb2xsTGVmdCArICdweCknXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyQ29sdW1uczsgY29udGV4dDogeyBjb2x1bW5zOiBjb2x1bW5EZWZzIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBHcm91cCBIZWFkZXIgQ2VsbCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjZ3JvdXBDb2x1bW5zIGxldC1ncm91cHM9XCJncm91cHNcIj5cbiAgICBAZm9yKGdyb3VwIG9mIGdyb3VwczsgdHJhY2sgZ3JvdXAuaWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm9uZS1ncm91cC1oZWFkZXItY2VsbFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ3JvdXAud2lkdGhcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ3JvdXAuX3Jlc29sdmVkR3JvdXBDbGFzc1wiXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJncm91cC5fcmVzb2x2ZWRHcm91cFN0eWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib25lLWdyb3VwLWhlYWRlci1jZWxsLXRleHRcIj5cbiAgICAgICAgICAgICAgICB7eyBncm91cC5oZWFkZXJOYW1lIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBIZWFkZXIgQ2VsbCBUZW1wbGF0ZSAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyQ29sdW1ucyBsZXQtY29sdW1ucz1cImNvbHVtbnNcIj5cbiAgICBAZm9yIChjb2wgb2YgY29sdW1uczsgbGV0IGNvbEluZGV4ID0gJGluZGV4OyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cIm9uZS1ncmlkLWhlYWRlci1jb2x1bW5cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1pbmRleF09XCJjb2xJbmRleFwiXG4gICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sLndpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLm1pbldpZHRoXCJcbiAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sLm1heFdpZHRoXCJcbiAgICAgICAgICAgIFtkcmFnZ2FibGVdPVwiY29sPy5kcmFnYWJsZVwiXG4gICAgICAgICAgICAoZHJhZ3N0YXJ0KT1cIm9uRHJhZ0NvbHVtblN0YXJ0KCRldmVudCwgY29sSW5kZXgpXCJcbiAgICAgICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdDb2x1bW5PdmVyKCRldmVudCwgY29sSW5kZXgpXCJcbiAgICAgICAgICAgIChkcmFnZW5kKT1cIm9uRHJhZ0NvbHVtbkVuZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChkcm9wKT1cIm9uRHJvcENvbHVtbigkZXZlbnQpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwib25lLWdyaWQtaGVhZGVyLWNlbGxcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5fcmVzb2x2ZWRIZWFkZXJDbGFzc1wiXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiY29sLl9yZXNvbHZlZEhlYWRlclN0eWxlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvbmUtZ3JpZC1oZWFkZXItY2VsbC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbD8uaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvbmUtZ3JpZC1jaGVja2JveC1oZWFkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBpXT1cImFwaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FsbG93ZWRFZGl0XT1cImFsbG93ZWRFZGl0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB7eyBjb2w/LmhlYWRlck5hbWUgPz8gJycgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE9nIFJlc2l6ZSBIYW5kbGVyIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sPy5yZXNpemFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9nLXJlc2l6ZS1oYW5kbGVcIiAobW91c2Vkb3duKT1cIm9uUmVzaXplU3RhcnQoJGV2ZW50LCBjb2xJbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktZ3JpcC12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9uZS1ncmlkLWhlYWRlci1jZWxsLWdyb3VwXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTb3J0IE1lbnUgQnV0dG9uIC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbD8uc29ydGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvbmUtZ3JpZC1oZWFkZXItbWVudS1idXR0b25cIiAoY2xpY2spPVwib25IZWFkZXJNZW51U29ydENsaWNrKGNvbC5maWVsZClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKGNvbC5maWVsZCB8IGNvbHVtblNvcnRTdGF0ZTphcGkuc29ydE1vZGVsKSA9PT0gJ2FzYycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJhcnJvdy11cC1hLXpcIiBbc2l6ZV09XCIxNlwiIFtzdHJva2VXaWR0aF09XCIyXCI+PC9sdWNpZGUtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGVsc2UgaWYgKChjb2wuZmllbGQgfCBjb2x1bW5Tb3J0U3RhdGU6YXBpLnNvcnRNb2RlbCkgPT09ICdkZXNjJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bHVjaWRlLWljb24gbmFtZT1cImFycm93LWRvd24tei1hXCIgW3NpemVdPVwiMTZcIiBbc3Ryb2tlV2lkdGhdPVwiMlwiPjwvbHVjaWRlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJhcnJvdy1kb3duLXVwXCIgW3NpemVdPVwiMTZcIiBbc3Ryb2tlV2lkdGhdPVwiMlwiPjwvbHVjaWRlLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIE9nIE9wdGlvbiBNZW51IEJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wgJiYgIWNvbC5zdXBwcmVzc0hlYWRlck1lbnVCdXR0b24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvbmUtZ3JpZC1oZWFkZXItbWVudS1idXR0b25cIiAoY2xpY2spPVwib25IZWFkZXJNZW51T3B0aW9uQ2xpY2soY29sKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiYmkgYmktdGhyZWUtZG90cy12ZXJ0aWNhbFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==