@ai-table/grid 0.0.40 → 0.0.41

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 (130) hide show
  1. package/components/cell-editors/select/select-editor.component.d.ts +3 -1
  2. package/components/cell-editors/select/select-editor.component.d.ts.map +1 -1
  3. package/components/context-menu/context-menu.component.d.ts +4 -1
  4. package/components/context-menu/context-menu.component.d.ts.map +1 -1
  5. package/components/drag/drag.component.d.ts +26 -0
  6. package/components/drag/drag.component.d.ts.map +1 -0
  7. package/components/drag/drag.component.scss +19 -0
  8. package/constants/file-icon.d.ts +32 -0
  9. package/constants/file-icon.d.ts.map +1 -0
  10. package/constants/grid.d.ts.map +1 -1
  11. package/constants/icon.d.ts +1 -0
  12. package/constants/icon.d.ts.map +1 -1
  13. package/constants/table.d.ts +4 -0
  14. package/constants/table.d.ts.map +1 -1
  15. package/core/constants/field.d.ts.map +1 -1
  16. package/core/types/ai-table.d.ts +3 -1
  17. package/core/types/ai-table.d.ts.map +1 -1
  18. package/core/types/core.d.ts +33 -2
  19. package/core/types/core.d.ts.map +1 -1
  20. package/core/utils/common.d.ts +3 -3
  21. package/core/utils/common.d.ts.map +1 -1
  22. package/core/utils/field.d.ts.map +1 -1
  23. package/core/utils/queries.d.ts +3 -1
  24. package/core/utils/queries.d.ts.map +1 -1
  25. package/esm2022/components/cell-editors/select/select-editor.component.mjs +22 -21
  26. package/esm2022/components/context-menu/context-menu.component.mjs +17 -5
  27. package/esm2022/components/drag/drag.component.mjs +150 -0
  28. package/esm2022/constants/file-icon.mjs +342 -0
  29. package/esm2022/constants/grid.mjs +2 -1
  30. package/esm2022/constants/icon.mjs +2 -1
  31. package/esm2022/constants/table.mjs +6 -2
  32. package/esm2022/core/constants/field.mjs +7 -1
  33. package/esm2022/core/types/ai-table.mjs +2 -2
  34. package/esm2022/core/types/core.mjs +9 -1
  35. package/esm2022/core/utils/common.mjs +3 -2
  36. package/esm2022/core/utils/field.mjs +8 -3
  37. package/esm2022/core/utils/queries.mjs +19 -13
  38. package/esm2022/grid-base.component.mjs +5 -3
  39. package/esm2022/grid.component.mjs +90 -4
  40. package/esm2022/renderer/components/field-icon.component.mjs +5 -2
  41. package/esm2022/renderer/creations/create-heads.mjs +5 -5
  42. package/esm2022/renderer/drawers/cell-drawer.mjs +74 -2
  43. package/esm2022/renderer/drawers/drawer.mjs +11 -2
  44. package/esm2022/services/event.service.mjs +12 -5
  45. package/esm2022/services/selection.service.mjs +22 -3
  46. package/esm2022/types/clipboard.mjs +2 -0
  47. package/esm2022/types/grid.mjs +1 -1
  48. package/esm2022/types/index.mjs +2 -1
  49. package/esm2022/types/row.mjs +1 -1
  50. package/esm2022/utils/clipboard/clipboard.mjs +77 -0
  51. package/esm2022/utils/clipboard/copy.mjs +92 -0
  52. package/esm2022/utils/clipboard/extract.mjs +19 -0
  53. package/esm2022/utils/clipboard/index.mjs +5 -0
  54. package/esm2022/utils/clipboard/paste.mjs +180 -0
  55. package/esm2022/utils/field/model/attachment.mjs +63 -0
  56. package/esm2022/utils/field/model/date.mjs +45 -2
  57. package/esm2022/utils/field/model/field.mjs +1 -1
  58. package/esm2022/utils/field/model/index.mjs +5 -3
  59. package/esm2022/utils/field/model/link.mjs +25 -1
  60. package/esm2022/utils/field/model/member.mjs +40 -1
  61. package/esm2022/utils/field/model/number.mjs +31 -1
  62. package/esm2022/utils/field/model/progress.mjs +34 -1
  63. package/esm2022/utils/field/model/rate.mjs +35 -1
  64. package/esm2022/utils/field/model/select.mjs +64 -1
  65. package/esm2022/utils/field/model/text.mjs +7 -1
  66. package/esm2022/utils/file.mjs +208 -0
  67. package/esm2022/utils/icon.mjs +48 -0
  68. package/esm2022/utils/index.mjs +2 -1
  69. package/esm2022/utils/match-keywords.mjs +3 -3
  70. package/fesm2022/ai-table-grid.mjs +2131 -433
  71. package/fesm2022/ai-table-grid.mjs.map +1 -1
  72. package/grid-base.component.d.ts +4 -2
  73. package/grid-base.component.d.ts.map +1 -1
  74. package/grid.component.d.ts +6 -1
  75. package/grid.component.d.ts.map +1 -1
  76. package/package.json +1 -1
  77. package/renderer/components/field-icon.component.d.ts.map +1 -1
  78. package/renderer/drawers/cell-drawer.d.ts +1 -0
  79. package/renderer/drawers/cell-drawer.d.ts.map +1 -1
  80. package/renderer/drawers/drawer.d.ts.map +1 -1
  81. package/services/event.service.d.ts.map +1 -1
  82. package/services/selection.service.d.ts +5 -1
  83. package/services/selection.service.d.ts.map +1 -1
  84. package/styles/styles.scss +2 -0
  85. package/types/clipboard.d.ts +5 -0
  86. package/types/clipboard.d.ts.map +1 -0
  87. package/types/grid.d.ts +22 -5
  88. package/types/grid.d.ts.map +1 -1
  89. package/types/index.d.ts +1 -0
  90. package/types/index.d.ts.map +1 -1
  91. package/types/row.d.ts +3 -1
  92. package/types/row.d.ts.map +1 -1
  93. package/utils/clipboard/clipboard.d.ts +8 -0
  94. package/utils/clipboard/clipboard.d.ts.map +1 -0
  95. package/utils/clipboard/copy.d.ts +5 -0
  96. package/utils/clipboard/copy.d.ts.map +1 -0
  97. package/utils/clipboard/extract.d.ts +3 -0
  98. package/utils/clipboard/extract.d.ts.map +1 -0
  99. package/utils/clipboard/index.d.ts +5 -0
  100. package/utils/clipboard/index.d.ts.map +1 -0
  101. package/utils/clipboard/paste.d.ts +10 -0
  102. package/utils/clipboard/paste.d.ts.map +1 -0
  103. package/utils/field/model/attachment.d.ts +17 -0
  104. package/utils/field/model/attachment.d.ts.map +1 -0
  105. package/utils/field/model/date.d.ts +9 -1
  106. package/utils/field/model/date.d.ts.map +1 -1
  107. package/utils/field/model/field.d.ts +4 -0
  108. package/utils/field/model/field.d.ts.map +1 -1
  109. package/utils/field/model/index.d.ts +1 -1
  110. package/utils/field/model/index.d.ts.map +1 -1
  111. package/utils/field/model/link.d.ts +9 -1
  112. package/utils/field/model/link.d.ts.map +1 -1
  113. package/utils/field/model/member.d.ts +8 -0
  114. package/utils/field/model/member.d.ts.map +1 -1
  115. package/utils/field/model/number.d.ts +9 -1
  116. package/utils/field/model/number.d.ts.map +1 -1
  117. package/utils/field/model/progress.d.ts +9 -1
  118. package/utils/field/model/progress.d.ts.map +1 -1
  119. package/utils/field/model/rate.d.ts +9 -1
  120. package/utils/field/model/rate.d.ts.map +1 -1
  121. package/utils/field/model/select.d.ts +16 -1
  122. package/utils/field/model/select.d.ts.map +1 -1
  123. package/utils/field/model/text.d.ts +2 -0
  124. package/utils/field/model/text.d.ts.map +1 -1
  125. package/utils/file.d.ts +11 -0
  126. package/utils/file.d.ts.map +1 -0
  127. package/utils/icon.d.ts +19 -0
  128. package/utils/icon.d.ts.map +1 -0
  129. package/utils/index.d.ts +1 -0
  130. package/utils/index.d.ts.map +1 -1
@@ -1,18 +1,14 @@
1
- import { NgTemplateOutlet } from '@angular/common';
1
+ import { CommonModule } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, computed } from '@angular/core';
3
3
  import { FormsModule } from '@angular/forms';
4
- import { ThyDot } from 'ngx-tethys/dot';
5
4
  import { ThyEmptyModule } from 'ngx-tethys/empty';
6
- import { ThyFlexibleText } from 'ngx-tethys/flexible-text';
7
- import { ThyIcon } from 'ngx-tethys/icon';
8
- import { ThySelect } from 'ngx-tethys/select';
5
+ import { ThySelect, ThySelectModule } from 'ngx-tethys/select';
9
6
  import { ThyOption } from 'ngx-tethys/shared';
10
- import { ThyTag } from 'ngx-tethys/tag';
11
7
  import { ThyTooltipModule } from 'ngx-tethys/tooltip';
12
8
  import { AITableQueries, AITableSelectOptionStyle } from '../../../core';
13
- import { SelectOptionPipe } from '../../../pipes';
14
9
  import { SelectOptionComponent } from '../../cell-views/select/option.component';
15
10
  import { AbstractEditCellEditor } from '../abstract-cell-editor.component';
11
+ import { ThyFormModule } from 'ngx-tethys/form';
16
12
  import * as i0 from "@angular/core";
17
13
  import * as i1 from "@angular/forms";
18
14
  export class SelectCellEditorComponent extends AbstractEditCellEditor {
@@ -37,36 +33,41 @@ export class SelectCellEditorComponent extends AbstractEditCellEditor {
37
33
  return value || [];
38
34
  })();
39
35
  }
40
- updateValue(value) {
36
+ onOpenChange(value) {
41
37
  if (!value) {
42
- const value = this.isMultiple ? this.modelValue : (this.modelValue && [this.modelValue]) || [];
38
+ this.closePopover();
39
+ }
40
+ }
41
+ onModelChange(event) {
42
+ this.updateValueFn();
43
+ }
44
+ updateValueFn() {
45
+ const value = (this.isMultiple ? this.modelValue : (this.modelValue && [this.modelValue]) || []);
46
+ const originValue = AITableQueries.getFieldValue(this.aiTable, [this.record()._id, this.field()._id]);
47
+ if (!value.every((v, i) => v === originValue[i]) || value.length !== originValue.length) {
43
48
  this.updateFieldValue.emit({
44
49
  value: value,
45
50
  path: [this.record()._id, this.field()._id]
46
51
  });
47
- this.closePopover();
48
52
  }
49
53
  }
50
54
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectCellEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
51
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (thyOnExpandStatusChange)=\"updateValue($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n", dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: ThySelect, selector: "thy-select,thy-custom-select", inputs: ["thyDropdownWidthMode", "thyShowSearch", "thyPlaceHolder", "thyServerSearch", "thyLoadState", "thyAutoActiveFirstItem", "thyMode", "thySize", "thyEmptyStateText", "thyEmptySearchMessageText", "thyEnableScrollLoad", "thyAllowClear", "thyDisabled", "thySortComparator", "thyFooterTemplate", "thyPlacement", "thyOrigin", "thyFooterClass", "thyAutoExpand", "thyHasBackdrop", "thyMaxTagCount", "thyBorderless", "thyOptions", "thyPreset"], outputs: ["thyOnSearch", "thyOnScrollToBottom", "thyOnExpandStatusChange"], exportAs: ["thySelect"] }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "ngmodule", type: ThyEmptyModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
55
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: SelectCellEditorComponent, isStandalone: true, selector: "select-cell-editor", host: { classAttribute: "d-block h-100 select-cell-editor" }, usesInheritance: true, ngImport: i0, template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n", dependencies: [{ kind: "component", type: ThySelect, selector: "thy-select,thy-custom-select", inputs: ["thyDropdownWidthMode", "thyShowSearch", "thyPlaceHolder", "thyServerSearch", "thyLoadState", "thyAutoActiveFirstItem", "thyMode", "thySize", "thyEmptyStateText", "thyEmptySearchMessageText", "thyEnableScrollLoad", "thyAllowClear", "thyDisabled", "thySortComparator", "thyFooterTemplate", "thyPlacement", "thyOrigin", "thyFooterClass", "thyAutoExpand", "thyHasBackdrop", "thyMaxTagCount", "thyBorderless", "thyOptions", "thyPreset"], outputs: ["thyOnSearch", "thyOnScrollToBottom", "thyOnExpandStatusChange"], exportAs: ["thySelect"] }, { kind: "component", type: ThyOption, selector: "thy-option", inputs: ["thyValue", "thyRawValue", "thyLabelText", "thyShowOptionCustom", "thySearchKey", "thyDisabled"], outputs: ["selectionChange", "visibleChange"] }, { kind: "ngmodule", type: ThyTooltipModule }, { kind: "component", type: SelectOptionComponent, selector: "select-option", inputs: ["field", "displayOption"] }, { kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ThyEmptyModule }, { kind: "ngmodule", type: ThyFormModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ThySelectModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
52
56
  }
53
57
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SelectCellEditorComponent, decorators: [{
54
58
  type: Component,
55
59
  args: [{ selector: 'select-cell-editor', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
56
60
  class: 'd-block h-100 select-cell-editor'
57
61
  }, imports: [
58
- FormsModule,
59
- NgTemplateOutlet,
60
62
  ThySelect,
61
63
  ThyOption,
62
- ThyTag,
63
- ThyIcon,
64
64
  ThyTooltipModule,
65
- ThyDot,
66
- ThyFlexibleText,
67
- SelectOptionPipe,
68
65
  SelectOptionComponent,
69
- ThyEmptyModule
70
- ], template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (thyOnExpandStatusChange)=\"updateValue($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n" }]
66
+ CommonModule,
67
+ ThyEmptyModule,
68
+ ThyFormModule,
69
+ FormsModule,
70
+ ThySelectModule
71
+ ], template: "<thy-select\n [(ngModel)]=\"modelValue\"\n [thyAutoExpand]=\"true\"\n [thyAllowClear]=\"true\"\n [thyPlaceHolder]=\"''\"\n [thyPreset]=\"preset()\"\n [thyMode]=\"field().settings.is_multiple ? 'multiple' : ''\"\n (ngModelChange)=\"onModelChange($event)\"\n (thyOnExpandStatusChange)=\"onOpenChange($event)\"\n>\n <ng-template #selectedDisplay let-option>\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </ng-template>\n @for (option of selectOptions(); track option._id) {\n <thy-option [thyValue]=\"option._id\" [thyRawValue]=\"option\" [thyShowOptionCustom]=\"true\" [thyLabelText]=\"option.text\">\n <select-option [field]=\"field()\" [displayOption]=\"option\"></select-option>\n </thy-option>\n }\n</thy-select>\n" }]
71
72
  }], ctorParameters: () => [] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsT0FBTyxF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b24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RG90IH0gZnJvbSAnbmd4LXRldGh5cy9kb3QnO1xuaW1wb3J0IHsgVGh5RW1wdHlNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeUZsZXhpYmxlVGV4dCB9IGZyb20gJ25neC10ZXRoeXMvZmxleGlibGUtdGV4dCc7XG5pbXBvcnQgeyBUaHlJY29uIH0gZnJvbSAnbmd4LXRldGh5cy9pY29uJztcbmltcG9ydCB7IFRoeVNlbGVjdCB9IGZyb20gJ25neC10ZXRoeXMvc2VsZWN0JztcbmltcG9ydCB7IFRoeU9wdGlvbiB9IGZyb20gJ25neC10ZXRoeXMvc2hhcmVkJztcbmltcG9ydCB7IFRoeVRhZyB9IGZyb20gJ25neC10ZXRoeXMvdGFnJztcbmltcG9ydCB7IFRoeVRvb2x0aXBNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL3Rvb2x0aXAnO1xuaW1wb3J0IHsgQUlUYWJsZVF1ZXJpZXMsIEFJVGFibGVTZWxlY3RPcHRpb25TdHlsZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgU2VsZWN0T3B0aW9uUGlwZSB9IGZyb20gJy4uLy4uLy4uL3BpcGVzJztcbmltcG9ydCB7IEFJVGFibGVTZWxlY3RGaWVsZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IFNlbGVjdE9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NlbGwtdmlld3Mvc2VsZWN0L29wdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQWJzdHJhY3RFZGl0Q2VsbEVkaXRvciB9IGZyb20gJy4uL2Fic3RyYWN0LWNlbGwtZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2VsZWN0LWNlbGwtZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZC1ibG9jayBoLTEwMCBzZWxlY3QtY2VsbC1lZGl0b3InXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUaHlTZWxlY3QsXG4gICAgICAgIFRoeU9wdGlvbixcbiAgICAgICAgVGh5VGFnLFxuICAgICAgICBUaHlJY29uLFxuICAgICAgICBUaHlUb29sdGlwTW9kdWxlLFxuICAgICAgICBUaHlEb3QsXG4gICAgICAgIFRoeUZsZXhpYmxlVGV4dCxcbiAgICAgICAgU2VsZWN0T3B0aW9uUGlwZSxcbiAgICAgICAgU2VsZWN0T3B0aW9uQ29tcG9uZW50LFxuICAgICAgICBUaHlFbXB0eU1vZHVsZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0Q2VsbEVkaXRvckNvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RWRpdENlbGxFZGl0b3I8c3RyaW5nW10gfCBzdHJpbmcsIEFJVGFibGVTZWxlY3RGaWVsZD4ge1xuICAgIHNlbGVjdE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKCkuc2V0dGluZ3Mub3B0aW9ucztcbiAgICB9KTtcblxuICAgIHByZXNldCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQoKS5zZXR0aW5ncy5pc19tdWx0aXBsZSAmJiB0aGlzLmZpZWxkKCkuc2V0dGluZ3Mub3B0aW9uX3N0eWxlID09PSBBSVRhYmxlU2VsZWN0T3B0aW9uU3R5bGUudGFnID8gJ3RhZycgOiAnJztcbiAgICB9KTtcblxuICAgIGdldCBpc011bHRpcGxlKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmZpZWxkKCkuc2V0dGluZ3MuaXNfbXVsdGlwbGU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubW9kZWxWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gQUlUYWJsZVF1ZXJpZXMuZ2V0RmllbGRWYWx1ZSh0aGlzLmFpVGFibGUsIFt0aGlzLnJlY29yZCgpLl9pZCwgdGhpcy5maWVsZCgpLl9pZF0pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgfHwgW107XG4gICAgICAgIH0pKCk7XG4gICAgfVxuXG4gICAgdXBkYXRlVmFsdWUodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmlzTXVsdGlwbGUgPyB0aGlzLm1vZGVsVmFsdWUgOiAodGhpcy5tb2RlbFZhbHVlICYmIChbdGhpcy5tb2RlbFZhbHVlXSBhcyBzdHJpbmdbXSkpIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWVsZFZhbHVlLmVtaXQoe1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICBwYXRoOiBbdGhpcy5yZWNvcmQoKS5faWQsIHRoaXMuZmllbGQoKS5faWRdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VQb3BvdmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8dGh5LXNlbGVjdFxuICAgIFsobmdNb2RlbCldPVwibW9kZWxWYWx1ZVwiXG4gICAgW3RoeUF1dG9FeHBhbmRdPVwidHJ1ZVwiXG4gICAgW3RoeUFsbG93Q2xlYXJdPVwidHJ1ZVwiXG4gICAgW3RoeVBsYWNlSG9sZGVyXT1cIicnXCJcbiAgICBbdGh5UHJlc2V0XT1cInByZXNldCgpXCJcbiAgICBbdGh5TW9kZV09XCJmaWVsZCgpLnNldHRpbmdzLmlzX211bHRpcGxlID8gJ211bHRpcGxlJyA6ICcnXCJcbiAgICAodGh5T25FeHBhbmRTdGF0dXNDaGFuZ2UpPVwidXBkYXRlVmFsdWUoJGV2ZW50KVwiXG4+XG4gICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZERpc3BsYXkgbGV0LW9wdGlvbj5cbiAgICAgICAgPHNlbGVjdC1vcHRpb24gW2ZpZWxkXT1cImZpZWxkKClcIiBbZGlzcGxheU9wdGlvbl09XCJvcHRpb25cIj48L3NlbGVjdC1vcHRpb24+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgICBAZm9yIChvcHRpb24gb2Ygc2VsZWN0T3B0aW9ucygpOyB0cmFjayBvcHRpb24uX2lkKSB7XG4gICAgICAgIDx0aHktb3B0aW9uIFt0aHlWYWx1ZV09XCJvcHRpb24uX2lkXCIgW3RoeVJhd1ZhbHVlXT1cIm9wdGlvblwiIFt0aHlTaG93T3B0aW9uQ3VzdG9tXT1cInRydWVcIiBbdGh5TGFiZWxUZXh0XT1cIm9wdGlvbi50ZXh0XCI+XG4gICAgICAgICAgICA8c2VsZWN0LW9wdGlvbiBbZmllbGRdPVwiZmllbGQoKVwiIFtkaXNwbGF5T3B0aW9uXT1cIm9wdGlvblwiPjwvc2VsZWN0LW9wdGlvbj5cbiAgICAgICAgPC90aHktb3B0aW9uPlxuICAgIH1cbjwvdGh5LXNlbGVjdD5cbiJdfQ==
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NlbGwtZWRpdG9ycy9zZWxlY3Qvc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBc0JoRCxNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQTZEO0lBU3hHLElBQUksVUFBVTtRQUNWLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFL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QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsS0FBSyxFQUFFLGtDQUFrQztxQkFDNUMsV0FDUTt3QkFDTCxTQUFTO3dCQUNULFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixxQkFBcUI7d0JBQ3JCLFlBQVk7d0JBQ1osY0FBYzt3QkFDZCxhQUFhO3dCQUNiLFdBQVc7d0JBQ1gsZUFBZTtxQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVGh5RW1wdHlNb2R1bGUgfSBmcm9tICduZ3gtdGV0aHlzL2VtcHR5JztcbmltcG9ydCB7IFRoeVNlbGVjdCwgVGh5U2VsZWN0TW9kdWxlIH0gZnJvbSAnbmd4LXRldGh5cy9zZWxlY3QnO1xuaW1wb3J0IHsgVGh5T3B0aW9uIH0gZnJvbSAnbmd4LXRldGh5cy9zaGFyZWQnO1xuaW1wb3J0IHsgVGh5VG9vbHRpcE1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvdG9vbHRpcCc7XG5pbXBvcnQgeyBBSVRhYmxlUXVlcmllcywgQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlIH0gZnJvbSAnLi4vLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlU2VsZWN0RmllbGQgfSBmcm9tICcuLi8uLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBTZWxlY3RPcHRpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9jZWxsLXZpZXdzL3NlbGVjdC9vcHRpb24uY29tcG9uZW50JztcbmltcG9ydCB7IEFic3RyYWN0RWRpdENlbGxFZGl0b3IgfSBmcm9tICcuLi9hYnN0cmFjdC1jZWxsLWVkaXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGh5Rm9ybU1vZHVsZSB9IGZyb20gJ25neC10ZXRoeXMvZm9ybSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnc2VsZWN0LWNlbGwtZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZC1ibG9jayBoLTEwMCBzZWxlY3QtY2VsbC1lZGl0b3InXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRoeVNlbGVjdCxcbiAgICAgICAgVGh5T3B0aW9uLFxuICAgICAgICBUaHlUb29sdGlwTW9kdWxlLFxuICAgICAgICBTZWxlY3RPcHRpb25Db21wb25lbnQsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgVGh5RW1wdHlNb2R1bGUsXG4gICAgICAgIFRoeUZvcm1Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBUaHlTZWxlY3RNb2R1bGVcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdENlbGxFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdEVkaXRDZWxsRWRpdG9yPHN0cmluZ1tdIHwgc3RyaW5nLCBBSVRhYmxlU2VsZWN0RmllbGQ+IHtcbiAgICBzZWxlY3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maWVsZCgpLnNldHRpbmdzLm9wdGlvbnM7XG4gICAgfSk7XG5cbiAgICBwcmVzZXQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkKCkuc2V0dGluZ3MuaXNfbXVsdGlwbGUgJiYgdGhpcy5maWVsZCgpLnNldHRpbmdzLm9wdGlvbl9zdHlsZSA9PT0gQUlUYWJsZVNlbGVjdE9wdGlvblN0eWxlLnRhZyA/ICd0YWcnIDogJyc7XG4gICAgfSk7XG5cbiAgICBnZXQgaXNNdWx0aXBsZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5maWVsZCgpLnNldHRpbmdzLmlzX211bHRpcGxlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUodGhpcy5haVRhYmxlLCBbdGhpcy5yZWNvcmQoKS5faWQsIHRoaXMuZmllbGQoKS5faWRdKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc011bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlIHx8IFtdO1xuICAgICAgICB9KSgpO1xuICAgIH1cblxuICAgIG9uT3BlbkNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudDogYW55KSB7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWVGbigpO1xuICAgIH1cblxuICAgIHVwZGF0ZVZhbHVlRm4oKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKHRoaXMuaXNNdWx0aXBsZSA/IHRoaXMubW9kZWxWYWx1ZSA6ICh0aGlzLm1vZGVsVmFsdWUgJiYgKFt0aGlzLm1vZGVsVmFsdWVdIGFzIHN0cmluZ1tdKSkgfHwgW10pIGFzIHN0cmluZ1tdO1xuICAgICAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IEFJVGFibGVRdWVyaWVzLmdldEZpZWxkVmFsdWUodGhpcy5haVRhYmxlLCBbdGhpcy5yZWNvcmQoKS5faWQsIHRoaXMuZmllbGQoKS5faWRdKSBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKCF2YWx1ZS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gb3JpZ2luVmFsdWVbaV0pIHx8IHZhbHVlLmxlbmd0aCAhPT0gb3JpZ2luVmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpZWxkVmFsdWUuZW1pdCh7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHBhdGg6IFt0aGlzLnJlY29yZCgpLl9pZCwgdGhpcy5maWVsZCgpLl9pZF1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPHRoeS1zZWxlY3RcbiAgICBbKG5nTW9kZWwpXT1cIm1vZGVsVmFsdWVcIlxuICAgIFt0aHlBdXRvRXhwYW5kXT1cInRydWVcIlxuICAgIFt0aHlBbGxvd0NsZWFyXT1cInRydWVcIlxuICAgIFt0aHlQbGFjZUhvbGRlcl09XCInJ1wiXG4gICAgW3RoeVByZXNldF09XCJwcmVzZXQoKVwiXG4gICAgW3RoeU1vZGVdPVwiZmllbGQoKS5zZXR0aW5ncy5pc19tdWx0aXBsZSA/ICdtdWx0aXBsZScgOiAnJ1wiXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAodGh5T25FeHBhbmRTdGF0dXNDaGFuZ2UpPVwib25PcGVuQ2hhbmdlKCRldmVudClcIlxuPlxuICAgIDxuZy10ZW1wbGF0ZSAjc2VsZWN0ZWREaXNwbGF5IGxldC1vcHRpb24+XG4gICAgICAgIDxzZWxlY3Qtb3B0aW9uIFtmaWVsZF09XCJmaWVsZCgpXCIgW2Rpc3BsYXlPcHRpb25dPVwib3B0aW9uXCI+PC9zZWxlY3Qtb3B0aW9uPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgQGZvciAob3B0aW9uIG9mIHNlbGVjdE9wdGlvbnMoKTsgdHJhY2sgb3B0aW9uLl9pZCkge1xuICAgICAgICA8dGh5LW9wdGlvbiBbdGh5VmFsdWVdPVwib3B0aW9uLl9pZFwiIFt0aHlSYXdWYWx1ZV09XCJvcHRpb25cIiBbdGh5U2hvd09wdGlvbkN1c3RvbV09XCJ0cnVlXCIgW3RoeUxhYmVsVGV4dF09XCJvcHRpb24udGV4dFwiPlxuICAgICAgICAgICAgPHNlbGVjdC1vcHRpb24gW2ZpZWxkXT1cImZpZWxkKClcIiBbZGlzcGxheU9wdGlvbl09XCJvcHRpb25cIj48L3NlbGVjdC1vcHRpb24+XG4gICAgICAgIDwvdGh5LW9wdGlvbj5cbiAgICB9XG48L3RoeS1zZWxlY3Q+XG4iXX0=
@@ -1,13 +1,16 @@
1
1
  import { NgClass } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';
3
- import { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective } from 'ngx-tethys/dropdown';
3
+ import { ThyDropdownAbstractMenu, ThyDropdownMenuItemDirective, ThyDropdownMenuItemNameDirective, ThyDropdownMenuItemIconDirective, ThyDropdownMenuItemMetaDirective } from 'ngx-tethys/dropdown';
4
4
  import { ThyIcon } from 'ngx-tethys/icon';
5
+ import { ThyDivider } from 'ngx-tethys/divider';
5
6
  import { AITableGridSelectionService } from '../../services/selection.service';
7
+ import { ThyNotifyService } from 'ngx-tethys/notify';
6
8
  import * as i0 from "@angular/core";
7
9
  export class AITableContextMenu extends ThyDropdownAbstractMenu {
8
10
  constructor() {
9
11
  super(...arguments);
10
12
  this.aiTableGridSelectionService = inject(AITableGridSelectionService);
13
+ this.notifyService = inject(ThyNotifyService);
11
14
  this.aiTable = input.required();
12
15
  this.menuItems = input.required();
13
16
  this.targetName = input.required();
@@ -15,16 +18,25 @@ export class AITableContextMenu extends ThyDropdownAbstractMenu {
15
18
  }
16
19
  execute(menu) {
17
20
  if ((menu.disabled && !menu.disabled(this.aiTable(), this.targetName(), this.position())) || !menu.disabled) {
18
- menu.exec && menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService);
21
+ menu.exec &&
22
+ menu.exec(this.aiTable(), this.targetName(), this.position(), this.aiTableGridSelectionService, this.notifyService);
19
23
  }
20
24
  }
21
25
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableContextMenu, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableContextMenu, isStandalone: true, selector: "ai-table-context-menu", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, targetName: { classPropertyName: "targetName", publicName: "targetName", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "context-menu" }, usesInheritance: true, ngImport: i0, template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'ai-table-prevent-clear-selection remove-record': !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name }}</span>\n </a>\n }\n}\n", dependencies: [{ kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableContextMenu, isStandalone: true, selector: "ai-table-context-menu", inputs: { aiTable: { classPropertyName: "aiTable", publicName: "aiTable", isSignal: true, isRequired: true, transformFunction: null }, menuItems: { classPropertyName: "menuItems", publicName: "menuItems", isSignal: true, isRequired: true, transformFunction: null }, targetName: { classPropertyName: "targetName", publicName: "targetName", isSignal: true, isRequired: true, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: true, transformFunction: null } }, host: { classAttribute: "context-menu" }, usesInheritance: true, ngImport: i0, template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\n", dependencies: [{ kind: "directive", type: ThyDropdownMenuItemDirective, selector: "[thyDropdownMenuItem]", inputs: ["thyType", "thyDisabled"] }, { kind: "directive", type: ThyDropdownMenuItemNameDirective, selector: "[thyDropdownMenuItemName]" }, { kind: "directive", type: ThyDropdownMenuItemIconDirective, selector: "[thyDropdownMenuItemIcon]" }, { kind: "directive", type: ThyDropdownMenuItemMetaDirective, selector: "[thyDropdownMenuItemMeta]" }, { kind: "component", type: ThyIcon, selector: "thy-icon, [thy-icon]", inputs: ["thyIconType", "thyTwotoneColor", "thyIconName", "thyIconRotate", "thyIconSet", "thyIconLegging", "thyIconLinearGradient"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: ThyDivider, selector: "thy-divider", inputs: ["thyVertical", "thyStyle", "thyColor", "thyText", "thyTextDirection", "thyDeeper"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
27
  }
24
28
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableContextMenu, decorators: [{
25
29
  type: Component,
26
30
  args: [{ selector: 'ai-table-context-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
27
31
  class: 'context-menu'
28
- }, imports: [ThyDropdownMenuItemDirective, ThyIcon, NgClass], template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{ 'ai-table-prevent-clear-selection remove-record': !disabled }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span>{{ menu.name }}</span>\n </a>\n }\n}\n" }]
32
+ }, imports: [
33
+ ThyDropdownMenuItemDirective,
34
+ ThyDropdownMenuItemNameDirective,
35
+ ThyDropdownMenuItemIconDirective,
36
+ ThyDropdownMenuItemMetaDirective,
37
+ ThyIcon,
38
+ NgClass,
39
+ ThyDivider
40
+ ], template: "@for (menu of menuItems(); track $index) {\n @if ((menu.hidden && !menu.hidden(aiTable(), targetName(), position())) || !menu.hidden) {\n @if (menu.type === 'divider') {\n <thy-divider thyStyle=\"solid\"></thy-divider>\n } @else {\n @let disabled = !!(menu.disabled && menu.disabled(aiTable(), targetName(), position()));\n @let isRemoveRecords = menu.type === 'removeRecords';\n @let isPreventClearSelection = menu.type === 'copyCells' || menu.type === 'pasteCells' || menu.type === 'removeRecords';\n\n <a\n thyDropdownMenuItem\n href=\"javascript:;\"\n [ngClass]=\"{\n 'remove-record': isRemoveRecords && !disabled,\n 'ai-table-prevent-clear-selection': isPreventClearSelection && !disabled\n }\"\n (click)=\"execute(menu)\"\n [thyDisabled]=\"disabled\"\n >\n <thy-icon thyDropdownMenuItemIcon [thyIconName]=\"menu.icon!\"></thy-icon>\n <span thyDropdownMenuItemName>{{ menu.name }}</span>\n <span thyDropdownMenuItemMeta class=\"text-desc\">{{ menu.shortcutKey }}</span>\n </a>\n }\n }\n}\n" }]
29
41
  }] });
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2NvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7O0FBWS9FLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSx1QkFBdUI7SUFWL0Q7O1FBV1ksZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFMUUsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQVcsQ0FBQztRQUVwQyxjQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBNEIsQ0FBQztRQUV2RCxlQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVSxDQUFDO1FBRXRDLGFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE0QixDQUFDO0tBT3pEO0lBTEcsT0FBTyxDQUFDLElBQTRCO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDMUcsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1FBQ2pILENBQUM7SUFDTCxDQUFDOytHQWZRLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9xQkNsQi9CLHVuQkFlQSw0Q0RDYyw0QkFBNEIsc0dBQUUsT0FBTyxzTUFBRSxPQUFPOzs0RkFFL0Msa0JBQWtCO2tCQVY5QixTQUFTOytCQUNJLHVCQUF1QixjQUVyQixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsS0FBSyxFQUFFLGNBQWM7cUJBQ3hCLFdBQ1EsQ0FBQyw0QkFBNEIsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUaHlEcm9wZG93bkFic3RyYWN0TWVudSwgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSB9IGZyb20gJ25neC10ZXRoeXMvZHJvcGRvd24nO1xuaW1wb3J0IHsgVGh5SWNvbiB9IGZyb20gJ25neC10ZXRoeXMvaWNvbic7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2FpLXRhYmxlLWNvbnRleHQtbWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtbWVudS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnY29udGV4dC1tZW51J1xuICAgIH0sXG4gICAgaW1wb3J0czogW1RoeURyb3Bkb3duTWVudUl0ZW1EaXJlY3RpdmUsIFRoeUljb24sIE5nQ2xhc3NdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVDb250ZXh0TWVudSBleHRlbmRzIFRoeURyb3Bkb3duQWJzdHJhY3RNZW51IHtcbiAgICBwcml2YXRlIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgYWlUYWJsZSA9IGlucHV0LnJlcXVpcmVkPEFJVGFibGU+KCk7XG5cbiAgICBtZW51SXRlbXMgPSBpbnB1dC5yZXF1aXJlZDxBSVRhYmxlQ29udGV4dE1lbnVJdGVtW10+KCk7XG5cbiAgICB0YXJnZXROYW1lID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xuXG4gICAgcG9zaXRpb24gPSBpbnB1dC5yZXF1aXJlZDx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+KCk7XG5cbiAgICBleGVjdXRlKG1lbnU6IEFJVGFibGVDb250ZXh0TWVudUl0ZW0pIHtcbiAgICAgICAgaWYgKChtZW51LmRpc2FibGVkICYmICFtZW51LmRpc2FibGVkKHRoaXMuYWlUYWJsZSgpLCB0aGlzLnRhcmdldE5hbWUoKSwgdGhpcy5wb3NpdGlvbigpKSkgfHwgIW1lbnUuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIG1lbnUuZXhlYyAmJiBtZW51LmV4ZWModGhpcy5haVRhYmxlKCksIHRoaXMudGFyZ2V0TmFtZSgpLCB0aGlzLnBvc2l0aW9uKCksIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBmb3IgKG1lbnUgb2YgbWVudUl0ZW1zKCk7IHRyYWNrICRpbmRleCkge1xuICAgIEBpZiAoKG1lbnUuaGlkZGVuICYmICFtZW51LmhpZGRlbihhaVRhYmxlKCksIHRhcmdldE5hbWUoKSwgcG9zaXRpb24oKSkpIHx8ICFtZW51LmhpZGRlbikge1xuICAgICAgICBAbGV0IGRpc2FibGVkID0gISEobWVudS5kaXNhYmxlZCAmJiBtZW51LmRpc2FibGVkKGFpVGFibGUoKSwgdGFyZ2V0TmFtZSgpLCBwb3NpdGlvbigpKSk7XG4gICAgICAgIDxhXG4gICAgICAgICAgICB0aHlEcm9wZG93bk1lbnVJdGVtXG4gICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDo7XCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FpLXRhYmxlLXByZXZlbnQtY2xlYXItc2VsZWN0aW9uIHJlbW92ZS1yZWNvcmQnOiAhZGlzYWJsZWQgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZShtZW51KVwiXG4gICAgICAgICAgICBbdGh5RGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dGh5LWljb24gW3RoeUljb25OYW1lXT1cIm1lbnUuaWNvbiFcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgPHNwYW4+e3sgbWVudS5uYW1lIH19PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgfVxufVxuIl19
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2NvbXBvbmVudHMvY29udGV4dC1tZW51L2NvbnRleHQtbWVudS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2NvbnRleHQtbWVudS9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLDRCQUE0QixFQUM1QixnQ0FBZ0MsRUFDaEMsZ0NBQWdDLEVBQ2hDLGdDQUFnQyxFQUNuQyxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHaEQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDL0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7O0FBb0JyRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsdUJBQXVCO0lBbEIvRDs7UUFtQkksZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsa0JBQWEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUV6QyxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBVyxDQUFDO1FBRXBDLGNBQVMsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUE0QixDQUFDO1FBRXZELGVBQVUsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7UUFFdEMsYUFBUSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTRCLENBQUM7S0FRekQ7SUFORyxPQUFPLENBQUMsSUFBNEI7UUFDaEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMxRyxJQUFJLENBQUMsSUFBSTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUgsQ0FBQztJQUNMLENBQUM7K0dBbEJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLG9xQkNsQy9CLHl2Q0EwQkEsNENERFEsNEJBQTRCLHNHQUM1QixnQ0FBZ0Msc0VBQ2hDLGdDQUFnQyxzRUFDaEMsZ0NBQWdDLHNFQUNoQyxPQUFPLHNNQUNQLE9BQU8sb0ZBQ1AsVUFBVTs7NEZBR0wsa0JBQWtCO2tCQWxCOUIsU0FBUzsrQkFDSSx1QkFBdUIsY0FFckIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxjQUFjO3FCQUN4QixXQUNRO3dCQUNMLDRCQUE0Qjt3QkFDNUIsZ0NBQWdDO3dCQUNoQyxnQ0FBZ0M7d0JBQ2hDLGdDQUFnQzt3QkFDaEMsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFVBQVU7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgVGh5RHJvcGRvd25BYnN0cmFjdE1lbnUsXG4gICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtTmFtZURpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtSWNvbkRpcmVjdGl2ZSxcbiAgICBUaHlEcm9wZG93bk1lbnVJdGVtTWV0YURpcmVjdGl2ZVxufSBmcm9tICduZ3gtdGV0aHlzL2Ryb3Bkb3duJztcbmltcG9ydCB7IFRoeUljb24gfSBmcm9tICduZ3gtdGV0aHlzL2ljb24nO1xuaW1wb3J0IHsgVGh5RGl2aWRlciB9IGZyb20gJ25neC10ZXRoeXMvZGl2aWRlcic7XG5pbXBvcnQgeyBBSVRhYmxlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlQ29udGV4dE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VsZWN0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGh5Tm90aWZ5U2VydmljZSB9IGZyb20gJ25neC10ZXRoeXMvbm90aWZ5JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhaS10YWJsZS1jb250ZXh0LW1lbnUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NvbnRleHQtbWVudSdcbiAgICB9LFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbURpcmVjdGl2ZSxcbiAgICAgICAgVGh5RHJvcGRvd25NZW51SXRlbU5hbWVEaXJlY3RpdmUsXG4gICAgICAgIFRoeURyb3Bkb3duTWVudUl0ZW1JY29uRGlyZWN0aXZlLFxuICAgICAgICBUaHlEcm9wZG93bk1lbnVJdGVtTWV0YURpcmVjdGl2ZSxcbiAgICAgICAgVGh5SWNvbixcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgVGh5RGl2aWRlclxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUNvbnRleHRNZW51IGV4dGVuZHMgVGh5RHJvcGRvd25BYnN0cmFjdE1lbnUge1xuICAgIGFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSA9IGluamVjdChBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UpO1xuXG4gICAgbm90aWZ5U2VydmljZSA9IGluamVjdChUaHlOb3RpZnlTZXJ2aWNlKTtcblxuICAgIGFpVGFibGUgPSBpbnB1dC5yZXF1aXJlZDxBSVRhYmxlPigpO1xuXG4gICAgbWVudUl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8QUlUYWJsZUNvbnRleHRNZW51SXRlbVtdPigpO1xuXG4gICAgdGFyZ2V0TmFtZSA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcblxuICAgIHBvc2l0aW9uID0gaW5wdXQucmVxdWlyZWQ8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9PigpO1xuXG4gICAgZXhlY3V0ZShtZW51OiBBSVRhYmxlQ29udGV4dE1lbnVJdGVtKSB7XG4gICAgICAgIGlmICgobWVudS5kaXNhYmxlZCAmJiAhbWVudS5kaXNhYmxlZCh0aGlzLmFpVGFibGUoKSwgdGhpcy50YXJnZXROYW1lKCksIHRoaXMucG9zaXRpb24oKSkpIHx8ICFtZW51LmRpc2FibGVkKSB7XG4gICAgICAgICAgICBtZW51LmV4ZWMgJiZcbiAgICAgICAgICAgICAgICBtZW51LmV4ZWModGhpcy5haVRhYmxlKCksIHRoaXMudGFyZ2V0TmFtZSgpLCB0aGlzLnBvc2l0aW9uKCksIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLCB0aGlzLm5vdGlmeVNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGZvciAobWVudSBvZiBtZW51SXRlbXMoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgQGlmICgobWVudS5oaWRkZW4gJiYgIW1lbnUuaGlkZGVuKGFpVGFibGUoKSwgdGFyZ2V0TmFtZSgpLCBwb3NpdGlvbigpKSkgfHwgIW1lbnUuaGlkZGVuKSB7XG4gICAgICAgIEBpZiAobWVudS50eXBlID09PSAnZGl2aWRlcicpIHtcbiAgICAgICAgICAgIDx0aHktZGl2aWRlciB0aHlTdHlsZT1cInNvbGlkXCI+PC90aHktZGl2aWRlcj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAbGV0IGRpc2FibGVkID0gISEobWVudS5kaXNhYmxlZCAmJiBtZW51LmRpc2FibGVkKGFpVGFibGUoKSwgdGFyZ2V0TmFtZSgpLCBwb3NpdGlvbigpKSk7XG4gICAgICAgICAgICBAbGV0IGlzUmVtb3ZlUmVjb3JkcyA9IG1lbnUudHlwZSA9PT0gJ3JlbW92ZVJlY29yZHMnO1xuICAgICAgICAgICAgQGxldCBpc1ByZXZlbnRDbGVhclNlbGVjdGlvbiA9IG1lbnUudHlwZSA9PT0gJ2NvcHlDZWxscycgfHwgbWVudS50eXBlID09PSAncGFzdGVDZWxscycgfHwgbWVudS50eXBlID09PSAncmVtb3ZlUmVjb3Jkcyc7XG5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgdGh5RHJvcGRvd25NZW51SXRlbVxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ3JlbW92ZS1yZWNvcmQnOiBpc1JlbW92ZVJlY29yZHMgJiYgIWRpc2FibGVkLFxuICAgICAgICAgICAgICAgICAgICAnYWktdGFibGUtcHJldmVudC1jbGVhci1zZWxlY3Rpb24nOiBpc1ByZXZlbnRDbGVhclNlbGVjdGlvbiAmJiAhZGlzYWJsZWRcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0ZShtZW51KVwiXG4gICAgICAgICAgICAgICAgW3RoeURpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGh5LWljb24gdGh5RHJvcGRvd25NZW51SXRlbUljb24gW3RoeUljb25OYW1lXT1cIm1lbnUuaWNvbiFcIj48L3RoeS1pY29uPlxuICAgICAgICAgICAgICAgIDxzcGFuIHRoeURyb3Bkb3duTWVudUl0ZW1OYW1lPnt7IG1lbnUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiB0aHlEcm9wZG93bk1lbnVJdGVtTWV0YSBjbGFzcz1cInRleHQtZGVzY1wiPnt7IG1lbnUuc2hvcnRjdXRLZXkgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,150 @@
1
+ import { ChangeDetectionStrategy, Component, effect, ElementRef, inject, output, Renderer2 } from '@angular/core';
2
+ import { DragType } from '../../core';
3
+ import { AITableGridSelectionService } from '../../services/selection.service';
4
+ import * as i0 from "@angular/core";
5
+ export class AITableDragComponent {
6
+ constructor() {
7
+ this.dragEnd = output();
8
+ this.aiTableGridSelectionService = inject(AITableGridSelectionService);
9
+ this.render2 = inject(Renderer2);
10
+ this.elementRef = inject((ElementRef));
11
+ this.draggedData = null;
12
+ this.mouseStartPosition = null;
13
+ this.aiTableDrag = null;
14
+ effect(() => {
15
+ const drag = this.aiTableGridSelectionService.aiTable.dragState?.();
16
+ if (drag && drag.sourceIds.size > 0) {
17
+ if (!this.rect || !this.line) {
18
+ return;
19
+ }
20
+ this.aiTableDrag = drag;
21
+ }
22
+ else {
23
+ this.aiTableDrag = null;
24
+ }
25
+ });
26
+ }
27
+ ngOnInit() {
28
+ this.rect = this.elementRef.nativeElement.querySelector('.rect');
29
+ this.line = this.elementRef.nativeElement.querySelector('.line');
30
+ this.mousedownListener = this.render2.listen('window', 'mousedown', (e) => {
31
+ this.mouseStartPosition = { x: e.x, y: e.y };
32
+ });
33
+ this.mousemoveListener = this.render2.listen('window', 'mousemove', (e) => {
34
+ if (this.timer) {
35
+ cancelAnimationFrame(this.timer);
36
+ }
37
+ this.timer = requestAnimationFrame(() => {
38
+ if (this.mouseStartPosition && this.aiTableDrag) {
39
+ this.handleDrag(e, this.aiTableDrag);
40
+ }
41
+ });
42
+ });
43
+ this.mouseupListener = this.render2.listen('window', 'mouseup', () => {
44
+ this.mouseStartPosition = null;
45
+ this.aiTableDrag = null;
46
+ this.handleDragEnd();
47
+ });
48
+ }
49
+ handleDrag(e, drag) {
50
+ if (drag.type !== DragType.none) {
51
+ this.render2.setStyle(this.elementRef.nativeElement, 'display', 'block');
52
+ }
53
+ else {
54
+ return;
55
+ }
56
+ const moveX = e.x - this.mouseStartPosition.x;
57
+ const aiTable = this.aiTableGridSelectionService.aiTable;
58
+ const scroll = drag.scroll || { x: 0, y: 0 };
59
+ const coordinate = drag.coordinate;
60
+ switch (drag.type) {
61
+ case DragType.field:
62
+ const fields = aiTable.fields();
63
+ let width = 0;
64
+ fields.forEach((field, index) => {
65
+ if (drag.sourceIds.has(field._id)) {
66
+ width += coordinate.columnIndicesSizeMap[index] || 0;
67
+ }
68
+ });
69
+ const visibleColumnIndexMap = aiTable.context.visibleColumnsIndexMap();
70
+ const sourceColumnIndex = visibleColumnIndexMap.get(drag.sourceIds.values().next().value) || 0;
71
+ const sourceColumnStartX = coordinate.getColumnOffset(sourceColumnIndex);
72
+ const sourceColumnWidth = coordinate.getColumnWidth(sourceColumnIndex);
73
+ // TODO: 目前默认第一列为冻结列,后期支持设置冻结列需要处理
74
+ const isSourceColumnFrozen = sourceColumnIndex === 0;
75
+ const pointerX = moveX + sourceColumnStartX;
76
+ // 拖拽中心点
77
+ const dragCenter = sourceColumnWidth / 2;
78
+ let targetColumnIndex = coordinate.getColumnStartIndex(pointerX + (isSourceColumnFrozen ? scroll.x : 0) + dragCenter);
79
+ let targetColumnStartX = coordinate.getColumnOffset(targetColumnIndex);
80
+ this.render2.setStyle(this.rect, 'cursor', 'move');
81
+ this.render2.setStyle(this.rect, 'width', `${width}px`);
82
+ this.render2.setStyle(this.rect, 'height', `100%`);
83
+ this.render2.setStyle(this.rect, 'top', 0);
84
+ this.render2.setStyle(this.rect, 'left', `${pointerX - (isSourceColumnFrozen ? 0 : scroll.x)}px`);
85
+ const lastColumnOffset = coordinate.getColumnOffset(coordinate.columnCount - 1);
86
+ const lastColumnWidth = coordinate.getColumnWidth(coordinate.columnCount - 1);
87
+ let isLastColumn = false;
88
+ // 处理最后一列
89
+ if (pointerX + dragCenter > lastColumnOffset + lastColumnWidth) {
90
+ targetColumnIndex = coordinate.columnCount;
91
+ targetColumnStartX = lastColumnOffset + lastColumnWidth;
92
+ isLastColumn = true;
93
+ }
94
+ if ((targetColumnIndex >= 0 && (targetColumnIndex - sourceColumnIndex > 1 || targetColumnIndex - sourceColumnIndex < 0)) ||
95
+ isLastColumn) {
96
+ this.render2.setStyle(this.line, 'width', `2px`);
97
+ this.render2.setStyle(this.line, 'height', `100%`);
98
+ this.render2.setStyle(this.line, 'top', 0);
99
+ this.render2.setStyle(this.line, 'left', `${targetColumnStartX - scroll.x}px`);
100
+ const fieldsIndex = [];
101
+ drag.sourceIds.forEach((id) => {
102
+ const index = visibleColumnIndexMap.get(id) || 0;
103
+ fieldsIndex.push(index);
104
+ });
105
+ // 向右移动目标在目标列的前一列
106
+ if (targetColumnIndex > sourceColumnIndex) {
107
+ targetColumnIndex -= 1;
108
+ }
109
+ this.draggedData = { type: DragType.field, targetIndex: targetColumnIndex, fieldIds: drag.sourceIds, fieldsIndex };
110
+ }
111
+ else {
112
+ this.render2.setStyle(this.line, 'width', 0);
113
+ this.draggedData = null;
114
+ }
115
+ break;
116
+ case DragType.record:
117
+ break;
118
+ case DragType.columnWidth:
119
+ break;
120
+ }
121
+ }
122
+ handleDragEnd() {
123
+ this.render2.setStyle(this.elementRef.nativeElement, 'display', 'none');
124
+ if (this.draggedData) {
125
+ this.dragEnd.emit({ ...this.draggedData });
126
+ this.draggedData = null;
127
+ }
128
+ }
129
+ ngOnDestroy() {
130
+ if (this.mousedownListener)
131
+ this.mousedownListener();
132
+ if (this.mousemoveListener)
133
+ this.mousemoveListener();
134
+ if (this.mouseupListener)
135
+ this.mouseupListener();
136
+ if (this.timer) {
137
+ cancelAnimationFrame(this.timer);
138
+ this.timer = null;
139
+ }
140
+ }
141
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AITableDragComponent, isStandalone: true, selector: "ai-table-drag", outputs: { dragEnd: "dragEnd" }, host: { classAttribute: "drag-container" }, ngImport: i0, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143
+ }
144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableDragComponent, decorators: [{
145
+ type: Component,
146
+ args: [{ selector: 'ai-table-drag', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, host: {
147
+ class: 'drag-container'
148
+ }, template: "<div class=\"rect\"></div>\n<div class=\"line\"></div>" }]
149
+ }], ctorParameters: () => [] });
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9jb21wb25lbnRzL2RyYWcvZHJhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JJLE9BQU8sRUFBaUMsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOztBQVcvRSxNQUFNLE9BQU8sb0JBQW9CO0lBeUI3QjtRQXhCQSxZQUFPLEdBQUcsTUFBTSxFQUFlLENBQUM7UUFFeEIsZ0NBQTJCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFbEUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwQyxlQUFVLEdBQTRCLE1BQU0sQ0FBQyxDQUFBLFVBQXVCLENBQUEsQ0FBQyxDQUFDO1FBTTlELGdCQUFXLEdBQXVCLElBQUksQ0FBQztRQUV2Qyx1QkFBa0IsR0FBb0MsSUFBSSxDQUFDO1FBRTNELGdCQUFXLEdBQTRCLElBQUksQ0FBQztRQVNoRCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDO1lBQ3BFLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLElB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QjttR0FBcEIsb0JBQW9CLHNKQ2JqQyx3REFDd0I7OzRGRFlYLG9CQUFvQjtrQkFUaEMsU0FBUzsrQkFDSSxlQUFlLGNBRWIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxnQkFBZ0I7cUJBQzFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZURyYWdTdGF0ZSwgRHJhZ0VuZERhdGEsIERyYWdUeXBlIH0gZnJvbSAnLi4vLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZHJhZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RyYWcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2RyYWctY29udGFpbmVyJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZURyYWdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgZHJhZ0VuZCA9IG91dHB1dDxEcmFnRW5kRGF0YT4oKTtcblxuICAgIHByaXZhdGUgYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlID0gaW5qZWN0KEFJVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZSk7XG5cbiAgICBwcml2YXRlIHJlbmRlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcblxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+ID0gaW5qZWN0KEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+KTtcblxuICAgIHByaXZhdGUgcmVjdCE6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBsaW5lITogSFRNTEVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIGRyYWdnZWREYXRhOiBEcmFnRW5kRGF0YSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBtb3VzZVN0YXJ0UG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBhaVRhYmxlRHJhZzogQUlUYWJsZURyYWdTdGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSB0aW1lciE6IG51bWJlciB8IG51bGw7XG5cbiAgICBwcml2YXRlIG1vdXNlZG93bkxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIG1vdXNlbW92ZUxpc3RlbmVyPzogKCkgPT4gdm9pZDtcbiAgICBwcml2YXRlIG1vdXNldXBMaXN0ZW5lcj86ICgpID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRyYWcgPSB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5haVRhYmxlLmRyYWdTdGF0ZT8uKCk7XG4gICAgICAgICAgICBpZiAoZHJhZyAmJiBkcmFnLnNvdXJjZUlkcy5zaXplID4gMCkge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5yZWN0IHx8ICF0aGlzLmxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVEcmFnID0gZHJhZztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlRHJhZyA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnJlY3QgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcucmVjdCcpITtcbiAgICAgICAgdGhpcy5saW5lID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUnKSE7XG4gICAgICAgIHRoaXMubW91c2Vkb3duTGlzdGVuZXIgPSB0aGlzLnJlbmRlcjIubGlzdGVuKCd3aW5kb3cnLCAnbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VTdGFydFBvc2l0aW9uID0geyB4OiBlLngsIHk6IGUueSB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lciA9IHRoaXMucmVuZGVyMi5saXN0ZW4oJ3dpbmRvdycsICdtb3VzZW1vdmUnLCAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnRpbWVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiAmJiB0aGlzLmFpVGFibGVEcmFnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZyhlLCB0aGlzLmFpVGFibGVEcmFnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubW91c2V1cExpc3RlbmVyID0gdGhpcy5yZW5kZXIyLmxpc3Rlbignd2luZG93JywgJ21vdXNldXAnLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVEcmFnID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZURyYWcoZTogTW91c2VFdmVudCwgZHJhZzogQUlUYWJsZURyYWdTdGF0ZSkge1xuICAgICAgICBpZiAoZHJhZy50eXBlICE9PSBEcmFnVHlwZS5ub25lKSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkaXNwbGF5JywgJ2Jsb2NrJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW92ZVggPSBlLnggLSB0aGlzLm1vdXNlU3RhcnRQb3NpdGlvbiEueDtcbiAgICAgICAgY29uc3QgYWlUYWJsZSA9IHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmFpVGFibGU7XG4gICAgICAgIGNvbnN0IHNjcm9sbCA9IGRyYWcuc2Nyb2xsIHx8IHsgeDogMCwgeTogMCB9O1xuICAgICAgICBjb25zdCBjb29yZGluYXRlID0gZHJhZy5jb29yZGluYXRlITtcbiAgICAgICAgc3dpdGNoIChkcmFnLnR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUuZmllbGQ6XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzID0gYWlUYWJsZS5maWVsZHMoKTtcbiAgICAgICAgICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyYWcuc291cmNlSWRzLmhhcyhmaWVsZC5faWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCArPSBjb29yZGluYXRlLmNvbHVtbkluZGljZXNTaXplTWFwW2luZGV4XSB8fCAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHVtbkluZGV4TWFwID0gYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlQ29sdW1uc0luZGV4TWFwKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uSW5kZXggPSB2aXNpYmxlQ29sdW1uSW5kZXhNYXAuZ2V0KGRyYWcuc291cmNlSWRzLnZhbHVlcygpLm5leHQoKS52YWx1ZSEpIHx8IDA7XG4gICAgICAgICAgICAgICAgY29uc3Qgc291cmNlQ29sdW1uU3RhcnRYID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5PZmZzZXQoc291cmNlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChzb3VyY2VDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzog55uu5YmN6buY6K6k56ys5LiA5YiX5Li65Ya757uT5YiX77yM5ZCO5pyf5pSv5oyB6K6+572u5Ya757uT5YiX6ZyA6KaB5aSE55CGXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTb3VyY2VDb2x1bW5Gcm96ZW4gPSBzb3VyY2VDb2x1bW5JbmRleCA9PT0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludGVyWCA9IG1vdmVYICsgc291cmNlQ29sdW1uU3RhcnRYO1xuICAgICAgICAgICAgICAgIC8vIOaLluaLveS4reW/g+eCuVxuICAgICAgICAgICAgICAgIGNvbnN0IGRyYWdDZW50ZXIgPSBzb3VyY2VDb2x1bW5XaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldENvbHVtbkluZGV4ID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5TdGFydEluZGV4KHBvaW50ZXJYICsgKGlzU291cmNlQ29sdW1uRnJvemVuID8gc2Nyb2xsLnggOiAwKSArIGRyYWdDZW50ZXIpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRDb2x1bW5TdGFydFggPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldCh0YXJnZXRDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2N1cnNvcicsICdtb3ZlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ3dpZHRoJywgYCR7d2lkdGh9cHhgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5yZWN0LCAnaGVpZ2h0JywgYDEwMCVgKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5yZWN0LCAndG9wJywgMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMucmVjdCwgJ2xlZnQnLCBgJHtwb2ludGVyWCAtIChpc1NvdXJjZUNvbHVtbkZyb3plbiA/IDAgOiBzY3JvbGwueCl9cHhgKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb2x1bW5PZmZzZXQgPSBjb29yZGluYXRlLmdldENvbHVtbk9mZnNldChjb29yZGluYXRlLmNvbHVtbkNvdW50IC0gMSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdENvbHVtbldpZHRoID0gY29vcmRpbmF0ZS5nZXRDb2x1bW5XaWR0aChjb29yZGluYXRlLmNvbHVtbkNvdW50IC0gMSk7XG5cbiAgICAgICAgICAgICAgICBsZXQgaXNMYXN0Q29sdW1uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8g5aSE55CG5pyA5ZCO5LiA5YiXXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50ZXJYICsgZHJhZ0NlbnRlciA+IGxhc3RDb2x1bW5PZmZzZXQgKyBsYXN0Q29sdW1uV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uSW5kZXggPSBjb29yZGluYXRlLmNvbHVtbkNvdW50O1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRDb2x1bW5TdGFydFggPSBsYXN0Q29sdW1uT2Zmc2V0ICsgbGFzdENvbHVtbldpZHRoO1xuICAgICAgICAgICAgICAgICAgICBpc0xhc3RDb2x1bW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICh0YXJnZXRDb2x1bW5JbmRleCA+PSAwICYmICh0YXJnZXRDb2x1bW5JbmRleCAtIHNvdXJjZUNvbHVtbkluZGV4ID4gMSB8fCB0YXJnZXRDb2x1bW5JbmRleCAtIHNvdXJjZUNvbHVtbkluZGV4IDwgMCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzTGFzdENvbHVtblxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAnd2lkdGgnLCBgMnB4YCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICdoZWlnaHQnLCBgMTAwJWApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcjIuc2V0U3R5bGUodGhpcy5saW5lLCAndG9wJywgMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyMi5zZXRTdHlsZSh0aGlzLmxpbmUsICdsZWZ0JywgYCR7dGFyZ2V0Q29sdW1uU3RhcnRYIC0gc2Nyb2xsLnh9cHhgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRzSW5kZXg6IG51bWJlcltdID0gW107XG4gICAgICAgICAgICAgICAgICAgIGRyYWcuc291cmNlSWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHZpc2libGVDb2x1bW5JbmRleE1hcC5nZXQoaWQpIHx8IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHNJbmRleC5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIC8vIOWQkeWPs+enu+WKqOebruagh+WcqOebruagh+WIl+eahOWJjeS4gOWIl1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0Q29sdW1uSW5kZXggPiBzb3VyY2VDb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Q29sdW1uSW5kZXggLT0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0geyB0eXBlOiBEcmFnVHlwZS5maWVsZCwgdGFyZ2V0SW5kZXg6IHRhcmdldENvbHVtbkluZGV4LCBmaWVsZElkczogZHJhZy5zb3VyY2VJZHMsIGZpZWxkc0luZGV4IH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMubGluZSwgJ3dpZHRoJywgMCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZHJhZ2dlZERhdGEgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRHJhZ1R5cGUucmVjb3JkOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5jb2x1bW5XaWR0aDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlRHJhZ0VuZCgpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIyLnNldFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzcGxheScsICdub25lJyk7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWREYXRhKSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdFbmQuZW1pdCh7IC4uLnRoaXMuZHJhZ2dlZERhdGEgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWREYXRhID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBpZiAodGhpcy5tb3VzZWRvd25MaXN0ZW5lcikgdGhpcy5tb3VzZWRvd25MaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZW1vdmVMaXN0ZW5lcikgdGhpcy5tb3VzZW1vdmVMaXN0ZW5lcigpO1xuICAgICAgICBpZiAodGhpcy5tb3VzZXVwTGlzdGVuZXIpIHRoaXMubW91c2V1cExpc3RlbmVyKCk7XG5cbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICAgICAgdGhpcy50aW1lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicmVjdFwiPjwvZGl2PlxuPGRpdiBjbGFzcz1cImxpbmVcIj48L2Rpdj4iXX0=