@seniorsistemas/data-seniorx-core 1.7.0 → 1.9.0

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 (114) hide show
  1. package/core/types/card.type.d.ts +1 -15
  2. package/core/types/filters.type.d.ts +9 -6
  3. package/core/types/row-card.type.d.ts +1 -7
  4. package/core/types/select-button.type.d.ts +5 -0
  5. package/core/types/sidebar.type.d.ts +6 -0
  6. package/core/utils/array.util.d.ts +1 -0
  7. package/esm2022/core/config/card.type.config.mjs +3 -3
  8. package/esm2022/core/config/row-card.type.config.mjs +2 -1
  9. package/esm2022/core/handlers/sqlFormatter.mjs +2 -2
  10. package/esm2022/core/types/card.type.mjs +2 -39
  11. package/esm2022/core/types/filters.type.mjs +1 -1
  12. package/esm2022/core/types/row-card.type.mjs +1 -1
  13. package/esm2022/core/types/select-button.type.mjs +2 -0
  14. package/esm2022/core/types/sidebar.type.mjs +2 -0
  15. package/esm2022/core/types/table.type.mjs +28 -0
  16. package/esm2022/core/utils/array.util.mjs +4 -0
  17. package/esm2022/features/button/button.component.mjs +5 -5
  18. package/esm2022/features/card-list/card/card.component.mjs +5 -5
  19. package/esm2022/features/card-list/card-list.component.mjs +8 -8
  20. package/esm2022/features/checkbox/checkbox.component.mjs +3 -3
  21. package/esm2022/features/code-editor/code-editor.component.mjs +216 -0
  22. package/esm2022/features/combobox/combobox.component.mjs +10 -7
  23. package/esm2022/features/confirm/confirm.component.mjs +3 -3
  24. package/esm2022/features/filters/filters.component.mjs +35 -9
  25. package/esm2022/features/hyperlink/hyperlink.component.mjs +3 -3
  26. package/esm2022/features/inputs.mjs +3 -3
  27. package/esm2022/features/list/list.component.mjs +3 -3
  28. package/esm2022/features/modal/modal.component.mjs +3 -3
  29. package/esm2022/features/modalc/modalc.component.mjs +4 -4
  30. package/esm2022/features/paginator/paginator.component.mjs +81 -33
  31. package/esm2022/features/panel/panel.component.mjs +26 -16
  32. package/esm2022/features/row-card-list/row-card/row-card.component.mjs +29 -18
  33. package/esm2022/features/row-card-list/row-card-list.component.mjs +10 -10
  34. package/esm2022/features/scaffold/scaffold.component.mjs +43 -14
  35. package/esm2022/features/searchbox/searchbox.component.mjs +4 -4
  36. package/esm2022/features/select-button/select-button.component.mjs +118 -0
  37. package/esm2022/features/sidebar/sidebar.component.mjs +3 -3
  38. package/esm2022/features/spinner/spinner.component.mjs +3 -3
  39. package/esm2022/features/spinner/spinner.service.mjs +3 -3
  40. package/esm2022/features/tab/tab-item.component.mjs +4 -4
  41. package/esm2022/features/tab/tab.component.mjs +31 -14
  42. package/esm2022/features/table/table.component.mjs +6 -6
  43. package/esm2022/features/textbox/textbox.component.mjs +3 -3
  44. package/esm2022/features/toast/toast.component.mjs +4 -4
  45. package/esm2022/features/toast/toast.service.mjs +4 -4
  46. package/esm2022/providers/services.provider.mjs +3 -3
  47. package/esm2022/providers/styles.provider.mjs +32 -0
  48. package/esm2022/providers/translate.provider.mjs +48 -26
  49. package/esm2022/public-api.mjs +31 -7
  50. package/features/button/button.component.d.ts +1 -1
  51. package/features/card-list/card/card.component.d.ts +2 -2
  52. package/features/card-list/card-list.component.d.ts +1 -1
  53. package/features/code-editor/code-editor.component.d.ts +57 -0
  54. package/features/combobox/combobox.component.d.ts +3 -2
  55. package/features/filters/filters.component.d.ts +5 -2
  56. package/features/modalc/modalc.component.d.ts +1 -1
  57. package/features/paginator/paginator.component.d.ts +29 -8
  58. package/features/panel/panel.component.d.ts +8 -2
  59. package/features/row-card-list/row-card/row-card.component.d.ts +7 -4
  60. package/features/row-card-list/row-card-list.component.d.ts +3 -3
  61. package/features/scaffold/scaffold.component.d.ts +12 -4
  62. package/features/searchbox/searchbox.component.d.ts +1 -1
  63. package/features/select-button/select-button.component.d.ts +30 -0
  64. package/features/tab/tab.component.d.ts +4 -1
  65. package/features/table/table.component.d.ts +2 -2
  66. package/features/toast/toast.component.d.ts +1 -1
  67. package/features/toast/toast.service.d.ts +1 -1
  68. package/fesm2022/seniorsistemas-data-seniorx-core.mjs +884 -363
  69. package/fesm2022/seniorsistemas-data-seniorx-core.mjs.map +1 -1
  70. package/package.json +20 -15
  71. package/providers/services.provider.d.ts +2 -2
  72. package/providers/styles.provider.d.ts +2 -0
  73. package/providers/translate.provider.d.ts +2 -7
  74. package/public-api.d.ts +23 -6
  75. package/src/locales/en.json +15 -0
  76. package/src/locales/es-CO.json +15 -0
  77. package/src/locales/pt.json +15 -0
  78. package/styles/domain-filter.scss +10 -0
  79. package/styles/fields.scss +17 -0
  80. package/styles/hyperlink.scss +11 -0
  81. package/styles/sdc-card.scss +34 -0
  82. package/styles/sdc-global-variables.scss +73 -0
  83. package/styles.css +20161 -6
  84. package/styles.scss +5 -0
  85. package/webfonts/fa-brands-400.eot +0 -0
  86. package/webfonts/fa-brands-400.svg +3717 -0
  87. package/webfonts/fa-brands-400.ttf +0 -0
  88. package/webfonts/fa-brands-400.woff +0 -0
  89. package/webfonts/fa-brands-400.woff2 +0 -0
  90. package/webfonts/fa-duotone-900.eot +0 -0
  91. package/webfonts/fa-duotone-900.svg +15328 -0
  92. package/webfonts/fa-duotone-900.ttf +0 -0
  93. package/webfonts/fa-duotone-900.woff +0 -0
  94. package/webfonts/fa-duotone-900.woff2 +0 -0
  95. package/webfonts/fa-light-300.eot +0 -0
  96. package/webfonts/fa-light-300.svg +12423 -0
  97. package/webfonts/fa-light-300.ttf +0 -0
  98. package/webfonts/fa-light-300.woff +0 -0
  99. package/webfonts/fa-light-300.woff2 +0 -0
  100. package/webfonts/fa-regular-400.eot +0 -0
  101. package/webfonts/fa-regular-400.svg +11323 -0
  102. package/webfonts/fa-regular-400.ttf +0 -0
  103. package/webfonts/fa-regular-400.woff +0 -0
  104. package/webfonts/fa-regular-400.woff2 +0 -0
  105. package/webfonts/fa-solid-900.eot +0 -0
  106. package/webfonts/fa-solid-900.svg +9653 -0
  107. package/webfonts/fa-solid-900.ttf +0 -0
  108. package/webfonts/fa-solid-900.woff +0 -0
  109. package/webfonts/fa-solid-900.woff2 +0 -0
  110. package/esm2022/core/types/table.types.mjs +0 -28
  111. package/esm2022/features/sql-editor/sql-editor.component.mjs +0 -125
  112. package/features/sql-editor/sql-editor.component.d.ts +0 -27
  113. package/styles.css.map +0 -1
  114. /package/core/types/{table.types.d.ts → table.type.d.ts} +0 -0
@@ -1,12 +1,12 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { Component, EventEmitter, Input, Output, computed, signal, ViewEncapsulation } from '@angular/core';
3
3
  import { CardComponent } from './card/card.component';
4
- import { isMobile, isTablet } from 'lib/src/core/utils/layout.util';
4
+ import { isMobile, isTablet } from '../../core/utils/layout.util';
5
5
  import { EmptyStateModule } from '@seniorsistemas/angular-components/empty-state';
6
6
  import { LoadingStateModule } from '@seniorsistemas/angular-components/loading-state';
7
7
  import { ButtonComponent } from '../button/button.component';
8
8
  import { PaginatorComponent } from '../paginator/paginator.component';
9
- import { DEFAULT_CARD_LIST_OPTIONS } from 'lib/src/core/config/card.type.config';
9
+ import { DEFAULT_CARD_LIST_OPTIONS } from '../../core/config/card.type.config';
10
10
  import { TranslateModule } from '@ngx-translate/core';
11
11
  import * as i0 from "@angular/core";
12
12
  import * as i1 from "@angular/common";
@@ -24,7 +24,7 @@ export class CardListComponent {
24
24
  totalRecordsLabel = computed(() => this.options().totalRecordsLabel ?? '');
25
25
  emptyTitle = computed(() => this.options().empty?.title ?? '');
26
26
  emptyText = computed(() => this.options().empty?.message ?? '');
27
- page = signal({ first: 0, rows: 4 });
27
+ page = signal({ first: 0, rows: 5 });
28
28
  isFirstPage = computed(() => this.page().first === 0);
29
29
  isLastPage = computed(() => this.page().first + this.page().rows >= this.filtered().length);
30
30
  raw = signal([]);
@@ -118,12 +118,12 @@ export class CardListComponent {
118
118
  return JSON.stringify(obj ?? {});
119
119
  }
120
120
  }
121
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CardListComponent, isStandalone: true, selector: "sdc-card-list", inputs: { data: "data", loading: "loading", config: "config" }, outputs: { cardButtonClick: "cardButtonClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-card-list m-3\">\n <div [class.my-3]=\"isMobile\">\n @if (loading) {\n <s-loading-state [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-cardlist-loading-state\"></s-loading-state>\n } @else { @if (pagedData().length) {\n <div class=\"relative\">\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n (click)=\"prevPage()\"\n [disabled]=\"isFirstPage()\"\n class=\"absolute left-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-left\"\n ></sdc-button>\n }\n <div class=\"grid flex-1\" [class.mx-5]=\"!isMobile && options().enableSideButtons\">\n @for (card of pagedData(); track card.name) {\n <div class=\"col-12 md:col-6 lg:col-4 xl:col-3\">\n <dp-card (cardAction)=\"onCardClick($event)\" [options]=\"options().customCard\" [data]=\"card\"></dp-card>\n </div>\n }\n </div>\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n [disabled]=\"isLastPage()\"\n (click)=\"nextPage()\"\n class=\"absolute right-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-right\"\n ></sdc-button>\n }\n </div>\n } @else {\n <s-empty-state\n id=\"cardlist-empty\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle() | translate\"\n [description]=\"emptyText() | translate\"\n class=\"sdc-cardlist-empty-state\"\n ></s-empty-state>\n } @if (options().enablePagination) {\n <div class=\"flex justify-content-beetween sdc-paginator\" [class.justify-content-center]=\"isMobile || isTablet\">\n <sdc-paginator\n style=\"min-width: 100%\"\n (pageChange)=\"onChangePaginator($event)\"\n [first]=\"page().first\"\n [rows]=\"page().rows\"\n [totalRecords]=\"filtered().length\"\n [totalRecordsLabel]=\"totalRecordsLabel() | translate\"\n [isMobile]=\"isMobile\"\n >\n </sdc-paginator>\n </div>\n } }\n </div>\n</div>\n", styles: [".sdc-card-list{min-height:30rem;min-width:17rem;align-content:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CardComponent, selector: "dp-card", inputs: ["data", "options"], outputs: ["cardAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["disabled", "width", "icon", "id", "label", "priority", "size", "type"], outputs: ["onClick"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i3.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "component", type: i4.LoadingStateComponent, selector: "s-loading-state", inputs: ["indicator", "id", "blockWindow", "loading"] }] });
121
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
122
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: CardListComponent, isStandalone: true, selector: "sdc-card-list", inputs: { data: "data", loading: "loading", config: "config" }, outputs: { cardButtonClick: "cardButtonClick" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-card-list\">\n <div [class.my-3]=\"isMobile\">\n @if (loading) {\n <s-loading-state [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-cardlist-loading-state\"></s-loading-state>\n } @else { @if (pagedData().length) {\n <div class=\"relative\">\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n (click)=\"prevPage()\"\n [disabled]=\"isFirstPage()\"\n class=\"absolute left-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-left\"\n ></sdc-button>\n }\n\n <div class=\"grid flex-1\" [class.mx-5]=\"!isMobile && options().enableSideButtons\">\n @for (card of pagedData(); track card.name) {\n <div class=\"col-12 md:col-6 lg:col-4 xl:col-5th\">\n <sdc-card (cardAction)=\"onCardClick($event)\" [options]=\"options().customCard\" [data]=\"card\"></sdc-card>\n </div>\n }\n </div>\n\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n [disabled]=\"isLastPage()\"\n (click)=\"nextPage()\"\n class=\"absolute right-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-right\"\n ></sdc-button>\n }\n </div>\n } @else {\n <s-empty-state\n id=\"cardlist-empty\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle() | translate\"\n [description]=\"emptyText() | translate\"\n class=\"sdc-cardlist-empty-state\"\n ></s-empty-state>\n } @if (options().enablePagination) {\n <div class=\"flex justify-content-between sdc-paginator pt-3\" [class.justify-content-center]=\"isMobile || isTablet\">\n <sdc-paginator\n style=\"min-width: 100%\"\n (pageChange)=\"onChangePaginator($event)\"\n [first]=\"page().first\"\n [rows]=\"page().rows\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"filtered().length\"\n [totalRecordsLabel]=\"totalRecordsLabel() | translate\"\n [isMobile]=\"isMobile\"\n >\n </sdc-paginator>\n </div>\n } }\n </div>\n</div>\n", styles: [".sdc-card-list{min-height:25rem;min-width:17rem;align-content:center}@media screen and (min-width: 1200px){.xl\\:col-5th{flex:0 0 20%;max-width:20%;padding:.5rem}}@media screen and (min-width: 1400px){.\\32xl\\:col-5th{flex:0 0 20%;max-width:20%}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CardComponent, selector: "sdc-card", inputs: ["data", "options"], outputs: ["cardAction"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "sdc-button", inputs: ["disabled", "width", "icon", "id", "label", "priority", "size", "type"], outputs: ["onClick"] }, { kind: "component", type: PaginatorComponent, selector: "sdc-paginator", inputs: ["first", "rows", "totalRecords", "rowsPerPageOptions", "isMobile", "totalRecordsLabel"], outputs: ["pageChange"] }, { kind: "ngmodule", type: EmptyStateModule }, { kind: "component", type: i3.EmptyStateComponent, selector: "s-empty-state", inputs: ["id", "title", "iconClass", "description", "showPrimaryAction", "showSecondaryAction", "primaryActionLabel", "secondaryActionLabel", "primaryModel"], outputs: ["primaryAction", "secondaryAction"] }, { kind: "ngmodule", type: LoadingStateModule }, { kind: "component", type: i4.LoadingStateComponent, selector: "s-loading-state", inputs: ["indicator", "id", "blockWindow", "loading"] }] });
123
123
  }
124
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CardListComponent, decorators: [{
124
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CardListComponent, decorators: [{
125
125
  type: Component,
126
- args: [{ selector: 'sdc-card-list', standalone: true, imports: [CommonModule, CardComponent, TranslateModule, ButtonComponent, PaginatorComponent, EmptyStateModule, LoadingStateModule], encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-card-list m-3\">\n <div [class.my-3]=\"isMobile\">\n @if (loading) {\n <s-loading-state [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-cardlist-loading-state\"></s-loading-state>\n } @else { @if (pagedData().length) {\n <div class=\"relative\">\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n (click)=\"prevPage()\"\n [disabled]=\"isFirstPage()\"\n class=\"absolute left-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-left\"\n ></sdc-button>\n }\n <div class=\"grid flex-1\" [class.mx-5]=\"!isMobile && options().enableSideButtons\">\n @for (card of pagedData(); track card.name) {\n <div class=\"col-12 md:col-6 lg:col-4 xl:col-3\">\n <dp-card (cardAction)=\"onCardClick($event)\" [options]=\"options().customCard\" [data]=\"card\"></dp-card>\n </div>\n }\n </div>\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n [disabled]=\"isLastPage()\"\n (click)=\"nextPage()\"\n class=\"absolute right-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-right\"\n ></sdc-button>\n }\n </div>\n } @else {\n <s-empty-state\n id=\"cardlist-empty\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle() | translate\"\n [description]=\"emptyText() | translate\"\n class=\"sdc-cardlist-empty-state\"\n ></s-empty-state>\n } @if (options().enablePagination) {\n <div class=\"flex justify-content-beetween sdc-paginator\" [class.justify-content-center]=\"isMobile || isTablet\">\n <sdc-paginator\n style=\"min-width: 100%\"\n (pageChange)=\"onChangePaginator($event)\"\n [first]=\"page().first\"\n [rows]=\"page().rows\"\n [totalRecords]=\"filtered().length\"\n [totalRecordsLabel]=\"totalRecordsLabel() | translate\"\n [isMobile]=\"isMobile\"\n >\n </sdc-paginator>\n </div>\n } }\n </div>\n</div>\n", styles: [".sdc-card-list{min-height:30rem;min-width:17rem;align-content:center}\n"] }]
126
+ args: [{ selector: 'sdc-card-list', standalone: true, imports: [CommonModule, CardComponent, TranslateModule, ButtonComponent, PaginatorComponent, EmptyStateModule, LoadingStateModule], encapsulation: ViewEncapsulation.Emulated, template: "<div class=\"sdc-card-list\">\n <div [class.my-3]=\"isMobile\">\n @if (loading) {\n <s-loading-state [loading]=\"loading\" [blockWindow]=\"false\" class=\"sdc-cardlist-loading-state\"></s-loading-state>\n } @else { @if (pagedData().length) {\n <div class=\"relative\">\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n (click)=\"prevPage()\"\n [disabled]=\"isFirstPage()\"\n class=\"absolute left-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-left\"\n ></sdc-button>\n }\n\n <div class=\"grid flex-1\" [class.mx-5]=\"!isMobile && options().enableSideButtons\">\n @for (card of pagedData(); track card.name) {\n <div class=\"col-12 md:col-6 lg:col-4 xl:col-5th\">\n <sdc-card (cardAction)=\"onCardClick($event)\" [options]=\"options().customCard\" [data]=\"card\"></sdc-card>\n </div>\n }\n </div>\n\n @if (options().enableSideButtons) {\n <sdc-button\n width=\"3rem\"\n *ngIf=\"!isMobile\"\n [disabled]=\"isLastPage()\"\n (click)=\"nextPage()\"\n class=\"absolute right-0 top-50 transform -translate-y-50 z-1\"\n type=\"button\"\n icon=\"fas fa-arrow-right\"\n ></sdc-button>\n }\n </div>\n } @else {\n <s-empty-state\n id=\"cardlist-empty\"\n iconClass=\"fa fa-inbox\"\n [title]=\"emptyTitle() | translate\"\n [description]=\"emptyText() | translate\"\n class=\"sdc-cardlist-empty-state\"\n ></s-empty-state>\n } @if (options().enablePagination) {\n <div class=\"flex justify-content-between sdc-paginator pt-3\" [class.justify-content-center]=\"isMobile || isTablet\">\n <sdc-paginator\n style=\"min-width: 100%\"\n (pageChange)=\"onChangePaginator($event)\"\n [first]=\"page().first\"\n [rows]=\"page().rows\"\n [rowsPerPageOptions]=\"[5, 10, 20]\"\n [totalRecords]=\"filtered().length\"\n [totalRecordsLabel]=\"totalRecordsLabel() | translate\"\n [isMobile]=\"isMobile\"\n >\n </sdc-paginator>\n </div>\n } }\n </div>\n</div>\n", styles: [".sdc-card-list{min-height:25rem;min-width:17rem;align-content:center}@media screen and (min-width: 1200px){.xl\\:col-5th{flex:0 0 20%;max-width:20%;padding:.5rem}}@media screen and (min-width: 1400px){.\\32xl\\:col-5th{flex:0 0 20%;max-width:20%}}\n"] }]
127
127
  }], propDecorators: { data: [{
128
128
  type: Input
129
129
  }], loading: [{
@@ -133,4 +133,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
133
133
  }], cardButtonClick: [{
134
134
  type: Output
135
135
  }] } });
136
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvY2FyZC1saXN0L2NhcmQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NhcmQtbGlzdC9jYXJkLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBOEQsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEssT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBVXRELE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE1BQU0sR0FBb0IseUJBQXlCLENBQUM7SUFFbkQsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFbEMsUUFBUSxHQUFH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QUFpQixDQUFDLFFBQVE7OEJBR2hDLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIGNvbXB1dGVkLCBzaWduYWwsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgRG9DaGVjaywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQvY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZExpc3RPcHRpb25zIH0gZnJvbSAnbGliL3NyYy9jb3JlL3R5cGVzL2NhcmQudHlwZSc7XG5pbXBvcnQgeyBpc01vYmlsZSwgaXNUYWJsZXQgfSBmcm9tICdsaWIvc3JjL2NvcmUvdXRpbHMvbGF5b3V0LnV0aWwnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1vZHVsZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvZW1wdHktc3RhdGUnO1xuaW1wb3J0IHsgTG9hZGluZ1N0YXRlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9sb2FkaW5nLXN0YXRlJztcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2luYXRvckNvbXBvbmVudCB9IGZyb20gJy4uL3BhZ2luYXRvci9wYWdpbmF0b3IuY29tcG9uZW50JztcbmltcG9ydCB7IERFRkFVTFRfQ0FSRF9MSVNUX09QVElPTlMgfSBmcm9tICdsaWIvc3JjL2NvcmUvY29uZmlnL2NhcmQudHlwZS5jb25maWcnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1jYXJkLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDYXJkQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIEJ1dHRvbkNvbXBvbmVudCwgUGFnaW5hdG9yQ29tcG9uZW50LCBFbXB0eVN0YXRlTW9kdWxlLCBMb2FkaW5nU3RhdGVNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NhcmQtbGlzdC5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRG9DaGVjayB7XG4gIEBJbnB1dCgpIGRhdGE6IENhcmRbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogQ2FyZExpc3RPcHRpb25zID0gREVGQVVMVF9DQVJEX0xJU1RfT1BUSU9OUztcblxuICBAT3V0cHV0KCkgY2FyZEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc01vYmlsZSA9IGlzTW9iaWxlKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1RhYmxldCA9IGlzVGFibGV0KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBzaWduYWw8Q2FyZExpc3RPcHRpb25zPihERUZBVUxUX0NBUkRfTElTVF9PUFRJT05TKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvdGFsUmVjb3Jkc0xhYmVsID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS50b3RhbFJlY29yZHNMYWJlbCA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbXB0eVRpdGxlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8udGl0bGUgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlUZXh0ID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8ubWVzc2FnZSA/PyAnJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhZ2UgPSBzaWduYWwoeyBmaXJzdDogMCwgcm93czogNCB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRmlyc3RQYWdlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYWdlKCkuZmlyc3QgPT09IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNMYXN0UGFnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFnZSgpLmZpcnN0ICsgdGhpcy5wYWdlKCkucm93cyA+PSB0aGlzLmZpbHRlcmVkKCkubGVuZ3RoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJhdyA9IHNpZ25hbDxDYXJkW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkID0gc2lnbmFsPENhcmRbXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZmlsdGVyZWQoKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucygpLmVuYWJsZVBhZ2luYXRpb24pIHJldHVybiBsaXN0O1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MgfSA9IHRoaXMucGFnZSgpO1xuICAgIHJldHVybiBsaXN0LnNsaWNlKGZpcnN0LCBmaXJzdCArIHJvd3MpO1xuICB9KTtcblxuICBwcml2YXRlIGNvbmZpZ0hhc2ggPSAnJztcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuZGF0YSA/PyBbXTtcbiAgICAgIHRoaXMucmF3LnNldCh2KTtcbiAgICAgIHRoaXMuZmlsdGVyZWQuc2V0KHYpO1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiAwLCByb3dzOiB0aGlzLnBhZ2UoKS5yb3dzIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnBhZ2Uuc2V0KHsgZmlyc3Q6IDAsIHJvd3M6IHRoaXMucGFnZSgpLnJvd3MgfSk7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSB0aGlzLnN0YWJsZVN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRIYXNoID0gdGhpcy5zdGFibGVTdHJpbmdpZnkodGhpcy5jb25maWcpO1xuICAgIGlmIChuZXh0SGFzaCAhPT0gdGhpcy5jb25maWdIYXNoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSBuZXh0SGFzaDtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnBhZ2Uuc2V0KHsgZmlyc3Q6IDAsIHJvd3M6IHRoaXMucGFnZSgpLnJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlUGFnaW5hdG9yKGV2ZW50OiBQYWdpbmF0b3JTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuZW5hYmxlUGFnaW5hdGlvbikgcmV0dXJuO1xuICAgIHRoaXMucGFnZS5zZXQoe1xuICAgICAgZmlyc3Q6IGV2ZW50LmZpcnN0ID8/IDAsXG4gICAgICByb3dzOiBldmVudC5yb3dzID8/IHRoaXMucGFnZSgpLnJvd3NcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucygpLmVuYWJsZVBhZ2luYXRpb24pIHJldHVybjtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzIH0gPSB0aGlzLnBhZ2UoKTtcbiAgICBpZiAodGhpcy5maWx0ZXJlZCgpLmxlbmd0aCA+IGZpcnN0ICsgcm93cykge1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiBmaXJzdCArIHJvd3MsIHJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByZXZQYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuZW5hYmxlUGFnaW5hdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MgfSA9IHRoaXMucGFnZSgpO1xuICAgIGlmIChmaXJzdCAtIHJvd3MgPj0gMCkge1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiBmaXJzdCAtIHJvd3MsIHJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2FyZENsaWNrKGNhcmQ6IENhcmQpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmRCdXR0b25DbGljay5lbWl0KGNhcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ09wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZSA9IERFRkFVTFRfQ0FSRF9MSVNUX09QVElPTlM7XG4gICAgY29uc3QgY2ZnOiBDYXJkTGlzdE9wdGlvbnMgPSB7IC4uLmJhc2UsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICBjZmcuY3VzdG9tQ2FyZCA9IHsgLi4uYmFzZS5jdXN0b21DYXJkLCAuLi4odGhpcy5jb25maWc/LmN1c3RvbUNhcmQgPz8ge30pIH07XG4gICAgdGhpcy5vcHRpb25zLnNldChjZmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFibGVTdHJpbmdpZnkob2JqOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICAgIGNvbnN0IHJlcGxhY2VyID0gKF9rOiBzdHJpbmcsIHY6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBhc09iaiA9IHYgYXMgb2JqZWN0O1xuICAgICAgICBpZiAoc2Vlbi5oYXMoYXNPYmopKSByZXR1cm47XG4gICAgICAgIHNlZW4uYWRkKGFzT2JqKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHJldHVybiB2O1xuICAgICAgICBjb25zdCBvID0gdiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLnNvcnQoKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gb1trZXldO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdjtcbiAgICB9O1xuICAgIHRyeSB7IHJldHVybiBKU09OLnN0cmluZ2lmeShvYmogPz8ge30sIHJlcGxhY2VyIGFzIGFueSk7IH0gY2F0Y2ggeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqID8/IHt9KTsgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLWNhcmQtbGlzdCBtLTNcIj5cbiAgPGRpdiBbY2xhc3MubXktM109XCJpc01vYmlsZVwiPlxuICAgIEBpZiAobG9hZGluZykge1xuICAgIDxzLWxvYWRpbmctc3RhdGUgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtibG9ja1dpbmRvd109XCJmYWxzZVwiIGNsYXNzPVwic2RjLWNhcmRsaXN0LWxvYWRpbmctc3RhdGVcIj48L3MtbG9hZGluZy1zdGF0ZT5cbiAgICB9IEBlbHNlIHsgQGlmIChwYWdlZERhdGEoKS5sZW5ndGgpIHtcbiAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgIEBpZiAob3B0aW9ucygpLmVuYWJsZVNpZGVCdXR0b25zKSB7XG4gICAgICA8c2RjLWJ1dHRvblxuICAgICAgICB3aWR0aD1cIjNyZW1cIlxuICAgICAgICAqbmdJZj1cIiFpc01vYmlsZVwiXG4gICAgICAgIChjbGljayk9XCJwcmV2UGFnZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzRmlyc3RQYWdlKClcIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIGxlZnQtMCB0b3AtNTAgdHJhbnNmb3JtIC10cmFuc2xhdGUteS01MCB6LTFcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWNvbj1cImZhcyBmYS1hcnJvdy1sZWZ0XCJcbiAgICAgID48L3NkYy1idXR0b24+XG4gICAgICB9XG4gICAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBmbGV4LTFcIiBbY2xhc3MubXgtNV09XCIhaXNNb2JpbGUgJiYgb3B0aW9ucygpLmVuYWJsZVNpZGVCdXR0b25zXCI+XG4gICAgICAgIEBmb3IgKGNhcmQgb2YgcGFnZWREYXRhKCk7IHRyYWNrIGNhcmQubmFtZSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG1kOmNvbC02IGxnOmNvbC00IHhsOmNvbC0zXCI+XG4gICAgICAgICAgPGRwLWNhcmQgKGNhcmRBY3Rpb24pPVwib25DYXJkQ2xpY2soJGV2ZW50KVwiIFtvcHRpb25zXT1cIm9wdGlvbnMoKS5jdXN0b21DYXJkXCIgW2RhdGFdPVwiY2FyZFwiPjwvZHAtY2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgQGlmIChvcHRpb25zKCkuZW5hYmxlU2lkZUJ1dHRvbnMpIHtcbiAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgIHdpZHRoPVwiM3JlbVwiXG4gICAgICAgICpuZ0lmPVwiIWlzTW9iaWxlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImlzTGFzdFBhZ2UoKVwiXG4gICAgICAgIChjbGljayk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC01MCB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS15LTUwIHotMVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpY29uPVwiZmFzIGZhLWFycm93LXJpZ2h0XCJcbiAgICAgID48L3NkYy1idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgfSBAZWxzZSB7XG4gICAgPHMtZW1wdHktc3RhdGVcbiAgICAgIGlkPVwiY2FyZGxpc3QtZW1wdHlcIlxuICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtaW5ib3hcIlxuICAgICAgW3RpdGxlXT1cImVtcHR5VGl0bGUoKSB8IHRyYW5zbGF0ZVwiXG4gICAgICBbZGVzY3JpcHRpb25dPVwiZW1wdHlUZXh0KCkgfCB0cmFuc2xhdGVcIlxuICAgICAgY2xhc3M9XCJzZGMtY2FyZGxpc3QtZW1wdHktc3RhdGVcIlxuICAgID48L3MtZW1wdHktc3RhdGU+XG4gICAgfSBAaWYgKG9wdGlvbnMoKS5lbmFibGVQYWdpbmF0aW9uKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jb250ZW50LWJlZXR3ZWVuIHNkYy1wYWdpbmF0b3JcIiBbY2xhc3MuanVzdGlmeS1jb250ZW50LWNlbnRlcl09XCJpc01vYmlsZSB8fCBpc1RhYmxldFwiPlxuICAgICAgPHNkYy1wYWdpbmF0b3JcbiAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDEwMCVcIlxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvbkNoYW5nZVBhZ2luYXRvcigkZXZlbnQpXCJcbiAgICAgICAgW2ZpcnN0XT1cInBhZ2UoKS5maXJzdFwiXG4gICAgICAgIFtyb3dzXT1cInBhZ2UoKS5yb3dzXCJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJmaWx0ZXJlZCgpLmxlbmd0aFwiXG4gICAgICAgIFt0b3RhbFJlY29yZHNMYWJlbF09XCJ0b3RhbFJlY29yZHNMYWJlbCgpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcbiAgICAgID5cbiAgICAgIDwvc2RjLXBhZ2luYXRvcj5cbiAgICA8L2Rpdj5cbiAgICB9IH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYi9zcmMvZmVhdHVyZXMvY2FyZC1saXN0L2NhcmQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NhcmQtbGlzdC9jYXJkLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBOEQsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEssT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDbEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdEYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBVXRELE1BQU0sT0FBTyxpQkFBaUI7SUFDbkIsSUFBSSxHQUFXLEVBQUUsQ0FBQztJQUNsQixPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQ2hCLE1BQU0sR0FBb0IseUJBQXlCLENBQUM7SUFFbkQsZUFBZSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7SUFFbEMsUUFBUSxHQUFH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QUFpQixDQUFDLFFBQVE7OEJBR2hDLElBQUk7c0JBQVosS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIGNvbXB1dGVkLCBzaWduYWwsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgRG9DaGVjaywgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQYWdpbmF0b3JTdGF0ZSB9IGZyb20gJ3ByaW1lbmcvcGFnaW5hdG9yJztcbmltcG9ydCB7IENhcmRDb21wb25lbnQgfSBmcm9tICcuL2NhcmQvY2FyZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FyZCwgQ2FyZExpc3RPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29yZS90eXBlcy9jYXJkLnR5cGUnO1xuaW1wb3J0IHsgaXNNb2JpbGUsIGlzVGFibGV0IH0gZnJvbSAnLi4vLi4vY29yZS91dGlscy9sYXlvdXQudXRpbCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlTW9kdWxlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9lbXB0eS1zdGF0ZSc7XG5pbXBvcnQgeyBMb2FkaW5nU3RhdGVNb2R1bGUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvYWRpbmctc3RhdGUnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGFnaW5hdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcGFnaW5hdG9yL3BhZ2luYXRvci5jb21wb25lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9DQVJEX0xJU1RfT1BUSU9OUyB9IGZyb20gJy4uLy4uL2NvcmUvY29uZmlnL2NhcmQudHlwZS5jb25maWcnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NkYy1jYXJkLWxpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBDYXJkQ29tcG9uZW50LCBUcmFuc2xhdGVNb2R1bGUsIEJ1dHRvbkNvbXBvbmVudCwgUGFnaW5hdG9yQ29tcG9uZW50LCBFbXB0eVN0YXRlTW9kdWxlLCBMb2FkaW5nU3RhdGVNb2R1bGVdLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FyZC1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2NhcmQtbGlzdC5jb21wb25lbnQuc2NzcycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLkVtdWxhdGVkLFxufSlcbmV4cG9ydCBjbGFzcyBDYXJkTGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgRG9DaGVjayB7XG4gIEBJbnB1dCgpIGRhdGE6IENhcmRbXSA9IFtdO1xuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpZzogQ2FyZExpc3RPcHRpb25zID0gREVGQVVMVF9DQVJEX0xJU1RfT1BUSU9OUztcblxuICBAT3V0cHV0KCkgY2FyZEJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDYXJkPigpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpc01vYmlsZSA9IGlzTW9iaWxlKCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBpc1RhYmxldCA9IGlzVGFibGV0KCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG9wdGlvbnMgPSBzaWduYWw8Q2FyZExpc3RPcHRpb25zPihERUZBVUxUX0NBUkRfTElTVF9PUFRJT05TKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvdGFsUmVjb3Jkc0xhYmVsID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS50b3RhbFJlY29yZHNMYWJlbCA/PyAnJyk7XG4gIHByb3RlY3RlZCByZWFkb25seSBlbXB0eVRpdGxlID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8udGl0bGUgPz8gJycpO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZW1wdHlUZXh0ID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB0aGlzLm9wdGlvbnMoKS5lbXB0eT8ubWVzc2FnZSA/PyAnJyk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhZ2UgPSBzaWduYWwoeyBmaXJzdDogMCwgcm93czogNSB9KTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzRmlyc3RQYWdlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYWdlKCkuZmlyc3QgPT09IDApO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNMYXN0UGFnZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucGFnZSgpLmZpcnN0ICsgdGhpcy5wYWdlKCkucm93cyA+PSB0aGlzLmZpbHRlcmVkKCkubGVuZ3RoKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJhdyA9IHNpZ25hbDxDYXJkW10+KFtdKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGZpbHRlcmVkID0gc2lnbmFsPENhcmRbXT4oW10pO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBwYWdlZERhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgbGlzdCA9IHRoaXMuZmlsdGVyZWQoKTtcbiAgICBpZiAoIXRoaXMub3B0aW9ucygpLmVuYWJsZVBhZ2luYXRpb24pIHJldHVybiBsaXN0O1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MgfSA9IHRoaXMucGFnZSgpO1xuICAgIHJldHVybiBsaXN0LnNsaWNlKGZpcnN0LCBmaXJzdCArIHJvd3MpO1xuICB9KTtcblxuICBwcml2YXRlIGNvbmZpZ0hhc2ggPSAnJztcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgY29uc3QgdiA9IHRoaXMuZGF0YSA/PyBbXTtcbiAgICAgIHRoaXMucmF3LnNldCh2KTtcbiAgICAgIHRoaXMuZmlsdGVyZWQuc2V0KHYpO1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiAwLCByb3dzOiB0aGlzLnBhZ2UoKS5yb3dzIH0pO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29uZmlnJ10pIHtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnBhZ2Uuc2V0KHsgZmlyc3Q6IDAsIHJvd3M6IHRoaXMucGFnZSgpLnJvd3MgfSk7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSB0aGlzLnN0YWJsZVN0cmluZ2lmeSh0aGlzLmNvbmZpZyk7XG4gICAgfVxuICB9XG5cbiAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIGNvbnN0IG5leHRIYXNoID0gdGhpcy5zdGFibGVTdHJpbmdpZnkodGhpcy5jb25maWcpO1xuICAgIGlmIChuZXh0SGFzaCAhPT0gdGhpcy5jb25maWdIYXNoKSB7XG4gICAgICB0aGlzLmNvbmZpZ0hhc2ggPSBuZXh0SGFzaDtcbiAgICAgIHRoaXMuYXBwbHlDb25maWdPcHRpb25zKCk7XG4gICAgICB0aGlzLnBhZ2Uuc2V0KHsgZmlyc3Q6IDAsIHJvd3M6IHRoaXMucGFnZSgpLnJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2hhbmdlUGFnaW5hdG9yKGV2ZW50OiBQYWdpbmF0b3JTdGF0ZSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuZW5hYmxlUGFnaW5hdGlvbikgcmV0dXJuO1xuICAgIHRoaXMucGFnZS5zZXQoe1xuICAgICAgZmlyc3Q6IGV2ZW50LmZpcnN0ID8/IDAsXG4gICAgICByb3dzOiBldmVudC5yb3dzID8/IHRoaXMucGFnZSgpLnJvd3NcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucygpLmVuYWJsZVBhZ2luYXRpb24pIHJldHVybjtcbiAgICBjb25zdCB7IGZpcnN0LCByb3dzIH0gPSB0aGlzLnBhZ2UoKTtcbiAgICBpZiAodGhpcy5maWx0ZXJlZCgpLmxlbmd0aCA+IGZpcnN0ICsgcm93cykge1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiBmaXJzdCArIHJvd3MsIHJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByZXZQYWdlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5vcHRpb25zKCkuZW5hYmxlUGFnaW5hdGlvbikgcmV0dXJuO1xuICAgIGNvbnN0IHsgZmlyc3QsIHJvd3MgfSA9IHRoaXMucGFnZSgpO1xuICAgIGlmIChmaXJzdCAtIHJvd3MgPj0gMCkge1xuICAgICAgdGhpcy5wYWdlLnNldCh7IGZpcnN0OiBmaXJzdCAtIHJvd3MsIHJvd3MgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uQ2FyZENsaWNrKGNhcmQ6IENhcmQpOiB2b2lkIHtcbiAgICB0aGlzLmNhcmRCdXR0b25DbGljay5lbWl0KGNhcmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNvbmZpZ09wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZSA9IERFRkFVTFRfQ0FSRF9MSVNUX09QVElPTlM7XG4gICAgY29uc3QgY2ZnOiBDYXJkTGlzdE9wdGlvbnMgPSB7IC4uLmJhc2UsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICBjZmcuY3VzdG9tQ2FyZCA9IHsgLi4uYmFzZS5jdXN0b21DYXJkLCAuLi4odGhpcy5jb25maWc/LmN1c3RvbUNhcmQgPz8ge30pIH07XG4gICAgdGhpcy5vcHRpb25zLnNldChjZmcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFibGVTdHJpbmdpZnkob2JqOiB1bmtub3duKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQ8b2JqZWN0PigpO1xuICAgIGNvbnN0IHJlcGxhY2VyID0gKF9rOiBzdHJpbmcsIHY6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgICAgIGlmICh2ICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBhc09iaiA9IHYgYXMgb2JqZWN0O1xuICAgICAgICBpZiAoc2Vlbi5oYXMoYXNPYmopKSByZXR1cm47XG4gICAgICAgIHNlZW4uYWRkKGFzT2JqKTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodikpIHJldHVybiB2O1xuICAgICAgICBjb25zdCBvID0gdiBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG8pLnNvcnQoKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgIGFjY1trZXldID0gb1trZXldO1xuICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdiA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gdjtcbiAgICB9O1xuICAgIHRyeSB7IHJldHVybiBKU09OLnN0cmluZ2lmeShvYmogPz8ge30sIHJlcGxhY2VyIGFzIGFueSk7IH0gY2F0Y2ggeyByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqID8/IHt9KTsgfVxuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwic2RjLWNhcmQtbGlzdFwiPlxuICA8ZGl2IFtjbGFzcy5teS0zXT1cImlzTW9iaWxlXCI+XG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgPHMtbG9hZGluZy1zdGF0ZSBbbG9hZGluZ109XCJsb2FkaW5nXCIgW2Jsb2NrV2luZG93XT1cImZhbHNlXCIgY2xhc3M9XCJzZGMtY2FyZGxpc3QtbG9hZGluZy1zdGF0ZVwiPjwvcy1sb2FkaW5nLXN0YXRlPlxuICAgIH0gQGVsc2UgeyBAaWYgKHBhZ2VkRGF0YSgpLmxlbmd0aCkge1xuICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiPlxuICAgICAgQGlmIChvcHRpb25zKCkuZW5hYmxlU2lkZUJ1dHRvbnMpIHtcbiAgICAgIDxzZGMtYnV0dG9uXG4gICAgICAgIHdpZHRoPVwiM3JlbVwiXG4gICAgICAgICpuZ0lmPVwiIWlzTW9iaWxlXCJcbiAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNGaXJzdFBhZ2UoKVwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgbGVmdC0wIHRvcC01MCB0cmFuc2Zvcm0gLXRyYW5zbGF0ZS15LTUwIHotMVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpY29uPVwiZmFzIGZhLWFycm93LWxlZnRcIlxuICAgICAgPjwvc2RjLWJ1dHRvbj5cbiAgICAgIH1cblxuICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZmxleC0xXCIgW2NsYXNzLm14LTVdPVwiIWlzTW9iaWxlICYmIG9wdGlvbnMoKS5lbmFibGVTaWRlQnV0dG9uc1wiPlxuICAgICAgICBAZm9yIChjYXJkIG9mIHBhZ2VkRGF0YSgpOyB0cmFjayBjYXJkLm5hbWUpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtZDpjb2wtNiBsZzpjb2wtNCB4bDpjb2wtNXRoXCI+XG4gICAgICAgICAgPHNkYy1jYXJkIChjYXJkQWN0aW9uKT1cIm9uQ2FyZENsaWNrKCRldmVudClcIiBbb3B0aW9uc109XCJvcHRpb25zKCkuY3VzdG9tQ2FyZFwiIFtkYXRhXT1cImNhcmRcIj48L3NkYy1jYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG5cbiAgICAgIEBpZiAob3B0aW9ucygpLmVuYWJsZVNpZGVCdXR0b25zKSB7XG4gICAgICA8c2RjLWJ1dHRvblxuICAgICAgICB3aWR0aD1cIjNyZW1cIlxuICAgICAgICAqbmdJZj1cIiFpc01vYmlsZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xhc3RQYWdlKClcIlxuICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtNTAgdHJhbnNmb3JtIC10cmFuc2xhdGUteS01MCB6LTFcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWNvbj1cImZhcyBmYS1hcnJvdy1yaWdodFwiXG4gICAgICA+PC9zZGMtYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH0gQGVsc2Uge1xuICAgIDxzLWVtcHR5LXN0YXRlXG4gICAgICBpZD1cImNhcmRsaXN0LWVtcHR5XCJcbiAgICAgIGljb25DbGFzcz1cImZhIGZhLWluYm94XCJcbiAgICAgIFt0aXRsZV09XCJlbXB0eVRpdGxlKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgW2Rlc2NyaXB0aW9uXT1cImVtcHR5VGV4dCgpIHwgdHJhbnNsYXRlXCJcbiAgICAgIGNsYXNzPVwic2RjLWNhcmRsaXN0LWVtcHR5LXN0YXRlXCJcbiAgICA+PC9zLWVtcHR5LXN0YXRlPlxuICAgIH0gQGlmIChvcHRpb25zKCkuZW5hYmxlUGFnaW5hdGlvbikge1xuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIHNkYy1wYWdpbmF0b3IgcHQtM1wiIFtjbGFzcy5qdXN0aWZ5LWNvbnRlbnQtY2VudGVyXT1cImlzTW9iaWxlIHx8IGlzVGFibGV0XCI+XG4gICAgICA8c2RjLXBhZ2luYXRvclxuICAgICAgICBzdHlsZT1cIm1pbi13aWR0aDogMTAwJVwiXG4gICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uQ2hhbmdlUGFnaW5hdG9yKCRldmVudClcIlxuICAgICAgICBbZmlyc3RdPVwicGFnZSgpLmZpcnN0XCJcbiAgICAgICAgW3Jvd3NdPVwicGFnZSgpLnJvd3NcIlxuICAgICAgICBbcm93c1BlclBhZ2VPcHRpb25zXT1cIls1LCAxMCwgMjBdXCJcbiAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJmaWx0ZXJlZCgpLmxlbmd0aFwiXG4gICAgICAgIFt0b3RhbFJlY29yZHNMYWJlbF09XCJ0b3RhbFJlY29yZHNMYWJlbCgpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2lzTW9iaWxlXT1cImlzTW9iaWxlXCJcbiAgICAgID5cbiAgICAgIDwvc2RjLXBhZ2luYXRvcj5cbiAgICA8L2Rpdj5cbiAgICB9IH1cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -44,8 +44,8 @@ export class CheckboxComponent {
44
44
  this.checkedChange.emit(this.checked);
45
45
  this.onTouched();
46
46
  }
47
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: CheckboxComponent, isStandalone: true, selector: "sdc-checkbox", inputs: { label: "label", disabled: "disabled", commonCheckbox: "commonCheckbox", labelPosition: "labelPosition", size: "size", checked: "checked" }, outputs: { checkedChange: "checkedChange" }, providers: [
47
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
48
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CheckboxComponent, isStandalone: true, selector: "sdc-checkbox", inputs: { label: "label", disabled: "disabled", commonCheckbox: "commonCheckbox", labelPosition: "labelPosition", size: "size", checked: "checked" }, outputs: { checkedChange: "checkedChange" }, providers: [
49
49
  {
50
50
  provide: NG_VALUE_ACCESSOR,
51
51
  useExisting: forwardRef(() => CheckboxComponent),
@@ -53,7 +53,7 @@ export class CheckboxComponent {
53
53
  }
54
54
  ], ngImport: i0, template: "<!-- Nativo -->\n<label\n *ngIf=\"commonCheckbox\"\n class=\"sdc-checkbox sdc-checkbox--native\"\n [class.sdc-checkbox--disabled]=\"disabled\"\n [class.sdc-checkbox--label-left]=\"labelPosition === 'left'\"\n [class.sdc-checkbox--small]=\"size === 'small'\"\n [class.sdc-checkbox--medium]=\"size === 'medium'\"\n [class.sdc-checkbox--large]=\"size === 'large'\"\n [attr.aria-disabled]=\"disabled\"\n>\n <input\n class=\"sdc-checkbox__input-native\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onInputChange($event)\"\n [attr.aria-checked]=\"checked\"\n [attr.role]=\"'checkbox'\"\n />\n <span *ngIf=\"label\" class=\"sdc-checkbox__label\">{{ label }}</span>\n</label>\n\n<!-- Custom -->\n<label\n *ngIf=\"!commonCheckbox\"\n class=\"sdc-checkbox\"\n [class.sdc-checkbox--disabled]=\"disabled\"\n [class.sdc-checkbox--label-left]=\"labelPosition === 'left'\"\n [class.sdc-checkbox--small]=\"size === 'small'\"\n [class.sdc-checkbox--medium]=\"size === 'medium'\"\n [class.sdc-checkbox--large]=\"size === 'large'\"\n [attr.aria-disabled]=\"disabled\"\n>\n <input\n class=\"sdc-checkbox__input\"\n type=\"checkbox\"\n [id]=\"inputId\"\n [checked]=\"checked\"\n [disabled]=\"disabled\"\n (change)=\"onInputChange($event)\"\n [attr.aria-checked]=\"checked\"\n [attr.role]=\"'checkbox'\"\n />\n <span class=\"sdc-checkbox__box\" aria-hidden=\"true\"></span>\n <span *ngIf=\"label\" class=\"sdc-checkbox__label\">{{ label }}</span>\n</label>\n", styles: [":host{display:inline-flex}.sdc-checkbox{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.sdc-checkbox--disabled{cursor:not-allowed;opacity:.6}.sdc-checkbox--label-left{flex-direction:row-reverse}.sdc-checkbox--native .sdc-checkbox__input-native{width:var(--sdc-chk-size);height:var(--sdc-chk-size)}.sdc-checkbox--small{--sdc-chk-size: 14px}.sdc-checkbox--medium{--sdc-chk-size: 18px}.sdc-checkbox--large{--sdc-chk-size: 24px}.sdc-checkbox__input{position:absolute;opacity:0;width:0;height:0}.sdc-checkbox__box{width:var(--sdc-chk-size);height:var(--sdc-chk-size);border:1px solid var(--sdc-chk-border);border-radius:var(--sdc-chk-radius);display:inline-block;position:relative;transition:all .15s ease-in-out;flex:0 0 auto}.sdc-checkbox__input:focus-visible+.sdc-checkbox__box{outline:2px solid var(--sdc-chk-focus);outline-offset:2px}.sdc-checkbox__input:checked+.sdc-checkbox__box{background-color:var(--sdc-chk-color);border-color:var(--sdc-chk-color)}.sdc-checkbox__input:checked+.sdc-checkbox__box:after{content:\"\";position:absolute;left:calc(var(--sdc-chk-size) * .22);top:calc(var(--sdc-chk-size) * .02);width:calc(var(--sdc-chk-size) * .3);height:calc(var(--sdc-chk-size) * .6);border:solid #fff;border-width:0 max(2px,var(--sdc-chk-size) * .1) max(2px,var(--sdc-chk-size) * .1) 0;transform:rotate(45deg);box-sizing:border-box}.sdc-checkbox__label{font-size:14px;line-height:1;align-self:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CheckboxComponent, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckboxComponent, decorators: [{
57
57
  type: Component,
58
58
  args: [{ standalone: true, selector: "sdc-checkbox", imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.Emulated, providers: [
59
59
  {
@@ -0,0 +1,216 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
3
+ import { basicSetup } from 'codemirror';
4
+ import { EditorView } from '@codemirror/view';
5
+ import { StateEffect } from '@codemirror/state';
6
+ import { autocompletion } from '@codemirror/autocomplete';
7
+ import { ayuLight } from 'thememirror';
8
+ import { sql, PostgreSQL } from '@codemirror/lang-sql';
9
+ import { javascript } from '@codemirror/lang-javascript';
10
+ import { json as jsonLang } from '@codemirror/lang-json';
11
+ import { html as htmlLang } from '@codemirror/lang-html';
12
+ import { createSqlAutoCompletionHadler } from '../../core/handlers/sqlAutoComplete';
13
+ import { sqlDomainFilterDecorator } from '../../core/decorators/sqlDomainFilter';
14
+ import { sqlFormatterHandler } from '../../core/handlers/sqlFormatter';
15
+ import { sqlUppercaseHandler } from '../../core/handlers/sqlUppercase';
16
+ import { Component, EventEmitter, forwardRef, Input, Output, ViewChild, ChangeDetectionStrategy, ViewEncapsulation, } from '@angular/core';
17
+ import * as i0 from "@angular/core";
18
+ import * as i1 from "../toast/toast.service";
19
+ import * as i2 from "@angular/common";
20
+ export class CodeEditorComponent {
21
+ toast;
22
+ constructor(toast) {
23
+ this.toast = toast;
24
+ }
25
+ sql = '';
26
+ height = null;
27
+ width = null;
28
+ showCopy = false;
29
+ customHeaderItems = [];
30
+ activeHeaderKey;
31
+ headerSelect = new EventEmitter();
32
+ copied = new EventEmitter();
33
+ _readOnly = false;
34
+ set readOnly(v) { this._readOnly = !!v; this.updateEditorExtensions(); }
35
+ get readOnly() { return this._readOnly; }
36
+ languageChange = new EventEmitter();
37
+ set language(value) {
38
+ const lang = (value || 'sql');
39
+ if (lang !== this.$language) {
40
+ this.$language = lang;
41
+ this.updateEditorExtensions();
42
+ this.languageChange.emit(this.$language);
43
+ }
44
+ }
45
+ get language() { return this.$language; }
46
+ set schema(value) {
47
+ this.$schema = value;
48
+ if (this.$language === 'sql')
49
+ this.updateEditorExtensions();
50
+ }
51
+ onDomainFilter = new EventEmitter();
52
+ editorContainer;
53
+ $editor;
54
+ $onChange = () => { };
55
+ $onTouched = () => { };
56
+ $schema = {};
57
+ $language = 'sql';
58
+ $disabled = false;
59
+ ngOnInit() {
60
+ this.$editor = new EditorView({
61
+ doc: this.sql,
62
+ parent: this.editorContainer.nativeElement,
63
+ extensions: this.buildExtensions(),
64
+ });
65
+ }
66
+ ngOnChanges(changes) {
67
+ if (changes['sql'] && !changes['sql'].firstChange && this.$editor) {
68
+ const next = (changes['sql'].currentValue ?? '');
69
+ if (next !== this.$editor.state.doc.toString()) {
70
+ this.$editor.dispatch({ changes: { from: 0, to: this.$editor.state.doc.length, insert: next } });
71
+ }
72
+ }
73
+ }
74
+ ngOnDestroy() { this.$editor?.destroy(); }
75
+ writeValue(value) {
76
+ if (this.$editor && value !== this.$editor.state.doc.toString()) {
77
+ this.$editor.dispatch({ changes: { from: 0, to: this.$editor.state.doc.length, insert: value ?? '' } });
78
+ }
79
+ }
80
+ registerOnChange(fn) { this.$onChange = fn; }
81
+ registerOnTouched(fn) { this.$onTouched = fn; }
82
+ setDisabledState(isDisabled) {
83
+ this.$disabled = isDisabled;
84
+ if (!this.$editor)
85
+ return;
86
+ const editable = !(isDisabled || this._readOnly);
87
+ this.$editor.contentDOM.setAttribute('contenteditable', String(editable));
88
+ this.updateEditorExtensions();
89
+ }
90
+ getStyleMap() {
91
+ const s = {};
92
+ if (this.width != null)
93
+ s.width = typeof this.width === 'number' ? `${this.width}px` : this.width;
94
+ if (this.height != null)
95
+ s.height = typeof this.height === 'number' ? `${this.height}px` : this.height;
96
+ return s;
97
+ }
98
+ pickHeader(item) {
99
+ this.activeHeaderKey = item.key;
100
+ if (item.value !== this.$language)
101
+ this.language = item.value;
102
+ this.headerSelect.emit({ key: item.key, lang: item.value });
103
+ }
104
+ async copy() {
105
+ const text = this.$editor ? this.$editor.state.doc.toString() : this.sql || '';
106
+ let ok = false;
107
+ try {
108
+ await navigator.clipboard.writeText(text);
109
+ ok = true;
110
+ }
111
+ catch {
112
+ try {
113
+ const ta = document.createElement('textarea');
114
+ ta.value = text;
115
+ document.body.appendChild(ta);
116
+ ta.select();
117
+ document.execCommand('copy');
118
+ document.body.removeChild(ta);
119
+ ok = true;
120
+ }
121
+ catch {
122
+ ok = false;
123
+ }
124
+ }
125
+ this.toast.show({
126
+ title: ok ? 'Copiado' : 'Falha ao copiar',
127
+ text: ok ? 'Conteúdo copiado para a área de transferência.' : 'Não foi possível copiar.',
128
+ severity: ok ? 'success' : 'error',
129
+ duration: 2000,
130
+ closable: true
131
+ });
132
+ this.copied.emit(ok);
133
+ }
134
+ buildExtensions() {
135
+ const editable = !(this._readOnly || this.$disabled);
136
+ const guards = editable ? [] : [
137
+ EditorView.domEventHandlers({
138
+ beforeinput: e => e.preventDefault(),
139
+ drop: e => e.preventDefault(),
140
+ paste: e => e.preventDefault(),
141
+ cut: e => e.preventDefault(),
142
+ }),
143
+ ];
144
+ const base = [
145
+ basicSetup,
146
+ ayuLight,
147
+ EditorView.editable.of(editable),
148
+ EditorView.updateListener.of((update) => {
149
+ if (update.docChanged)
150
+ this.$onChange(update.state.doc.toString());
151
+ }),
152
+ ...guards,
153
+ ];
154
+ return [...base, ...this.getLanguageExtensions()];
155
+ }
156
+ getLanguageExtensions() {
157
+ switch (this.$language) {
158
+ case 'sql':
159
+ return [
160
+ sqlUppercaseHandler(),
161
+ sqlFormatterHandler(),
162
+ sql({ dialect: PostgreSQL }),
163
+ sqlDomainFilterDecorator((token) => this.onDomainFilter.emit(token)),
164
+ autocompletion({ override: [createSqlAutoCompletionHadler(this.$schema)] }),
165
+ ];
166
+ case 'typescript': return [javascript({ typescript: true, jsx: true }), autocompletion()];
167
+ case 'javascript': return [javascript({ typescript: false, jsx: true }), autocompletion()];
168
+ case 'json': return [jsonLang(), autocompletion()];
169
+ case 'html': return [htmlLang(), autocompletion()];
170
+ case 'plaintext':
171
+ default: return [autocompletion()];
172
+ }
173
+ }
174
+ updateEditorExtensions() {
175
+ if (!this.$editor)
176
+ return;
177
+ this.$editor.dispatch({ effects: StateEffect.reconfigure.of(this.buildExtensions()) });
178
+ }
179
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CodeEditorComponent, deps: [{ token: i1.ToastService }], target: i0.ɵɵFactoryTarget.Component });
180
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CodeEditorComponent, isStandalone: true, selector: "sdc-code-editor", inputs: { sql: "sql", height: "height", width: "width", showCopy: "showCopy", customHeaderItems: "customHeaderItems", activeHeaderKey: "activeHeaderKey", readOnly: "readOnly", language: "language", schema: "schema" }, outputs: { headerSelect: "headerSelect", copied: "onCopy", languageChange: "languageChange", onDomainFilter: "onDomainFilter" }, providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CodeEditorComponent), multi: true }], viewQueries: [{ propertyName: "editorContainer", first: true, predicate: ["editorContainer"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"sdc-code-editor\">\n <div #editorContainer class=\"sdc-code-editor\" [ngStyle]=\"getStyleMap()\"></div>\n\n <div class=\"sdc-code-editor-header\" *ngIf=\"showCopy || customHeaderItems.length > 1\">\n <div class=\"header-left\" *ngIf=\"customHeaderItems.length > 1\">\n <div class=\"segmented\">\n <button\n *ngFor=\"let it of customHeaderItems\"\n type=\"button\"\n class=\"segmented-item\"\n [class.active]=\"it.key ? it.key === activeHeaderKey : it.value === language\"\n (click)=\"pickHeader(it)\"\n >\n {{ it.label }}\n </button>\n </div>\n </div>\n\n <div class=\"header-right\">\n <button type=\"button\" class=\"icon-btn\" *ngIf=\"showCopy\" (click)=\"copy()\" title=\"Copiar\">\n <i class=\"fas fa-copy\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Copiar</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0;min-height:0}.sdc-code-editor{border:var(--sql-editor-border);position:relative;isolation:isolate}.sdc-code-editor:hover .sdc-code-editor-header,.sdc-code-editor:focus-within .sdc-code-editor-header{opacity:1;transform:translateY(0);pointer-events:auto}.sdc-code-editor{display:block;width:100%}.sdc-code-editor,.sdc-code-editor .cm-editor,.sdc-code-editor .cm-scroller{position:relative;z-index:0;height:100%}.sdc-code-editor .cm-scroller{overflow:auto}.sdc-code-editor-header{position:absolute;top:8px;right:8px;left:auto;display:flex;align-items:center;gap:8px;z-index:10;opacity:0;transform:translateY(-4px);transition:opacity .18s ease,transform .18s ease;pointer-events:none}.sdc-code-editor-header .header-left,.sdc-code-editor-header .header-right{display:flex;align-items:center;gap:8px}.sdc-code-editor-header .segmented{display:flex;gap:2px;padding:2px;border-radius:999px;background:#ffffffeb;border:1px solid rgba(0,0,0,.08);box-shadow:0 2px 8px #00000014;backdrop-filter:saturate(180%) blur(6px);pointer-events:auto}.sdc-code-editor-header .segmented-item{appearance:none;border:0;background:transparent;padding:6px 10px;border-radius:999px;font:500 12px/1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;text-transform:uppercase;letter-spacing:.02em;cursor:pointer;-webkit-user-select:none;user-select:none;color:#111}.sdc-code-editor-header .segmented-item:hover{background:#1118270f}.sdc-code-editor-header .segmented-item.active{background:#eef2ff;box-shadow:inset 0 0 0 1px #c7d2fe}.sdc-code-editor-header .segmented-item:focus-visible{outline:none;box-shadow:inset 0 0 0 2px #6366f1}.sdc-code-editor-header .icon-btn{appearance:none;border:1px solid rgba(0,0,0,.08);width:32px;height:32px;border-radius:999px;display:grid;place-items:center;background:#ffffffeb;box-shadow:0 2px 8px #00000014;cursor:pointer;pointer-events:auto}.sdc-code-editor-header .icon-btn:hover{filter:brightness(.98)}.sdc-code-editor-header .icon-btn:active{transform:translateY(1px)}.sdc-code-editor-header .icon-btn:focus-visible{outline:none;box-shadow:0 0 0 2px #6366f1 inset}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
181
+ }
182
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CodeEditorComponent, decorators: [{
183
+ type: Component,
184
+ args: [{ selector: 'sdc-code-editor', standalone: true, imports: [CommonModule], providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => CodeEditorComponent), multi: true }], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div class=\"sdc-code-editor\">\n <div #editorContainer class=\"sdc-code-editor\" [ngStyle]=\"getStyleMap()\"></div>\n\n <div class=\"sdc-code-editor-header\" *ngIf=\"showCopy || customHeaderItems.length > 1\">\n <div class=\"header-left\" *ngIf=\"customHeaderItems.length > 1\">\n <div class=\"segmented\">\n <button\n *ngFor=\"let it of customHeaderItems\"\n type=\"button\"\n class=\"segmented-item\"\n [class.active]=\"it.key ? it.key === activeHeaderKey : it.value === language\"\n (click)=\"pickHeader(it)\"\n >\n {{ it.label }}\n </button>\n </div>\n </div>\n\n <div class=\"header-right\">\n <button type=\"button\" class=\"icon-btn\" *ngIf=\"showCopy\" (click)=\"copy()\" title=\"Copiar\">\n <i class=\"fas fa-copy\" aria-hidden=\"true\"></i>\n <span class=\"sr-only\">Copiar</span>\n </button>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0;min-height:0}.sdc-code-editor{border:var(--sql-editor-border);position:relative;isolation:isolate}.sdc-code-editor:hover .sdc-code-editor-header,.sdc-code-editor:focus-within .sdc-code-editor-header{opacity:1;transform:translateY(0);pointer-events:auto}.sdc-code-editor{display:block;width:100%}.sdc-code-editor,.sdc-code-editor .cm-editor,.sdc-code-editor .cm-scroller{position:relative;z-index:0;height:100%}.sdc-code-editor .cm-scroller{overflow:auto}.sdc-code-editor-header{position:absolute;top:8px;right:8px;left:auto;display:flex;align-items:center;gap:8px;z-index:10;opacity:0;transform:translateY(-4px);transition:opacity .18s ease,transform .18s ease;pointer-events:none}.sdc-code-editor-header .header-left,.sdc-code-editor-header .header-right{display:flex;align-items:center;gap:8px}.sdc-code-editor-header .segmented{display:flex;gap:2px;padding:2px;border-radius:999px;background:#ffffffeb;border:1px solid rgba(0,0,0,.08);box-shadow:0 2px 8px #00000014;backdrop-filter:saturate(180%) blur(6px);pointer-events:auto}.sdc-code-editor-header .segmented-item{appearance:none;border:0;background:transparent;padding:6px 10px;border-radius:999px;font:500 12px/1 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;text-transform:uppercase;letter-spacing:.02em;cursor:pointer;-webkit-user-select:none;user-select:none;color:#111}.sdc-code-editor-header .segmented-item:hover{background:#1118270f}.sdc-code-editor-header .segmented-item.active{background:#eef2ff;box-shadow:inset 0 0 0 1px #c7d2fe}.sdc-code-editor-header .segmented-item:focus-visible{outline:none;box-shadow:inset 0 0 0 2px #6366f1}.sdc-code-editor-header .icon-btn{appearance:none;border:1px solid rgba(0,0,0,.08);width:32px;height:32px;border-radius:999px;display:grid;place-items:center;background:#ffffffeb;box-shadow:0 2px 8px #00000014;cursor:pointer;pointer-events:auto}.sdc-code-editor-header .icon-btn:hover{filter:brightness(.98)}.sdc-code-editor-header .icon-btn:active{transform:translateY(1px)}.sdc-code-editor-header .icon-btn:focus-visible{outline:none;box-shadow:0 0 0 2px #6366f1 inset}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n"] }]
185
+ }], ctorParameters: () => [{ type: i1.ToastService }], propDecorators: { sql: [{
186
+ type: Input
187
+ }], height: [{
188
+ type: Input
189
+ }], width: [{
190
+ type: Input
191
+ }], showCopy: [{
192
+ type: Input
193
+ }], customHeaderItems: [{
194
+ type: Input
195
+ }], activeHeaderKey: [{
196
+ type: Input
197
+ }], headerSelect: [{
198
+ type: Output
199
+ }], copied: [{
200
+ type: Output,
201
+ args: ['onCopy']
202
+ }], readOnly: [{
203
+ type: Input
204
+ }], languageChange: [{
205
+ type: Output
206
+ }], language: [{
207
+ type: Input
208
+ }], schema: [{
209
+ type: Input
210
+ }], onDomainFilter: [{
211
+ type: Output
212
+ }], editorContainer: [{
213
+ type: ViewChild,
214
+ args: ['editorContainer', { static: true }]
215
+ }] } });
216
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGliL3NyYy9mZWF0dXJlcy9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9saWIvc3JjL2ZlYXR1cmVzL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxJQUFJLElBQUksUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekQsT0FBTyxFQUFFLElBQUksSUFBSSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsNkJBQTZCLEVBQVUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsbUJBQW1C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bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgYmFzaWNTZXR1cCB9IGZyb20gJ2NvZGVtaXJyb3InO1xuaW1wb3J0IHsgRWRpdG9yVmlldyB9IGZyb20gJ0Bjb2RlbWlycm9yL3ZpZXcnO1xuaW1wb3J0IHsgU3RhdGVFZmZlY3QsIEV4dGVuc2lvbiB9IGZyb20gJ0Bjb2RlbWlycm9yL3N0YXRlJztcbmltcG9ydCB7IGF1dG9jb21wbGV0aW9uIH0gZnJvbSAnQGNvZGVtaXJyb3IvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IGF5dUxpZ2h0IH0gZnJvbSAndGhlbWVtaXJyb3InO1xuaW1wb3J0IHsgc3FsLCBQb3N0Z3JlU1FMIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1zcWwnO1xuaW1wb3J0IHsgamF2YXNjcmlwdCB9IGZyb20gJ0Bjb2RlbWlycm9yL2xhbmctamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBqc29uIGFzIGpzb25MYW5nIH0gZnJvbSAnQGNvZGVtaXJyb3IvbGFuZy1qc29uJztcbmltcG9ydCB7IGh0bWwgYXMgaHRtbExhbmcgfSBmcm9tICdAY29kZW1pcnJvci9sYW5nLWh0bWwnO1xuaW1wb3J0IHsgY3JlYXRlU3FsQXV0b0NvbXBsZXRpb25IYWRsZXIsIFNjaGVtYSB9IGZyb20gJy4uLy4uL2NvcmUvaGFuZGxlcnMvc3FsQXV0b0NvbXBsZXRlJztcbmltcG9ydCB7IHNxbERvbWFpbkZpbHRlckRlY29yYXRvciB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy9zcWxEb21haW5GaWx0ZXInO1xuaW1wb3J0IHsgc3FsRm9ybWF0dGVySGFuZGxlciB9IGZyb20gJy4uLy4uL2NvcmUvaGFuZGxlcnMvc3FsRm9ybWF0dGVyJztcbmltcG9ydCB7IHNxbFVwcGVyY2FzZUhhbmRsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2hhbmRsZXJzL3NxbFVwcGVyY2FzZSc7XG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vdG9hc3QvdG9hc3Quc2VydmljZSc7XG5cbnR5cGUgRWRpdG9yTGFuZ3VhZ2UgPSAnc3FsJyB8ICdqYXZhc2NyaXB0JyB8ICd0eXBlc2NyaXB0JyB8ICdqc29uJyB8ICdodG1sJyB8ICdwbGFpbnRleHQnO1xudHlwZSBIZWFkZXJJdGVtID0geyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogRWRpdG9yTGFuZ3VhZ2U7IGtleT86IHN0cmluZyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZGMtY29kZS1lZGl0b3InLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY29kZS1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ29kZUVkaXRvckNvbXBvbmVudCksIG11bHRpOiB0cnVlIH1dLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgQ29kZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0b2FzdDogVG9hc3RTZXJ2aWNlKSB7IH1cblxuICBASW5wdXQoKSBzcWwgPSAnJztcbiAgQElucHV0KCkgaGVpZ2h0OiBzdHJpbmcgfCBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgd2lkdGg6IHN0cmluZyB8IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBzaG93Q29weSA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIGN1c3RvbUhlYWRlckl0ZW1zOiBIZWFkZXJJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgYWN0aXZlSGVhZGVyS2V5Pzogc3RyaW5nO1xuICBAT3V0cHV0KCkgaGVhZGVyU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGtleT86IHN0cmluZzsgbGFuZzogRWRpdG9yTGFuZ3VhZ2UgfT4oKTtcbiAgQE91dHB1dCgnb25Db3B5JykgY29waWVkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgX3JlYWRPbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNldCByZWFkT25seSh2OiBib29sZWFuKSB7IHRoaXMuX3JlYWRPbmx5ID0gISF2OyB0aGlzLnVwZGF0ZUVkaXRvckV4dGVuc2lvbnMoKTsgfVxuICBnZXQgcmVhZE9ubHkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9yZWFkT25seTsgfVxuXG4gIEBPdXRwdXQoKSBsYW5ndWFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RWRpdG9yTGFuZ3VhZ2U+KCk7XG5cbiAgQElucHV0KCkgc2V0IGxhbmd1YWdlKHZhbHVlOiBFZGl0b3JMYW5ndWFnZSkge1xuICAgIGNvbnN0IGxhbmcgPSAodmFsdWUgfHwgJ3NxbCcpIGFzIEVkaXRvckxhbmd1YWdlO1xuICAgIGlmIChsYW5nICE9PSB0aGlzLiRsYW5ndWFnZSkge1xuICAgICAgdGhpcy4kbGFuZ3VhZ2UgPSBsYW5nO1xuICAgICAgdGhpcy51cGRhdGVFZGl0b3JFeHRlbnNpb25zKCk7XG4gICAgICB0aGlzLmxhbmd1YWdlQ2hhbmdlLmVtaXQodGhpcy4kbGFuZ3VhZ2UpO1xuICAgIH1cbiAgfVxuICBnZXQgbGFuZ3VhZ2UoKTogRWRpdG9yTGFuZ3VhZ2UgeyByZXR1cm4gdGhpcy4kbGFuZ3VhZ2U7IH1cblxuICBASW5wdXQoKSBzZXQgc2NoZW1hKHZhbHVlOiBTY2hlbWEpIHtcbiAgICB0aGlzLiRzY2hlbWEgPSB2YWx1ZTtcbiAgICBpZiAodGhpcy4kbGFuZ3VhZ2UgPT09ICdzcWwnKSB0aGlzLnVwZGF0ZUVkaXRvckV4dGVuc2lvbnMoKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBvbkRvbWFpbkZpbHRlciA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAVmlld0NoaWxkKCdlZGl0b3JDb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBlZGl0b3JDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICBwcml2YXRlICRlZGl0b3IhOiBFZGl0b3JWaWV3O1xuICBwcml2YXRlICRvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7IH07XG4gIHByaXZhdGUgJG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHsgfTtcbiAgcHJpdmF0ZSAkc2NoZW1hOiBTY2hlbWEgPSB7fTtcbiAgcHJpdmF0ZSAkbGFuZ3VhZ2U6IEVkaXRvckxhbmd1YWdlID0gJ3NxbCc7XG4gIHByaXZhdGUgJGRpc2FibGVkID0gZmFsc2U7XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4kZWRpdG9yID0gbmV3IEVkaXRvclZpZXcoe1xuICAgICAgZG9jOiB0aGlzLnNxbCxcbiAgICAgIHBhcmVudDogdGhpcy5lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIGV4dGVuc2lvbnM6IHRoaXMuYnVpbGRFeHRlbnNpb25zKCksXG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3NxbCddICYmICFjaGFuZ2VzWydzcWwnXS5maXJzdENoYW5nZSAmJiB0aGlzLiRlZGl0b3IpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoY2hhbmdlc1snc3FsJ10uY3VycmVudFZhbHVlID8/ICcnKSBhcyBzdHJpbmc7XG4gICAgICBpZiAobmV4dCAhPT0gdGhpcy4kZWRpdG9yLnN0YXRlLmRvYy50b1N0cmluZygpKSB7XG4gICAgICAgIHRoaXMuJGVkaXRvci5kaXNwYXRjaCh7IGNoYW5nZXM6IHsgZnJvbTogMCwgdG86IHRoaXMuJGVkaXRvci5zdGF0ZS5kb2MubGVuZ3RoLCBpbnNlcnQ6IG5leHQgfSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHsgdGhpcy4kZWRpdG9yPy5kZXN0cm95KCk7IH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy4kZWRpdG9yICYmIHZhbHVlICE9PSB0aGlzLiRlZGl0b3Iuc3RhdGUuZG9jLnRvU3RyaW5nKCkpIHtcbiAgICAgIHRoaXMuJGVkaXRvci5kaXNwYXRjaCh7IGNoYW5nZXM6IHsgZnJvbTogMCwgdG86IHRoaXMuJGVkaXRvci5zdGF0ZS5kb2MubGVuZ3RoLCBpbnNlcnQ6IHZhbHVlID8/ICcnIH0gfSk7XG4gICAgfVxuICB9XG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWw6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQgeyB0aGlzLiRvbkNoYW5nZSA9IGZuOyB9XG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7IHRoaXMuJG9uVG91Y2hlZCA9IGZuOyB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy4kZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIGlmICghdGhpcy4kZWRpdG9yKSByZXR1cm47XG4gICAgY29uc3QgZWRpdGFibGUgPSAhKGlzRGlzYWJsZWQgfHwgdGhpcy5fcmVhZE9ubHkpO1xuICAgIHRoaXMuJGVkaXRvci5jb250ZW50RE9NLnNldEF0dHJpYnV0ZSgnY29udGVudGVkaXRhYmxlJywgU3RyaW5nKGVkaXRhYmxlKSk7XG4gICAgdGhpcy51cGRhdGVFZGl0b3JFeHRlbnNpb25zKCk7XG4gIH1cblxuICBnZXRTdHlsZU1hcCgpOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+IHtcbiAgICBjb25zdCBzOiBQYXJ0aWFsPENTU1N0eWxlRGVjbGFyYXRpb24+ID0ge307XG4gICAgaWYgKHRoaXMud2lkdGggIT0gbnVsbCkgcy53aWR0aCA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAnbnVtYmVyJyA/IGAke3RoaXMud2lkdGh9cHhgIDogdGhpcy53aWR0aDtcbiAgICBpZiAodGhpcy5oZWlnaHQgIT0gbnVsbCkgcy5oZWlnaHQgPSB0eXBlb2YgdGhpcy5oZWlnaHQgPT09ICdudW1iZXInID8gYCR7dGhpcy5oZWlnaHR9cHhgIDogdGhpcy5oZWlnaHQ7XG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBwaWNrSGVhZGVyKGl0ZW06IEhlYWRlckl0ZW0pOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2ZUhlYWRlcktleSA9IGl0ZW0ua2V5O1xuICAgIGlmIChpdGVtLnZhbHVlICE9PSB0aGlzLiRsYW5ndWFnZSkgdGhpcy5sYW5ndWFnZSA9IGl0ZW0udmFsdWU7XG4gICAgdGhpcy5oZWFkZXJTZWxlY3QuZW1pdCh7IGtleTogaXRlbS5rZXksIGxhbmc6IGl0ZW0udmFsdWUgfSk7XG4gIH1cblxuICBhc3luYyBjb3B5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRleHQgPSB0aGlzLiRlZGl0b3IgPyB0aGlzLiRlZGl0b3Iuc3RhdGUuZG9jLnRvU3RyaW5nKCkgOiB0aGlzLnNxbCB8fCAnJztcbiAgICBsZXQgb2sgPSBmYWxzZTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGV4dCk7XG4gICAgICBvayA9IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0YSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgIHRhLnZhbHVlID0gdGV4dDtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0YSk7XG4gICAgICAgIHRhLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRhKTtcbiAgICAgICAgb2sgPSB0cnVlO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIG9rID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMudG9hc3Quc2hvdyh7XG4gICAgICB0aXRsZTogb2sgPyAnQ29waWFkbycgOiAnRmFsaGEgYW8gY29waWFyJyxcbiAgICAgIHRleHQ6IG9rID8gJ0NvbnRlw7pkbyBjb3BpYWRvIHBhcmEgYSDDoXJlYSBkZSB0cmFuc2ZlcsOqbmNpYS4nIDogJ07Do28gZm9pIHBvc3PDrXZlbCBjb3BpYXIuJyxcbiAgICAgIHNldmVyaXR5OiBvayA/ICdzdWNjZXNzJyA6ICdlcnJvcicsXG4gICAgICBkdXJhdGlvbjogMjAwMCxcbiAgICAgIGNsb3NhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgdGhpcy5jb3BpZWQuZW1pdChvayk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRXh0ZW5zaW9ucygpOiBFeHRlbnNpb25bXSB7XG4gICAgY29uc3QgZWRpdGFibGUgPSAhKHRoaXMuX3JlYWRPbmx5IHx8IHRoaXMuJGRpc2FibGVkKTtcbiAgICBjb25zdCBndWFyZHMgPSBlZGl0YWJsZSA/IFtdIDogW1xuICAgICAgRWRpdG9yVmlldy5kb21FdmVudEhhbmRsZXJzKHtcbiAgICAgICAgYmVmb3JlaW5wdXQ6IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICBkcm9wOiBlID0+IGUucHJldmVudERlZmF1bHQoKSxcbiAgICAgICAgcGFzdGU6IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgICBjdXQ6IGUgPT4gZS5wcmV2ZW50RGVmYXVsdCgpLFxuICAgICAgfSksXG4gICAgXTtcbiAgICBjb25zdCBiYXNlOiBFeHRlbnNpb25bXSA9IFtcbiAgICAgIGJhc2ljU2V0dXAsXG4gICAgICBheXVMaWdodCxcbiAgICAgIEVkaXRvclZpZXcuZWRpdGFibGUub2YoZWRpdGFibGUpLFxuICAgICAgRWRpdG9yVmlldy51cGRhdGVMaXN0ZW5lci5vZigodXBkYXRlKSA9PiB7XG4gICAgICAgIGlmICh1cGRhdGUuZG9jQ2hhbmdlZCkgdGhpcy4kb25DaGFuZ2UodXBkYXRlLnN0YXRlLmRvYy50b1N0cmluZygpKTtcbiAgICAgIH0pLFxuICAgICAgLi4uZ3VhcmRzLFxuICAgIF07XG4gICAgcmV0dXJuIFsuLi5iYXNlLCAuLi50aGlzLmdldExhbmd1YWdlRXh0ZW5zaW9ucygpXTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFuZ3VhZ2VFeHRlbnNpb25zKCk6IEV4dGVuc2lvbltdIHtcbiAgICBzd2l0Y2ggKHRoaXMuJGxhbmd1YWdlKSB7XG4gICAgICBjYXNlICdzcWwnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHNxbFVwcGVyY2FzZUhhbmRsZXIoKSxcbiAgICAgICAgICBzcWxGb3JtYXR0ZXJIYW5kbGVyKCksXG4gICAgICAgICAgc3FsKHsgZGlhbGVjdDogUG9zdGdyZVNRTCB9KSxcbiAgICAgICAgICBzcWxEb21haW5GaWx0ZXJEZWNvcmF0b3IoKHRva2VuKSA9PiB0aGlzLm9uRG9tYWluRmlsdGVyLmVtaXQodG9rZW4pKSxcbiAgICAgICAgICBhdXRvY29tcGxldGlvbih7IG92ZXJyaWRlOiBbY3JlYXRlU3FsQXV0b0NvbXBsZXRpb25IYWRsZXIodGhpcy4kc2NoZW1hKV0gfSksXG4gICAgICAgIF07XG4gICAgICBjYXNlICd0eXBlc2NyaXB0JzogcmV0dXJuIFtqYXZhc2NyaXB0KHsgdHlwZXNjcmlwdDogdHJ1ZSwganN4OiB0cnVlIH0pLCBhdXRvY29tcGxldGlvbigpXTtcbiAgICAgIGNhc2UgJ2phdmFzY3JpcHQnOiByZXR1cm4gW2phdmFzY3JpcHQoeyB0eXBlc2NyaXB0OiBmYWxzZSwganN4OiB0cnVlIH0pLCBhdXRvY29tcGxldGlvbigpXTtcbiAgICAgIGNhc2UgJ2pzb24nOiByZXR1cm4gW2pzb25MYW5nKCksIGF1dG9jb21wbGV0aW9uKCldO1xuICAgICAgY2FzZSAnaHRtbCc6IHJldHVybiBbaHRtbExhbmcoKSwgYXV0b2NvbXBsZXRpb24oKV07XG4gICAgICBjYXNlICdwbGFpbnRleHQnOlxuICAgICAgZGVmYXVsdDogcmV0dXJuIFthdXRvY29tcGxldGlvbigpXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVkaXRvckV4dGVuc2lvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiRlZGl0b3IpIHJldHVybjtcbiAgICB0aGlzLiRlZGl0b3IuZGlzcGF0Y2goeyBlZmZlY3RzOiBTdGF0ZUVmZmVjdC5yZWNvbmZpZ3VyZS5vZih0aGlzLmJ1aWxkRXh0ZW5zaW9ucygpKSB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cInNkYy1jb2RlLWVkaXRvclwiPlxuICA8ZGl2ICNlZGl0b3JDb250YWluZXIgY2xhc3M9XCJzZGMtY29kZS1lZGl0b3JcIiBbbmdTdHlsZV09XCJnZXRTdHlsZU1hcCgpXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInNkYy1jb2RlLWVkaXRvci1oZWFkZXJcIiAqbmdJZj1cInNob3dDb3B5IHx8IGN1c3RvbUhlYWRlckl0ZW1zLmxlbmd0aCA+IDFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLWxlZnRcIiAqbmdJZj1cImN1c3RvbUhlYWRlckl0ZW1zLmxlbmd0aCA+IDFcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzZWdtZW50ZWRcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBpdCBvZiBjdXN0b21IZWFkZXJJdGVtc1wiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJzZWdtZW50ZWQtaXRlbVwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpdC5rZXkgPyBpdC5rZXkgPT09IGFjdGl2ZUhlYWRlcktleSA6IGl0LnZhbHVlID09PSBsYW5ndWFnZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInBpY2tIZWFkZXIoaXQpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IGl0LmxhYmVsIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyLXJpZ2h0XCI+XG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImljb24tYnRuXCIgKm5nSWY9XCJzaG93Q29weVwiIChjbGljayk9XCJjb3B5KClcIiB0aXRsZT1cIkNvcGlhclwiPlxuICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1jb3B5XCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5Db3BpYXI8L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==