@bcgov/nr-ngx-component-lib 0.0.1

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 (82) hide show
  1. package/components/button/button.component.d.ts +22 -0
  2. package/components/cell-content/cell-content.component.d.ts +12 -0
  3. package/components/device-view/device-view.component.d.ts +12 -0
  4. package/components/expansion-panel/expansion-panel.component.d.ts +26 -0
  5. package/components/filter-container/filter-container.component.d.ts +7 -0
  6. package/components/filter-date/filter-date.component.d.ts +12 -0
  7. package/components/filter-search/filter-search.component.d.ts +18 -0
  8. package/components/filter-select/filter-select.component.d.ts +63 -0
  9. package/components/filters-panel/filters-panel.component.d.ts +13 -0
  10. package/components/form-field/form-field.component.d.ts +13 -0
  11. package/components/form-layout/form-layout.component.d.ts +5 -0
  12. package/components/gap/gap.component.d.ts +9 -0
  13. package/components/page-container/page-container.component.d.ts +5 -0
  14. package/components/page-header/page-header.component.d.ts +6 -0
  15. package/components/row-list-desktop/row-list-desktop.component.d.ts +5 -0
  16. package/components/row-list-mobile/row-list-mobile.component.d.ts +5 -0
  17. package/components/row-list-pagination/row-list-pagination.component.d.ts +31 -0
  18. package/components/row-list-sorting/row-list-sorting.component.d.ts +18 -0
  19. package/components/snackbar/snackbar.component.d.ts +15 -0
  20. package/directives/configuration-subscriber.base.d.ts +14 -0
  21. package/directives/row-list.base.d.ts +55 -0
  22. package/esm2022/bcgov-nr-ngx-component-lib.mjs +5 -0
  23. package/esm2022/components/button/button.component.mjs +69 -0
  24. package/esm2022/components/cell-content/cell-content.component.mjs +34 -0
  25. package/esm2022/components/device-view/device-view.component.mjs +34 -0
  26. package/esm2022/components/expansion-panel/expansion-panel.component.mjs +144 -0
  27. package/esm2022/components/filter-container/filter-container.component.mjs +20 -0
  28. package/esm2022/components/filter-date/filter-date.component.mjs +43 -0
  29. package/esm2022/components/filter-search/filter-search.component.mjs +52 -0
  30. package/esm2022/components/filter-select/filter-select.component.mjs +269 -0
  31. package/esm2022/components/filters-panel/filters-panel.component.mjs +39 -0
  32. package/esm2022/components/form-field/form-field.component.mjs +103 -0
  33. package/esm2022/components/form-layout/form-layout.component.mjs +11 -0
  34. package/esm2022/components/gap/gap.component.mjs +21 -0
  35. package/esm2022/components/page-container/page-container.component.mjs +11 -0
  36. package/esm2022/components/page-header/page-header.component.mjs +19 -0
  37. package/esm2022/components/row-list-desktop/row-list-desktop.component.mjs +11 -0
  38. package/esm2022/components/row-list-mobile/row-list-mobile.component.mjs +11 -0
  39. package/esm2022/components/row-list-pagination/row-list-pagination.component.mjs +106 -0
  40. package/esm2022/components/row-list-sorting/row-list-sorting.component.mjs +44 -0
  41. package/esm2022/components/snackbar/snackbar.component.mjs +26 -0
  42. package/esm2022/directives/configuration-subscriber.base.mjs +28 -0
  43. package/esm2022/directives/row-list.base.mjs +150 -0
  44. package/esm2022/nr-ngx-component-lib.module.mjs +227 -0
  45. package/esm2022/public-api.mjs +33 -0
  46. package/esm2022/services/configuration.service.mjs +38 -0
  47. package/esm2022/services/page-state.service.mjs +28 -0
  48. package/esm2022/services/snackbar-util.service.mjs +69 -0
  49. package/esm2022/utils/code-table.util.mjs +23 -0
  50. package/esm2022/utils/date.util.mjs +15 -0
  51. package/esm2022/utils/filter.util.mjs +25 -0
  52. package/esm2022/utils/row-list.util.mjs +44 -0
  53. package/fesm2022/bcgov-nr-ngx-component-lib.mjs +1617 -0
  54. package/fesm2022/bcgov-nr-ngx-component-lib.mjs.map +1 -0
  55. package/index.d.ts +5 -0
  56. package/nr-ngx-component-lib.module.d.ts +46 -0
  57. package/package.json +22 -0
  58. package/public-api.d.ts +29 -0
  59. package/services/configuration.service.d.ts +16 -0
  60. package/services/page-state.service.d.ts +9 -0
  61. package/services/snackbar-util.service.d.ts +16 -0
  62. package/styles/bc-sans/FONTLOG_README.txt +30 -0
  63. package/styles/bc-sans/LICENSE_OFL.txt +94 -0
  64. package/styles/bc-sans/css/BCSans.css +28 -0
  65. package/styles/bc-sans/fonts/BCSans-Bold.woff +0 -0
  66. package/styles/bc-sans/fonts/BCSans-Bold.woff2 +0 -0
  67. package/styles/bc-sans/fonts/BCSans-BoldItalic.woff +0 -0
  68. package/styles/bc-sans/fonts/BCSans-BoldItalic.woff2 +0 -0
  69. package/styles/bc-sans/fonts/BCSans-Italic.woff +0 -0
  70. package/styles/bc-sans/fonts/BCSans-Italic.woff2 +0 -0
  71. package/styles/bc-sans/fonts/BCSans-Regular.woff +0 -0
  72. package/styles/bc-sans/fonts/BCSans-Regular.woff2 +0 -0
  73. package/styles/global.scss +34 -0
  74. package/styles/include/mat-button.scss +71 -0
  75. package/styles/include/mat-checkbox.scss +44 -0
  76. package/styles/include/mat-icon.scss +30 -0
  77. package/styles/include/mat-radio-button.scss +19 -0
  78. package/styles/material.scss +40 -0
  79. package/utils/code-table.util.d.ts +12 -0
  80. package/utils/date.util.d.ts +14 -0
  81. package/utils/filter.util.d.ts +4 -0
  82. package/utils/row-list.util.d.ts +16 -0
@@ -0,0 +1,19 @@
1
+ import { ChangeDetectionStrategy, Component, Input } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/material/progress-spinner";
4
+ export class PageHeaderComponent {
5
+ constructor() {
6
+ this.isLoading = false;
7
+ }
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
9
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: PageHeaderComponent, selector: "nrcl-page-header", inputs: { isLoading: "isLoading" }, host: { properties: { "class.isLoading": "isLoading" } }, ngImport: i0, template: "<div class=\"left-side\">\n <ng-content select=\"[left-side],h1,h2\"></ng-content>\n</div>\n\n<div class=\"right-side\">\n <ng-content select=\"[right-side]\"></ng-content>\n <ng-content></ng-content>\n</div>\n\n<mat-spinner class=\"loading\" [diameter]=\"30\"></mat-spinner>\n", styles: [":host{display:flex;gap:var(--nrcl-gutter-space);position:relative;padding-top:var(--nrcl-gutter-space);font-family:var(--nrcl-font-family)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host .left-side{display:flex;flex-direction:column}:host .left-side ::ng-deep h1{font-size:var(--nrcl-font-size-h1);font-weight:200;padding:0;margin:0}:host .left-side ::ng-deep h2{font-size:var(--nrcl-font-size-h2);font-weight:200;padding:0;margin:0}:host .right-side{flex-grow:1;display:flex;justify-content:flex-end;align-items:center}:host .loading{position:absolute;top:var(--nrcl-gutter-space);right:0;display:none}:host.isLoading .loading{display:block}:host.isLoading .right-side{visibility:hidden}\n"], dependencies: [{ kind: "component", type: i1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10
+ }
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: PageHeaderComponent, decorators: [{
12
+ type: Component,
13
+ args: [{ selector: "nrcl-page-header", changeDetection: ChangeDetectionStrategy.OnPush, host: {
14
+ '[class.isLoading]': 'isLoading',
15
+ }, template: "<div class=\"left-side\">\n <ng-content select=\"[left-side],h1,h2\"></ng-content>\n</div>\n\n<div class=\"right-side\">\n <ng-content select=\"[right-side]\"></ng-content>\n <ng-content></ng-content>\n</div>\n\n<mat-spinner class=\"loading\" [diameter]=\"30\"></mat-spinner>\n", styles: [":host{display:flex;gap:var(--nrcl-gutter-space);position:relative;padding-top:var(--nrcl-gutter-space);font-family:var(--nrcl-font-family)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host .left-side{display:flex;flex-direction:column}:host .left-side ::ng-deep h1{font-size:var(--nrcl-font-size-h1);font-weight:200;padding:0;margin:0}:host .left-side ::ng-deep h2{font-size:var(--nrcl-font-size-h2);font-weight:200;padding:0;margin:0}:host .right-side{flex-grow:1;display:flex;justify-content:flex-end;align-items:center}:host .loading{position:absolute;top:var(--nrcl-gutter-space);right:0;display:none}:host.isLoading .loading{display:block}:host.isLoading .right-side{visibility:hidden}\n"] }]
16
+ }], propDecorators: { isLoading: [{
17
+ type: Input
18
+ }] } });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZS1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcGFnZS1oZWFkZXIvcGFnZS1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsS0FBSyxFQUNSLE1BQU0sZUFBZSxDQUFDOzs7QUFXdkIsTUFBTSxPQUFPLG1CQUFtQjtJQVRoQztRQVVhLGNBQVMsR0FBRyxLQUFLLENBQUE7S0FDN0I7K0dBRlksbUJBQW1CO21HQUFuQixtQkFBbUIsc0pDZmhDLGdTQVVBOzs0RkRLYSxtQkFBbUI7a0JBVC9CLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0sUUFDekM7d0JBQ0YsbUJBQW1CLEVBQUUsV0FBVztxQkFDbkM7OEJBR1EsU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5yY2wtcGFnZS1oZWFkZXJcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3BhZ2UtaGVhZGVyLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9wYWdlLWhlYWRlci5jb21wb25lbnQuc2Nzc1wiLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5pc0xvYWRpbmddJzogJ2lzTG9hZGluZycsXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBQYWdlSGVhZGVyQ29tcG9uZW50IHtcbiAgICBASW5wdXQoKSBpc0xvYWRpbmcgPSBmYWxzZVxufVxuIiwiPGRpdiBjbGFzcz1cImxlZnQtc2lkZVwiPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltsZWZ0LXNpZGVdLGgxLGgyXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJyaWdodC1zaWRlXCI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW3JpZ2h0LXNpZGVdXCI+PC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuXG48bWF0LXNwaW5uZXIgY2xhc3M9XCJsb2FkaW5nXCIgW2RpYW1ldGVyXT1cIjMwXCI+PC9tYXQtc3Bpbm5lcj5cbiJdfQ==
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectionStrategy, Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class RowListDesktopComponent {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListDesktopComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowListDesktopComponent, selector: "nrcl-row-list-desktop", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{display:block;overflow-x:auto;overflow-y:hidden;border-bottom:1px solid #c6c8cb}:host ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-table .mat-mdc-row{background-color:#fff;cursor:pointer}:host ::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell{padding:5px;color:#000;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}:host ::ng-deep .mat-mdc-table .mat-mdc-row:hover{background-color:#d7d7d7}:host ::ng-deep .mat-mdc-table .mat-mdc-row:nth-child(odd):not(:hover){background-color:#f2f2f2}:host ::ng-deep .mat-mdc-table .mat-mdc-row:nth-child(2n):not(:hover){background-color:#fff}:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell{padding:5px;color:#000}:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell .mat-sort-header-content{text-align:left;align-items:flex-end;font-size:15px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListDesktopComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: "nrcl-row-list-desktop", changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{display:block;overflow-x:auto;overflow-y:hidden;border-bottom:1px solid #c6c8cb}:host ::ng-deep .mat-mdc-table{width:100%}:host ::ng-deep .mat-mdc-table .mat-mdc-row{background-color:#fff;cursor:pointer}:host ::ng-deep .mat-mdc-table .mat-mdc-row .mat-mdc-cell{padding:5px;color:#000;overflow:hidden;text-overflow:ellipsis;vertical-align:middle;white-space:nowrap}:host ::ng-deep .mat-mdc-table .mat-mdc-row:hover{background-color:#d7d7d7}:host ::ng-deep .mat-mdc-table .mat-mdc-row:nth-child(odd):not(:hover){background-color:#f2f2f2}:host ::ng-deep .mat-mdc-table .mat-mdc-row:nth-child(2n):not(:hover){background-color:#fff}:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell{padding:5px;color:#000}:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell .mat-sort-header-content{text-align:left;align-items:flex-end;font-size:15px}\n"] }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWxpc3QtZGVza3RvcC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvY29tcG9uZW50cy9yb3ctbGlzdC1kZXNrdG9wL3Jvdy1saXN0LWRlc2t0b3AuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcm93LWxpc3QtZGVza3RvcC9yb3ctbGlzdC1kZXNrdG9wLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDOztBQVF2QixNQUFNLE9BQU8sdUJBQXVCOytHQUF2Qix1QkFBdUI7bUdBQXZCLHVCQUF1Qiw2RENYcEMsNkJBQ0E7OzRGRFVhLHVCQUF1QjtrQkFObkMsU0FBUzsrQkFDSSx1QkFBdUIsbUJBR2hCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJucmNsLXJvdy1saXN0LWRlc2t0b3BcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3Jvdy1saXN0LWRlc2t0b3AuY29tcG9uZW50Lmh0bWxcIixcbiAgICBzdHlsZVVybDogXCIuL3Jvdy1saXN0LWRlc2t0b3AuY29tcG9uZW50LnNjc3NcIixcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSb3dMaXN0RGVza3RvcENvbXBvbmVudCB7XG59XG4iLCI8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4iXX0=
@@ -0,0 +1,11 @@
1
+ import { ChangeDetectionStrategy, Component } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ export class RowListMobileComponent {
4
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListMobileComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowListMobileComponent, selector: "nrcl-row-list-mobile", ngImport: i0, template: "<ng-content></ng-content>\n", styles: [":host{width:100%;display:flex;flex-direction:column;gap:var(--nrcl-gutter-space)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep mat-card.mat-mdc-card{margin:0;box-shadow:none;border:2px solid #bebebe;padding:0;font-family:var(--nrcl-font-family)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title{padding:var(--nrcl-gutter-space);border-bottom:#f2f2f2 1px solid;background-color:#f2f2f2;gap:var(--nrcl-gutter-space);display:flex;justify-content:space-between;align-items:stretch;margin:0}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title]{flex-direction:column;align-items:flex-start;text-overflow:ellipsis;overflow:hidden;display:flex;flex:1}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h2,:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h3{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0;line-height:normal}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h2{font-size:18px;font-weight:400}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h3{font-size:14px;font-weight:400}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[actions]{display:flex;gap:var(--nrcl-gutter-space)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[actions] button[icon]{border:none;background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;padding:0;justify-content:center;line-height:20px}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding:var(--nrcl-gutter-space);margin:0;gap:var(--nrcl-gutter-space)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content section{display:flex;flex-direction:column}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content section cell-content{font-weight:700}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6
+ }
7
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListMobileComponent, decorators: [{
8
+ type: Component,
9
+ args: [{ selector: "nrcl-row-list-mobile", changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-content></ng-content>\n", styles: [":host{width:100%;display:flex;flex-direction:column;gap:var(--nrcl-gutter-space)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep mat-card.mat-mdc-card{margin:0;box-shadow:none;border:2px solid #bebebe;padding:0;font-family:var(--nrcl-font-family)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title{padding:var(--nrcl-gutter-space);border-bottom:#f2f2f2 1px solid;background-color:#f2f2f2;gap:var(--nrcl-gutter-space);display:flex;justify-content:space-between;align-items:stretch;margin:0}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title]{flex-direction:column;align-items:flex-start;text-overflow:ellipsis;overflow:hidden;display:flex;flex:1}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h2,:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h3{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0;line-height:normal}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h2{font-size:18px;font-weight:400}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[title] h3{font-size:14px;font-weight:400}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[actions]{display:flex;gap:var(--nrcl-gutter-space)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-title section[actions] button[icon]{border:none;background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;padding:0;justify-content:center;line-height:20px}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);padding:var(--nrcl-gutter-space);margin:0;gap:var(--nrcl-gutter-space)}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content section{display:flex;flex-direction:column}:host ::ng-deep mat-card.mat-mdc-card .mat-mdc-card-content section cell-content{font-weight:700}\n"] }]
10
+ }] });
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWxpc3QtbW9iaWxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25yLW5neC1jb21wb25lbnQtbGliL3NyYy9jb21wb25lbnRzL3Jvdy1saXN0LW1vYmlsZS9yb3ctbGlzdC1tb2JpbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcm93LWxpc3QtbW9iaWxlL3Jvdy1saXN0LW1vYmlsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQzs7QUFRdkIsTUFBTSxPQUFPLHNCQUFzQjsrR0FBdEIsc0JBQXNCO21HQUF0QixzQkFBc0IsNERDWG5DLDZCQUNBOzs0RkRVYSxzQkFBc0I7a0JBTmxDLFNBQVM7K0JBQ0ksc0JBQXNCLG1CQUdmLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogXCJucmNsLXJvdy1saXN0LW1vYmlsZVwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcm93LWxpc3QtbW9iaWxlLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9yb3ctbGlzdC1tb2JpbGUuY29tcG9uZW50LnNjc3NcIixcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBSb3dMaXN0TW9iaWxlQ29tcG9uZW50IHtcbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiJdfQ==
@@ -0,0 +1,106 @@
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostListener, inject, Input, Output } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "ngx-pagination";
4
+ import * as i2 from "../filter-container/filter-container.component";
5
+ import * as i3 from "../filter-select/filter-select.component";
6
+ export class RowListPaginationComponent {
7
+ constructor() {
8
+ this.paginationId = '1';
9
+ this.pageSizeOptions = [
10
+ { code: 5, description: '5 Rows' },
11
+ { code: 10, description: '10 Rows' },
12
+ { code: 20, description: '20 Rows' },
13
+ { code: 50, description: '50 Rows' },
14
+ { code: 100, description: '100 Rows' },
15
+ ];
16
+ this.pageSize = 20;
17
+ this.showPageSize = true;
18
+ this.pageSizeChange = new EventEmitter();
19
+ this.pageNumberChange = new EventEmitter();
20
+ this.componentWidth = 'sufficient';
21
+ this.paginationMaxSize = 5;
22
+ this.elementRef = inject(ElementRef);
23
+ this.changeDetectorRef = inject(ChangeDetectorRef);
24
+ }
25
+ ngAfterViewInit() {
26
+ this.checkWidth();
27
+ }
28
+ onPageSizeChange(ev) {
29
+ this.pageSizeChange.emit(Number(ev));
30
+ }
31
+ onPageNumberChange(ev) {
32
+ this.pageNumberChange.emit(Number(ev));
33
+ }
34
+ onResize(event) {
35
+ this.checkWidth();
36
+ }
37
+ checkWidth() {
38
+ setTimeout(() => {
39
+ let w = this.elementRef?.nativeElement.offsetWidth;
40
+ if (!w)
41
+ return;
42
+ switch (true) {
43
+ case w > 600:
44
+ this.componentWidth = 'sufficient';
45
+ this.paginationMaxSize = 5;
46
+ break;
47
+ case w > 500:
48
+ this.componentWidth = 'tight';
49
+ this.paginationMaxSize = 3;
50
+ break;
51
+ default:
52
+ this.componentWidth = 'restrictive';
53
+ this.paginationMaxSize = 4;
54
+ }
55
+ this.changeDetectorRef.detectChanges();
56
+ });
57
+ }
58
+ get pageCount() {
59
+ if (!this.hasRows)
60
+ return 0;
61
+ return Math.ceil(this.rowCount / this.pageSize);
62
+ }
63
+ get firstRow() {
64
+ if (!this.hasRows)
65
+ return 0;
66
+ return (Math.min(this.pageCount, this.pageNumber) - 1) * this.pageSize + 1;
67
+ }
68
+ get lastRow() {
69
+ if (!this.hasRows)
70
+ return 0;
71
+ return Math.min(this.firstRow + this.pageSize - 1, this.rowCount);
72
+ }
73
+ get hasRows() {
74
+ return this.rowCount && this.pageSize;
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
77
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: RowListPaginationComponent, selector: "nrcl-row-list-pagination", inputs: { paginationId: "paginationId", pageSizeOptions: "pageSizeOptions", pageSize: "pageSize", pageNumber: "pageNumber", rowCount: "rowCount", showPageSize: "showPageSize" }, outputs: { pageSizeChange: "pageSizeChange", pageNumberChange: "pageNumberChange" }, host: { listeners: { "window:resize": "onResize($event)" }, properties: { "class.width-sufficient": "componentWidth == 'sufficient'", "class.width-tight": "componentWidth == 'tight'", "class.width-restrictive": "componentWidth == 'restrictive'" } }, ngImport: i0, template: "@if ( hasRows ) {\n <nrcl-filter-container class=\"summary\"\n label=\"Showing Rows\"\n >\n <span>{{ firstRow }} to {{ lastRow }} <small>(of {{ rowCount }})</small></span>\n </nrcl-filter-container>\n}\n@else {\n <div class=\"no-rows\">No records to display.</div>\n}\n\n@if ( hasRows ) {\n <div class=\"pagination\">\n <pagination-controls \n [id]=\"paginationId\" \n [maxSize]=\"paginationMaxSize\"\n [responsive]=\"false\"\n [directionLinks]=\"true\"\n previousLabel=\"\"\n nextLabel=\"\"\n [autoHide]=\"false\"\n (pageChange)=\"onPageNumberChange( $event )\"\n ></pagination-controls>\n </div>\n}\n\n@if ( hasRows && showPageSize ) {\n <nrcl-filter-select class=\"page-size\"\n label=\"Page Size\"\n [value]=\"[ pageSize ]\"\n [options]=\"pageSizeOptions\"\n (valueChange)=\"onPageSizeChange( $event[ 0 ] )\"\n selectMax=\"1\"\n [clear]=\"false\"\n ></nrcl-filter-select>\n}\n", styles: [":host{display:block;font-family:var(--nrcl-font-family);position:relative;min-height:40px}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host .summary{--nrcl-filter-container-width: min-content;position:absolute;top:0;left:0;bottom:0;white-space:nowrap}:host .pagination{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .pagination ::ng-deep .ngx-pagination{text-align:center;padding-inline-start:0;margin:0}:host .pagination ::ng-deep .ngx-pagination li{border-left:#c6c8cb solid 1px;border-top:#c6c8cb solid 1px;border-bottom:#c6c8cb solid 1px;border-right:none;vertical-align:middle;margin:0;height:35px;padding:0}:host .pagination ::ng-deep .ngx-pagination li a{padding:0;line-height:35px;text-decoration:none}:host .pagination ::ng-deep .ngx-pagination li>*>span{padding:0 15px;line-height:35px}:host .pagination ::ng-deep .ngx-pagination li.current{color:#036;font-weight:700;background:#fff;border:2px solid #003366;border-radius:2px}:host .pagination ::ng-deep .ngx-pagination li.disabled span{display:none}:host .pagination ::ng-deep .ngx-pagination li:first-child{border-left:none;border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination li:last-child{border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination a:hover,:host .pagination ::ng-deep .ngx-pagination button:hover{color:#131313;background-color:#ffd3a0}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{font-family:Material Symbols Outlined;vertical-align:middle;display:inline;font-size:25px;margin:0;line-height:40px;padding:0 10px}:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"arrow_back\"}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"arrow_forward\"}:host .page-size{--nrcl-filter-select-width: 140px;position:absolute;top:0;right:0;bottom:0;display:flex;gap:8px;align-items:center;pointer-events:auto}:host.width-restrictive{display:grid;grid-template-columns:1fr 1fr;gap:var(--nrcl-gutter-space)}:host.width-restrictive .summary{--nrcl-filter-container-width: auto;position:static;grid-column:1;grid-row:1}:host.width-restrictive .page-size{--nrcl-filter-select-width: auto;position:static;grid-column:2;grid-row:1}:host.width-restrictive .pagination{position:static;grid-column:1/span 2;grid-row:2}\n"], dependencies: [{ kind: "component", type: i1.PaginationControlsComponent, selector: "pagination-controls", inputs: ["id", "maxSize", "directionLinks", "autoHide", "responsive", "previousLabel", "nextLabel", "screenReaderPaginationLabel", "screenReaderPageLabel", "screenReaderCurrentLabel"], outputs: ["pageChange", "pageBoundsCorrection"] }, { kind: "component", type: i2.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint"] }, { kind: "component", type: i3.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListPaginationComponent, decorators: [{
80
+ type: Component,
81
+ args: [{ selector: "nrcl-row-list-pagination", changeDetection: ChangeDetectionStrategy.OnPush, host: {
82
+ '[class.width-sufficient]': "componentWidth == 'sufficient'",
83
+ '[class.width-tight]': "componentWidth == 'tight'",
84
+ '[class.width-restrictive]': "componentWidth == 'restrictive'",
85
+ }, template: "@if ( hasRows ) {\n <nrcl-filter-container class=\"summary\"\n label=\"Showing Rows\"\n >\n <span>{{ firstRow }} to {{ lastRow }} <small>(of {{ rowCount }})</small></span>\n </nrcl-filter-container>\n}\n@else {\n <div class=\"no-rows\">No records to display.</div>\n}\n\n@if ( hasRows ) {\n <div class=\"pagination\">\n <pagination-controls \n [id]=\"paginationId\" \n [maxSize]=\"paginationMaxSize\"\n [responsive]=\"false\"\n [directionLinks]=\"true\"\n previousLabel=\"\"\n nextLabel=\"\"\n [autoHide]=\"false\"\n (pageChange)=\"onPageNumberChange( $event )\"\n ></pagination-controls>\n </div>\n}\n\n@if ( hasRows && showPageSize ) {\n <nrcl-filter-select class=\"page-size\"\n label=\"Page Size\"\n [value]=\"[ pageSize ]\"\n [options]=\"pageSizeOptions\"\n (valueChange)=\"onPageSizeChange( $event[ 0 ] )\"\n selectMax=\"1\"\n [clear]=\"false\"\n ></nrcl-filter-select>\n}\n", styles: [":host{display:block;font-family:var(--nrcl-font-family);position:relative;min-height:40px}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host .summary{--nrcl-filter-container-width: min-content;position:absolute;top:0;left:0;bottom:0;white-space:nowrap}:host .pagination{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}:host .pagination ::ng-deep .ngx-pagination{text-align:center;padding-inline-start:0;margin:0}:host .pagination ::ng-deep .ngx-pagination li{border-left:#c6c8cb solid 1px;border-top:#c6c8cb solid 1px;border-bottom:#c6c8cb solid 1px;border-right:none;vertical-align:middle;margin:0;height:35px;padding:0}:host .pagination ::ng-deep .ngx-pagination li a{padding:0;line-height:35px;text-decoration:none}:host .pagination ::ng-deep .ngx-pagination li>*>span{padding:0 15px;line-height:35px}:host .pagination ::ng-deep .ngx-pagination li.current{color:#036;font-weight:700;background:#fff;border:2px solid #003366;border-radius:2px}:host .pagination ::ng-deep .ngx-pagination li.disabled span{display:none}:host .pagination ::ng-deep .ngx-pagination li:first-child{border-left:none;border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination li:last-child{border-top:none;border-bottom:none}:host .pagination ::ng-deep .ngx-pagination a:hover,:host .pagination ::ng-deep .ngx-pagination button:hover{color:#131313;background-color:#ffd3a0}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:after,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{font-family:Material Symbols Outlined;vertical-align:middle;display:inline;font-size:25px;margin:0;line-height:40px;padding:0 10px}:host .pagination ::ng-deep .ngx-pagination .pagination-previous a:before,:host .pagination ::ng-deep .ngx-pagination .pagination-previous.disabled:before{content:\"arrow_back\"}:host .pagination ::ng-deep .ngx-pagination .pagination-next a:after,:host .pagination ::ng-deep .ngx-pagination .pagination-next.disabled:after{content:\"arrow_forward\"}:host .page-size{--nrcl-filter-select-width: 140px;position:absolute;top:0;right:0;bottom:0;display:flex;gap:8px;align-items:center;pointer-events:auto}:host.width-restrictive{display:grid;grid-template-columns:1fr 1fr;gap:var(--nrcl-gutter-space)}:host.width-restrictive .summary{--nrcl-filter-container-width: auto;position:static;grid-column:1;grid-row:1}:host.width-restrictive .page-size{--nrcl-filter-select-width: auto;position:static;grid-column:2;grid-row:1}:host.width-restrictive .pagination{position:static;grid-column:1/span 2;grid-row:2}\n"] }]
86
+ }], propDecorators: { paginationId: [{
87
+ type: Input
88
+ }], pageSizeOptions: [{
89
+ type: Input
90
+ }], pageSize: [{
91
+ type: Input
92
+ }], pageNumber: [{
93
+ type: Input
94
+ }], rowCount: [{
95
+ type: Input
96
+ }], showPageSize: [{
97
+ type: Input
98
+ }], pageSizeChange: [{
99
+ type: Output
100
+ }], pageNumberChange: [{
101
+ type: Output
102
+ }], onResize: [{
103
+ type: HostListener,
104
+ args: ["window:resize", ["$event"]]
105
+ }] } });
106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWxpc3QtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvY29tcG9uZW50cy9yb3ctbGlzdC1wYWdpbmF0aW9uL3Jvdy1saXN0LXBhZ2luYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcm93LWxpc3QtcGFnaW5hdGlvbi9yb3ctbGlzdC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFldkIsTUFBTSxPQUFPLDBCQUEwQjtJQVh2QztRQVlhLGlCQUFZLEdBQUcsR0FBRyxDQUFBO1FBQ2xCLG9CQUFlLEdBQUc7WUFDdkIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUU7WUFDcEMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFHLFdBQVcsRUFBRSxTQUFTLEVBQUU7WUFDckMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFHLFdBQVcsRUFBRSxTQUFTLEVBQUU7WUFDckMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFHLFdBQVcsRUFBRSxTQUFTLEVBQUU7WUFDckMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUU7U0FDekMsQ0FBQTtRQUNRLGFBQVEsR0FBRyxFQUFFLENBQUE7UUFHYixpQkFBWSxHQUFHLElBQUksQ0FBQTtRQUVsQixtQkFBYyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDNUMs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cUIsRUFBRSwyQkFBMkI7d0JBQ2xELDJCQUEyQixFQUFFLGlDQUFpQztxQkFDakU7OEJBR1EsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQU9HLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUksY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBcUJQLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0XG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIFJvd0xpc3RQYWdpbmF0aW9uV2lkdGggPSAnc3VmZmljaWVudCd8J3RpZ2h0J3wncmVzdHJpY3RpdmUnXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5yY2wtcm93LWxpc3QtcGFnaW5hdGlvblwiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcm93LWxpc3QtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsOiBcIi4vcm93LWxpc3QtcGFnaW5hdGlvbi5jb21wb25lbnQuc2Nzc1wiLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy53aWR0aC1zdWZmaWNpZW50XSc6IFwiY29tcG9uZW50V2lkdGggPT0gJ3N1ZmZpY2llbnQnXCIsXG4gICAgICAgICdbY2xhc3Mud2lkdGgtdGlnaHRdJzogXCJjb21wb25lbnRXaWR0aCA9PSAndGlnaHQnXCIsXG4gICAgICAgICdbY2xhc3Mud2lkdGgtcmVzdHJpY3RpdmVdJzogXCJjb21wb25lbnRXaWR0aCA9PSAncmVzdHJpY3RpdmUnXCIsXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBSb3dMaXN0UGFnaW5hdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIEBJbnB1dCgpIHBhZ2luYXRpb25JZCA9ICcxJ1xuICAgIEBJbnB1dCgpIHBhZ2VTaXplT3B0aW9ucyA9IFsgXG4gICAgICAgIHsgY29kZTogNSwgICBkZXNjcmlwdGlvbjogJzUgUm93cycgfSxcbiAgICAgICAgeyBjb2RlOiAxMCwgIGRlc2NyaXB0aW9uOiAnMTAgUm93cycgfSxcbiAgICAgICAgeyBjb2RlOiAyMCwgIGRlc2NyaXB0aW9uOiAnMjAgUm93cycgfSxcbiAgICAgICAgeyBjb2RlOiA1MCwgIGRlc2NyaXB0aW9uOiAnNTAgUm93cycgfSxcbiAgICAgICAgeyBjb2RlOiAxMDAsIGRlc2NyaXB0aW9uOiAnMTAwIFJvd3MnIH0sXG4gICAgXVxuICAgIEBJbnB1dCgpIHBhZ2VTaXplID0gMjBcbiAgICBASW5wdXQoKSBwYWdlTnVtYmVyXG4gICAgQElucHV0KCkgcm93Q291bnRcbiAgICBASW5wdXQoKSBzaG93UGFnZVNpemUgPSB0cnVlIFxuXG4gICAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gICAgQE91dHB1dCgpIHBhZ2VOdW1iZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIGNvbXBvbmVudFdpZHRoOiBSb3dMaXN0UGFnaW5hdGlvbldpZHRoID0gJ3N1ZmZpY2llbnQnXG4gICAgcGFnaW5hdGlvbk1heFNpemUgPSA1XG5cbiAgICBlbGVtZW50UmVmID0gaW5qZWN0KCBFbGVtZW50UmVmIClcbiAgICBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdCggQ2hhbmdlRGV0ZWN0b3JSZWYgKVxuICAgIFxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja1dpZHRoKClcbiAgICB9XG4gICAgXG4gICAgb25QYWdlU2l6ZUNoYW5nZSggZXYgKSB7ICAgICAgICBcbiAgICAgICAgdGhpcy5wYWdlU2l6ZUNoYW5nZS5lbWl0KCBOdW1iZXIoIGV2ICkgKVxuICAgIH1cblxuICAgIG9uUGFnZU51bWJlckNoYW5nZSggZXYgKSB7XG4gICAgICAgIHRoaXMucGFnZU51bWJlckNoYW5nZS5lbWl0KCBOdW1iZXIoIGV2ICkgKVxuICAgIH1cblxuICAgIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIsIFtcIiRldmVudFwiXSlcbiAgICBvblJlc2l6ZShldmVudCkge1xuICAgICAgICB0aGlzLmNoZWNrV2lkdGgoKVxuICAgIH1cblxuICAgIGNoZWNrV2lkdGgoKSB7XG4gICAgICAgIHNldFRpbWVvdXQoICgpID0+IHtcbiAgICAgICAgICAgIGxldCB3ID0gdGhpcy5lbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICAgICAgICAgICAgXG4gICAgICAgICAgICBpZiAoICF3ICkgcmV0dXJuXG5cbiAgICAgICAgICAgIHN3aXRjaCAoIHRydWUgKSB7XG4gICAgICAgICAgICAgICAgY2FzZSB3ID4gNjAwOiBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9ICdzdWZmaWNpZW50J1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25NYXhTaXplID0gNVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgY2FzZSB3ID4gNTAwOiBcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRXaWR0aCA9ICd0aWdodCc7IFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25NYXhTaXplID0gM1xuICAgICAgICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50V2lkdGggPSAncmVzdHJpY3RpdmUnXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbk1heFNpemUgPSA0XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0gKVxuICAgIH1cblxuICAgIGdldCBwYWdlQ291bnQoKSB7XG4gICAgICAgIGlmICggIXRoaXMuaGFzUm93cyApIHJldHVybiAwXG4gICAgICAgIHJldHVybiBNYXRoLmNlaWwoIHRoaXMucm93Q291bnQgLyB0aGlzLnBhZ2VTaXplIClcbiAgICB9XG5cbiAgICBnZXQgZmlyc3RSb3coKSB7XG4gICAgICAgIGlmICggIXRoaXMuaGFzUm93cyApIHJldHVybiAwXG4gICAgICAgIHJldHVybiAoIE1hdGgubWluKCB0aGlzLnBhZ2VDb3VudCwgdGhpcy5wYWdlTnVtYmVyICkgLSAxICkgKiB0aGlzLnBhZ2VTaXplICsgMVxuICAgIH1cblxuICAgIGdldCBsYXN0Um93KCkge1xuICAgICAgICBpZiAoICF0aGlzLmhhc1Jvd3MgKSByZXR1cm4gMFxuICAgICAgICByZXR1cm4gTWF0aC5taW4oIHRoaXMuZmlyc3RSb3cgKyB0aGlzLnBhZ2VTaXplIC0gMSwgdGhpcy5yb3dDb3VudCApXG4gICAgfVxuXG4gICAgZ2V0IGhhc1Jvd3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd0NvdW50ICYmIHRoaXMucGFnZVNpemVcbiAgICB9XG59XG4iLCJAaWYgKCBoYXNSb3dzICkge1xuICAgIDxucmNsLWZpbHRlci1jb250YWluZXIgY2xhc3M9XCJzdW1tYXJ5XCJcbiAgICAgICAgbGFiZWw9XCJTaG93aW5nIFJvd3NcIlxuICAgID5cbiAgICAgICAgPHNwYW4+e3sgZmlyc3RSb3cgfX0gdG8ge3sgbGFzdFJvdyB9fSA8c21hbGw+KG9mIHt7IHJvd0NvdW50IH19KTwvc21hbGw+PC9zcGFuPlxuICAgIDwvbnJjbC1maWx0ZXItY29udGFpbmVyPlxufVxuQGVsc2Uge1xuICAgIDxkaXYgY2xhc3M9XCJuby1yb3dzXCI+Tm8gcmVjb3JkcyB0byBkaXNwbGF5LjwvZGl2PlxufVxuXG5AaWYgKCBoYXNSb3dzICkge1xuICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0aW9uXCI+XG4gICAgICAgIDxwYWdpbmF0aW9uLWNvbnRyb2xzIFxuICAgICAgICAgICAgW2lkXT1cInBhZ2luYXRpb25JZFwiIFxuICAgICAgICAgICAgW21heFNpemVdPVwicGFnaW5hdGlvbk1heFNpemVcIlxuICAgICAgICAgICAgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cInRydWVcIlxuICAgICAgICAgICAgcHJldmlvdXNMYWJlbD1cIlwiXG4gICAgICAgICAgICBuZXh0TGFiZWw9XCJcIlxuICAgICAgICAgICAgW2F1dG9IaWRlXT1cImZhbHNlXCJcbiAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZU51bWJlckNoYW5nZSggJGV2ZW50IClcIlxuICAgICAgICA+PC9wYWdpbmF0aW9uLWNvbnRyb2xzPlxuICAgIDwvZGl2PlxufVxuXG5AaWYgKCBoYXNSb3dzICYmIHNob3dQYWdlU2l6ZSApIHtcbiAgICA8bnJjbC1maWx0ZXItc2VsZWN0IGNsYXNzPVwicGFnZS1zaXplXCJcbiAgICAgICAgbGFiZWw9XCJQYWdlIFNpemVcIlxuICAgICAgICBbdmFsdWVdPVwiWyBwYWdlU2l6ZSBdXCJcbiAgICAgICAgW29wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoICRldmVudFsgMCBdIClcIlxuICAgICAgICBzZWxlY3RNYXg9XCIxXCJcbiAgICAgICAgW2NsZWFyXT1cImZhbHNlXCJcbiAgICA+PC9ucmNsLWZpbHRlci1zZWxlY3Q+XG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
2
+ import { unwrapFilterValue, wrapFilterValue } from "../../utils/filter.util";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/forms";
5
+ import * as i2 from "@angular/material/radio";
6
+ import * as i3 from "../filter-container/filter-container.component";
7
+ import * as i4 from "../filter-select/filter-select.component";
8
+ export class RowListSortingComponent {
9
+ constructor() {
10
+ this.sortColumnOptions = [];
11
+ this.sortDirection = 'asc';
12
+ this.sortChange = new EventEmitter();
13
+ this.wrapFilterValue = wrapFilterValue;
14
+ this.unwrapFilterValue = unwrapFilterValue;
15
+ }
16
+ onSortColumnChange(ev) {
17
+ this.sortColumn = ev;
18
+ this.emitSortChange();
19
+ }
20
+ onSortDirectionChange() {
21
+ this.emitSortChange();
22
+ }
23
+ emitSortChange() {
24
+ this.sortChange.emit({
25
+ active: this.sortColumn,
26
+ direction: this.sortDirection
27
+ });
28
+ }
29
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListSortingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RowListSortingComponent, selector: "nrcl-row-list-sorting", inputs: { sortColumn: "sortColumn", sortColumnOptions: "sortColumnOptions", sortDirection: "sortDirection" }, outputs: { sortChange: "sortChange" }, ngImport: i0, template: "<nrcl-filter-select class=\"sort-order\" \n label=\"Sort By\"\n [value]=\"wrapFilterValue( sortColumn )\"\n [options]=\"sortColumnOptions\"\n (valueChange)=\"onSortColumnChange( unwrapFilterValue( $event ) )\"\n selectMax=\"1\" \n></nrcl-filter-select>\n\n<nrcl-filter-container class=\"sort-direction\" \n label=\"Sort Order\"\n>\n <mat-radio-group\n [(ngModel)]=\"sortDirection\" \n (ngModelChange)=\"onSortDirectionChange()\"\n [disabled]=\"!sortColumn\"\n >\n <mat-radio-button aria-label=\"Sort A to Z\" value=\"asc\">A &rarr; Z</mat-radio-button>\n <mat-radio-button aria-label=\"Sort Z to A\" value=\"desc\">Z &rarr; A</mat-radio-button>\n </mat-radio-group>\n</nrcl-filter-container>\n", styles: [":host{gap:8px;width:100%;display:grid;grid-template-columns:1fr 1fr}:host .sort-order{--nrcl-filter-select-width: auto;grid-column:1}:host .sort-direction{--nrcl-filter-container-width: auto;grid-column:2}:host .sort-direction ::ng-deep .content .mat-mdc-radio-group{justify-content:space-evenly;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i2.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "component", type: i3.FilterContainerComponent, selector: "nrcl-filter-container", inputs: ["label", "hint"] }, { kind: "component", type: i4.FilterSelectComponent, selector: "nrcl-filter-select", inputs: ["label", "placeholder", "hint", "options", "value", "selectMax", "tooltips", "summary", "clear"], outputs: ["valueChange"] }] }); }
31
+ }
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListSortingComponent, decorators: [{
33
+ type: Component,
34
+ args: [{ selector: "nrcl-row-list-sorting", template: "<nrcl-filter-select class=\"sort-order\" \n label=\"Sort By\"\n [value]=\"wrapFilterValue( sortColumn )\"\n [options]=\"sortColumnOptions\"\n (valueChange)=\"onSortColumnChange( unwrapFilterValue( $event ) )\"\n selectMax=\"1\" \n></nrcl-filter-select>\n\n<nrcl-filter-container class=\"sort-direction\" \n label=\"Sort Order\"\n>\n <mat-radio-group\n [(ngModel)]=\"sortDirection\" \n (ngModelChange)=\"onSortDirectionChange()\"\n [disabled]=\"!sortColumn\"\n >\n <mat-radio-button aria-label=\"Sort A to Z\" value=\"asc\">A &rarr; Z</mat-radio-button>\n <mat-radio-button aria-label=\"Sort Z to A\" value=\"desc\">Z &rarr; A</mat-radio-button>\n </mat-radio-group>\n</nrcl-filter-container>\n", styles: [":host{gap:8px;width:100%;display:grid;grid-template-columns:1fr 1fr}:host .sort-order{--nrcl-filter-select-width: auto;grid-column:1}:host .sort-direction{--nrcl-filter-container-width: auto;grid-column:2}:host .sort-direction ::ng-deep .content .mat-mdc-radio-group{justify-content:space-evenly;width:100%}\n"] }]
35
+ }], propDecorators: { sortColumn: [{
36
+ type: Input
37
+ }], sortColumnOptions: [{
38
+ type: Input
39
+ }], sortDirection: [{
40
+ type: Input
41
+ }], sortChange: [{
42
+ type: Output
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWxpc3Qtc29ydGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvY29tcG9uZW50cy9yb3ctbGlzdC1zb3J0aW5nL3Jvdy1saXN0LXNvcnRpbmcuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvcm93LWxpc3Qtc29ydGluZy9yb3ctbGlzdC1zb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFPN0UsTUFBTSxPQUFPLHVCQUF1QjtJQUxwQztRQU9hLHNCQUFpQixHQUFzQixFQUFFLENBQUE7UUFDekMsa0JBQWEsR0FBa0IsS0FBSyxDQUFBO1FBRW5DLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRWhELG9CQUFlLEdBQUcsZUFBZSxDQUFBO1FBQ2pDLHNCQUFpQixHQUFHLGlCQUFpQixDQUFBO0tBaUJ4QztJQWZHLGtCQUFrQixDQUFFLEVBQUU7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUE7UUFDcEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxxQkFBcUI7UUFDakIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFBO0lBQ3pCLENBQUM7SUFFRCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUU7WUFDbEIsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZCLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYTtTQUNoQyxDQUFFLENBQUE7SUFDUCxDQUFDOytHQXhCUSx1QkFBdUI7bUdBQXZCLHVCQUF1QixrTkNmcEMsNHZCQW9CQTs7NEZETGEsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNJLHVCQUF1Qjs4QkFLeEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFFSSxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE91dHB1dFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29kZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2NvZGUtdGFibGUudXRpbFwiO1xuaW1wb3J0IHsgU29ydCwgU29ydERpcmVjdGlvbiB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9zb3J0XCI7XG5pbXBvcnQgeyB1bndyYXBGaWx0ZXJWYWx1ZSwgd3JhcEZpbHRlclZhbHVlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL2ZpbHRlci51dGlsXCI7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiBcIm5yY2wtcm93LWxpc3Qtc29ydGluZ1wiLFxuICAgIHRlbXBsYXRlVXJsOiBcIi4vcm93LWxpc3Qtc29ydGluZy5jb21wb25lbnQuaHRtbFwiLFxuICAgIHN0eWxlVXJsOiBcIi4vcm93LWxpc3Qtc29ydGluZy5jb21wb25lbnQuc2Nzc1wiLFxufSlcbmV4cG9ydCBjbGFzcyBSb3dMaXN0U29ydGluZ0NvbXBvbmVudCB7XG4gICAgQElucHV0KCkgc29ydENvbHVtbjogc3RyaW5nXG4gICAgQElucHV0KCkgc29ydENvbHVtbk9wdGlvbnM6IENvZGVEZXNjcmlwdGlvbltdID0gW11cbiAgICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2FzYydcblxuICAgIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0PigpO1xuXG4gICAgd3JhcEZpbHRlclZhbHVlID0gd3JhcEZpbHRlclZhbHVlIFxuICAgIHVud3JhcEZpbHRlclZhbHVlID0gdW53cmFwRmlsdGVyVmFsdWVcbiAgICBcbiAgICBvblNvcnRDb2x1bW5DaGFuZ2UoIGV2ICkge1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW4gPSBldlxuICAgICAgICB0aGlzLmVtaXRTb3J0Q2hhbmdlKClcbiAgICB9XG5cbiAgICBvblNvcnREaXJlY3Rpb25DaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuZW1pdFNvcnRDaGFuZ2UoKVxuICAgIH1cblxuICAgIGVtaXRTb3J0Q2hhbmdlKCkge1xuICAgICAgICB0aGlzLnNvcnRDaGFuZ2UuZW1pdCggeyBcbiAgICAgICAgICAgIGFjdGl2ZTogdGhpcy5zb3J0Q29sdW1uLFxuICAgICAgICAgICAgZGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb25cbiAgICAgICAgfSApXG4gICAgfVxufVxuIiwiPG5yY2wtZmlsdGVyLXNlbGVjdCBjbGFzcz1cInNvcnQtb3JkZXJcIiBcbiAgICBsYWJlbD1cIlNvcnQgQnlcIlxuICAgIFt2YWx1ZV09XCJ3cmFwRmlsdGVyVmFsdWUoIHNvcnRDb2x1bW4gKVwiXG4gICAgW29wdGlvbnNdPVwic29ydENvbHVtbk9wdGlvbnNcIlxuICAgICh2YWx1ZUNoYW5nZSk9XCJvblNvcnRDb2x1bW5DaGFuZ2UoIHVud3JhcEZpbHRlclZhbHVlKCAkZXZlbnQgKSApXCJcbiAgICBzZWxlY3RNYXg9XCIxXCIgICAgICAgIFxuPjwvbnJjbC1maWx0ZXItc2VsZWN0PlxuXG48bnJjbC1maWx0ZXItY29udGFpbmVyIGNsYXNzPVwic29ydC1kaXJlY3Rpb25cIiBcbiAgICBsYWJlbD1cIlNvcnQgT3JkZXJcIlxuPlxuICAgIDxtYXQtcmFkaW8tZ3JvdXBcbiAgICAgICAgWyhuZ01vZGVsKV09XCJzb3J0RGlyZWN0aW9uXCIgXG4gICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uU29ydERpcmVjdGlvbkNoYW5nZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFzb3J0Q29sdW1uXCJcbiAgICA+XG4gICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uIGFyaWEtbGFiZWw9XCJTb3J0IEEgdG8gWlwiIHZhbHVlPVwiYXNjXCI+QSAmcmFycjsgWjwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICAgICAgPG1hdC1yYWRpby1idXR0b24gYXJpYS1sYWJlbD1cIlNvcnQgWiB0byBBXCIgdmFsdWU9XCJkZXNjXCI+WiAmcmFycjsgQTwvbWF0LXJhZGlvLWJ1dHRvbj5cbiAgICA8L21hdC1yYWRpby1ncm91cD5cbjwvbnJjbC1maWx0ZXItY29udGFpbmVyPlxuIl19
@@ -0,0 +1,26 @@
1
+ import { Component, Inject } from "@angular/core";
2
+ import { MAT_SNACK_BAR_DATA } from "@angular/material/snack-bar";
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/material/snack-bar";
5
+ import * as i2 from "@angular/material/icon";
6
+ export class SnackbarComponent {
7
+ constructor(snackBarRef, config) {
8
+ this.snackBarRef = snackBarRef;
9
+ this.config = config;
10
+ }
11
+ get className() {
12
+ return 'snackbar-type-' + this.config.type;
13
+ }
14
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SnackbarComponent, deps: [{ token: i1.MatSnackBarRef }, { token: MAT_SNACK_BAR_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
15
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: SnackbarComponent, selector: "nrcl-snackbar", host: { properties: { "class": "className" } }, ngImport: i0, template: "<div class=\"icon\">\n @switch ( config.type ) {\n @case ( 'success' ) {\n <mat-icon>check_circle</mat-icon>\n }\n @case ( 'error' ) {\n <mat-icon>cancel</mat-icon>\n }\n @case ( 'info' ) {\n <mat-icon>info</mat-icon>\n }\n @case ( 'update' ) {\n <mat-icon>error</mat-icon>\n }\n }\n</div>\n\n<div class=\"message\">\n <span>{{ config.message }}</span>\n</div>\n\n<div class=\"button\">\n <button (click)=\"snackBarRef.dismissWithAction()\">Close</button>\n</div>\n", styles: ["::ng-deep :root{--nrcl-snackbar-success-background-color: #2E7940;--nrcl-snackbar-error-background-color: #D8292F;--nrcl-snackbar-info-background-color: #37474f;--nrcl-snackbar-update-background-color: #37474f;--nrcl-snackbar-update-button-color: #f9ca81}:host{display:flex;align-items:stretch;height:100%;color:#fff;font-family:var(--nrcl-font-family);font-size:var(--nrcl-font-size);word-break:break-word;background-color:var(--snackbar-background-color)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host.snackbar-type-success{--snackbar-background-color: var(--nrcl-snackbar-success-background-color )}:host.snackbar-type-error{--snackbar-background-color: var(--nrcl-snackbar-error-background-color )}:host.snackbar-type-info{--snackbar-background-color: var( --nrcl-snackbar-info-background-color )}:host.snackbar-type-update{--snackbar-background-color: var( --nrcl-snackbar-update-background-color );--snackbar-button-color: var( --nrcl-snackbar-update-button-color )}:host .icon{display:flex;background-color:#f2f2f2;align-items:center;justify-content:center;pointer-events:none}:host .icon mat-icon{padding:var(--nrcl-gutter-space);color:var(--snackbar-background-color)}:host .message{padding:var(--nrcl-gutter-space);flex:1;cursor:default;pointer-events:none}:host .button{padding-right:8px;display:flex;align-items:center;justify-content:center}:host .button button{padding:calc(var(--nrcl-gutter-space) / 2);border:1px white solid;border-radius:5px;color:#fff;cursor:pointer;font-family:var(--nrcl-font-family);background-color:var(--snackbar-button-color, --snackbar-background-color)}::ng-deep .mat-mdc-snack-bar-container{color:#fff;font-family:var(--nrcl-font-family);font-size:var(--nrcl-font-size);word-break:break-word}::ng-deep .mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{padding-right:0}::ng-deep .mat-mdc-snack-bar-container .mat-mdc-snackbar-surface .mat-mdc-snack-bar-label{padding:0}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] }); }
16
+ }
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SnackbarComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'nrcl-snackbar', host: {
20
+ '[class]': 'className'
21
+ }, template: "<div class=\"icon\">\n @switch ( config.type ) {\n @case ( 'success' ) {\n <mat-icon>check_circle</mat-icon>\n }\n @case ( 'error' ) {\n <mat-icon>cancel</mat-icon>\n }\n @case ( 'info' ) {\n <mat-icon>info</mat-icon>\n }\n @case ( 'update' ) {\n <mat-icon>error</mat-icon>\n }\n }\n</div>\n\n<div class=\"message\">\n <span>{{ config.message }}</span>\n</div>\n\n<div class=\"button\">\n <button (click)=\"snackBarRef.dismissWithAction()\">Close</button>\n</div>\n", styles: ["::ng-deep :root{--nrcl-snackbar-success-background-color: #2E7940;--nrcl-snackbar-error-background-color: #D8292F;--nrcl-snackbar-info-background-color: #37474f;--nrcl-snackbar-update-background-color: #37474f;--nrcl-snackbar-update-button-color: #f9ca81}:host{display:flex;align-items:stretch;height:100%;color:#fff;font-family:var(--nrcl-font-family);font-size:var(--nrcl-font-size);word-break:break-word;background-color:var(--snackbar-background-color)}:host ::ng-deep .material-icons{font-family:Material Symbols Outlined;font-feature-settings:\"liga\"}:host ::ng-deep .mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host ::ng-deep button.mat-mdc-fab>.mat-icon,:host ::ng-deep button.mat-mdc-raised-button>.mat-icon,:host ::ng-deep button.mat-mdc-button>.mat-icon,:host ::ng-deep button.mat-mdc-icon-button>.mat-icon,:host ::ng-deep button.mat-mdc-outlined-button>.mat-icon,:host ::ng-deep button.mat-mdc-unelevated-button>.mat-icon,:host ::ng-deep button.mat-mdc-mini-fab .mat-mdc-menu-item>.mat-icon{width:var(--nrcl-icon-size);height:var(--nrcl-icon-size);font-size:var(--nrcl-icon-size);line-height:var(--nrcl-icon-size)}:host.snackbar-type-success{--snackbar-background-color: var(--nrcl-snackbar-success-background-color )}:host.snackbar-type-error{--snackbar-background-color: var(--nrcl-snackbar-error-background-color )}:host.snackbar-type-info{--snackbar-background-color: var( --nrcl-snackbar-info-background-color )}:host.snackbar-type-update{--snackbar-background-color: var( --nrcl-snackbar-update-background-color );--snackbar-button-color: var( --nrcl-snackbar-update-button-color )}:host .icon{display:flex;background-color:#f2f2f2;align-items:center;justify-content:center;pointer-events:none}:host .icon mat-icon{padding:var(--nrcl-gutter-space);color:var(--snackbar-background-color)}:host .message{padding:var(--nrcl-gutter-space);flex:1;cursor:default;pointer-events:none}:host .button{padding-right:8px;display:flex;align-items:center;justify-content:center}:host .button button{padding:calc(var(--nrcl-gutter-space) / 2);border:1px white solid;border-radius:5px;color:#fff;cursor:pointer;font-family:var(--nrcl-font-family);background-color:var(--snackbar-button-color, --snackbar-background-color)}::ng-deep .mat-mdc-snack-bar-container{color:#fff;font-family:var(--nrcl-font-family);font-size:var(--nrcl-font-size);word-break:break-word}::ng-deep .mat-mdc-snack-bar-container .mat-mdc-snackbar-surface{padding-right:0}::ng-deep .mat-mdc-snack-bar-container .mat-mdc-snackbar-surface .mat-mdc-snack-bar-label{padding:0}\n"] }]
22
+ }], ctorParameters: () => [{ type: i1.MatSnackBarRef }, { type: undefined, decorators: [{
23
+ type: Inject,
24
+ args: [MAT_SNACK_BAR_DATA]
25
+ }] }] });
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic25hY2tiYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvc25hY2tiYXIvc25hY2tiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbnItbmd4LWNvbXBvbmVudC1saWIvc3JjL2NvbXBvbmVudHMvc25hY2tiYXIvc25hY2tiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLGtCQUFrQixFQUFrQixNQUFNLDZCQUE2QixDQUFDOzs7O0FBaUJqRixNQUFNLE9BQU8saUJBQWlCO0lBQzFCLFlBQ1csV0FBOEMsRUFDbEIsTUFBc0I7UUFEbEQsZ0JBQVcsR0FBWCxXQUFXLENBQW1DO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBQ3pELENBQUM7SUFFTCxJQUFJLFNBQVM7UUFDVCxPQUFPLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFBO0lBQzlDLENBQUM7K0dBUlEsaUJBQWlCLGdEQUdkLGtCQUFrQjttR0FIckIsaUJBQWlCLHFHQ2xCOUIsbWtCQXdCQTs7NEZETmEsaUJBQWlCO2tCQVI3QixTQUFTOytCQUNJLGVBQWUsUUFHbkI7d0JBQ0YsU0FBUyxFQUFFLFdBQVc7cUJBQ3pCOzswQkFLSSxNQUFNOzJCQUFDLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IE1BVF9TTkFDS19CQVJfREFUQSwgTWF0U25hY2tCYXJSZWYgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyXCI7XG5cbmV4cG9ydCB0eXBlIFNuYWNrYmFyVHlwZSA9ICdzdWNjZXNzJ3wnZXJyb3InfCdpbmZvJ3wndXBkYXRlJ1xuXG5leHBvcnQgdHlwZSBTbmFja2JhckNvbmZpZyA9IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICB0eXBlOiBTbmFja2JhclR5cGVcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICducmNsLXNuYWNrYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3NuYWNrYmFyLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmw6IFwiLi9zbmFja2Jhci5jb21wb25lbnQuc2Nzc1wiLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzc10nOiAnY2xhc3NOYW1lJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgU25hY2tiYXJDb21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgc25hY2tCYXJSZWY6IE1hdFNuYWNrQmFyUmVmPFNuYWNrYmFyQ29tcG9uZW50PixcbiAgICAgICAgQEluamVjdChNQVRfU05BQ0tfQkFSX0RBVEEpIHB1YmxpYyBjb25maWc6IFNuYWNrYmFyQ29uZmlnXG4gICAgKSB7IH1cblxuICAgIGdldCBjbGFzc05hbWUoKSB7XG4gICAgICAgIHJldHVybiAnc25hY2tiYXItdHlwZS0nICsgdGhpcy5jb25maWcudHlwZVxuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpY29uXCI+XG4gICAgQHN3aXRjaCAoIGNvbmZpZy50eXBlICkge1xuICAgICAgICBAY2FzZSAoICdzdWNjZXNzJyApIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVja19jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICggJ2Vycm9yJyApIHtcbiAgICAgICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICggJ2luZm8nICkge1xuICAgICAgICAgICAgPG1hdC1pY29uPmluZm88L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgICAgIEBjYXNlICggJ3VwZGF0ZScgKSB7XG4gICAgICAgICAgICA8bWF0LWljb24+ZXJyb3I8L21hdC1pY29uPlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJtZXNzYWdlXCI+XG4gICAgPHNwYW4+e3sgY29uZmlnLm1lc3NhZ2UgfX08L3NwYW4+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cImJ1dHRvblwiPlxuICAgIDxidXR0b24gKGNsaWNrKT1cInNuYWNrQmFyUmVmLmRpc21pc3NXaXRoQWN0aW9uKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,28 @@
1
+ import { ChangeDetectorRef, Directive, inject } from "@angular/core";
2
+ import { ConfigurationService } from "../services/configuration.service";
3
+ import * as i0 from "@angular/core";
4
+ export class ConfigurationSubscriberBase {
5
+ constructor() {
6
+ this.configurationService = inject(ConfigurationService);
7
+ this.changeDetectorRef = inject(ChangeDetectorRef);
8
+ }
9
+ ngOnInit() {
10
+ this.configurationSubscription = this.configurationService.configurationObservable.subscribe((c) => {
11
+ this.configuration = c;
12
+ this.onConfigurationChange();
13
+ this.changeDetectorRef.detectChanges();
14
+ });
15
+ this.configuration = this.configurationService.configuration;
16
+ }
17
+ ngOnDestroy() {
18
+ if (this.configurationSubscription)
19
+ this.configurationSubscription.unsubscribe();
20
+ }
21
+ onConfigurationChange() { }
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConfigurationSubscriberBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
23
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ConfigurationSubscriberBase, ngImport: i0 }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ConfigurationSubscriberBase, decorators: [{
26
+ type: Directive
27
+ }] });
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbi1zdWJzY3JpYmVyLmJhc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uci1uZ3gtY29tcG9uZW50LWxpYi9zcmMvZGlyZWN0aXZlcy9jb25maWd1cmF0aW9uLXN1YnNjcmliZXIuYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsaUJBQWlCLEVBRWpCLFNBQVMsRUFDVCxNQUFNLEVBR1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFpQixvQkFBb0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUd4RixNQUFNLE9BQU8sMkJBQTJCO0lBRHhDO1FBS0kseUJBQW9CLEdBQUcsTUFBTSxDQUFFLG9CQUFvQixDQUFFLENBQUE7UUFDckQsc0JBQWlCLEdBQUcsTUFBTSxDQUFFLGlCQUFpQixDQUFFLENBQUE7S0FnQmxEO0lBZEcsUUFBUTtRQUNKLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFFLENBQUUsQ0FBQyxFQUFHLEVBQUU7WUFDbEcsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUE7WUFDdEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7WUFDNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQzFDLENBQUMsQ0FBRSxDQUFBO1FBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsYUFBYSxDQUFBO0lBQ2hFLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSyxJQUFJLENBQUMseUJBQXlCO1lBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3RGLENBQUM7SUFFRCxxQkFBcUIsS0FBSSxDQUFDOytHQXBCakIsMkJBQTJCO21HQUEzQiwyQkFBMkI7OzRGQUEzQiwyQkFBMkI7a0JBRHZDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXRcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24sIENvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb24uc2VydmljZVwiO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uU3Vic2NyaWJlckJhc2UgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7ICAgIFxuICAgIGNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb25cbiAgICBjb25maWd1cmF0aW9uOiBDb25maWd1cmF0aW9uXG5cbiAgICBjb25maWd1cmF0aW9uU2VydmljZSA9IGluamVjdCggQ29uZmlndXJhdGlvblNlcnZpY2UgKVxuICAgIGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KCBDaGFuZ2VEZXRlY3RvclJlZiApXG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uU3Vic2NyaXB0aW9uID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5jb25maWd1cmF0aW9uT2JzZXJ2YWJsZS5zdWJzY3JpYmUoICggYyApID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IGNcbiAgICAgICAgICAgIHRoaXMub25Db25maWd1cmF0aW9uQ2hhbmdlKClcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0gKVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLmNvbmZpZ3VyYXRpb25cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCB0aGlzLmNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24gKSB0aGlzLmNvbmZpZ3VyYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIG9uQ29uZmlndXJhdGlvbkNoYW5nZSgpIHt9XG59XG4iXX0=
@@ -0,0 +1,150 @@
1
+ import { ChangeDetectorRef, Directive, EventEmitter, inject, Output } from "@angular/core";
2
+ import { PageStateService } from "../services/page-state.service";
3
+ import { ObservableAborter, Aborted } from "../utils/row-list.util";
4
+ import * as i0 from "@angular/core";
5
+ export class RowListBase {
6
+ get isLoading() { return this._isLoading; }
7
+ set isLoading(v) {
8
+ if (v == this._isLoading)
9
+ return;
10
+ this._isLoading = v;
11
+ this.isLoadingChange.emit(v);
12
+ }
13
+ constructor() {
14
+ this.isLoadingChange = new EventEmitter();
15
+ this._isLoading = false;
16
+ this.rows = [];
17
+ this.pageStateService = inject(PageStateService);
18
+ this.changeDetectorRef = inject(ChangeDetectorRef);
19
+ this.initializeRowList();
20
+ }
21
+ initializeRowList() {
22
+ this.loadPageState();
23
+ }
24
+ ngAfterViewInit() {
25
+ this.refreshRowList();
26
+ }
27
+ refreshRowList() {
28
+ this.isLoading = true;
29
+ return Promise.resolve()
30
+ .then(() => {
31
+ return this.loadRowList();
32
+ })
33
+ .then(({ rows, totalRowCount }) => {
34
+ this.rows = rows;
35
+ this.totalRowCount = totalRowCount;
36
+ this.isLoading = false;
37
+ })
38
+ .catch((e) => {
39
+ if (e instanceof Aborted)
40
+ return;
41
+ this.loadRowListPageFailed(e);
42
+ this.isLoading = false;
43
+ })
44
+ .finally(() => {
45
+ this.updateSummaryMobile();
46
+ this.changeDetectorRef.detectChanges();
47
+ });
48
+ }
49
+ loadRowList() {
50
+ if (this._loadRowListRequest)
51
+ this._loadRowListRequest.abort();
52
+ this._loadRowListRequest = new ObservableAborter(() => {
53
+ return this.fetchRowListPage();
54
+ });
55
+ return this._loadRowListRequest.promise
56
+ .then(res => {
57
+ return this.displayRowListPage(res);
58
+ });
59
+ }
60
+ fetchRowListPage() {
61
+ throw 'unimplemented';
62
+ }
63
+ displayRowListPage(res) {
64
+ throw 'unimplemented';
65
+ }
66
+ loadRowListPageFailed(error) {
67
+ console.warn(error);
68
+ this.rows = [];
69
+ this.totalRowCount = 0;
70
+ }
71
+ onFilterChange(ev) {
72
+ this.filter = ev;
73
+ this.pageNumber = 1;
74
+ this.refreshRowList()
75
+ .then(() => {
76
+ this.savePageState();
77
+ this.updateSummaryMobile();
78
+ });
79
+ }
80
+ onSortChange(ev) {
81
+ this.sortActive = ev.active;
82
+ this.sortDirection = ev.direction;
83
+ this.pageNumber = 1;
84
+ this.refreshRowList()
85
+ .then(() => {
86
+ this.savePageState();
87
+ this.updateSummaryMobile();
88
+ });
89
+ }
90
+ onPageNumberChange(ev) {
91
+ this.pageNumber = ev;
92
+ this.refreshRowList()
93
+ .then(() => {
94
+ this.savePageState();
95
+ this.updateSummaryMobile();
96
+ });
97
+ }
98
+ onPageSizeChange(ev) {
99
+ this.pageSize = ev;
100
+ this.pageNumber = 1;
101
+ this.refreshRowList()
102
+ .then(() => {
103
+ this.savePageState();
104
+ this.updateSummaryMobile();
105
+ });
106
+ }
107
+ updateSummaryMobile() {
108
+ [this.summaryMobile, this.showPagingMobile] = makeSummary(this.totalRowCount, this.pageNumber, this.pageSize);
109
+ }
110
+ get initialPageState() {
111
+ throw 'unimplemented';
112
+ }
113
+ loadPageState() {
114
+ let state = this.pageStateService.getPageState(this.constructor, this.initialPageState);
115
+ this.filter = state.filter;
116
+ this.pageSize = state.pageSize;
117
+ this.pageNumber = state.pageNumber;
118
+ this.sortActive = state.sortActive;
119
+ this.sortDirection = state.sortDirection;
120
+ }
121
+ savePageState() {
122
+ let state = JSON.parse(JSON.stringify({
123
+ filter: this.filter,
124
+ pageSize: this.pageSize,
125
+ pageNumber: this.pageNumber,
126
+ sortActive: this.sortActive,
127
+ sortDirection: this.sortDirection,
128
+ }));
129
+ this.pageStateService.setPageState(this.constructor, state);
130
+ }
131
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListBase, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
132
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: RowListBase, outputs: { isLoadingChange: "isLoadingChange" }, ngImport: i0 }); }
133
+ }
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RowListBase, decorators: [{
135
+ type: Directive
136
+ }], ctorParameters: () => [], propDecorators: { isLoadingChange: [{
137
+ type: Output
138
+ }] } });
139
+ export function makeSummary(rowCount, pageNumber, pageSize) {
140
+ if (rowCount && pageSize) {
141
+ let pageCount = Math.ceil(rowCount / pageSize);
142
+ let first = (Math.min(pageCount, pageNumber) - 1) * pageSize + 1;
143
+ let last = Math.min(first + pageSize - 1, rowCount);
144
+ return [`Showing ${first} to ${last} of ${rowCount}`, true];
145
+ }
146
+ else {
147
+ return ["No records to display.", false];
148
+ }
149
+ }
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm93LWxpc3QuYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25yLW5neC1jb21wb25lbnQtbGliL3NyYy9kaXJlY3RpdmVzL3Jvdy1saXN0LmJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHMUcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWlCcEUsTUFBTSxPQUFPLFdBQVc7SUFJcEIsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFBLENBQUMsQ0FBQztJQUMxQyxJQUFJLFNBQVMsQ0FBRSxDQUFVO1FBQ3JCLElBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVO1lBQUcsT0FBTTtRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQTtRQUNuQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBRSxDQUFDLENBQUUsQ0FBQTtJQUNsQyxDQUFDO0lBb0JEO1FBNUJVLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQTtRQUUvQyxlQUFVLEdBQUcsS0FBSyxDQUFBO1FBUTFCLFNBQUksR0FBUSxFQUFFLENBQUE7UUFhZCxxQkFBZ0IsR0FBRyxNQUFNLENBQUUsZ0JBQWdCLENBQUUsQ0FBQTtRQUM3QyxzQkFBaUIsR0FBRyxNQUFNLENBQUUsaUJBQWlCLENBQUUsQ0FBQTtRQUszQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQ3hCLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxD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QUNJLENBQUM7UUFDRixPQUFPLENBQUUsd0JBQXdCLEVBQUUsS0FBSyxDQUFFLENBQUE7SUFDOUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgT3V0cHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFNvcnREaXJlY3Rpb24gfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvc29ydFwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQgeyBQYWdlU3RhdGVTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3BhZ2Utc3RhdGUuc2VydmljZVwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZUFib3J0ZXIsIEFib3J0ZWQgfSBmcm9tIFwiLi4vdXRpbHMvcm93LWxpc3QudXRpbFwiO1xuaW1wb3J0IHsgQ29kZURlc2NyaXB0aW9uIH0gZnJvbSBcIi4uL3B1YmxpYy1hcGlcIjtcblxuZXhwb3J0IHR5cGUgUm93TGlzdFN0YXRlPEY+ID0ge1xuICAgIGZpbHRlcjogRlxuICAgIHBhZ2VTaXplOiBudW1iZXJcbiAgICBwYWdlTnVtYmVyOiBudW1iZXJcbiAgICBzb3J0QWN0aXZlOiBzdHJpbmcgXG4gICAgc29ydERpcmVjdGlvbjogU29ydERpcmVjdGlvblxufVxuXG5leHBvcnQgdHlwZSBMb2FkUm93TGlzdFJlc3VsdDxSPiA9IHsgXG4gICAgcm93czogUltdLCBcbiAgICB0b3RhbFJvd0NvdW50OiBudW1iZXIgXG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFJvd0xpc3RCYXNlPEYsUixMPWFueT4gaW1wbGVtZW50cyBSb3dMaXN0U3RhdGU8Rj4sIEFmdGVyVmlld0luaXQge1xuICAgIEBPdXRwdXQoKSBpc0xvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KClcbiAgICBcbiAgICBwcml2YXRlIF9pc0xvYWRpbmcgPSBmYWxzZVxuICAgIGdldCBpc0xvYWRpbmcoKSB7IHJldHVybiB0aGlzLl9pc0xvYWRpbmcgfVxuICAgIHNldCBpc0xvYWRpbmcoIHY6IGJvb2xlYW4gKSB7IFxuICAgICAgICBpZiAoIHYgPT0gdGhpcy5faXNMb2FkaW5nICkgcmV0dXJuICAgICAgICBcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nID0gdiBcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdDaGFuZ2UuZW1pdCggdiApXG4gICAgfSAgXG5cbiAgICByb3dzOiBSW10gPSBbXVxuICAgIHRvdGFsUm93Q291bnQ6IG51bWJlclxuXG4gICAgZmlsdGVyOiBGXG4gICAgcGFnZVNpemU6IG51bWJlclxuICAgIHBhZ2VOdW1iZXI6IG51bWJlclxuICAgIHNvcnRBY3RpdmU6IHN0cmluZyBcbiAgICBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uXG5cbiAgICBzb3J0Q29sdW1uczogQ29kZURlc2NyaXB0aW9uW11cbiAgICBzdW1tYXJ5TW9iaWxlOiBzdHJpbmdcbiAgICBzaG93UGFnaW5nTW9iaWxlOiBib29sZWFuXG4gICAgXG4gICAgcGFnZVN0YXRlU2VydmljZSA9IGluamVjdCggUGFnZVN0YXRlU2VydmljZSApXG4gICAgY2hhbmdlRGV0ZWN0b3JSZWYgPSBpbmplY3QoIENoYW5nZURldGVjdG9yUmVmIClcblxuICAgIHByaXZhdGUgX2xvYWRSb3dMaXN0UmVxdWVzdDogT2JzZXJ2YWJsZUFib3J0ZXI8TD5cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVSb3dMaXN0KClcbiAgICB9XG5cbiAgICBpbml0aWFsaXplUm93TGlzdCgpIHtcbiAgICAgICAgdGhpcy5sb2FkUGFnZVN0YXRlKCkgICAgICAgIFxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoUm93TGlzdCgpXG4gICAgfVxuXG4gICAgcmVmcmVzaFJvd0xpc3QoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZVxuXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2FkUm93TGlzdCgpXG4gICAgICAgICAgICB9IClcbiAgICAgICAgICAgIC50aGVuKCAoIHsgcm93cywgdG90YWxSb3dDb3VudCB9ICkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IHJvd3NcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUm93Q291bnQgPSB0b3RhbFJvd0NvdW50XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAuY2F0Y2goICggZSApID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIGUgaW5zdGFuY2VvZiBBYm9ydGVkICkgcmV0dXJuXG5cbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRSb3dMaXN0UGFnZUZhaWxlZCggZSApXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgfSApXG4gICAgICAgICAgICAuZmluYWxseSggKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3VtbWFyeU1vYmlsZSgpXG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH0gKVxuICAgIH1cblxuICAgIGxvYWRSb3dMaXN0KCk6IFByb21pc2U8TG9hZFJvd0xpc3RSZXN1bHQ8Uj4+IHtcbiAgICAgICAgaWYgKCB0aGlzLl9sb2FkUm93TGlzdFJlcXVlc3QgKVxuICAgICAgICAgICAgdGhpcy5fbG9hZFJvd0xpc3RSZXF1ZXN0LmFib3J0KClcblxuICAgICAgICB0aGlzLl9sb2FkUm93TGlzdFJlcXVlc3QgPSBuZXcgT2JzZXJ2YWJsZUFib3J0ZXI8TD4oICgpID0+IHsgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSb3dMaXN0UGFnZSgpXG4gICAgICAgIH0gKVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb2FkUm93TGlzdFJlcXVlc3QucHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oIHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVJvd0xpc3RQYWdlKCByZXMgKVxuICAgICAgICAgICAgfSApXG4gICAgfVxuXG4gICAgZmV0Y2hSb3dMaXN0UGFnZSgpOiBPYnNlcnZhYmxlPEw+IHtcbiAgICAgICAgdGhyb3cgJ3VuaW1wbGVtZW50ZWQnXG4gICAgfVxuICAgIFxuICAgIGRpc3BsYXlSb3dMaXN0UGFnZSggcmVzOiBMICk6IExvYWRSb3dMaXN0UmVzdWx0PFI+IHtcbiAgICAgICAgdGhyb3cgJ3VuaW1wbGVtZW50ZWQnXG4gICAgfVxuXG4gICAgbG9hZFJvd0xpc3RQYWdlRmFpbGVkKCBlcnJvciApIHtcbiAgICAgICAgY29uc29sZS53YXJuKCBlcnJvciApXG4gICAgICAgIHRoaXMucm93cyA9IFtdXG4gICAgICAgIHRoaXMudG90YWxSb3dDb3VudCA9IDBcbiAgICB9XG5cbiAgICBvbkZpbHRlckNoYW5nZSggZXYgKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyID0gZXZcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMVxuXG4gICAgICAgIHRoaXMucmVmcmVzaFJvd0xpc3QoKVxuICAgICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVQYWdlU3RhdGUoKVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3VtbWFyeU1vYmlsZSgpXG4gICAgICAgICAgICB9IClcbiAgICB9XG5cbiAgICBvblNvcnRDaGFuZ2UoIGV2ICkge1xuICAgICAgICB0aGlzLnNvcnRBY3RpdmUgPSBldi5hY3RpdmVcbiAgICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uID0gZXYuZGlyZWN0aW9uXG4gICAgICAgIHRoaXMucGFnZU51bWJlciA9IDFcblxuICAgICAgICB0aGlzLnJlZnJlc2hSb3dMaXN0KClcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUGFnZVN0YXRlKClcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN1bW1hcnlNb2JpbGUoKVxuICAgICAgICAgICAgfSApXG4gICAgfVxuXG4gICAgb25QYWdlTnVtYmVyQ2hhbmdlKCBldiApIHtcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gZXZcblxuICAgICAgICB0aGlzLnJlZnJlc2hSb3dMaXN0KClcbiAgICAgICAgICAgIC50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlUGFnZVN0YXRlKClcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVN1bW1hcnlNb2JpbGUoKVxuICAgICAgICAgICAgfSApXG4gICAgfVxuXG4gICAgb25QYWdlU2l6ZUNoYW5nZSggZXYgKSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBldiBcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMVxuXG4gICAgICAgIHRoaXMucmVmcmVzaFJvd0xpc3QoKVxuICAgICAgICAgICAgLnRoZW4oICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVQYWdlU3RhdGUoKVxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3VtbWFyeU1vYmlsZSgpXG4gICAgICAgICAgICB9IClcbiAgICB9XG5cbiAgICB1cGRhdGVTdW1tYXJ5TW9iaWxlKCkge1xuICAgICAgICBbIHRoaXMuc3VtbWFyeU1vYmlsZSwgdGhpcy5zaG93UGFnaW5nTW9iaWxlIF0gPSBtYWtlU3VtbWFyeSggdGhpcy50b3RhbFJvd0NvdW50LCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUgKVxuICAgIH1cblxuICAgIGdldCBpbml0aWFsUGFnZVN0YXRlKCk6IFJvd0xpc3RTdGF0ZTxGPiB7XG4gICAgICAgIHRocm93ICd1bmltcGxlbWVudGVkJ1xuICAgIH1cblxuICAgIGxvYWRQYWdlU3RhdGUoKSB7XG4gICAgICAgIGxldCBzdGF0ZSA9IHRoaXMucGFnZVN0YXRlU2VydmljZS5nZXRQYWdlU3RhdGU8Um93TGlzdFN0YXRlPEY+PiggdGhpcy5jb25zdHJ1Y3RvciwgdGhpcy5pbml0aWFsUGFnZVN0YXRlIClcblxuICAgICAgICB0aGlzLmZpbHRlciA9IHN0YXRlLmZpbHRlclxuICAgICAgICB0aGlzLnBhZ2VTaXplID0gc3RhdGUucGFnZVNpemVcbiAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gc3RhdGUucGFnZU51bWJlclxuICAgICAgICB0aGlzLnNvcnRBY3RpdmUgPSBzdGF0ZS5zb3J0QWN0aXZlXG4gICAgICAgIHRoaXMuc29ydERpcmVjdGlvbiA9IHN0YXRlLnNvcnREaXJlY3Rpb25cbiAgICB9XG5cbiAgICBzYXZlUGFnZVN0YXRlKCkge1xuICAgICAgICBsZXQgc3RhdGU6IFJvd0xpc3RTdGF0ZTxGPiA9IEpTT04ucGFyc2UoIEpTT04uc3RyaW5naWZ5KCB7XG4gICAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVyLFxuICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICBwYWdlTnVtYmVyOiB0aGlzLnBhZ2VOdW1iZXIsXG4gICAgICAgICAgICBzb3J0QWN0aXZlOiB0aGlzLnNvcnRBY3RpdmUsXG4gICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnNvcnREaXJlY3Rpb24sXG4gICAgICAgIH0gKSApXG4gICAgICAgIFxuICAgICAgICB0aGlzLnBhZ2VTdGF0ZVNlcnZpY2Uuc2V0UGFnZVN0YXRlPFJvd0xpc3RTdGF0ZTxGPj4oIHRoaXMuY29uc3RydWN0b3IsIHN0YXRlIClcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlU3VtbWFyeSggcm93Q291bnQsIHBhZ2VOdW1iZXIsIHBhZ2VTaXplICk6IFsgc3RyaW5nLCBib29sZWFuIF0ge1xuICAgIGlmICggcm93Q291bnQgJiYgcGFnZVNpemUgKSB7XG4gICAgICAgIGxldCBwYWdlQ291bnQgPSBNYXRoLmNlaWwoIHJvd0NvdW50IC8gcGFnZVNpemUgKVxuXG4gICAgICAgIGxldCBmaXJzdCA9ICggTWF0aC5taW4oIHBhZ2VDb3VudCwgcGFnZU51bWJlciApIC0gMSApICogcGFnZVNpemUgKyAxXG4gICAgICAgIGxldCBsYXN0ID0gTWF0aC5taW4oIGZpcnN0ICsgcGFnZVNpemUgLSAxLCByb3dDb3VudCApXG5cbiAgICAgICAgcmV0dXJuIFsgYFNob3dpbmcgJHsgZmlyc3QgfSB0byAkeyBsYXN0IH0gb2YgJHsgcm93Q291bnQgfWAsIHRydWUgXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFsgXCJObyByZWNvcmRzIHRvIGRpc3BsYXkuXCIsIGZhbHNlIF1cbiAgICB9XG59XG4iXX0=