@igo2/common 20.2.0 → 21.0.0-next.10

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 (109) hide show
  1. package/fesm2022/igo2-common-action.mjs +62 -77
  2. package/fesm2022/igo2-common-action.mjs.map +1 -1
  3. package/fesm2022/igo2-common-backdrop.mjs +11 -20
  4. package/fesm2022/igo2-common-backdrop.mjs.map +1 -1
  5. package/fesm2022/igo2-common-badge.mjs +7 -8
  6. package/fesm2022/igo2-common-badge.mjs.map +1 -1
  7. package/fesm2022/igo2-common-clickout.mjs +11 -11
  8. package/fesm2022/igo2-common-clickout.mjs.map +1 -1
  9. package/fesm2022/igo2-common-clone.mjs +8 -9
  10. package/fesm2022/igo2-common-clone.mjs.map +1 -1
  11. package/fesm2022/igo2-common-collapsible.mjs +18 -27
  12. package/fesm2022/igo2-common-collapsible.mjs.map +1 -1
  13. package/fesm2022/igo2-common-color.mjs +10 -10
  14. package/fesm2022/igo2-common-color.mjs.map +1 -1
  15. package/fesm2022/igo2-common-confirm-dialog.mjs +12 -11
  16. package/fesm2022/igo2-common-confirm-dialog.mjs.map +1 -1
  17. package/fesm2022/igo2-common-context-menu.mjs +23 -27
  18. package/fesm2022/igo2-common-context-menu.mjs.map +1 -1
  19. package/fesm2022/igo2-common-custom-html.mjs +11 -12
  20. package/fesm2022/igo2-common-custom-html.mjs.map +1 -1
  21. package/fesm2022/igo2-common-datepicker.mjs +26 -20
  22. package/fesm2022/igo2-common-datepicker.mjs.map +1 -1
  23. package/fesm2022/igo2-common-dom.mjs +10 -8
  24. package/fesm2022/igo2-common-dom.mjs.map +1 -1
  25. package/fesm2022/igo2-common-drag-drop.mjs +83 -55
  26. package/fesm2022/igo2-common-drag-drop.mjs.map +1 -1
  27. package/fesm2022/igo2-common-dynamic-component.mjs +27 -21
  28. package/fesm2022/igo2-common-dynamic-component.mjs.map +1 -1
  29. package/fesm2022/igo2-common-entity.mjs +181 -148
  30. package/fesm2022/igo2-common-entity.mjs.map +1 -1
  31. package/fesm2022/igo2-common-flexible.mjs +26 -78
  32. package/fesm2022/igo2-common-flexible.mjs.map +1 -1
  33. package/fesm2022/igo2-common-form.mjs +426 -125
  34. package/fesm2022/igo2-common-form.mjs.map +1 -1
  35. package/fesm2022/igo2-common-home-button.mjs +7 -7
  36. package/fesm2022/igo2-common-icon.mjs +8 -8
  37. package/fesm2022/igo2-common-icon.mjs.map +1 -1
  38. package/fesm2022/igo2-common-image.mjs +14 -16
  39. package/fesm2022/igo2-common-image.mjs.map +1 -1
  40. package/fesm2022/igo2-common-interactive-tour.mjs +55 -32
  41. package/fesm2022/igo2-common-interactive-tour.mjs.map +1 -1
  42. package/fesm2022/igo2-common-json-dialog.mjs +11 -11
  43. package/fesm2022/igo2-common-json-dialog.mjs.map +1 -1
  44. package/fesm2022/igo2-common-keyvalue.mjs +11 -10
  45. package/fesm2022/igo2-common-keyvalue.mjs.map +1 -1
  46. package/fesm2022/igo2-common-list.mjs +28 -31
  47. package/fesm2022/igo2-common-list.mjs.map +1 -1
  48. package/fesm2022/igo2-common-panel.mjs +12 -13
  49. package/fesm2022/igo2-common-panel.mjs.map +1 -1
  50. package/fesm2022/igo2-common-resizable-bar.mjs +11 -17
  51. package/fesm2022/igo2-common-resizable-bar.mjs.map +1 -1
  52. package/fesm2022/igo2-common-select-value-dialog.mjs +23 -13
  53. package/fesm2022/igo2-common-select-value-dialog.mjs.map +1 -1
  54. package/fesm2022/igo2-common-sidenav.mjs +14 -19
  55. package/fesm2022/igo2-common-sidenav.mjs.map +1 -1
  56. package/fesm2022/igo2-common-spinner.mjs +14 -15
  57. package/fesm2022/igo2-common-spinner.mjs.map +1 -1
  58. package/fesm2022/igo2-common-stop-propagation.mjs +12 -14
  59. package/fesm2022/igo2-common-stop-propagation.mjs.map +1 -1
  60. package/fesm2022/igo2-common-table.mjs +62 -69
  61. package/fesm2022/igo2-common-table.mjs.map +1 -1
  62. package/fesm2022/igo2-common-timepicker.mjs +14 -15
  63. package/fesm2022/igo2-common-timepicker.mjs.map +1 -1
  64. package/fesm2022/igo2-common-tool.mjs +35 -32
  65. package/fesm2022/igo2-common-tool.mjs.map +1 -1
  66. package/fesm2022/igo2-common-widget.mjs +18 -18
  67. package/fesm2022/igo2-common-widget.mjs.map +1 -1
  68. package/fesm2022/igo2-common-workspace.mjs +28 -32
  69. package/fesm2022/igo2-common-workspace.mjs.map +1 -1
  70. package/package.json +60 -59
  71. package/{action/index.d.ts → types/igo2-common-action.d.ts} +2 -5
  72. package/{backdrop/index.d.ts → types/igo2-common-backdrop.d.ts} +2 -4
  73. package/{badge/index.d.ts → types/igo2-common-badge.d.ts} +4 -4
  74. package/{clickout/index.d.ts → types/igo2-common-clickout.d.ts} +1 -1
  75. package/{collapsible/index.d.ts → types/igo2-common-collapsible.d.ts} +2 -4
  76. package/{confirm-dialog/index.d.ts → types/igo2-common-confirm-dialog.d.ts} +1 -1
  77. package/{context-menu/index.d.ts → types/igo2-common-context-menu.d.ts} +2 -2
  78. package/{datepicker/index.d.ts → types/igo2-common-datepicker.d.ts} +9 -9
  79. package/{drag-drop/index.d.ts → types/igo2-common-drag-drop.d.ts} +15 -13
  80. package/{dynamic-component/index.d.ts → types/igo2-common-dynamic-component.d.ts} +3 -3
  81. package/{entity/index.d.ts → types/igo2-common-entity.d.ts} +64 -60
  82. package/types/igo2-common-flexible.d.ts +42 -0
  83. package/types/igo2-common-form.d.ts +568 -0
  84. package/{icon/index.d.ts → types/igo2-common-icon.d.ts} +1 -1
  85. package/{interactive-tour/index.d.ts → types/igo2-common-interactive-tour.d.ts} +6 -6
  86. package/{json-dialog/index.d.ts → types/igo2-common-json-dialog.d.ts} +4 -4
  87. package/{keyvalue/index.d.ts → types/igo2-common-keyvalue.d.ts} +4 -1
  88. package/{list/index.d.ts → types/igo2-common-list.d.ts} +7 -7
  89. package/{panel/index.d.ts → types/igo2-common-panel.d.ts} +1 -1
  90. package/{resizable-bar/index.d.ts → types/igo2-common-resizable-bar.d.ts} +4 -5
  91. package/{select-value-dialog/index.d.ts → types/igo2-common-select-value-dialog.d.ts} +2 -2
  92. package/{sidenav/index.d.ts → types/igo2-common-sidenav.d.ts} +2 -2
  93. package/{spinner/index.d.ts → types/igo2-common-spinner.d.ts} +1 -1
  94. package/{table/index.d.ts → types/igo2-common-table.d.ts} +17 -18
  95. package/{timepicker/index.d.ts → types/igo2-common-timepicker.d.ts} +3 -3
  96. package/{tool/index.d.ts → types/igo2-common-tool.d.ts} +7 -8
  97. package/{widget/index.d.ts → types/igo2-common-widget.d.ts} +7 -7
  98. package/{workspace/index.d.ts → types/igo2-common-workspace.d.ts} +12 -12
  99. package/flexible/index.d.ts +0 -56
  100. package/form/index.d.ts +0 -429
  101. /package/{clone/index.d.ts → types/igo2-common-clone.d.ts} +0 -0
  102. /package/{color/index.d.ts → types/igo2-common-color.d.ts} +0 -0
  103. /package/{custom-html/index.d.ts → types/igo2-common-custom-html.d.ts} +0 -0
  104. /package/{dom/index.d.ts → types/igo2-common-dom.d.ts} +0 -0
  105. /package/{environment/index.d.ts → types/igo2-common-environment.d.ts} +0 -0
  106. /package/{home-button/index.d.ts → types/igo2-common-home-button.d.ts} +0 -0
  107. /package/{image/index.d.ts → types/igo2-common-image.d.ts} +0 -0
  108. /package/{stop-propagation/index.d.ts → types/igo2-common-stop-propagation.d.ts} +0 -0
  109. /package/{index.d.ts → types/igo2-common.d.ts} +0 -0
@@ -8,7 +8,9 @@ class DOMService {
8
8
  http = inject(HttpClient);
9
9
  async getDomValuesFromURL(domOptions) {
10
10
  const url = domOptions.url;
11
- let result;
11
+ if (!url)
12
+ return [];
13
+ let result = [];
12
14
  await this.http
13
15
  .get(url)
14
16
  .pipe(map((response) => {
@@ -20,10 +22,10 @@ class DOMService {
20
22
  .toPromise();
21
23
  return result;
22
24
  }
23
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DOMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
24
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DOMService, providedIn: 'root' });
25
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DOMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
26
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DOMService, providedIn: 'root' });
25
27
  }
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DOMService, decorators: [{
28
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DOMService, decorators: [{
27
29
  type: Injectable,
28
30
  args: [{
29
31
  providedIn: 'root'
@@ -43,11 +45,11 @@ class IgoDOMModule {
43
45
  providers: [DOMService]
44
46
  };
45
47
  }
46
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDOMModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
47
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: IgoDOMModule });
48
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDOMModule, providers: [DOMService] });
48
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDOMModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
49
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: IgoDOMModule });
50
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDOMModule, providers: [DOMService] });
49
51
  }
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDOMModule, decorators: [{
52
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDOMModule, decorators: [{
51
53
  type: NgModule,
52
54
  args: [{
53
55
  providers: [DOMService]
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-common-dom.mjs","sources":["../../../packages/common/dom/src/dom.service.ts","../../../packages/common/dom/src/dom.module.ts","../../../packages/common/dom/src/igo2-common-dom.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { DOMOptions, DOMValue } from './dom.interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DOMService {\n private http = inject(HttpClient);\n\n async getDomValuesFromURL(domOptions: DOMOptions): Promise<DOMValue[]> {\n const url = domOptions.url;\n let result: DOMValue[];\n\n await this.http\n .get<any>(url)\n .pipe(\n map((response) => {\n result = response;\n return response;\n }),\n catchError((err: HttpErrorResponse) => {\n return throwError(err);\n })\n )\n .toPromise();\n\n return result;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DOMService } from './dom.service';\n\n/**\n * @deprecated it has no effect\n */\n\n@NgModule({\n providers: [DOMService]\n})\nexport class IgoDOMModule {\n /**\n * @deprecated it has no effect\n */\n static forRoot(): ModuleWithProviders<IgoDOMModule> {\n return {\n ngModule: IgoDOMModule,\n providers: [DOMService]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAWa,UAAU,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjC,MAAM,mBAAmB,CAAC,UAAsB,EAAA;AAC9C,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,QAAA,IAAI,MAAkB;QAEtB,MAAM,IAAI,CAAC;aACR,GAAG,CAAM,GAAG;AACZ,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;YACf,MAAM,GAAG,QAAQ;AACjB,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAsB,KAAI;AACpC,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;AAEd,QAAA,OAAO,MAAM;IACf;wGArBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;AAEG;MAKU,YAAY,CAAA;AACvB;;AAEG;AACH,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,UAAU;SACvB;IACH;wGATW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAZ,YAAY,EAAA,CAAA;yGAAZ,YAAY,EAAA,SAAA,EAFZ,CAAC,UAAU,CAAC,EAAA,CAAA;;4FAEZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,SAAS,EAAE,CAAC,UAAU;AACvB,iBAAA;;;ACVD;;AAEG;;;;"}
1
+ {"version":3,"file":"igo2-common-dom.mjs","sources":["../../../packages/common/dom/src/dom.service.ts","../../../packages/common/dom/src/dom.module.ts","../../../packages/common/dom/src/igo2-common-dom.ts"],"sourcesContent":["import { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\n\nimport { throwError } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport { DOMOptions, DOMValue } from './dom.interfaces';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DOMService {\n private http = inject(HttpClient);\n\n async getDomValuesFromURL(domOptions: DOMOptions): Promise<DOMValue[]> {\n const url = domOptions.url;\n if (!url) return [];\n let result: DOMValue[] = [];\n\n await this.http\n .get<DOMValue[]>(url)\n .pipe(\n map((response) => {\n result = response;\n return response;\n }),\n catchError((err: HttpErrorResponse) => {\n return throwError(err);\n })\n )\n .toPromise();\n\n return result;\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DOMService } from './dom.service';\n\n/**\n * @deprecated it has no effect\n */\n\n@NgModule({\n providers: [DOMService]\n})\nexport class IgoDOMModule {\n /**\n * @deprecated it has no effect\n */\n static forRoot(): ModuleWithProviders<IgoDOMModule> {\n return {\n ngModule: IgoDOMModule,\n providers: [DOMService]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;;MAWa,UAAU,CAAA;AACb,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAEjC,MAAM,mBAAmB,CAAC,UAAsB,EAAA;AAC9C,QAAA,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG;AAC1B,QAAA,IAAI,CAAC,GAAG;AAAE,YAAA,OAAO,EAAE;QACnB,IAAI,MAAM,GAAe,EAAE;QAE3B,MAAM,IAAI,CAAC;aACR,GAAG,CAAa,GAAG;AACnB,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,QAAQ,KAAI;YACf,MAAM,GAAG,QAAQ;AACjB,YAAA,OAAO,QAAQ;AACjB,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAsB,KAAI;AACpC,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC;AACxB,QAAA,CAAC,CAAC;AAEH,aAAA,SAAS,EAAE;AAEd,QAAA,OAAO,MAAM;IACf;wGAtBW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;4FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACND;;AAEG;MAKU,YAAY,CAAA;AACvB;;AAEG;AACH,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,YAAY;YACtB,SAAS,EAAE,CAAC,UAAU;SACvB;IACH;wGATW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;yGAAZ,YAAY,EAAA,CAAA;yGAAZ,YAAY,EAAA,SAAA,EAFZ,CAAC,UAAU,CAAC,EAAA,CAAA;;4FAEZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,SAAS,EAAE,CAAC,UAAU;AACvB,iBAAA;;;ACVD;;AAEG;;;;"}
@@ -3,7 +3,7 @@ import { input, output, HostListener, HostBinding, Directive, inject, ElementRef
3
3
  import { MatTreeNode } from '@angular/material/tree';
4
4
 
5
5
  class DragAndDropDirective {
6
- allowedExtensions = input([], ...(ngDevMode ? [{ debugName: "allowedExtensions" }] : []));
6
+ allowedExtensions = input([], ...(ngDevMode ? [{ debugName: "allowedExtensions" }] : /* istanbul ignore next */ []));
7
7
  filesDropped = output();
8
8
  filesInvalid = output();
9
9
  background = 'inherit';
@@ -34,13 +34,14 @@ class DragAndDropDirective {
34
34
  }
35
35
  }
36
36
  validExtensions(evt) {
37
- const files = evt.dataTransfer.files;
37
+ const files = evt.dataTransfer?.files;
38
38
  const filesObj = {
39
39
  valid: [],
40
40
  invalid: []
41
41
  };
42
- if (files.length > 0) {
43
- for (const file of files) {
42
+ if (files && files.length > 0) {
43
+ for (let i = 0; i < files.length; i++) {
44
+ const file = files[i];
44
45
  const ext = file.name.split('.')[file.name.split('.').length - 1];
45
46
  const allowedExtensions = this.allowedExtensions();
46
47
  if (allowedExtensions.length === 0 ||
@@ -54,14 +55,13 @@ class DragAndDropDirective {
54
55
  }
55
56
  return filesObj;
56
57
  }
57
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DragAndDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
58
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.3.19", type: DragAndDropDirective, isStandalone: true, selector: "[igoDragAndDrop]", inputs: { allowedExtensions: { classPropertyName: "allowedExtensions", publicName: "allowedExtensions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesDropped: "filesDropped", filesInvalid: "filesInvalid" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "style.background": "this.background" } }, ngImport: i0 });
58
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DragAndDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
59
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.14", type: DragAndDropDirective, isStandalone: true, selector: "[igoDragAndDrop]", inputs: { allowedExtensions: { classPropertyName: "allowedExtensions", publicName: "allowedExtensions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { filesDropped: "filesDropped", filesInvalid: "filesInvalid" }, host: { listeners: { "dragover": "onDragOver($event)", "dragleave": "onDragLeave($event)", "drop": "onDrop($event)" }, properties: { "style.background": "this.background" } }, ngImport: i0 });
59
60
  }
60
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: DragAndDropDirective, decorators: [{
61
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: DragAndDropDirective, decorators: [{
61
62
  type: Directive,
62
63
  args: [{
63
- selector: '[igoDragAndDrop]',
64
- standalone: true
64
+ selector: '[igoDragAndDrop]'
65
65
  }]
66
66
  }], propDecorators: { allowedExtensions: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowedExtensions", required: false }] }], filesDropped: [{ type: i0.Output, args: ["filesDropped"] }], filesInvalid: [{ type: i0.Output, args: ["filesInvalid"] }], background: [{
67
67
  type: HostBinding,
@@ -88,32 +88,30 @@ class TreeDragDropDirective {
88
88
  elementRef = inject(ElementRef);
89
89
  renderer = inject(Renderer2);
90
90
  draggedNode;
91
- dropNodeTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropNodeTarget" }] : []));
91
+ dropNodeTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropNodeTarget" }] : /* istanbul ignore next */ []));
92
92
  expandTimeout;
93
93
  nodesListeners;
94
94
  nodesEffect = effect(() => {
95
95
  this.nodes();
96
96
  this.addAllListener();
97
- }, ...(ngDevMode ? [{ debugName: "nodesEffect" }] : []));
98
- dropLineTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropLineTarget" }] : []));
99
- previousDropLine = signal(null, ...(ngDevMode ? [{ debugName: "previousDropLine" }] : []));
100
- dropPosition = signal(null, ...(ngDevMode ? [{ debugName: "dropPosition" }] : []));
101
- dragging = signal(false, ...(ngDevMode ? [{ debugName: "dragging" }] : []));
97
+ }, ...(ngDevMode ? [{ debugName: "nodesEffect" }] : /* istanbul ignore next */ []));
98
+ dropLineTarget = signal(null, ...(ngDevMode ? [{ debugName: "dropLineTarget" }] : /* istanbul ignore next */ []));
99
+ previousDropLine = signal(null, ...(ngDevMode ? [{ debugName: "previousDropLine" }] : /* istanbul ignore next */ []));
100
+ dropPosition = signal(null, ...(ngDevMode ? [{ debugName: "dropPosition" }] : /* istanbul ignore next */ []));
101
+ dragging = signal(false, ...(ngDevMode ? [{ debugName: "dragging" }] : /* istanbul ignore next */ []));
102
102
  // Use a Set or just manage classes manually since SelectionModel was providing simple toggle
103
103
  // But we can stick to simple class logic
104
104
  highlightedNode;
105
- tree = input.required(...(ngDevMode ? [{ debugName: "tree" }] : []));
106
- childrenAccessor = input.required(...(ngDevMode ? [{ debugName: "childrenAccessor" }] : []));
107
- config = input.required(...(ngDevMode ? [{ debugName: "config" }] : []));
105
+ tree = input.required(...(ngDevMode ? [{ debugName: "tree" }] : /* istanbul ignore next */ []));
106
+ childrenAccessor = input.required(...(ngDevMode ? [{ debugName: "childrenAccessor" }] : /* istanbul ignore next */ []));
107
+ config = input.required(...(ngDevMode ? [{ debugName: "config" }] : /* istanbul ignore next */ []));
108
108
  /** The default is 5 */
109
- maxLevel = input(5, ...(ngDevMode ? [{ debugName: "maxLevel" }] : []));
110
- treeDragDropIsDisabled = input(false, ...(ngDevMode ? [{ debugName: "treeDragDropIsDisabled", transform: booleanAttribute }] : [{
111
- transform: booleanAttribute
112
- }]));
109
+ maxLevel = input(5, ...(ngDevMode ? [{ debugName: "maxLevel" }] : /* istanbul ignore next */ []));
110
+ treeDragDropIsDisabled = input(false, { ...(ngDevMode ? { debugName: "treeDragDropIsDisabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
113
111
  dragStart = output();
114
112
  dropped = output();
115
113
  droppedError = output();
116
- nodes = contentChildren(MatTreeNode, ...(ngDevMode ? [{ debugName: "nodes", descendants: true }] : [{ descendants: true }]));
114
+ nodes = contentChildren(MatTreeNode, { ...(ngDevMode ? { debugName: "nodes" } : /* istanbul ignore next */ {}), descendants: true });
117
115
  constructor() {
118
116
  this.dropped.subscribe(() => this.dragEnd());
119
117
  effect(() => {
@@ -196,7 +194,7 @@ class TreeDragDropDirective {
196
194
  this.dropPosition.set(null);
197
195
  if (this.draggedNode) {
198
196
  this.removeNodeClass(this.draggedNode.id, '--dragged');
199
- this.draggedNode = null;
197
+ this.draggedNode = undefined;
200
198
  }
201
199
  this.dragLeave();
202
200
  this.removeDropTargetLine();
@@ -209,8 +207,9 @@ class TreeDragDropDirective {
209
207
  this.dropPosition.set(position);
210
208
  }
211
209
  dragLeave() {
212
- clearTimeout(this.expandTimeout);
213
- this.expandTimeout = null;
210
+ if (this.expandTimeout)
211
+ clearTimeout(this.expandTimeout);
212
+ this.expandTimeout = undefined;
214
213
  if (this.highlightedNode) {
215
214
  this.removeNodeClass(this.highlightedNode.id, '--drag-hover');
216
215
  this.highlightedNode = undefined;
@@ -232,41 +231,51 @@ class TreeDragDropDirective {
232
231
  if (dropPosition.type === 'below' &&
233
232
  dropPosition.level !== targetNodeLevel) {
234
233
  const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);
235
- this.dropNodeTarget.set(ancestor);
236
- nodeTarget = ancestor;
237
- targetNodeLevel = this.getNodeLevel(nodeTarget);
234
+ if (ancestor) {
235
+ this.dropNodeTarget.set(ancestor);
236
+ nodeTarget = ancestor;
237
+ targetNodeLevel = this.getNodeLevel(nodeTarget);
238
+ }
238
239
  }
239
240
  if (this.isGroup(nodeTarget)) {
240
241
  if (dropPosition.type === 'inside') {
241
242
  const isExpanded = this.tree().isExpanded(nodeTarget);
242
243
  if (isExpanded) {
243
244
  const children = this.getDirectDescendants(nodeTarget);
244
- if (children[0]?.id === this.draggedNode.id) {
245
+ if (this.draggedNode && children[0]?.id === this.draggedNode.id) {
245
246
  return;
246
247
  }
247
248
  }
248
249
  this.tree().expand(nodeTarget);
250
+ if (this.draggedNode) {
251
+ return this.dropped.emit({
252
+ node: this.draggedNode,
253
+ ref: nodeTarget,
254
+ position: dropPosition.type
255
+ });
256
+ }
257
+ return;
258
+ }
259
+ }
260
+ if (dropPosition.type === 'below' &&
261
+ dropPosition.level !== targetNodeLevel) {
262
+ const ancestor = this.getNodeAncestors(nodeTarget.id);
263
+ if (this.draggedNode && ancestor) {
249
264
  return this.dropped.emit({
250
265
  node: this.draggedNode,
251
- ref: nodeTarget,
266
+ ref: ancestor,
252
267
  position: dropPosition.type
253
268
  });
254
269
  }
270
+ return;
255
271
  }
256
- if (dropPosition.type === 'below' &&
257
- dropPosition.level !== targetNodeLevel) {
258
- const ancestor = this.getNodeAncestors(nodeTarget.id);
259
- return this.dropped.emit({
272
+ if (this.draggedNode && nodeTarget) {
273
+ this.dropped.emit({
260
274
  node: this.draggedNode,
261
- ref: ancestor,
275
+ ref: nodeTarget,
262
276
  position: dropPosition.type
263
277
  });
264
278
  }
265
- this.dropped.emit({
266
- node: this.draggedNode,
267
- ref: nodeTarget,
268
- position: dropPosition.type
269
- });
270
279
  }
271
280
  addNodeClass(id, className) {
272
281
  const node = this.findTreeNode(id);
@@ -295,7 +304,10 @@ class TreeDragDropDirective {
295
304
  const listeners = [
296
305
  ['dragstart', () => this.onDragStart(node.data)],
297
306
  ['dragend', () => this.dragEnd()],
298
- ['dragover', (event) => this.dragOver(node.data, event)],
307
+ [
308
+ 'dragover',
309
+ (event) => this.dragOver(node.data, event)
310
+ ],
299
311
  ['dragleave', () => this.dragLeave()]
300
312
  ];
301
313
  element.setAttribute('draggable', 'true');
@@ -309,7 +321,7 @@ class TreeDragDropDirective {
309
321
  element.removeEventListener(type, listener);
310
322
  });
311
323
  });
312
- this.nodesListeners = null;
324
+ this.nodesListeners = undefined;
313
325
  }
314
326
  setHighlightedNode(node) {
315
327
  const toHighlight = this.isGroup(node)
@@ -375,6 +387,9 @@ class TreeDragDropDirective {
375
387
  return treeNode?.['_elementRef'].nativeElement;
376
388
  }
377
389
  canDropNode(hoveredNode, position) {
390
+ if (!this.draggedNode) {
391
+ return { canDrop: false };
392
+ }
378
393
  if (this.isGroup(this.draggedNode)) {
379
394
  return this.canDropGroup(hoveredNode, position);
380
395
  }
@@ -385,7 +400,9 @@ class TreeDragDropDirective {
385
400
  return { canDrop: true };
386
401
  }
387
402
  canDropGroup(hoveredNode, position) {
388
- // On ne veut pas permettre le Drop pour un groupe qui s'auto référence
403
+ if (!this.draggedNode) {
404
+ return { canDrop: false };
405
+ }
389
406
  if (hoveredNode.id === this.draggedNode.id) {
390
407
  return {
391
408
  canDrop: false,
@@ -409,9 +426,12 @@ class TreeDragDropDirective {
409
426
  };
410
427
  }
411
428
  validateMaxHierarchyLevel(position) {
429
+ if (!this.draggedNode) {
430
+ return { canDrop: false };
431
+ }
412
432
  const maxLevel = this.maxLevel();
413
433
  if (!maxLevel) {
414
- return;
434
+ return undefined;
415
435
  }
416
436
  let level = position.type === 'inside' ? position.level + 1 : position.level;
417
437
  if (this.isGroup(this.draggedNode)) {
@@ -425,6 +445,7 @@ class TreeDragDropDirective {
425
445
  params: { value: maxLevel }
426
446
  };
427
447
  }
448
+ return undefined;
428
449
  }
429
450
  getDescendants(node) {
430
451
  const children = this.childrenAccessor()(node) ?? [];
@@ -435,10 +456,12 @@ class TreeDragDropDirective {
435
456
  return descendants;
436
457
  }
437
458
  isHoverDescendant(id, _hoveredNode) {
459
+ if (!this.draggedNode)
460
+ return false;
438
461
  return this.getDescendants(this.draggedNode).some((child) => child.id === id);
439
462
  }
440
463
  getPosition(event, hoveredNode) {
441
- if (this.isGroup(this.draggedNode)) {
464
+ if (this.draggedNode && this.isGroup(this.draggedNode)) {
442
465
  if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {
443
466
  hoveredNode = this.draggedNode;
444
467
  }
@@ -459,6 +482,8 @@ class TreeDragDropDirective {
459
482
  }
460
483
  getPositionY(node, type) {
461
484
  const element = this.getNodeElement(node);
485
+ if (!element)
486
+ return 0;
462
487
  const rect = element.getBoundingClientRect();
463
488
  return type === 'below'
464
489
  ? element.offsetTop + rect.height - 1
@@ -466,10 +491,12 @@ class TreeDragDropDirective {
466
491
  }
467
492
  getPositionType(event, hoveredNode) {
468
493
  const target = this.getNodeElement(hoveredNode);
494
+ if (!target)
495
+ return 'above';
469
496
  const rect = target.getBoundingClientRect();
470
497
  const middle = rect.top + rect.height / 2;
471
498
  const y = event.y;
472
- const selfReferencing = this.draggedNode.id === hoveredNode.id;
499
+ const selfReferencing = this.draggedNode && this.draggedNode.id === hoveredNode.id;
473
500
  if (this.isGroup(hoveredNode) && !selfReferencing) {
474
501
  const tolerence = 5;
475
502
  if (y <= middle + tolerence && y >= middle - tolerence) {
@@ -491,6 +518,8 @@ class TreeDragDropDirective {
491
518
  const lastChild = [...children].pop();
492
519
  if (type === 'below' && lastChild?.id === hoveredNode.id) {
493
520
  const target = this.getNodeElement(hoveredNode);
521
+ if (!target)
522
+ return hoveredNodeLevel;
494
523
  const rect = target.getBoundingClientRect();
495
524
  const indentation = 24;
496
525
  const xMin = rect.x + indentation;
@@ -551,14 +580,13 @@ class TreeDragDropDirective {
551
580
  findTreeNode(id) {
552
581
  return this.nodes().find((n) => String(n.data.id) === String(id));
553
582
  }
554
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: TreeDragDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
555
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "20.3.19", type: TreeDragDropDirective, isStandalone: true, selector: "[igoTreeDragDrop]", inputs: { tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: true, transformFunction: null }, childrenAccessor: { classPropertyName: "childrenAccessor", publicName: "childrenAccessor", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, maxLevel: { classPropertyName: "maxLevel", publicName: "maxLevel", isSignal: true, isRequired: false, transformFunction: null }, treeDragDropIsDisabled: { classPropertyName: "treeDragDropIsDisabled", publicName: "treeDragDropIsDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragStart: "dragStart", dropped: "dropped", droppedError: "droppedError" }, host: { listeners: { "dragover": "hostDragOver($event)", "dragleave": "hostDragLeave($event)", "drop": "hostDrop($event)" }, properties: { "class.--dragging": "dragging()" } }, queries: [{ propertyName: "nodes", predicate: MatTreeNode, descendants: true, isSignal: true }], ngImport: i0 });
583
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TreeDragDropDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
584
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.2.0", version: "21.2.14", type: TreeDragDropDirective, isStandalone: true, selector: "[igoTreeDragDrop]", inputs: { tree: { classPropertyName: "tree", publicName: "tree", isSignal: true, isRequired: true, transformFunction: null }, childrenAccessor: { classPropertyName: "childrenAccessor", publicName: "childrenAccessor", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null }, maxLevel: { classPropertyName: "maxLevel", publicName: "maxLevel", isSignal: true, isRequired: false, transformFunction: null }, treeDragDropIsDisabled: { classPropertyName: "treeDragDropIsDisabled", publicName: "treeDragDropIsDisabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dragStart: "dragStart", dropped: "dropped", droppedError: "droppedError" }, host: { listeners: { "dragover": "hostDragOver($event)", "dragleave": "hostDragLeave($event)", "drop": "hostDrop($event)" }, properties: { "class.--dragging": "dragging()" } }, queries: [{ propertyName: "nodes", predicate: MatTreeNode, descendants: true, isSignal: true }], ngImport: i0 });
556
585
  }
557
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: TreeDragDropDirective, decorators: [{
586
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: TreeDragDropDirective, decorators: [{
558
587
  type: Directive,
559
588
  args: [{
560
589
  selector: '[igoTreeDragDrop]',
561
- standalone: true,
562
590
  host: {
563
591
  '[class.--dragging]': 'dragging()',
564
592
  '(dragover)': 'hostDragOver($event)',
@@ -578,11 +606,11 @@ class IgoDrapDropModule {
578
606
  providers: []
579
607
  };
580
608
  }
581
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDrapDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
582
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.19", ngImport: i0, type: IgoDrapDropModule, imports: [DragAndDropDirective, TreeDragDropDirective], exports: [DragAndDropDirective, TreeDragDropDirective] });
583
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDrapDropModule });
609
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDrapDropModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
610
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.14", ngImport: i0, type: IgoDrapDropModule, imports: [DragAndDropDirective, TreeDragDropDirective], exports: [DragAndDropDirective, TreeDragDropDirective] });
611
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDrapDropModule });
584
612
  }
585
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: IgoDrapDropModule, decorators: [{
613
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImport: i0, type: IgoDrapDropModule, decorators: [{
586
614
  type: NgModule,
587
615
  args: [{
588
616
  imports: [DragAndDropDirective, TreeDragDropDirective],
@@ -1 +1 @@
1
- {"version":3,"file":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]',\n standalone: true\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') private background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt) {\n const files = evt.dataTransfer.files;\n const filesObj = {\n valid: [],\n invalid: []\n };\n if (files.length > 0) {\n for (const file of files) {\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { CdkTree } from '@angular/cdk/tree';\nimport {\n Directive,\n ElementRef,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPermission,\n DropPosition,\n DropPositionType,\n TreeDropEvent\n} from './tree-drag-drop.interface';\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface ITreeConfig<T> {\n isGroup: (node: T) => boolean;\n descendantLevels: (node: T) => number | undefined;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n standalone: true,\n host: {\n '[class.--dragging]': 'dragging()',\n '(dragover)': 'hostDragOver($event)',\n '(dragleave)': 'hostDragLeave($event)',\n '(drop)': 'hostDrop($event)'\n }\n})\nexport class TreeDragDropDirective<\n T extends { id: string | number } = { id: string | number },\n K = T\n> implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode: T;\n dropNodeTarget = signal<T | null>(null);\n expandTimeout: number;\n nodesListeners: DragNodeListeners[] | undefined;\n private nodesEffect = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget = signal<HTMLElement | null>(null);\n previousDropLine = signal<HTMLElement | null>(null);\n dropPosition = signal<DropPosition | null>(null);\n dragging = signal(false);\n // Use a Set or just manage classes manually since SelectionModel was providing simple toggle\n // But we can stick to simple class logic\n highlightedNode: T | undefined;\n\n readonly tree = input.required<CdkTree<T, K>>();\n readonly childrenAccessor = input.required<(node: T) => T[]>();\n readonly config = input.required<ITreeConfig<T>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<T>();\n\n readonly dropped = output<TreeDropEvent<T>>();\n\n readonly droppedError = output<DropPermission>();\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.dropped.subscribe(() => this.dragEnd());\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n\n effect(() => {\n const current = this.dropLineTarget();\n const parent = this.elementRef.nativeElement.parentElement;\n\n if (!current) {\n untracked(() => {\n const previous = this.previousDropLine();\n if (previous !== null) {\n this.renderer.removeChild(parent, previous);\n this.previousDropLine.set(null);\n }\n });\n } else {\n this.renderer.appendChild(parent, current);\n }\n });\n\n effect(() => {\n if (!this.dragging()) {\n return;\n }\n const targetNode = this.dropNodeTarget();\n const position = this.dropPosition();\n const dropLineTarget = this.dropLineTarget();\n\n if (targetNode) {\n this.setHighlightedNode(targetNode);\n\n if (position) {\n if (dropLineTarget) {\n this.updateDropTargetLinePosition(position, dropLineTarget);\n }\n this.handleGroupExpansion(targetNode, position.type === 'inside');\n }\n }\n });\n }\n\n get isGroup() {\n return this.config().isGroup;\n }\n\n get getDescendantLevels() {\n return this.config().descendantLevels;\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n this.removeDropTargetLine();\n if (this.nodesEffect) {\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n hostDragLeave(event: DragEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY >= rect.bottom ||\n event.clientX < rect.left ||\n event.clientX >= rect.right\n ) {\n this.dragLeave();\n }\n }\n\n hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n onDragStart(node: T): void {\n this.addDropTargetLine();\n\n this.dragging.set(true);\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging.set(false);\n this.dropNodeTarget.set(null);\n this.dropPosition.set(null);\n\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = null;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: T, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget.set(node);\n\n const position = this.getPosition(event, node);\n this.dropPosition.set(position);\n }\n\n dragLeave(): void {\n clearTimeout(this.expandTimeout);\n this.expandTimeout = null;\n if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n drop(event: DragEvent): void {\n let nodeTarget = this.dropNodeTarget();\n if (!nodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(event, nodeTarget);\n\n const validation = this.canDropNode(nodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.droppedError.emit(validation);\n return;\n }\n\n let targetNodeLevel = this.getNodeLevel(nodeTarget);\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);\n this.dropNodeTarget.set(ancestor);\n nodeTarget = ancestor;\n targetNodeLevel = this.getNodeLevel(nodeTarget);\n }\n\n if (this.isGroup(nodeTarget)) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.tree().isExpanded(nodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(nodeTarget);\n if (children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.tree().expand(nodeTarget);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id);\n return this.dropped.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n\n this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n\n private addNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private removeNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<T>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n ['dragover', (event: DragEvent) => this.dragOver(node.data, event)],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = null;\n }\n\n private setHighlightedNode(node: T): void {\n const toHighlight = this.isGroup(node)\n ? node\n : this.getNodeAncestors(node.id);\n\n if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n\n if (toHighlight) {\n this.highlightedNode = toHighlight;\n this.addNodeClass(toHighlight.id, '--drag-hover');\n } else if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget.set(target);\n }\n\n private removeDropTargetLine(): void {\n const target = this.dropLineTarget();\n if (target) {\n this.previousDropLine.set(target);\n this.dropLineTarget.set(null);\n }\n }\n\n private hideDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'none');\n }\n\n private showDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'block');\n }\n\n private updateDropTargetLinePosition(\n position: DropPosition,\n dropLineTarget: HTMLElement\n ): void {\n if (position.type === 'inside') {\n return this.hideDropTargetLine();\n } else {\n this.showDropTargetLine();\n }\n\n this.renderer.setStyle(\n dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: T, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.tree().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.tree().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: T): HTMLElement | undefined {\n const treeNode = this.findTreeNode(node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(hoveredNode: T, position: DropPosition): DropPermission {\n if (this.isGroup(this.draggedNode)) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: T,\n position: DropPosition\n ): {\n canDrop: boolean;\n message?: string;\n params?: { [key: string]: unknown };\n } {\n // On ne veut pas permettre le Drop pour un groupe qui s'auto référence\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n const isHoverDescendant = this.isHoverDescendant(\n hoveredNode.id,\n hoveredNode\n );\n if (isHoverDescendant) {\n return {\n canDrop: !isHoverDescendant,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return {\n canDrop: true,\n message: undefined\n };\n }\n\n private validateMaxHierarchyLevel(position: DropPosition): DropPermission {\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.isGroup(this.draggedNode)) {\n // We add an extra level +1 to avoid empty group in group\n level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n }\n\n private getDescendants(node: T): T[] {\n const children = this.childrenAccessor()(node) ?? [];\n const descendants: T[] = [...children];\n children.forEach((child) => {\n descendants.push(...this.getDescendants(child));\n });\n return descendants;\n }\n\n private isHoverDescendant(id: string | number, _hoveredNode: T): boolean {\n return this.getDescendants(this.draggedNode).some(\n (child) => child.id === id\n );\n }\n\n private getPosition(event: DragEvent, hoveredNode: T): DropPosition {\n if (this.isGroup(this.draggedNode)) {\n if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n this.isGroup(hoveredNode) &&\n positionType === 'below' &&\n this.tree().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: T, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(event: DragEvent, hoveredNode: T): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing = this.draggedNode.id === hoveredNode.id;\n if (this.isGroup(hoveredNode) && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: T,\n type: DropPositionType,\n x: number\n ): number {\n const hoveredNodeLevel = this.getNodeLevel(hoveredNode);\n if (hoveredNodeLevel === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n if (!ancestor) return hoveredNodeLevel;\n\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild?.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNodeLevel;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNodeLevel - levelSubstracted);\n }\n }\n return hoveredNodeLevel;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(id: string | number, level?: number): T | undefined {\n const path = this.getAncestorsPath(id);\n if (path.length === 0) {\n return undefined;\n }\n\n if (level !== undefined) {\n return path[level];\n }\n return path[path.length - 1];\n }\n\n private getAncestorsPath(id: string | number): T[] {\n const nodes = this.nodes();\n const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);\n\n for (const root of roots) {\n const path: T[] = [];\n if (this.findPath(root, id, path)) {\n return path;\n }\n }\n\n return [];\n }\n\n private findPath(\n currentNode: T,\n targetId: string | number,\n path: T[]\n ): boolean {\n if (String(currentNode.id) === String(targetId)) {\n return true;\n }\n\n const children = this.childrenAccessor()(currentNode) ?? [];\n for (const child of children) {\n path.push(currentNode);\n if (this.findPath(child, targetId, path)) {\n return true;\n }\n path.pop();\n }\n return false;\n }\n\n private getNodeLevel(node: T): number {\n const treeNode = this.findTreeNode(node.id);\n return treeNode ? treeNode.level : 0;\n }\n\n private getDirectDescendants(node: T): T[] {\n return this.childrenAccessor()(node) ?? [];\n }\n\n private findTreeNode(id: string | number): MatTreeNode<T> | undefined {\n return this.nodes().find((n) => String(n.data.id) === String(id));\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"igo2-common-drag-drop.mjs","sources":["../../../packages/common/drag-drop/src/drag-drop.directive.ts","../../../packages/common/drag-drop/src/tree-drag-drop/tree-drag-drop.directive.ts","../../../packages/common/drag-drop/src/drag-drop.module.ts","../../../packages/common/drag-drop/src/igo2-common-drag-drop.ts"],"sourcesContent":["import {\n Directive,\n HostBinding,\n HostListener,\n input,\n output\n} from '@angular/core';\n\n@Directive({\n selector: '[igoDragAndDrop]'\n})\nexport class DragAndDropDirective {\n readonly allowedExtensions = input<string[]>([]);\n\n protected readonly filesDropped = output<File[]>();\n\n protected readonly filesInvalid = output<File[]>();\n\n @HostBinding('style.background') background = 'inherit';\n\n @HostListener('dragover', ['$event'])\n public onDragOver(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = '#999';\n }\n\n @HostListener('dragleave', ['$event'])\n public onDragLeave(evt: DragEvent) {\n evt.preventDefault();\n evt.stopPropagation();\n this.background = 'inherit';\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(evt: DragEvent & { alreadyFired?: boolean }) {\n evt.preventDefault();\n evt.stopPropagation();\n if (evt.alreadyFired) {\n return;\n }\n evt.alreadyFired = true;\n\n this.background = 'inherit';\n const filesObj = this.validExtensions(evt);\n if (filesObj.valid.length) {\n this.filesDropped.emit(filesObj.valid);\n }\n if (filesObj.invalid.length) {\n this.filesInvalid.emit(filesObj.invalid);\n }\n }\n\n private validExtensions(evt: DragEvent) {\n const files = evt.dataTransfer?.files;\n const filesObj: { valid: File[]; invalid: File[] } = {\n valid: [],\n invalid: []\n };\n if (files && files.length > 0) {\n for (let i = 0; i < files.length; i++) {\n const file = files[i];\n const ext = file.name.split('.')[file.name.split('.').length - 1];\n const allowedExtensions = this.allowedExtensions();\n if (\n allowedExtensions.length === 0 ||\n (allowedExtensions.lastIndexOf(ext) !== -1 && file.size !== 0)\n ) {\n filesObj.valid.push(file);\n } else {\n filesObj.invalid.push(file);\n }\n }\n }\n\n return filesObj;\n }\n}\n","import { CdkTree } from '@angular/cdk/tree';\nimport {\n Directive,\n EffectRef,\n ElementRef,\n OnDestroy,\n Renderer2,\n booleanAttribute,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n untracked\n} from '@angular/core';\nimport { MatTreeNode } from '@angular/material/tree';\n\nimport {\n DropPermission,\n DropPosition,\n DropPositionType,\n TreeDropEvent\n} from './tree-drag-drop.interface';\n\ninterface DragNodeListeners {\n element: HTMLElement;\n listeners: [string, EventListenerOrEventListenerObject][];\n}\n\nexport interface ITreeConfig<T> {\n isGroup: (node: T) => boolean;\n descendantLevels: (node: T) => number | undefined;\n}\n\n/**\n * This directive should be use with a MatTree flatened\n * It should add all logic to drag the MatTreeNode and connect the (onDrop) output\n * Class added:\n * Tree: --dragging\n * Node: --drag-hover | --dragged\n */\n@Directive({\n selector: '[igoTreeDragDrop]',\n host: {\n '[class.--dragging]': 'dragging()',\n '(dragover)': 'hostDragOver($event)',\n '(dragleave)': 'hostDragLeave($event)',\n '(drop)': 'hostDrop($event)'\n }\n})\nexport class TreeDragDropDirective<\n T extends { id: string | number } = { id: string | number },\n K = T\n> implements OnDestroy {\n private elementRef = inject(ElementRef);\n private renderer = inject(Renderer2);\n\n draggedNode?: T;\n dropNodeTarget = signal<T | null>(null);\n expandTimeout?: number;\n nodesListeners?: DragNodeListeners[];\n private nodesEffect?: EffectRef = effect(() => {\n this.nodes();\n this.addAllListener();\n });\n dropLineTarget = signal<HTMLElement | null>(null);\n previousDropLine = signal<HTMLElement | null>(null);\n dropPosition = signal<DropPosition | null>(null);\n dragging = signal(false);\n // Use a Set or just manage classes manually since SelectionModel was providing simple toggle\n // But we can stick to simple class logic\n highlightedNode?: T;\n\n readonly tree = input.required<CdkTree<T, K>>();\n readonly childrenAccessor = input.required<(node: T) => T[]>();\n readonly config = input.required<ITreeConfig<T>>();\n\n /** The default is 5 */\n readonly maxLevel = input(5);\n\n readonly treeDragDropIsDisabled = input(false, {\n transform: booleanAttribute\n });\n\n readonly dragStart = output<T>();\n\n readonly dropped = output<TreeDropEvent<T>>();\n\n readonly droppedError = output<DropPermission>();\n\n readonly nodes = contentChildren(MatTreeNode, { descendants: true });\n\n constructor() {\n this.dropped.subscribe(() => this.dragEnd());\n\n effect(() => {\n const disabled = this.treeDragDropIsDisabled();\n disabled ? this.removeAllListener() : this.addAllListener();\n });\n\n effect(() => {\n const current = this.dropLineTarget();\n const parent = this.elementRef.nativeElement.parentElement;\n\n if (!current) {\n untracked(() => {\n const previous = this.previousDropLine();\n if (previous !== null) {\n this.renderer.removeChild(parent, previous);\n this.previousDropLine.set(null);\n }\n });\n } else {\n this.renderer.appendChild(parent, current);\n }\n });\n\n effect(() => {\n if (!this.dragging()) {\n return;\n }\n const targetNode = this.dropNodeTarget();\n const position = this.dropPosition();\n const dropLineTarget = this.dropLineTarget();\n\n if (targetNode) {\n this.setHighlightedNode(targetNode);\n\n if (position) {\n if (dropLineTarget) {\n this.updateDropTargetLinePosition(position, dropLineTarget);\n }\n this.handleGroupExpansion(targetNode, position.type === 'inside');\n }\n }\n });\n }\n\n get isGroup() {\n return this.config().isGroup;\n }\n\n get getDescendantLevels() {\n return this.config().descendantLevels;\n }\n\n ngOnDestroy(): void {\n this.removeAllListener();\n this.removeDropTargetLine();\n if (this.nodesEffect) {\n this.nodesEffect.destroy();\n this.nodesEffect = undefined;\n }\n }\n\n hostDragOver(event: Event): void {\n event.preventDefault();\n }\n\n hostDragLeave(event: DragEvent): void {\n const rect = this.elementRef.nativeElement.getBoundingClientRect();\n if (\n event.clientY < rect.top ||\n event.clientY >= rect.bottom ||\n event.clientX < rect.left ||\n event.clientX >= rect.right\n ) {\n this.dragLeave();\n }\n }\n\n hostDrop(event: DragEvent): void {\n this.drop(event);\n }\n\n onDragStart(node: T): void {\n this.addDropTargetLine();\n\n this.dragging.set(true);\n this.draggedNode = node;\n this.addNodeClass(node.id, '--dragged');\n\n this.dragStart.emit(node);\n }\n\n dragEnd(): void {\n this.dragging.set(false);\n this.dropNodeTarget.set(null);\n this.dropPosition.set(null);\n\n if (this.draggedNode) {\n this.removeNodeClass(this.draggedNode.id, '--dragged');\n this.draggedNode = undefined;\n }\n\n this.dragLeave();\n this.removeDropTargetLine();\n }\n\n dragOver(node: T, event: DragEvent): void {\n event.preventDefault();\n event.stopPropagation();\n\n this.dropNodeTarget.set(node);\n\n const position = this.getPosition(event, node);\n this.dropPosition.set(position);\n }\n\n dragLeave(): void {\n if (this.expandTimeout) clearTimeout(this.expandTimeout);\n this.expandTimeout = undefined;\n if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n drop(event: DragEvent): void {\n let nodeTarget = this.dropNodeTarget();\n if (!nodeTarget || this.treeDragDropIsDisabled()) {\n return;\n }\n\n const dropPosition: DropPosition = this.getPosition(event, nodeTarget);\n\n const validation = this.canDropNode(nodeTarget, dropPosition);\n if (!validation.canDrop) {\n this.droppedError.emit(validation);\n return;\n }\n\n let targetNodeLevel = this.getNodeLevel(nodeTarget);\n\n // Allow to drop a last child outside is group. We refer to it's ancestor for the target\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id, dropPosition.level);\n if (ancestor) {\n this.dropNodeTarget.set(ancestor);\n nodeTarget = ancestor;\n targetNodeLevel = this.getNodeLevel(nodeTarget);\n }\n }\n\n if (this.isGroup(nodeTarget)) {\n if (dropPosition.type === 'inside') {\n const isExpanded = this.tree().isExpanded(nodeTarget);\n if (isExpanded) {\n const children = this.getDirectDescendants(nodeTarget);\n if (this.draggedNode && children[0]?.id === this.draggedNode.id) {\n return;\n }\n }\n\n this.tree().expand(nodeTarget);\n if (this.draggedNode) {\n return this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n return;\n }\n }\n\n if (\n dropPosition.type === 'below' &&\n dropPosition.level !== targetNodeLevel\n ) {\n const ancestor = this.getNodeAncestors(nodeTarget.id);\n if (this.draggedNode && ancestor) {\n return this.dropped.emit({\n node: this.draggedNode,\n ref: ancestor,\n position: dropPosition.type\n });\n }\n return;\n }\n\n if (this.draggedNode && nodeTarget) {\n this.dropped.emit({\n node: this.draggedNode,\n ref: nodeTarget,\n position: dropPosition.type\n });\n }\n }\n\n private addNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.addClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private removeNodeClass(id: string | number, className: string): void {\n const node = this.findTreeNode(id);\n if (node) {\n this.renderer.removeClass(node['_elementRef'].nativeElement, className);\n }\n }\n\n private addAllListener(): void {\n if (this.treeDragDropIsDisabled()) {\n return;\n }\n const nodes = this.nodes();\n if (this.nodesListeners) {\n this.removeAllListener();\n }\n\n this.nodesListeners = nodes?.map((node) => this.addListener(node));\n }\n\n private addListener(node: MatTreeNode<T>): DragNodeListeners {\n const element = node['_elementRef'].nativeElement as HTMLElement;\n const listeners: [string, EventListenerOrEventListenerObject][] = [\n ['dragstart', () => this.onDragStart(node.data)],\n ['dragend', () => this.dragEnd()],\n [\n 'dragover',\n (event: Event) => this.dragOver(node.data, event as DragEvent)\n ],\n ['dragleave', () => this.dragLeave()]\n ];\n element.setAttribute('draggable', 'true');\n listeners.forEach(([type, listener]) =>\n element.addEventListener(type, listener)\n );\n\n return { element, listeners };\n }\n\n private removeAllListener(): void {\n this.nodesListeners?.forEach(({ element, listeners }) => {\n listeners.forEach(([type, listener]) => {\n element.setAttribute('draggable', 'false');\n element.removeEventListener(type, listener);\n });\n });\n this.nodesListeners = undefined;\n }\n\n private setHighlightedNode(node: T): void {\n const toHighlight = this.isGroup(node)\n ? node\n : this.getNodeAncestors(node.id);\n\n if (this.highlightedNode && this.highlightedNode.id !== toHighlight?.id) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n\n if (toHighlight) {\n this.highlightedNode = toHighlight;\n this.addNodeClass(toHighlight.id, '--drag-hover');\n } else if (this.highlightedNode) {\n this.removeNodeClass(this.highlightedNode.id, '--drag-hover');\n this.highlightedNode = undefined;\n }\n }\n\n private addDropTargetLine(): void {\n const target: HTMLElement = this.renderer.createElement('div');\n target.classList.add('drop-target-line');\n target.setAttribute(\n 'style',\n `position: absolute; top: 0; width: 100%; pointer-events: none; z-index: 4; height: 2px; background-color: black; transition: margin-left 150ms;`\n );\n this.dropLineTarget.set(target);\n }\n\n private removeDropTargetLine(): void {\n const target = this.dropLineTarget();\n if (target) {\n this.previousDropLine.set(target);\n this.dropLineTarget.set(null);\n }\n }\n\n private hideDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'none');\n }\n\n private showDropTargetLine(): void {\n const target = this.dropLineTarget();\n this.renderer.setStyle(target, 'display', 'block');\n }\n\n private updateDropTargetLinePosition(\n position: DropPosition,\n dropLineTarget: HTMLElement\n ): void {\n if (position.type === 'inside') {\n return this.hideDropTargetLine();\n } else {\n this.showDropTargetLine();\n }\n\n this.renderer.setStyle(\n dropLineTarget,\n 'margin-left',\n position.level * 24 + 20 + 'px'\n );\n this.renderer.setStyle(\n dropLineTarget,\n 'transform',\n 'translate3d(0,' + position.y + 'px, 0)'\n );\n }\n\n private handleGroupExpansion(node: T, isInside: boolean): void {\n if (!isInside) {\n return this.dragLeave();\n }\n const isOpen = this.tree().isExpanded(node);\n if (!isOpen && !this.expandTimeout) {\n this.expandTimeout = window.setTimeout(() => {\n this.tree().expand(node);\n }, 1200);\n }\n }\n\n private getNodeElement(node: T): HTMLElement | undefined {\n const treeNode = this.findTreeNode(node.id);\n return treeNode?.['_elementRef'].nativeElement;\n }\n\n private canDropNode(hoveredNode: T, position: DropPosition): DropPermission {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n if (this.isGroup(this.draggedNode)) {\n return this.canDropGroup(hoveredNode, position);\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return { canDrop: true };\n }\n\n private canDropGroup(\n hoveredNode: T,\n position: DropPosition\n ): {\n canDrop: boolean;\n message?: string;\n params?: { [key: string]: unknown };\n } {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n if (hoveredNode.id === this.draggedNode.id) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n const isHoverDescendant = this.isHoverDescendant(\n hoveredNode.id,\n hoveredNode\n );\n if (isHoverDescendant) {\n return {\n canDrop: !isHoverDescendant,\n message: 'igo.common.dragDrop.cannot.dropInsideItself'\n };\n }\n\n const hasMaxLevelRestrictions = this.validateMaxHierarchyLevel(position);\n if (hasMaxLevelRestrictions) {\n return hasMaxLevelRestrictions;\n }\n\n return {\n canDrop: true,\n message: undefined\n };\n }\n\n private validateMaxHierarchyLevel(\n position: DropPosition\n ): DropPermission | undefined {\n if (!this.draggedNode) {\n return { canDrop: false };\n }\n\n const maxLevel = this.maxLevel();\n if (!maxLevel) {\n return undefined;\n }\n\n let level =\n position.type === 'inside' ? position.level + 1 : position.level;\n\n if (this.isGroup(this.draggedNode)) {\n // We add an extra level +1 to avoid empty group in group\n level = level + +(this.getDescendantLevels(this.draggedNode) ?? 0) + 1;\n }\n\n if (level > maxLevel) {\n return {\n canDrop: false,\n message: 'igo.common.dragDrop.cannot.maxLevel',\n params: { value: maxLevel }\n };\n }\n\n return undefined;\n }\n\n private getDescendants(node: T): T[] {\n const children = this.childrenAccessor()(node) ?? [];\n const descendants: T[] = [...children];\n children.forEach((child) => {\n descendants.push(...this.getDescendants(child));\n });\n return descendants;\n }\n\n private isHoverDescendant(id: string | number, _hoveredNode: T): boolean {\n if (!this.draggedNode) return false;\n return this.getDescendants(this.draggedNode).some(\n (child) => child.id === id\n );\n }\n\n private getPosition(event: DragEvent, hoveredNode: T): DropPosition {\n if (this.draggedNode && this.isGroup(this.draggedNode)) {\n if (this.isHoverDescendant(hoveredNode.id, hoveredNode)) {\n hoveredNode = this.draggedNode;\n }\n }\n\n let positionType = this.getPositionType(event, hoveredNode);\n\n const bellowOpenedGroup =\n this.isGroup(hoveredNode) &&\n positionType === 'below' &&\n this.tree().isExpanded(hoveredNode);\n if (bellowOpenedGroup) {\n positionType = 'inside';\n }\n\n return {\n x: event.x,\n y: this.getPositionY(hoveredNode, positionType),\n level: this.getPositionLevel(hoveredNode, positionType, event.x),\n type: positionType\n };\n }\n\n private getPositionY(node: T, type: DropPositionType): number {\n const element = this.getNodeElement(node);\n if (!element) return 0;\n const rect = element.getBoundingClientRect();\n\n return type === 'below'\n ? element.offsetTop + rect.height - 1\n : element.offsetTop + 1;\n }\n\n private getPositionType(event: DragEvent, hoveredNode: T): DropPositionType {\n const target = this.getNodeElement(hoveredNode);\n if (!target) return 'above';\n const rect = target.getBoundingClientRect();\n const middle = rect.top + rect.height / 2;\n const y = event.y;\n\n const selfReferencing =\n this.draggedNode && this.draggedNode.id === hoveredNode.id;\n if (this.isGroup(hoveredNode) && !selfReferencing) {\n const tolerence = 5;\n if (y <= middle + tolerence && y >= middle - tolerence) {\n return 'inside';\n }\n }\n\n const isBelow = y > middle;\n return isBelow ? 'below' : 'above';\n }\n\n private getPositionLevel(\n hoveredNode: T,\n type: DropPositionType,\n x: number\n ): number {\n const hoveredNodeLevel = this.getNodeLevel(hoveredNode);\n if (hoveredNodeLevel === 0) {\n return 0;\n }\n\n const ancestor = this.getNodeAncestors(hoveredNode.id);\n if (!ancestor) return hoveredNodeLevel;\n\n const children = this.getDirectDescendants(ancestor);\n const lastChild = [...children].pop();\n\n if (type === 'below' && lastChild?.id === hoveredNode.id) {\n const target = this.getNodeElement(hoveredNode);\n if (!target) return hoveredNodeLevel;\n const rect = target.getBoundingClientRect();\n\n const indentation = 24;\n const xMin = rect.x + indentation;\n const xMax = xMin + indentation * hoveredNodeLevel;\n\n const isInsideSameGroup = x > xMax;\n if (!isInsideSameGroup) {\n const levelSubstracted = Math.round((xMax - x) / indentation);\n return Math.max(0, hoveredNodeLevel - levelSubstracted);\n }\n }\n return hoveredNodeLevel;\n }\n\n /**\n * @param level if level is defined with go to the defined levle to find ancestor. Sinon on prend le current ancestor\n */\n private getNodeAncestors(id: string | number, level?: number): T | undefined {\n const path = this.getAncestorsPath(id);\n if (path.length === 0) {\n return undefined;\n }\n\n if (level !== undefined) {\n return path[level];\n }\n return path[path.length - 1];\n }\n\n private getAncestorsPath(id: string | number): T[] {\n const nodes = this.nodes();\n const roots = nodes.filter((n) => n.level === 0).map((n) => n.data);\n\n for (const root of roots) {\n const path: T[] = [];\n if (this.findPath(root, id, path)) {\n return path;\n }\n }\n\n return [];\n }\n\n private findPath(\n currentNode: T,\n targetId: string | number,\n path: T[]\n ): boolean {\n if (String(currentNode.id) === String(targetId)) {\n return true;\n }\n\n const children = this.childrenAccessor()(currentNode) ?? [];\n for (const child of children) {\n path.push(currentNode);\n if (this.findPath(child, targetId, path)) {\n return true;\n }\n path.pop();\n }\n return false;\n }\n\n private getNodeLevel(node: T): number {\n const treeNode = this.findTreeNode(node.id);\n return treeNode ? treeNode.level : 0;\n }\n\n private getDirectDescendants(node: T): T[] {\n return this.childrenAccessor()(node) ?? [];\n }\n\n private findTreeNode(id: string | number): MatTreeNode<T> | undefined {\n return this.nodes().find((n) => String(n.data.id) === String(id));\n }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { DragAndDropDirective } from './drag-drop.directive';\nimport { TreeDragDropDirective } from './tree-drag-drop/tree-drag-drop.directive';\n\n/**\n * @deprecated import the DragAndDropDirective directly\n */\n@NgModule({\n imports: [DragAndDropDirective, TreeDragDropDirective],\n exports: [DragAndDropDirective, TreeDragDropDirective]\n})\nexport class IgoDrapDropModule {\n static forRoot(): ModuleWithProviders<IgoDrapDropModule> {\n return {\n ngModule: IgoDrapDropModule,\n providers: []\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;MAWa,oBAAoB,CAAA;AACtB,IAAA,iBAAiB,GAAG,KAAK,CAAW,EAAE,wFAAC;IAE7B,YAAY,GAAG,MAAM,EAAU;IAE/B,YAAY,GAAG,MAAM,EAAU;IAEjB,UAAU,GAAG,SAAS;AAGhD,IAAA,UAAU,CAAC,GAAc,EAAA;QAC9B,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM;IAC1B;AAGO,IAAA,WAAW,CAAC,GAAc,EAAA;QAC/B,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;AAGO,IAAA,MAAM,CAAC,GAA2C,EAAA;QACvD,GAAG,CAAC,cAAc,EAAE;QACpB,GAAG,CAAC,eAAe,EAAE;AACrB,QAAA,IAAI,GAAG,CAAC,YAAY,EAAE;YACpB;QACF;AACA,QAAA,GAAG,CAAC,YAAY,GAAG,IAAI;AAEvB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AAC1C,QAAA,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE;YACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QACxC;AACA,QAAA,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;YAC3B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1C;IACF;AAEQ,IAAA,eAAe,CAAC,GAAc,EAAA;AACpC,QAAA,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,EAAE,KAAK;AACrC,QAAA,MAAM,QAAQ,GAAuC;AACnD,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,OAAO,EAAE;SACV;QACD,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,gBAAA,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC;gBACrB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACjE,gBAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAClD,gBAAA,IACE,iBAAiB,CAAC,MAAM,KAAK,CAAC;AAC9B,qBAAC,iBAAiB,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,EAC9D;AACA,oBAAA,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC3B;qBAAO;AACL,oBAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;gBAC7B;YACF;QACF;AAEA,QAAA,OAAO,QAAQ;IACjB;wGAjEW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAApB,oBAAoB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,UAAA,EAAA,oBAAA,EAAA,WAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,gBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,kBAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE;AACX,iBAAA;;sBAQE,WAAW;uBAAC,kBAAkB;;sBAE9B,YAAY;uBAAC,UAAU,EAAE,CAAC,QAAQ,CAAC;;sBAOnC,YAAY;uBAAC,WAAW,EAAE,CAAC,QAAQ,CAAC;;sBAOpC,YAAY;uBAAC,MAAM,EAAE,CAAC,QAAQ,CAAC;;;ACClC;;;;;;AAMG;MAUU,qBAAqB,CAAA;AAIxB,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAEpC,IAAA,WAAW;AACX,IAAA,cAAc,GAAG,MAAM,CAAW,IAAI,qFAAC;AACvC,IAAA,aAAa;AACb,IAAA,cAAc;AACN,IAAA,WAAW,GAAe,MAAM,CAAC,MAAK;QAC5C,IAAI,CAAC,KAAK,EAAE;QACZ,IAAI,CAAC,cAAc,EAAE;AACvB,IAAA,CAAC,kFAAC;AACF,IAAA,cAAc,GAAG,MAAM,CAAqB,IAAI,qFAAC;AACjD,IAAA,gBAAgB,GAAG,MAAM,CAAqB,IAAI,uFAAC;AACnD,IAAA,YAAY,GAAG,MAAM,CAAsB,IAAI,mFAAC;AAChD,IAAA,QAAQ,GAAG,MAAM,CAAC,KAAK,+EAAC;;;AAGxB,IAAA,eAAe;AAEN,IAAA,IAAI,GAAG,KAAK,CAAC,QAAQ,0EAAiB;AACtC,IAAA,gBAAgB,GAAG,KAAK,CAAC,QAAQ,sFAAoB;AACrD,IAAA,MAAM,GAAG,KAAK,CAAC,QAAQ,4EAAkB;;AAGzC,IAAA,QAAQ,GAAG,KAAK,CAAC,CAAC,+EAAC;IAEnB,sBAAsB,GAAG,KAAK,CAAC,KAAK,8FAC3C,SAAS,EAAE,gBAAgB,EAAA,CAC3B;IAEO,SAAS,GAAG,MAAM,EAAK;IAEvB,OAAO,GAAG,MAAM,EAAoB;IAEpC,YAAY,GAAG,MAAM,EAAkB;IAEvC,KAAK,GAAG,eAAe,CAAC,WAAW,6EAAI,WAAW,EAAE,IAAI,EAAA,CAAG;AAEpE,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QAE5C,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAC9C,YAAA,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE;AAC7D,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,aAAa;YAE1D,IAAI,CAAC,OAAO,EAAE;gBACZ,SAAS,CAAC,MAAK;AACb,oBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE;AACxC,oBAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;wBACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC;AAC3C,wBAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;oBACjC;AACF,gBAAA,CAAC,CAAC;YACJ;iBAAO;gBACL,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC;YAC5C;AACF,QAAA,CAAC,CAAC;QAEF,MAAM,CAAC,MAAK;AACV,YAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;gBACpB;YACF;AACA,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;AACxC,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE;AACpC,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;YAE5C,IAAI,UAAU,EAAE;AACd,gBAAA,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC;gBAEnC,IAAI,QAAQ,EAAE;oBACZ,IAAI,cAAc,EAAE;AAClB,wBAAA,IAAI,CAAC,4BAA4B,CAAC,QAAQ,EAAE,cAAc,CAAC;oBAC7D;oBACA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC;gBACnE;YACF;AACF,QAAA,CAAC,CAAC;IACJ;AAEA,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,OAAO;IAC9B;AAEA,IAAA,IAAI,mBAAmB,GAAA;AACrB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,gBAAgB;IACvC;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,iBAAiB,EAAE;QACxB,IAAI,CAAC,oBAAoB,EAAE;AAC3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AAC1B,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;IACF;AAEA,IAAA,YAAY,CAAC,KAAY,EAAA;QACvB,KAAK,CAAC,cAAc,EAAE;IACxB;AAEA,IAAA,aAAa,CAAC,KAAgB,EAAA;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,qBAAqB,EAAE;AAClE,QAAA,IACE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG;AACxB,YAAA,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM;AAC5B,YAAA,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI;AACzB,YAAA,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,EAC3B;YACA,IAAI,CAAC,SAAS,EAAE;QAClB;IACF;AAEA,IAAA,QAAQ,CAAC,KAAgB,EAAA;AACvB,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAClB;AAEA,IAAA,WAAW,CAAC,IAAO,EAAA;QACjB,IAAI,CAAC,iBAAiB,EAAE;AAExB,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI;QACvB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,CAAC;AAEvC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;IAC3B;IAEA,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;AAC7B,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC;AACtD,YAAA,IAAI,CAAC,WAAW,GAAG,SAAS;QAC9B;QAEA,IAAI,CAAC,SAAS,EAAE;QAChB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEA,QAAQ,CAAC,IAAO,EAAE,KAAgB,EAAA;QAChC,KAAK,CAAC,cAAc,EAAE;QACtB,KAAK,CAAC,eAAe,EAAE;AAEvB,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC;AAC9C,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC;IAEA,SAAS,GAAA;QACP,IAAI,IAAI,CAAC,aAAa;AAAE,YAAA,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC;AACxD,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAC9B,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC;AAC7D,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;IACF;AAEA,IAAA,IAAI,CAAC,KAAgB,EAAA;AACnB,QAAA,IAAI,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE;QACtC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;YAChD;QACF;QAEA,MAAM,YAAY,GAAiB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;QAEtE,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,YAAY,CAAC;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE;AACvB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC;YAClC;QACF;QAEA,IAAI,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;;AAGnD,QAAA,IACE,YAAY,CAAC,IAAI,KAAK,OAAO;AAC7B,YAAA,YAAY,CAAC,KAAK,KAAK,eAAe,EACtC;AACA,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC;YACzE,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACjC,UAAU,GAAG,QAAQ;AACrB,gBAAA,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC;YACjD;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;AAC5B,YAAA,IAAI,YAAY,CAAC,IAAI,KAAK,QAAQ,EAAE;gBAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;gBACrD,IAAI,UAAU,EAAE;oBACd,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;AACtD,oBAAA,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;wBAC/D;oBACF;gBACF;gBAEA,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9B,gBAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;wBACvB,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,wBAAA,GAAG,EAAE,UAAU;wBACf,QAAQ,EAAE,YAAY,CAAC;AACxB,qBAAA,CAAC;gBACJ;gBACA;YACF;QACF;AAEA,QAAA,IACE,YAAY,CAAC,IAAI,KAAK,OAAO;AAC7B,YAAA,YAAY,CAAC,KAAK,KAAK,eAAe,EACtC;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,CAAC;AACrD,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,QAAQ,EAAE;AAChC,gBAAA,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBACvB,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,oBAAA,GAAG,EAAE,QAAQ;oBACb,QAAQ,EAAE,YAAY,CAAC;AACxB,iBAAA,CAAC;YACJ;YACA;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,UAAU,EAAE;AAClC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,IAAI,CAAC,WAAW;AACtB,gBAAA,GAAG,EAAE,UAAU;gBACf,QAAQ,EAAE,YAAY,CAAC;AACxB,aAAA,CAAC;QACJ;IACF;IAEQ,YAAY,CAAC,EAAmB,EAAE,SAAiB,EAAA;QACzD,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC;QACtE;IACF;IAEQ,eAAe,CAAC,EAAmB,EAAE,SAAiB,EAAA;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,aAAa,EAAE,SAAS,CAAC;QACzE;IACF;IAEQ,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE,EAAE;YACjC;QACF;AACA,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,iBAAiB,EAAE;QAC1B;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IACpE;AAEQ,IAAA,WAAW,CAAC,IAAoB,EAAA;QACtC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,aAA4B;AAChE,QAAA,MAAM,SAAS,GAAmD;AAChE,YAAA,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;AACjC,YAAA;gBACE,UAAU;AACV,gBAAA,CAAC,KAAY,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAkB;AAC9D,aAAA;YACD,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC,SAAS,EAAE;SACrC;AACD,QAAA,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC;QACzC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KACjC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CACzC;AAED,QAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE;IAC/B;IAEQ,iBAAiB,GAAA;AACvB,QAAA,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAI;YACtD,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAI;AACrC,gBAAA,OAAO,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC;AAC1C,gBAAA,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC7C,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,CAAC;AACF,QAAA,IAAI,CAAC,cAAc,GAAG,SAAS;IACjC;AAEQ,IAAA,kBAAkB,CAAC,IAAO,EAAA;AAChC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI;AACnC,cAAE;cACA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;AAElC,QAAA,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,EAAE,KAAK,WAAW,EAAE,EAAE,EAAE;YACvE,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC;AAC7D,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;QAEA,IAAI,WAAW,EAAE;AACf,YAAA,IAAI,CAAC,eAAe,GAAG,WAAW;YAClC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,EAAE,EAAE,cAAc,CAAC;QACnD;AAAO,aAAA,IAAI,IAAI,CAAC,eAAe,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,cAAc,CAAC;AAC7D,YAAA,IAAI,CAAC,eAAe,GAAG,SAAS;QAClC;IACF;IAEQ,iBAAiB,GAAA;QACvB,MAAM,MAAM,GAAgB,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAC9D,QAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC;AACxC,QAAA,MAAM,CAAC,YAAY,CACjB,OAAO,EACP,CAAA,+IAAA,CAAiJ,CAClJ;AACD,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC;IACjC;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC;AACjC,YAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC;QAC/B;IACF;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC;IACnD;IAEQ,kBAAkB,GAAA;AACxB,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE;QACpC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IACpD;IAEQ,4BAA4B,CAClC,QAAsB,EACtB,cAA2B,EAAA;AAE3B,QAAA,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,kBAAkB,EAAE;QAClC;aAAO;YACL,IAAI,CAAC,kBAAkB,EAAE;QAC3B;AAEA,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,cAAc,EACd,aAAa,EACb,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAChC;AACD,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,cAAc,EACd,WAAW,EACX,gBAAgB,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CACzC;IACH;IAEQ,oBAAoB,CAAC,IAAO,EAAE,QAAiB,EAAA;QACrD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI,CAAC,SAAS,EAAE;QACzB;QACA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAClC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC,MAAK;gBAC1C,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC;YAC1B,CAAC,EAAE,IAAI,CAAC;QACV;IACF;AAEQ,IAAA,cAAc,CAAC,IAAO,EAAA;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AAC3C,QAAA,OAAO,QAAQ,GAAG,aAAa,CAAC,CAAC,aAAa;IAChD;IAEQ,WAAW,CAAC,WAAc,EAAE,QAAsB,EAAA;AACxD,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;QACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YAClC,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC;QACjD;QAEA,MAAM,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;QACxE,IAAI,uBAAuB,EAAE;AAC3B,YAAA,OAAO,uBAAuB;QAChC;AAEA,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAC1B;IAEQ,YAAY,CAClB,WAAc,EACd,QAAsB,EAAA;AAMtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;QACA,IAAI,WAAW,CAAC,EAAE,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE;YAC1C,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE;aACV;QACH;AACA,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAC9C,WAAW,CAAC,EAAE,EACd,WAAW,CACZ;QACD,IAAI,iBAAiB,EAAE;YACrB,OAAO;gBACL,OAAO,EAAE,CAAC,iBAAiB;AAC3B,gBAAA,OAAO,EAAE;aACV;QACH;QAEA,MAAM,uBAAuB,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC;QACxE,IAAI,uBAAuB,EAAE;AAC3B,YAAA,OAAO,uBAAuB;QAChC;QAEA,OAAO;AACL,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,OAAO,EAAE;SACV;IACH;AAEQ,IAAA,yBAAyB,CAC/B,QAAsB,EAAA;AAEtB,QAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;AACrB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;QAC3B;AAEA,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;QAChC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,SAAS;QAClB;QAEA,IAAI,KAAK,GACP,QAAQ,CAAC,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK;QAElE,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;;AAElC,YAAA,KAAK,GAAG,KAAK,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC;QACxE;AAEA,QAAA,IAAI,KAAK,GAAG,QAAQ,EAAE;YACpB,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,qCAAqC;AAC9C,gBAAA,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ;aAC1B;QACH;AAEA,QAAA,OAAO,SAAS;IAClB;AAEQ,IAAA,cAAc,CAAC,IAAO,EAAA;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;AACpD,QAAA,MAAM,WAAW,GAAQ,CAAC,GAAG,QAAQ,CAAC;AACtC,QAAA,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;YACzB,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,WAAW;IACpB;IAEQ,iBAAiB,CAAC,EAAmB,EAAE,YAAe,EAAA;QAC5D,IAAI,CAAC,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,KAAK;QACnC,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAC/C,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE,KAAK,EAAE,CAC3B;IACH;IAEQ,WAAW,CAAC,KAAgB,EAAE,WAAc,EAAA;AAClD,QAAA,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;YACtD,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,EAAE,WAAW,CAAC,EAAE;AACvD,gBAAA,WAAW,GAAG,IAAI,CAAC,WAAW;YAChC;QACF;QAEA,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC;AAE3D,QAAA,MAAM,iBAAiB,GACrB,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AACzB,YAAA,YAAY,KAAK,OAAO;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QACrC,IAAI,iBAAiB,EAAE;YACrB,YAAY,GAAG,QAAQ;QACzB;QAEA,OAAO;YACL,CAAC,EAAE,KAAK,CAAC,CAAC;YACV,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,YAAY,CAAC;AAC/C,YAAA,KAAK,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AAChE,YAAA,IAAI,EAAE;SACP;IACH;IAEQ,YAAY,CAAC,IAAO,EAAE,IAAsB,EAAA;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACzC,QAAA,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,CAAC;AACtB,QAAA,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE;QAE5C,OAAO,IAAI,KAAK;cACZ,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG;AACpC,cAAE,OAAO,CAAC,SAAS,GAAG,CAAC;IAC3B;IAEQ,eAAe,CAAC,KAAgB,EAAE,WAAc,EAAA;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAC/C,QAAA,IAAI,CAAC,MAAM;AAAE,YAAA,OAAO,OAAO;AAC3B,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;QAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;AACzC,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC;AAEjB,QAAA,MAAM,eAAe,GACnB,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,WAAW,CAAC,EAAE;QAC5D,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,eAAe,EAAE;YACjD,MAAM,SAAS,GAAG,CAAC;AACnB,YAAA,IAAI,CAAC,IAAI,MAAM,GAAG,SAAS,IAAI,CAAC,IAAI,MAAM,GAAG,SAAS,EAAE;AACtD,gBAAA,OAAO,QAAQ;YACjB;QACF;AAEA,QAAA,MAAM,OAAO,GAAG,CAAC,GAAG,MAAM;QAC1B,OAAO,OAAO,GAAG,OAAO,GAAG,OAAO;IACpC;AAEQ,IAAA,gBAAgB,CACtB,WAAc,EACd,IAAsB,EACtB,CAAS,EAAA;QAET,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;AACvD,QAAA,IAAI,gBAAgB,KAAK,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC;QACV;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC;AACtD,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,OAAO,gBAAgB;QAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC;QACpD,MAAM,SAAS,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,GAAG,EAAE;AAErC,QAAA,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,EAAE,EAAE,KAAK,WAAW,CAAC,EAAE,EAAE;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC;AAC/C,YAAA,IAAI,CAAC,MAAM;AAAE,gBAAA,OAAO,gBAAgB;AACpC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE;YAE3C,MAAM,WAAW,GAAG,EAAE;AACtB,YAAA,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,WAAW;AACjC,YAAA,MAAM,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,gBAAgB;AAElD,YAAA,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI;YAClC,IAAI,CAAC,iBAAiB,EAAE;AACtB,gBAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,WAAW,CAAC;gBAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,GAAG,gBAAgB,CAAC;YACzD;QACF;AACA,QAAA,OAAO,gBAAgB;IACzB;AAEA;;AAEG;IACK,gBAAgB,CAAC,EAAmB,EAAE,KAAc,EAAA;QAC1D,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;AACtC,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACrB,YAAA,OAAO,SAAS;QAClB;AAEA,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC;QACpB;QACA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B;AAEQ,IAAA,gBAAgB,CAAC,EAAmB,EAAA;AAC1C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE;AAC1B,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAEnE,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,IAAI,GAAQ,EAAE;YACpB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI;YACb;QACF;AAEA,QAAA,OAAO,EAAE;IACX;AAEQ,IAAA,QAAQ,CACd,WAAc,EACd,QAAyB,EACzB,IAAS,EAAA;AAET,QAAA,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;AAC3D,QAAA,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;AAC5B,YAAA,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;AACxC,gBAAA,OAAO,IAAI;YACb;YACA,IAAI,CAAC,GAAG,EAAE;QACZ;AACA,QAAA,OAAO,KAAK;IACd;AAEQ,IAAA,YAAY,CAAC,IAAO,EAAA;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO,QAAQ,GAAG,QAAQ,CAAC,KAAK,GAAG,CAAC;IACtC;AAEQ,IAAA,oBAAoB,CAAC,IAAO,EAAA;QAClC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE;IAC5C;AAEQ,IAAA,YAAY,CAAC,EAAmB,EAAA;QACtC,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC;IACnE;wGA3nBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,yiCAwCC,WAAW,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAxCjC,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBATjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mBAAmB;AAC7B,oBAAA,IAAI,EAAE;AACJ,wBAAA,oBAAoB,EAAE,YAAY;AAClC,wBAAA,YAAY,EAAE,sBAAsB;AACpC,wBAAA,aAAa,EAAE,uBAAuB;AACtC,wBAAA,QAAQ,EAAE;AACX;AACF,iBAAA;AAyCkC,SAAA,CAAA,EAAA,cAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,EAAA,IAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,gBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,QAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,SAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,OAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,UAAA,CAAA,MAAA,WAAW,CAAA,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;ACtFrE;;AAEG;MAKU,iBAAiB,CAAA;AAC5B,IAAA,OAAO,OAAO,GAAA;QACZ,OAAO;AACL,YAAA,QAAQ,EAAE,iBAAiB;AAC3B,YAAA,SAAS,EAAE;SACZ;IACH;wGANW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,YAHlB,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAC3C,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA;yGAE1C,iBAAiB,EAAA,CAAA;;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAJ7B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB,CAAC;AACtD,oBAAA,OAAO,EAAE,CAAC,oBAAoB,EAAE,qBAAqB;AACtD,iBAAA;;;ACXD;;AAEG;;;;"}