@indice/ng-components 0.2.146 → 0.2.147

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 (159) hide show
  1. package/_styles.css +1 -1
  2. package/{esm2015/indice-ng-components.js → esm2020/indice-ng-components.mjs} +0 -0
  3. package/{esm2015/lib/controls/avatar-initials/avatar-initials.component.js → esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs} +5 -8
  4. package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
  5. package/esm2020/lib/controls/combobox/combobox.component.mjs +96 -0
  6. package/esm2020/lib/controls/date-picker/date-picker.component.mjs +260 -0
  7. package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +68 -0
  8. package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +36 -0
  9. package/esm2020/lib/controls/language-selection/language-selection.component.mjs +31 -0
  10. package/{esm2015/lib/controls/list-view/list-column.component.js → esm2020/lib/controls/list-view/list-column.component.mjs} +4 -4
  11. package/{esm2015/lib/controls/list-view/list-details-section.component.js → esm2020/lib/controls/list-view/list-details-section.component.mjs} +4 -4
  12. package/{esm2015/lib/controls/list-view/list-tile.component.js → esm2020/lib/controls/list-view/list-tile.component.mjs} +4 -4
  13. package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
  14. package/esm2020/lib/controls/list-view/list-view.component.mjs +183 -0
  15. package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +42 -0
  16. package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +73 -0
  17. package/esm2020/lib/controls/pager/pager.component.mjs +130 -0
  18. package/esm2020/lib/controls/side-pane/side-pane.component.mjs +72 -0
  19. package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +25 -0
  20. package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +59 -0
  21. package/esm2020/lib/controls/tabs/lib-tab.component.mjs +57 -0
  22. package/esm2020/lib/controls/toaster/toaster-container.component.mjs +28 -0
  23. package/esm2020/lib/controls/toaster/toaster.component.mjs +31 -0
  24. package/esm2020/lib/controls/toggle/toggle.component.mjs +64 -0
  25. package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
  26. package/{esm2015/lib/directives/click-outside.directive.js → esm2020/lib/directives/click-outside.directive.mjs} +4 -4
  27. package/{esm2015/lib/directives/dynamic-component-host.directive.js → esm2020/lib/directives/dynamic-component-host.directive.mjs} +4 -4
  28. package/esm2020/lib/helpers/base-list.component.mjs +181 -0
  29. package/esm2020/lib/icons.mjs +34 -0
  30. package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
  31. package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +131 -0
  32. package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +103 -0
  33. package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +47 -0
  34. package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +80 -0
  35. package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +49 -0
  36. package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +98 -0
  37. package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
  38. package/esm2020/lib/ng-components.module.mjs +245 -0
  39. package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +30 -0
  40. package/{esm2015/lib/pages/auth/auth-renew/auth-renew.component.js → esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs} +4 -4
  41. package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
  42. package/esm2020/lib/pages/http-status/error/error.component.mjs +17 -0
  43. package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
  44. package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
  45. package/{esm2015/lib/pipes/address.pipe.js → esm2020/lib/pipes/address.pipe.mjs} +4 -4
  46. package/{esm2015/lib/pipes/duration-format.pipe.js → esm2020/lib/pipes/duration-format.pipe.mjs} +4 -4
  47. package/{esm2015/lib/services/component-loader/component-loader-options.class.js → esm2020/lib/services/component-loader/component-loader-options.class.mjs} +0 -0
  48. package/esm2020/lib/services/component-loader/component-loader.class.mjs +188 -0
  49. package/{esm2015/lib/services/component-loader/component-loader.factory.js → esm2020/lib/services/component-loader/component-loader.factory.mjs} +4 -4
  50. package/{esm2015/lib/services/component-loader/content-ref.class.js → esm2020/lib/services/component-loader/content-ref.class.mjs} +0 -0
  51. package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
  52. package/esm2020/lib/services/modal-service/modal-container-component.mjs +126 -0
  53. package/{esm2015/lib/services/modal-service/modal-options.class.js → esm2020/lib/services/modal-service/modal-options.class.mjs} +4 -4
  54. package/esm2020/lib/services/modal-service/modal-service.mjs +219 -0
  55. package/{esm2015/lib/services/modal-service/modal-styles.class.js → esm2020/lib/services/modal-service/modal-styles.class.mjs} +0 -0
  56. package/{esm2015/lib/services/modal-service/modal.class.js → esm2020/lib/services/modal-service/modal.class.mjs} +4 -4
  57. package/{esm2015/lib/services/toaster.service.js → esm2020/lib/services/toaster.service.mjs} +4 -4
  58. package/esm2020/lib/tokens.mjs +7 -0
  59. package/{esm2015/lib/types.js → esm2020/lib/types.mjs} +1 -1
  60. package/esm2020/public-api.mjs +56 -0
  61. package/fesm2015/indice-ng-components.mjs +3629 -0
  62. package/fesm2015/indice-ng-components.mjs.map +1 -0
  63. package/fesm2020/indice-ng-components.mjs +3572 -0
  64. package/fesm2020/indice-ng-components.mjs.map +1 -0
  65. package/{indice-ng-components.d.ts → index.d.ts} +0 -0
  66. package/lib/controls/avatar-initials/avatar-initials.component.d.ts +1 -1
  67. package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +1 -1
  68. package/lib/controls/combobox/combobox.component.d.ts +29 -0
  69. package/lib/controls/date-picker/date-picker.component.d.ts +1 -1
  70. package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +1 -1
  71. package/lib/controls/kpi-tile/kpi-tile.component.d.ts +1 -1
  72. package/lib/controls/language-selection/language-selection.component.d.ts +1 -1
  73. package/lib/controls/list-view/list-column.component.d.ts +1 -1
  74. package/lib/controls/list-view/list-details-section.component.d.ts +1 -1
  75. package/lib/controls/list-view/list-tile.component.d.ts +1 -1
  76. package/lib/controls/list-view/list-view-empty-state.component.d.ts +1 -1
  77. package/lib/controls/list-view/list-view.component.d.ts +1 -1
  78. package/lib/controls/nav-links-list/nav-links-list.component.d.ts +1 -1
  79. package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +1 -1
  80. package/lib/controls/pager/pager.component.d.ts +1 -1
  81. package/lib/controls/side-pane/side-pane.component.d.ts +1 -1
  82. package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +1 -1
  83. package/lib/controls/tabs/lib-tab-group.component.d.ts +1 -1
  84. package/lib/controls/tabs/lib-tab.component.d.ts +4 -5
  85. package/lib/controls/toaster/toaster-container.component.d.ts +1 -1
  86. package/lib/controls/toaster/toaster.component.d.ts +1 -1
  87. package/lib/controls/toggle/toggle.component.d.ts +1 -1
  88. package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +1 -1
  89. package/lib/directives/click-outside.directive.d.ts +1 -1
  90. package/lib/directives/dynamic-component-host.directive.d.ts +1 -1
  91. package/lib/helpers/base-list.component.d.ts +1 -1
  92. package/lib/icons.d.ts +2 -0
  93. package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +1 -1
  94. package/lib/layouts/shell/shell-header/shell-header.component.d.ts +1 -1
  95. package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +1 -1
  96. package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +1 -1
  97. package/lib/layouts/views/form-layout/form-layout.component.d.ts +1 -1
  98. package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +1 -1
  99. package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +1 -1
  100. package/lib/layouts/views/view-layout/view-layout.component.d.ts +1 -1
  101. package/lib/ng-components.module.d.ts +28 -27
  102. package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +1 -1
  103. package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +1 -1
  104. package/lib/pages/auth/logged-out/logged-out.component.d.ts +1 -1
  105. package/lib/pages/http-status/error/error.component.d.ts +1 -1
  106. package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +1 -1
  107. package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +1 -1
  108. package/lib/pipes/address.pipe.d.ts +1 -1
  109. package/lib/pipes/duration-format.pipe.d.ts +1 -1
  110. package/lib/services/modal-service/modal-backdrop-component.d.ts +1 -1
  111. package/lib/services/modal-service/modal-container-component.d.ts +1 -1
  112. package/lib/tokens.d.ts +2 -0
  113. package/lib/types.d.ts +2 -0
  114. package/package.json +25 -12
  115. package/public-api.d.ts +2 -1
  116. package/bundles/indice-ng-components.umd.js +0 -4181
  117. package/bundles/indice-ng-components.umd.js.map +0 -1
  118. package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +0 -23
  119. package/esm2015/lib/controls/date-picker/date-picker.component.js +0 -269
  120. package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +0 -72
  121. package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +0 -39
  122. package/esm2015/lib/controls/language-selection/language-selection.component.js +0 -35
  123. package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +0 -32
  124. package/esm2015/lib/controls/list-view/list-view.component.js +0 -186
  125. package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +0 -45
  126. package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +0 -76
  127. package/esm2015/lib/controls/pager/pager.component.js +0 -133
  128. package/esm2015/lib/controls/side-pane/side-pane.component.js +0 -76
  129. package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +0 -29
  130. package/esm2015/lib/controls/tabs/lib-tab-group.component.js +0 -60
  131. package/esm2015/lib/controls/tabs/lib-tab.component.js +0 -57
  132. package/esm2015/lib/controls/toaster/toaster-container.component.js +0 -31
  133. package/esm2015/lib/controls/toaster/toaster.component.js +0 -34
  134. package/esm2015/lib/controls/toggle/toggle.component.js +0 -68
  135. package/esm2015/lib/controls/user-profile-menu/user-profile-menu.component.js +0 -75
  136. package/esm2015/lib/helpers/base-list.component.js +0 -182
  137. package/esm2015/lib/icons.js +0 -32
  138. package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +0 -22
  139. package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +0 -136
  140. package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +0 -108
  141. package/esm2015/lib/layouts/shell/shell-sidebar/shell-sidebar.component.js +0 -50
  142. package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +0 -85
  143. package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +0 -53
  144. package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +0 -101
  145. package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +0 -110
  146. package/esm2015/lib/ng-components.module.js +0 -242
  147. package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +0 -34
  148. package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +0 -32
  149. package/esm2015/lib/pages/http-status/error/error.component.js +0 -20
  150. package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +0 -18
  151. package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +0 -17
  152. package/esm2015/lib/services/component-loader/component-loader.class.js +0 -192
  153. package/esm2015/lib/services/modal-service/modal-backdrop-component.js +0 -44
  154. package/esm2015/lib/services/modal-service/modal-container-component.js +0 -128
  155. package/esm2015/lib/services/modal-service/modal-service.js +0 -220
  156. package/esm2015/lib/tokens.js +0 -6
  157. package/esm2015/public-api.js +0 -55
  158. package/fesm2015/indice-ng-components.js +0 -3600
  159. package/fesm2015/indice-ng-components.js.map +0 -1
@@ -0,0 +1,42 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/router";
5
+ export class NavLinksListComponent {
6
+ constructor() {
7
+ // tslint:disable-next-line:no-input-rename
8
+ this.navLinkClass = 'nav-link';
9
+ // tslint:disable-next-line:no-input-rename
10
+ this.navLinkActiveClass = 'nav-link-active';
11
+ // tslint:disable-next-line:no-input-rename
12
+ this.containerClass = undefined;
13
+ // tslint:disable-next-line:no-input-rename
14
+ this.showIcons = false;
15
+ }
16
+ ngOnInit() {
17
+ }
18
+ }
19
+ NavLinksListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: NavLinksListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
20
+ NavLinksListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: NavLinksListComponent, selector: "lib-nav-links-list", inputs: { links: "links", activeFragment: ["active-fragment", "activeFragment"], navLinkClass: ["link-class", "navLinkClass"], navLinkActiveClass: ["link-active-class", "navLinkActiveClass"], containerClass: ["container-class", "containerClass"], showIcons: ["show-icons", "showIcons"] }, ngImport: i0, template: "\n<div [class]=\"containerClass ?? 'nav-link-list-container'\">\n <div class=\"nav-link-list-container-inner\">\n <ng-container *ngFor=\"let link of links | async\">\n <ng-container [ngSwitch]=\"link.type\">\n <a *ngSwitchCase=\"'router'\"\n href=\"#\"\n [routerLink]=\"[link.path]\"\n [routerLinkActive]=\"navLinkActiveClass\"\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon + ' mr-3'\"></i>{{ link.text }}\n </a>\n <a *ngSwitchCase=\"'external'\"\n [href]=\"link.path\"\n [attr.target]=\"link.external ? '_blank' : '_self'\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon+ ' mr-3'\"></i>{{ link.text }}\n </a>\n <a *ngSwitchCase=\"'fragment'\"\n routerLink=\".\"\n [fragment]=\"link.path\"\n [class.active]=\"(activeFragment | async) === link.path\"\n [routerLinkActive]=\"navLinkActiveClass\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon+ ' mr-3'\"></i>{{ link.text }}\n </a>\n </ng-container>\n </ng-container>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: NavLinksListComponent, decorators: [{
22
+ type: Component,
23
+ args: [{ selector: 'lib-nav-links-list', template: "\n<div [class]=\"containerClass ?? 'nav-link-list-container'\">\n <div class=\"nav-link-list-container-inner\">\n <ng-container *ngFor=\"let link of links | async\">\n <ng-container [ngSwitch]=\"link.type\">\n <a *ngSwitchCase=\"'router'\"\n href=\"#\"\n [routerLink]=\"[link.path]\"\n [routerLinkActive]=\"navLinkActiveClass\"\n [routerLinkActiveOptions]=\"{ exact: link.exact }\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon + ' mr-3'\"></i>{{ link.text }}\n </a>\n <a *ngSwitchCase=\"'external'\"\n [href]=\"link.path\"\n [attr.target]=\"link.external ? '_blank' : '_self'\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon+ ' mr-3'\"></i>{{ link.text }}\n </a>\n <a *ngSwitchCase=\"'fragment'\"\n routerLink=\".\"\n [fragment]=\"link.path\"\n [class.active]=\"(activeFragment | async) === link.path\"\n [routerLinkActive]=\"navLinkActiveClass\"\n [class]=\"navLinkClass\">\n <i *ngIf=\"showIcons && link.icon\" [class]=\"link.icon+ ' mr-3'\"></i>{{ link.text }}\n </a>\n </ng-container>\n </ng-container>\n </div>\n</div>\n" }]
24
+ }], ctorParameters: function () { return []; }, propDecorators: { links: [{
25
+ type: Input
26
+ }], activeFragment: [{
27
+ type: Input,
28
+ args: ['active-fragment']
29
+ }], navLinkClass: [{
30
+ type: Input,
31
+ args: ['link-class']
32
+ }], navLinkActiveClass: [{
33
+ type: Input,
34
+ args: ['link-active-class']
35
+ }], containerClass: [{
36
+ type: Input,
37
+ args: ['container-class']
38
+ }], showIcons: [{
39
+ type: Input,
40
+ args: ['show-icons']
41
+ }] } });
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2LWxpbmtzLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL25hdi1saW5rcy1saXN0L25hdi1saW5rcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9uYXYtbGlua3MtbGlzdC9uYXYtbGlua3MtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQzs7OztBQU96RCxNQUFNLE9BQU8scUJBQXFCO0lBYWhDO1FBUkEsMkNBQTJDO1FBQ3RCLGlCQUFZLEdBQW9CLFVBQVUsQ0FBQztRQUNoRSwyQ0FBMkM7UUFDZix1QkFBa0IsR0FBc0IsaUJBQWlCLENBQUM7UUFDdEYsMkNBQTJDO1FBQ2pCLG1CQUFjLEdBQWtDLFNBQVMsQ0FBQztRQUNwRiwyQ0FBMkM7UUFDdEIsY0FBUyxHQUF3QixLQUFLLENBQUM7SUFDNUMsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7a0hBaEJVLHFCQUFxQjtzR0FBckIscUJBQXFCLDJWQ1JsQywreENBK0JBOzJGRHZCYSxxQkFBcUI7a0JBSmpDLFNBQVM7K0JBQ0Usb0JBQW9COzBFQUtyQixLQUFLO3NCQUFiLEtBQUs7Z0JBRW9CLGNBQWM7c0JBQXZDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUVILFlBQVk7c0JBQWhDLEtBQUs7dUJBQUMsWUFBWTtnQkFFUyxrQkFBa0I7c0JBQTdDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQUVBLGNBQWM7c0JBQXZDLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUVILFNBQVM7c0JBQTdCLEtBQUs7dUJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2TGluayB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5hdi1saW5rcy1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL25hdi1saW5rcy1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOYXZMaW5rc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGxpbmtzOiBPYnNlcnZhYmxlPE5hdkxpbmtbXT4gfCB1bmRlZmluZWQ7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdhY3RpdmUtZnJhZ21lbnQnKSBhY3RpdmVGcmFnbWVudDogT2JzZXJ2YWJsZTxzdHJpbmc+IHwgdW5kZWZpbmVkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnbGluay1jbGFzcycpIG5hdkxpbmtDbGFzczogc3RyaW5nIHwgc3RyaW5nID0gJ25hdi1saW5rJztcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ2xpbmstYWN0aXZlLWNsYXNzJykgbmF2TGlua0FjdGl2ZUNsYXNzOiBzdHJpbmcgfCBzdHJpbmdbXSA9ICduYXYtbGluay1hY3RpdmUnO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnY29udGFpbmVyLWNsYXNzJykgY29udGFpbmVyQ2xhc3M6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnc2hvdy1pY29ucycpIHNob3dJY29uczogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbn1cbiIsIlxuPGRpdiBbY2xhc3NdPVwiY29udGFpbmVyQ2xhc3MgPz8gJ25hdi1saW5rLWxpc3QtY29udGFpbmVyJ1wiPlxuICA8ZGl2IGNsYXNzPVwibmF2LWxpbmstbGlzdC1jb250YWluZXItaW5uZXJcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBsaW5rIG9mIGxpbmtzIHwgYXN5bmNcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImxpbmsudHlwZVwiPlxuICAgICAgICA8YSAqbmdTd2l0Y2hDYXNlPVwiJ3JvdXRlcidcIlxuICAgICAgICAgIGhyZWY9XCIjXCJcbiAgICAgICAgICBbcm91dGVyTGlua109XCJbbGluay5wYXRoXVwiXG4gICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwibmF2TGlua0FjdGl2ZUNsYXNzXCJcbiAgICAgICAgICBbcm91dGVyTGlua0FjdGl2ZU9wdGlvbnNdPVwieyBleGFjdDogbGluay5leGFjdCB9XCJcbiAgICAgICAgICBbY2xhc3NdPVwibmF2TGlua0NsYXNzXCI+XG4gICAgICAgICAgPGkgKm5nSWY9XCJzaG93SWNvbnMgJiYgbGluay5pY29uXCIgW2NsYXNzXT1cImxpbmsuaWNvbiArICcgbXItMydcIj48L2k+e3sgbGluay50ZXh0IH19XG4gICAgICAgIDwvYT5cbiAgICAgICAgPGEgKm5nU3dpdGNoQ2FzZT1cIidleHRlcm5hbCdcIlxuICAgICAgICAgIFtocmVmXT1cImxpbmsucGF0aFwiXG4gICAgICAgICAgW2F0dHIudGFyZ2V0XT1cImxpbmsuZXh0ZXJuYWwgPyAnX2JsYW5rJyA6ICdfc2VsZidcIlxuICAgICAgICAgIFtjbGFzc109XCJuYXZMaW5rQ2xhc3NcIj5cbiAgICAgICAgICA8aSAqbmdJZj1cInNob3dJY29ucyAmJiBsaW5rLmljb25cIiBbY2xhc3NdPVwibGluay5pY29uKyAnIG1yLTMnXCI+PC9pPnt7IGxpbmsudGV4dCB9fVxuICAgICAgICA8L2E+XG4gICAgICAgIDxhICpuZ1N3aXRjaENhc2U9XCInZnJhZ21lbnQnXCJcbiAgICAgICAgICByb3V0ZXJMaW5rPVwiLlwiXG4gICAgICAgICAgW2ZyYWdtZW50XT1cImxpbmsucGF0aFwiXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCIoYWN0aXZlRnJhZ21lbnQgfCBhc3luYykgPT09IGxpbmsucGF0aFwiXG4gICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwibmF2TGlua0FjdGl2ZUNsYXNzXCJcbiAgICAgICAgICBbY2xhc3NdPVwibmF2TGlua0NsYXNzXCI+XG4gICAgICAgICAgPGkgKm5nSWY9XCJzaG93SWNvbnMgJiYgbGluay5pY29uXCIgW2NsYXNzXT1cImxpbmsuaWNvbisgJyBtci0zJ1wiPjwvaT57eyBsaW5rLnRleHQgfX1cbiAgICAgICAgPC9hPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,73 @@
1
+ import { Component, Inject } from '@angular/core';
2
+ import { APP_LINKS, APP_NOTIFICATIONS } from '../../tokens';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common";
5
+ import * as i2 from "@angular/router";
6
+ import * as i3 from "../../directives/click-outside.directive";
7
+ export class NotificationsIndicatorComponent {
8
+ constructor(notifications, links) {
9
+ this.notifications = notifications;
10
+ this.links = links;
11
+ this.menuExpanded = false;
12
+ this.unreadCount = 0;
13
+ this.items = [];
14
+ this.inboxAction = undefined;
15
+ this.newArrival = false;
16
+ }
17
+ ngOnDestroy() {
18
+ if (this.notificationsSub$) {
19
+ this.notificationsSub$.unsubscribe();
20
+ }
21
+ }
22
+ ngOnInit() {
23
+ this.links['notifications'].subscribe(notificationsLink => {
24
+ this.allNotificationsLink = notificationsLink;
25
+ });
26
+ this.notificationsSub$ = this.notifications.messages.subscribe(result => {
27
+ if (result.items) {
28
+ this.newArrival = true;
29
+ this.unreadCount = result.count;
30
+ this.items = result.items;
31
+ setTimeout(() => { this.newArrival = false; }, 1000);
32
+ }
33
+ });
34
+ }
35
+ doInboxAction() {
36
+ if (this.notifications.inboxAction) {
37
+ this.notifications.inboxAction();
38
+ }
39
+ else {
40
+ this.menuExpanded = !this.menuExpanded;
41
+ }
42
+ this.unreadCount = 0;
43
+ }
44
+ removeItem(index) {
45
+ this.items.splice(index, 1);
46
+ }
47
+ // this.notificationsSub$ = this.links.notifications?.pipe(map(result => {
48
+ // this.allItemsLink = result.allNotifications;
49
+ // this.items = result.items;
50
+ // this.unreadCount = result.count;
51
+ // }));
52
+ // [this.notificationsLinksPath] as Observable<NotificationNavLink[]>;
53
+ // this.allNotificationsLink = this.links[this.allNotificationsLinkPath] as Observable<NavLink>;
54
+ // this.unreadNotificationsCountObs = this.links[this.notificationsCounterLinksPath] as Observable<number>;
55
+ // this.getUnreadNotificationsCount();
56
+ // tslint:disable-next-line:typedef
57
+ onClickOutside($event) {
58
+ this.menuExpanded = false;
59
+ }
60
+ }
61
+ NotificationsIndicatorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: NotificationsIndicatorComponent, deps: [{ token: APP_NOTIFICATIONS }, { token: APP_LINKS }], target: i0.ɵɵFactoryTarget.Component });
62
+ NotificationsIndicatorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: NotificationsIndicatorComponent, selector: "lib-notifications-indicator", ngImport: i0, template: "<div class=\"relative\"\n(clickOutside)=\"onClickOutside($event)\">\n <!-- Notifications Button -->\n <button type=\"button\"\n (click)=\"doInboxAction()\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"sr-only\">View notifications</span>\n <span class=\"avatar-container\">\n <span class=\"avatar-text\">\n <i class=\"ms-Icon hover:text-blue-400\"\n [class.ms-Icon--MessageFill]=\"unreadCount > 0\"\n [class.text-sky-400]=\"unreadCount > 0\"\n [class.animate-notification]=\"newArrival\"\n [class.ms-Icon--Message]=\"unreadCount === 0\">\n </i>\n </span>\n <span\n *ngIf=\"unreadCount > 0\"\n [class.animate-pulse]=\"newArrival\"\n class=\"absolute top-0 right-0 inline-flex items-center justify-center -mt-1 ml-1 text-xs leading-none text-gray-100 ordinal\">\n {{ unreadCount }}\n </span>\n </span>\n </button>\n\n <!-- Notifications dropdown -->\n <div *ngIf=\"menuExpanded\" class=\"header-notifications-dropdown-with-username\" role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"messages-menu\">\n <div class=\"max-h-64 overflow-y-auto notification-messages min-h\">\n <ng-container *ngIf=\"!items; else messagesDropDown\" class=\"py-5\">\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\n </ng-container>\n <ng-template #messagesDropDown>\n <ul class=\"pr-1.5\">\n <ng-container *ngIf=\"items; else loading\">\n <ng-container *ngIf=\"items.length <= 0\" class=\"py-5\">\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\n </ng-container>\n <ng-container *ngFor=\"let message of items; let i = index\">\n <li class=\"mb-2\" [ngClass]=\"{ 'border-l-2 border-blue-500 bg-blue-50 hover:bg-blue-50': !message.data.isRead }\">\n <div class=\"flex justify-between\">\n <div class=\"flex-grow\">\n <a\n [routerLink]=\"message.path\"\n (click)=\"removeItem(i)\"\n class=\"notifications-nav-link grid\"\n [ngClass]=\"!message.data.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\"\n >\n <div class=\"flex flex-col\">\n <div class=\"font-thin tracking-tighter\">\n {{ message.data.creationDate | date: \"EEE, d MMMM\" }}\n </div>\n <div class=\"font-bold\">\n {{ message.data.text }}\n </div>\n </div>\n </a>\n </div>\n </div>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-template #loading>\n <div class=\"h-32 flex items-center justify-center\">\n <div class=\"animate-pulse text-s text-gray-600\">Loading...</div>\n </div>\n </ng-template>\n </ul>\n </ng-template>\n </div>\n <div class=\"p-1 rounded-sm\">\n <a [routerLink]=\"allNotificationsLink!.path\">\n <button type=\"button\" class=\"header-notifications-dropdown-view-all-button\">{{allNotificationsLink!.text}}</button>\n </a>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "preserveFragment", "skipLocationChange", "replaceUrl", "state", "relativeTo", "routerLink"] }, { kind: "directive", type: i3.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: NotificationsIndicatorComponent, decorators: [{
64
+ type: Component,
65
+ args: [{ selector: 'lib-notifications-indicator', template: "<div class=\"relative\"\n(clickOutside)=\"onClickOutside($event)\">\n <!-- Notifications Button -->\n <button type=\"button\"\n (click)=\"doInboxAction()\"\n aria-expanded=\"false\"\n aria-haspopup=\"true\">\n <span class=\"sr-only\">View notifications</span>\n <span class=\"avatar-container\">\n <span class=\"avatar-text\">\n <i class=\"ms-Icon hover:text-blue-400\"\n [class.ms-Icon--MessageFill]=\"unreadCount > 0\"\n [class.text-sky-400]=\"unreadCount > 0\"\n [class.animate-notification]=\"newArrival\"\n [class.ms-Icon--Message]=\"unreadCount === 0\">\n </i>\n </span>\n <span\n *ngIf=\"unreadCount > 0\"\n [class.animate-pulse]=\"newArrival\"\n class=\"absolute top-0 right-0 inline-flex items-center justify-center -mt-1 ml-1 text-xs leading-none text-gray-100 ordinal\">\n {{ unreadCount }}\n </span>\n </span>\n </button>\n\n <!-- Notifications dropdown -->\n <div *ngIf=\"menuExpanded\" class=\"header-notifications-dropdown-with-username\" role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"messages-menu\">\n <div class=\"max-h-64 overflow-y-auto notification-messages min-h\">\n <ng-container *ngIf=\"!items; else messagesDropDown\" class=\"py-5\">\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\n </ng-container>\n <ng-template #messagesDropDown>\n <ul class=\"pr-1.5\">\n <ng-container *ngIf=\"items; else loading\">\n <ng-container *ngIf=\"items.length <= 0\" class=\"py-5\">\n <div class=\"notifications-nav-link hover:bg-transparent\">\u0394\u03B5\u03BD \u03AD\u03C7\u03B5\u03C4\u03B5 \u03BD\u03AD\u03B5\u03C2 \u03B5\u03B9\u03B4\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2</div>\n </ng-container>\n <ng-container *ngFor=\"let message of items; let i = index\">\n <li class=\"mb-2\" [ngClass]=\"{ 'border-l-2 border-blue-500 bg-blue-50 hover:bg-blue-50': !message.data.isRead }\">\n <div class=\"flex justify-between\">\n <div class=\"flex-grow\">\n <a\n [routerLink]=\"message.path\"\n (click)=\"removeItem(i)\"\n class=\"notifications-nav-link grid\"\n [ngClass]=\"!message.data.isRead ? ' hover:bg-blue-50' : 'border-b border-gray-100'\"\n >\n <div class=\"flex flex-col\">\n <div class=\"font-thin tracking-tighter\">\n {{ message.data.creationDate | date: \"EEE, d MMMM\" }}\n </div>\n <div class=\"font-bold\">\n {{ message.data.text }}\n </div>\n </div>\n </a>\n </div>\n </div>\n </li>\n </ng-container>\n </ng-container>\n\n <ng-template #loading>\n <div class=\"h-32 flex items-center justify-center\">\n <div class=\"animate-pulse text-s text-gray-600\">Loading...</div>\n </div>\n </ng-template>\n </ul>\n </ng-template>\n </div>\n <div class=\"p-1 rounded-sm\">\n <a [routerLink]=\"allNotificationsLink!.path\">\n <button type=\"button\" class=\"header-notifications-dropdown-view-all-button\">{{allNotificationsLink!.text}}</button>\n </a>\n </div>\n </div>\n</div>\n" }]
66
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
67
+ type: Inject,
68
+ args: [APP_NOTIFICATIONS]
69
+ }] }, { type: undefined, decorators: [{
70
+ type: Inject,
71
+ args: [APP_LINKS]
72
+ }] }]; } });
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9ucy1pbmRpY2F0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL25vdGlmaWNhdGlvbnMtaW5kaWNhdG9yL25vdGlmaWNhdGlvbnMtaW5kaWNhdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9ub3RpZmljYXRpb25zLWluZGljYXRvci9ub3RpZmljYXRpb25zLWluZGljYXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7Ozs7QUFNNUQsTUFBTSxPQUFPLCtCQUErQjtJQVMxQyxZQUE4QyxhQUFnQyxFQUE0QixLQUFVO1FBQXRFLGtCQUFhLEdBQWIsYUFBYSxDQUFtQjtRQUE0QixVQUFLLEdBQUwsS0FBSyxDQUFLO1FBUDdHLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLFVBQUssR0FBVSxFQUFFLENBQUM7UUFHakIsZ0JBQVcsR0FBb0IsU0FBUyxDQUFDO1FBQzFDLGVBQVUsR0FBRyxLQUFLLENBQUM7SUFDOEYsQ0FBQztJQUV6SCxXQUFXO1FBQ1QsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTCxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBeUIsQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUNqRixJQUFJLENBQUMsb0JBQW9CLEdBQUcsaUJBQWlCLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3RFLElBQUksTUFBTSxDQUFDLEtBQUssRUFBQztnQkFDZixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzFCLFVBQVUsQ0FBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUUsQ0FBQzthQUN4RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLGFBQWE7UUFDbEIsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRTtZQUNsQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1NBQ2xDO2FBQU07WUFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUN4QztRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxVQUFVLENBQUMsS0FBWTtRQUM1QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVDLDBFQUEwRTtJQUMxRSxpREFBaUQ7SUFDakQsK0JBQStCO0lBQy9CLHFDQUFxQztJQUNyQyxPQUFPO0lBRVAsc0VBQXNFO0lBQ3RFLGdHQUFnRztJQUNoRywyR0FBMkc7SUFDM0csc0NBQXNDO0lBRXhDLG1DQUFtQztJQUM1QixjQUFjLENBQUMsTUFBVztRQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDOzs0SEExRFUsK0JBQStCLGtCQVN0QixpQkFBaUIsYUFBbUQsU0FBUztnSEFUdEYsK0JBQStCLG1FQ1Q1QyxpcUhBOEVBOzJGRHJFYSwrQkFBK0I7a0JBSjNDLFNBQVM7K0JBQ0UsNkJBQTZCOzswQkFZMUIsTUFBTTsyQkFBQyxpQkFBaUI7OzBCQUE0QyxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQXBwTm90aWZpY2F0aW9ucywgTmF2TGluayB9IGZyb20gJy4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBJbmplY3QsIE9uSW5pdCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBUFBfTElOS1MsIEFQUF9OT1RJRklDQVRJT05TIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLW5vdGlmaWNhdGlvbnMtaW5kaWNhdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL25vdGlmaWNhdGlvbnMtaW5kaWNhdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBOb3RpZmljYXRpb25zSW5kaWNhdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuXG4gIHB1YmxpYyBtZW51RXhwYW5kZWQgPSBmYWxzZTtcbiAgcHVibGljIHVucmVhZENvdW50ID0gMDtcbiAgcHVibGljIGl0ZW1zOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYWxsTm90aWZpY2F0aW9uc0xpbms/OiBOYXZMaW5rO1xuICBwcml2YXRlIG5vdGlmaWNhdGlvbnNTdWIkOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaW5ib3hBY3Rpb246IGFueSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgcHVibGljIG5ld0Fycml2YWwgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoQEluamVjdChBUFBfTk9USUZJQ0FUSU9OUykgcHVibGljIG5vdGlmaWNhdGlvbnM6IElBcHBOb3RpZmljYXRpb25zLCBASW5qZWN0KEFQUF9MSU5LUykgcHVibGljIGxpbmtzOiBhbnkpIHsgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm5vdGlmaWNhdGlvbnNTdWIkKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnNTdWIkLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgKHRoaXMubGlua3NbJ25vdGlmaWNhdGlvbnMnXSBhcyBPYnNlcnZhYmxlPE5hdkxpbms+KS5zdWJzY3JpYmUobm90aWZpY2F0aW9uc0xpbmsgPT4ge1xuICAgICAgdGhpcy5hbGxOb3RpZmljYXRpb25zTGluayA9IG5vdGlmaWNhdGlvbnNMaW5rO1xuICAgIH0pO1xuICAgIHRoaXMubm90aWZpY2F0aW9uc1N1YiQgPSB0aGlzLm5vdGlmaWNhdGlvbnMubWVzc2FnZXMuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0Lml0ZW1zKXtcbiAgICAgICAgdGhpcy5uZXdBcnJpdmFsID0gdHJ1ZTtcbiAgICAgICAgdGhpcy51bnJlYWRDb3VudCA9IHJlc3VsdC5jb3VudDtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAgICAgc2V0VGltZW91dCggKCkgPT4geyB0aGlzLm5ld0Fycml2YWwgPSBmYWxzZTsgfSwgMTAwMCApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGRvSW5ib3hBY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubm90aWZpY2F0aW9ucy5pbmJveEFjdGlvbikge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmluYm94QWN0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudUV4cGFuZGVkID0gIXRoaXMubWVudUV4cGFuZGVkO1xuICAgIH1cbiAgICB0aGlzLnVucmVhZENvdW50ID0gMDtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVJdGVtKGluZGV4Om51bWJlcil7XG4gICAgdGhpcy5pdGVtcy5zcGxpY2UoaW5kZXgsMSk7XG4gIH1cblxuICAgIC8vIHRoaXMubm90aWZpY2F0aW9uc1N1YiQgPSB0aGlzLmxpbmtzLm5vdGlmaWNhdGlvbnM/LnBpcGUobWFwKHJlc3VsdCA9PiB7XG4gICAgLy8gICB0aGlzLmFsbEl0ZW1zTGluayA9IHJlc3VsdC5hbGxOb3RpZmljYXRpb25zO1xuICAgIC8vICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcztcbiAgICAvLyAgIHRoaXMudW5yZWFkQ291bnQgPSByZXN1bHQuY291bnQ7XG4gICAgLy8gfSkpO1xuXG4gICAgLy8gW3RoaXMubm90aWZpY2F0aW9uc0xpbmtzUGF0aF0gYXMgT2JzZXJ2YWJsZTxOb3RpZmljYXRpb25OYXZMaW5rW10+O1xuICAgIC8vIHRoaXMuYWxsTm90aWZpY2F0aW9uc0xpbmsgPSB0aGlzLmxpbmtzW3RoaXMuYWxsTm90aWZpY2F0aW9uc0xpbmtQYXRoXSBhcyBPYnNlcnZhYmxlPE5hdkxpbms+O1xuICAgIC8vIHRoaXMudW5yZWFkTm90aWZpY2F0aW9uc0NvdW50T2JzID0gdGhpcy5saW5rc1t0aGlzLm5vdGlmaWNhdGlvbnNDb3VudGVyTGlua3NQYXRoXSBhcyBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgLy8gdGhpcy5nZXRVbnJlYWROb3RpZmljYXRpb25zQ291bnQoKTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHlwZWRlZlxuICBwdWJsaWMgb25DbGlja091dHNpZGUoJGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLm1lbnVFeHBhbmRlZCA9IGZhbHNlO1xuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJyZWxhdGl2ZVwiXG4oY2xpY2tPdXRzaWRlKT1cIm9uQ2xpY2tPdXRzaWRlKCRldmVudClcIj5cbiAgPCEtLSBOb3RpZmljYXRpb25zIEJ1dHRvbiAtLT5cbiAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiZG9JbmJveEFjdGlvbigpXCJcbiAgICAgICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIlxuICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+VmlldyBub3RpZmljYXRpb25zPC9zcGFuPlxuICAgIDxzcGFuIGNsYXNzPVwiYXZhdGFyLWNvbnRhaW5lclwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJhdmF0YXItdGV4dFwiPlxuICAgICAgICA8aSBjbGFzcz1cIm1zLUljb24gaG92ZXI6dGV4dC1ibHVlLTQwMFwiXG4gICAgICAgICAgW2NsYXNzLm1zLUljb24tLU1lc3NhZ2VGaWxsXT1cInVucmVhZENvdW50ID4gMFwiXG4gICAgICAgICAgW2NsYXNzLnRleHQtc2t5LTQwMF09XCJ1bnJlYWRDb3VudCA+IDBcIlxuICAgICAgICAgIFtjbGFzcy5hbmltYXRlLW5vdGlmaWNhdGlvbl09XCJuZXdBcnJpdmFsXCJcbiAgICAgICAgICBbY2xhc3MubXMtSWNvbi0tTWVzc2FnZV09XCJ1bnJlYWRDb3VudCA9PT0gMFwiPlxuICAgICAgICA8L2k+XG4gICAgICA8L3NwYW4+XG4gICAgICA8c3BhblxuICAgICAgICAqbmdJZj1cInVucmVhZENvdW50ID4gMFwiXG4gICAgICAgIFtjbGFzcy5hbmltYXRlLXB1bHNlXT1cIm5ld0Fycml2YWxcIlxuICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIHJpZ2h0LTAgaW5saW5lLWZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIC1tdC0xIG1sLTEgdGV4dC14cyBsZWFkaW5nLW5vbmUgdGV4dC1ncmF5LTEwMCBvcmRpbmFsXCI+XG4gICAgICAgIHt7IHVucmVhZENvdW50IH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9zcGFuPlxuICA8L2J1dHRvbj5cblxuICA8IS0tIE5vdGlmaWNhdGlvbnMgZHJvcGRvd24gLS0+XG4gIDxkaXYgKm5nSWY9XCJtZW51RXhwYW5kZWRcIiBjbGFzcz1cImhlYWRlci1ub3RpZmljYXRpb25zLWRyb3Bkb3duLXdpdGgtdXNlcm5hbWVcIiByb2xlPVwibWVudVwiIGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiIGFyaWEtbGFiZWxsZWRieT1cIm1lc3NhZ2VzLW1lbnVcIj5cbiAgICA8ZGl2IGNsYXNzPVwibWF4LWgtNjQgb3ZlcmZsb3cteS1hdXRvIG5vdGlmaWNhdGlvbi1tZXNzYWdlcyBtaW4taFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpdGVtczsgZWxzZSBtZXNzYWdlc0Ryb3BEb3duXCIgY2xhc3M9XCJweS01XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJub3RpZmljYXRpb25zLW5hdi1saW5rIGhvdmVyOmJnLXRyYW5zcGFyZW50XCI+zpTOtc69IM6tz4fOtc+EzrUgzr3Orc61z4IgzrXOuc60zr/PgM6/zrnOrs+DzrXOuc+CPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbWVzc2FnZXNEcm9wRG93bj5cbiAgICAgICAgPHVsIGNsYXNzPVwicHItMS41XCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zOyBlbHNlIGxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtcy5sZW5ndGggPD0gMFwiIGNsYXNzPVwicHktNVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9ucy1uYXYtbGluayBob3ZlcjpiZy10cmFuc3BhcmVudFwiPs6UzrXOvSDOrc+HzrXPhM61IM69zq3Otc+CIM61zrnOtM6/z4DOv865zq7Pg861zrnPgjwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZXNzYWdlIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxsaSBjbGFzcz1cIm1iLTJcIiBbbmdDbGFzc109XCJ7ICdib3JkZXItbC0yIGJvcmRlci1ibHVlLTUwMCBiZy1ibHVlLTUwIGhvdmVyOmJnLWJsdWUtNTAnOiAhbWVzc2FnZS5kYXRhLmlzUmVhZCB9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwibWVzc2FnZS5wYXRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlSXRlbShpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJub3RpZmljYXRpb25zLW5hdi1saW5rIGdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIiFtZXNzYWdlLmRhdGEuaXNSZWFkID8gJyBob3ZlcjpiZy1ibHVlLTUwJyA6ICdib3JkZXItYiBib3JkZXItZ3JheS0xMDAnXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC10aGluIHRyYWNraW5nLXRpZ2h0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWVzc2FnZS5kYXRhLmNyZWF0aW9uRGF0ZSB8IGRhdGU6IFwiRUVFLCBkIE1NTU1cIiB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1ib2xkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG1lc3NhZ2UuZGF0YS50ZXh0IH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTMyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXB1bHNlIHRleHQtcyB0ZXh0LWdyYXktNjAwXCI+TG9hZGluZy4uLjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInAtMSByb3VuZGVkLXNtXCI+XG4gICAgICA8YSBbcm91dGVyTGlua109XCJhbGxOb3RpZmljYXRpb25zTGluayEucGF0aFwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImhlYWRlci1ub3RpZmljYXRpb25zLWRyb3Bkb3duLXZpZXctYWxsLWJ1dHRvblwiPnt7YWxsTm90aWZpY2F0aW9uc0xpbmshLnRleHR9fTwvYnV0dG9uPlxuICAgICAgPC9hPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,130 @@
1
+ import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Icons } from '../../icons';
3
+ import { MenuOption } from '../../types';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "../drop-down-menu/drop-down-menu.component";
8
+ export class PagerComponent {
9
+ constructor(router) {
10
+ this.router = router;
11
+ // BUSY STATE
12
+ this.busy = false;
13
+ // PAGING
14
+ this.count = null;
15
+ this.page = 1;
16
+ // tslint:disable-next-line:no-input-rename
17
+ this.pageSize = 20;
18
+ // tslint:disable-next-line:no-input-rename
19
+ this.pageSizeOptions = [
20
+ new MenuOption('10', 10),
21
+ new MenuOption('20', 20),
22
+ new MenuOption('30', 30),
23
+ new MenuOption('50', 50),
24
+ new MenuOption('100', 100)
25
+ ];
26
+ this.pages = [];
27
+ this.pageChanged = new EventEmitter();
28
+ this.pageSizeChanged = new EventEmitter();
29
+ this.canPreviousPage = false;
30
+ this.canNextPage = false;
31
+ // SORTING
32
+ // tslint:disable-next-line:no-input-rename
33
+ this.sortOptions = [];
34
+ // tslint:disable-next-line:no-input-rename
35
+ this.sort = null;
36
+ // tslint:disable-next-line:no-input-rename
37
+ this.sortdir = 'desc';
38
+ this.sortChanged = new EventEmitter();
39
+ this.sortdirChanged = new EventEmitter();
40
+ this.sortdirIcon = Icons.SortDesc;
41
+ }
42
+ ngOnChanges(changes) {
43
+ this.calcPages();
44
+ }
45
+ ngOnInit() {
46
+ }
47
+ calcPages() {
48
+ this.pages = [];
49
+ if (this.count && this.count > 0) {
50
+ const pageCount = this.count / this.pageSize;
51
+ for (let i = 0; i < pageCount; i++) {
52
+ this.pages.push(new MenuOption(i + 1 + '', i + 1));
53
+ }
54
+ }
55
+ this.canPreviousPage = this.page > 1;
56
+ this.canNextPage = this.page < this.pages.length;
57
+ }
58
+ nextPage() {
59
+ const next = this.page + 1;
60
+ this.gotoPage(next);
61
+ }
62
+ previousPage() {
63
+ const previous = this.page - 1;
64
+ this.gotoPage(previous);
65
+ }
66
+ gotoPage(page) {
67
+ this.page = page;
68
+ this.pageChanged.emit(page);
69
+ this.calcPages();
70
+ }
71
+ pageSizeOptionChanged(pageSize) {
72
+ this.pageSizeChanged.emit(pageSize);
73
+ this.calcPages();
74
+ }
75
+ pageOptionChanged(page) {
76
+ this.pageChanged.emit(page);
77
+ this.calcPages();
78
+ }
79
+ sortOptionChanged(sort) {
80
+ this.sortChanged.emit(sort);
81
+ }
82
+ toggleSortdir() {
83
+ let sortdir = 'desc';
84
+ if (this.sortdir === 'desc') {
85
+ sortdir = 'asc';
86
+ this.sortdirIcon = Icons.SortAsc;
87
+ }
88
+ else {
89
+ sortdir = 'desc';
90
+ this.sortdirIcon = Icons.SortDesc;
91
+ }
92
+ this.sortdirChanged.emit(sortdir);
93
+ }
94
+ }
95
+ PagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: PagerComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
96
+ PagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: PagerComponent, selector: "lib-pager", inputs: { busy: "busy", count: "count", page: "page", pageSize: ["page-size", "pageSize"], pageSizeOptions: ["page-size-options", "pageSizeOptions"], sortOptions: ["sort-options", "sortOptions"], sort: "sort", sortdir: ["sort-dir", "sortdir"] }, outputs: { pageChanged: "pageChanged", pageSizeChanged: "pageSizeChanged", sortChanged: "sortChanged", sortdirChanged: "sortdirChanged" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"pager-container\">\n <div class=\"pager-container-inner\">\n <div class=\"inline-flex\" *ngIf=\"sortOptions && sortOptions.length > 0\">\n <lib-drop-down-menu [options]=\"sortOptions\" [selected]=\"sort\" (selectedChanged)=\"sortOptionChanged($event)\"></lib-drop-down-menu>\n <button (click)=\"toggleSortdir()\" [disabled]=\"!sort || busy\" class=\"pager-icon-button\">\n <span class=\"sr-only\">sort direction</span>\n <span class=\"inline-block relative\">\n <i [class]=\"sortdirIcon\"></i>\n </span>\n </button>\n </div>\n <div class=\"pager-pages-container\">\n <lib-drop-down-menu [options]=\"pageSizeOptions\" [selected]=\"pageSize\" (selectedChanged)=\"pageSizeOptionChanged($event)\"></lib-drop-down-menu>\n <div class=\"mx-2\" *ngIf=\"count !== null && count > pageSize\">\n <button [disabled]=\"!canPreviousPage || busy\" (click)=\"previousPage()\"\n class=\"pager-arrow-button-left\">\n <span class=\"sr-only\">Previous</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <button [disabled]=\"!canNextPage || busy\" (click)=\"nextPage()\"\n class=\"pager-arrow-button-right\">\n <span class=\"sr-only\">Next</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <lib-drop-down-menu *ngIf=\"(pages && pages.length > 0) && (count !== null && count > pageSize)\" [options]=\"pages\" [selected]=\"page\" (selectedChanged)=\"pageOptionChanged($event)\"></lib-drop-down-menu>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.DropDownMenuComponent, selector: "lib-drop-down-menu", inputs: ["options", "selected", "multiple", "placeholder"], outputs: ["selectedChange", "selectedChanged"] }] });
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: PagerComponent, decorators: [{
98
+ type: Component,
99
+ args: [{ selector: 'lib-pager', template: "<div class=\"pager-container\">\n <div class=\"pager-container-inner\">\n <div class=\"inline-flex\" *ngIf=\"sortOptions && sortOptions.length > 0\">\n <lib-drop-down-menu [options]=\"sortOptions\" [selected]=\"sort\" (selectedChanged)=\"sortOptionChanged($event)\"></lib-drop-down-menu>\n <button (click)=\"toggleSortdir()\" [disabled]=\"!sort || busy\" class=\"pager-icon-button\">\n <span class=\"sr-only\">sort direction</span>\n <span class=\"inline-block relative\">\n <i [class]=\"sortdirIcon\"></i>\n </span>\n </button>\n </div>\n <div class=\"pager-pages-container\">\n <lib-drop-down-menu [options]=\"pageSizeOptions\" [selected]=\"pageSize\" (selectedChanged)=\"pageSizeOptionChanged($event)\"></lib-drop-down-menu>\n <div class=\"mx-2\" *ngIf=\"count !== null && count > pageSize\">\n <button [disabled]=\"!canPreviousPage || busy\" (click)=\"previousPage()\"\n class=\"pager-arrow-button-left\">\n <span class=\"sr-only\">Previous</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n <button [disabled]=\"!canNextPage || busy\" (click)=\"nextPage()\"\n class=\"pager-arrow-button-right\">\n <span class=\"sr-only\">Next</span>\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n <lib-drop-down-menu *ngIf=\"(pages && pages.length > 0) && (count !== null && count > pageSize)\" [options]=\"pages\" [selected]=\"page\" (selectedChanged)=\"pageOptionChanged($event)\"></lib-drop-down-menu>\n </div>\n </div>\n</div>\n" }]
100
+ }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { busy: [{
101
+ type: Input
102
+ }], count: [{
103
+ type: Input
104
+ }], page: [{
105
+ type: Input
106
+ }], pageSize: [{
107
+ type: Input,
108
+ args: ['page-size']
109
+ }], pageSizeOptions: [{
110
+ type: Input,
111
+ args: ['page-size-options']
112
+ }], pageChanged: [{
113
+ type: Output
114
+ }], pageSizeChanged: [{
115
+ type: Output
116
+ }], sortOptions: [{
117
+ type: Input,
118
+ args: ['sort-options']
119
+ }], sort: [{
120
+ type: Input,
121
+ args: ['sort']
122
+ }], sortdir: [{
123
+ type: Input,
124
+ args: ['sort-dir']
125
+ }], sortChanged: [{
126
+ type: Output
127
+ }], sortdirChanged: [{
128
+ type: Output
129
+ }] } });
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3BhZ2VyL3BhZ2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9wYWdlci9wYWdlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFFekcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNwQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7OztBQU16QyxNQUFNLE9BQU8sY0FBYztJQWlDekIsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFoQ2xDLGFBQWE7UUFDSixTQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLFNBQVM7UUFDQSxVQUFLLEdBQWtCLElBQUksQ0FBQztRQUM1QixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLDJDQUEyQztRQUN2QixhQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xDLDJDQUEyQztRQUNmLG9CQUFlLEdBQWlCO1lBQzFELElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDeEIsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztTQUMzQixDQUFDO1FBQ0ssVUFBSyxHQUFpQixFQUFFLENBQUM7UUFDdEIsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCxvQkFBZSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3RFLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTNCLFVBQVU7UUFDViwyQ0FBMkM7UUFDcEIsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQ3RELDJDQUEyQztRQUM1QixTQUFJLEdBQWtCLElBQUksQ0FBQztRQUMxQywyQ0FBMkM7UUFDeEIsWUFBTyxHQUFrQixNQUFNLENBQUM7UUFDekMsZ0JBQVcsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUMvRCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3JFLGdCQUFXLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUVFLENBQUM7SUFFdkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFTyxTQUFTO1FBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUM3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNwRDtTQUNGO1FBQ0QsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7SUFDbkQsQ0FBQztJQUVNLFFBQVE7UUFDYixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLENBQUM7SUFFTSxZQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxJQUFZO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0scUJBQXFCLENBQUMsUUFBZ0I7UUFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0saUJBQWlCLENBQUMsSUFBWTtRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sYUFBYTtRQUNsQixJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRTtZQUMzQixPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNsQzthQUFNO1lBQ0wsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwQyxDQUFDOzsyR0E5RlUsY0FBYzsrRkFBZCxjQUFjLHVjQ1QzQixrcUVBaUNBOzJGRHhCYSxjQUFjO2tCQUoxQixTQUFTOytCQUNFLFdBQVc7NkZBS1osSUFBSTtzQkFBWixLQUFLO2dCQUVHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRWMsUUFBUTtzQkFBM0IsS0FBSzt1QkFBQyxXQUFXO2dCQUVVLGVBQWU7c0JBQTFDLEtBQUs7dUJBQUMsbUJBQW1CO2dCQVFoQixXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBTWdCLFdBQVc7c0JBQWpDLEtBQUs7dUJBQUMsY0FBYztnQkFFTixJQUFJO3NCQUFsQixLQUFLO3VCQUFDLE1BQU07Z0JBRU0sT0FBTztzQkFBekIsS0FBSzt1QkFBQyxVQUFVO2dCQUNQLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnLi4vLi4vaWNvbnMnO1xuaW1wb3J0IHsgTWVudU9wdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXBhZ2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BhZ2VyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWdlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLy8gQlVTWSBTVEFURVxuICBASW5wdXQoKSBidXN5ID0gZmFsc2U7XG4gIC8vIFBBR0lOR1xuICBASW5wdXQoKSBjb3VudDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHBhZ2UgPSAxO1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgncGFnZS1zaXplJykgcGFnZVNpemUgPSAyMDtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3BhZ2Utc2l6ZS1vcHRpb25zJykgcGFnZVNpemVPcHRpb25zOiBNZW51T3B0aW9uW10gPSBbXG4gICAgbmV3IE1lbnVPcHRpb24oJzEwJywgMTApLFxuICAgIG5ldyBNZW51T3B0aW9uKCcyMCcsIDIwKSxcbiAgICBuZXcgTWVudU9wdGlvbignMzAnLCAzMCksXG4gICAgbmV3IE1lbnVPcHRpb24oJzUwJywgNTApLFxuICAgIG5ldyBNZW51T3B0aW9uKCcxMDAnLCAxMDApXG4gIF07XG4gIHB1YmxpYyBwYWdlczogTWVudU9wdGlvbltdID0gW107XG4gIEBPdXRwdXQoKSBwYWdlQ2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgQE91dHB1dCgpIHBhZ2VTaXplQ2hhbmdlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgcHVibGljIGNhblByZXZpb3VzUGFnZSA9IGZhbHNlO1xuICBwdWJsaWMgY2FuTmV4dFBhZ2UgPSBmYWxzZTtcblxuICAvLyBTT1JUSU5HXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzb3J0LW9wdGlvbnMnKSBzb3J0T3B0aW9uczogTWVudU9wdGlvbltdID0gW107XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzb3J0Jykgc29ydDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzb3J0LWRpcicpIHNvcnRkaXI6IHN0cmluZyB8IG51bGwgPSAnZGVzYyc7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlZDogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHNvcnRkaXJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBwdWJsaWMgc29ydGRpckljb24gPSBJY29ucy5Tb3J0RGVzYztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyKSB7IH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jYWxjUGFnZXMoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICB9XG5cbiAgcHJpdmF0ZSBjYWxjUGFnZXMoKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlcyA9IFtdO1xuICAgIGlmICh0aGlzLmNvdW50ICYmIHRoaXMuY291bnQgPiAwKSB7XG4gICAgICBjb25zdCBwYWdlQ291bnQgPSB0aGlzLmNvdW50IC8gdGhpcy5wYWdlU2l6ZTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZUNvdW50OyBpKyspIHtcbiAgICAgICAgdGhpcy5wYWdlcy5wdXNoKG5ldyBNZW51T3B0aW9uKGkgKyAxICsgJycsIGkgKyAxKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FuUHJldmlvdXNQYWdlID0gdGhpcy5wYWdlID4gMTtcbiAgICB0aGlzLmNhbk5leHRQYWdlID0gdGhpcy5wYWdlIDwgdGhpcy5wYWdlcy5sZW5ndGg7XG4gIH1cblxuICBwdWJsaWMgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMucGFnZSArIDE7XG4gICAgdGhpcy5nb3RvUGFnZShuZXh0KTtcbiAgfVxuXG4gIHB1YmxpYyBwcmV2aW91c1BhZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnBhZ2UgLSAxO1xuICAgIHRoaXMuZ290b1BhZ2UocHJldmlvdXMpO1xuICB9XG5cbiAgcHVibGljIGdvdG9QYWdlKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZSA9IHBhZ2U7XG4gICAgdGhpcy5wYWdlQ2hhbmdlZC5lbWl0KHBhZ2UpO1xuICAgIHRoaXMuY2FsY1BhZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgcGFnZVNpemVPcHRpb25DaGFuZ2VkKHBhZ2VTaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLnBhZ2VTaXplQ2hhbmdlZC5lbWl0KHBhZ2VTaXplKTtcbiAgICB0aGlzLmNhbGNQYWdlcygpO1xuICB9XG5cbiAgcHVibGljIHBhZ2VPcHRpb25DaGFuZ2VkKHBhZ2U6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZUNoYW5nZWQuZW1pdChwYWdlKTtcbiAgICB0aGlzLmNhbGNQYWdlcygpO1xuICB9XG5cbiAgcHVibGljIHNvcnRPcHRpb25DaGFuZ2VkKHNvcnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc29ydENoYW5nZWQuZW1pdChzb3J0KTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVTb3J0ZGlyKCk6IHZvaWQge1xuICAgIGxldCBzb3J0ZGlyID0gJ2Rlc2MnO1xuICAgIGlmICh0aGlzLnNvcnRkaXIgPT09ICdkZXNjJykge1xuICAgICAgc29ydGRpciA9ICdhc2MnO1xuICAgICAgdGhpcy5zb3J0ZGlySWNvbiA9IEljb25zLlNvcnRBc2M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNvcnRkaXIgPSAnZGVzYyc7XG4gICAgICB0aGlzLnNvcnRkaXJJY29uID0gSWNvbnMuU29ydERlc2M7XG4gICAgfVxuICAgIHRoaXMuc29ydGRpckNoYW5nZWQuZW1pdChzb3J0ZGlyKTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwicGFnZXItY29udGFpbmVyXCI+XG4gIDxkaXYgY2xhc3M9XCJwYWdlci1jb250YWluZXItaW5uZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWZsZXhcIiAqbmdJZj1cInNvcnRPcHRpb25zICYmIHNvcnRPcHRpb25zLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxsaWItZHJvcC1kb3duLW1lbnUgW29wdGlvbnNdPVwic29ydE9wdGlvbnNcIiBbc2VsZWN0ZWRdPVwic29ydFwiIChzZWxlY3RlZENoYW5nZWQpPVwic29ydE9wdGlvbkNoYW5nZWQoJGV2ZW50KVwiPjwvbGliLWRyb3AtZG93bi1tZW51PlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlU29ydGRpcigpXCIgW2Rpc2FibGVkXT1cIiFzb3J0IHx8IGJ1c3lcIiBjbGFzcz1cInBhZ2VyLWljb24tYnV0dG9uXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnNvcnQgZGlyZWN0aW9uPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImlubGluZS1ibG9jayByZWxhdGl2ZVwiPlxuICAgICAgICAgIDxpIFtjbGFzc109XCJzb3J0ZGlySWNvblwiPjwvaT5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBhZ2VyLXBhZ2VzLWNvbnRhaW5lclwiPlxuICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSBbb3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIiBbc2VsZWN0ZWRdPVwicGFnZVNpemVcIiAoc2VsZWN0ZWRDaGFuZ2VkKT1cInBhZ2VTaXplT3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XG4gICAgICA8ZGl2IGNsYXNzPVwibXgtMlwiICAqbmdJZj1cImNvdW50ICE9PSBudWxsICYmIGNvdW50ID4gcGFnZVNpemVcIj5cbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIWNhblByZXZpb3VzUGFnZSB8fCBidXN5XCIgIChjbGljayk9XCJwcmV2aW91c1BhZ2UoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlci1hcnJvdy1idXR0b24tbGVmdFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMi43MDcgNS4yOTNhMSAxIDAgMDEwIDEuNDE0TDkuNDE0IDEwbDMuMjkzIDMuMjkzYTEgMSAwIDAxLTEuNDE0IDEuNDE0bC00LTRhMSAxIDAgMDEwLTEuNDE0bDQtNGExIDEgMCAwMTEuNDE0IDB6XCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhY2FuTmV4dFBhZ2UgfHwgYnVzeVwiICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlci1hcnJvdy1idXR0b24tcmlnaHRcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5OZXh0PC9zcGFuPlxuICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLTUgdy01XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk03LjI5MyAxNC43MDdhMSAxIDAgMDEwLTEuNDE0TDEwLjU4NiAxMCA3LjI5MyA2LjcwN2ExIDEgMCAwMTEuNDE0LTEuNDE0bDQgNGExIDEgMCAwMTAgMS40MTRsLTQgNGExIDEgMCAwMS0xLjQxNCAwelwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGxpYi1kcm9wLWRvd24tbWVudSAqbmdJZj1cIihwYWdlcyAmJiBwYWdlcy5sZW5ndGggPiAwKSAmJiAoY291bnQgIT09IG51bGwgJiYgY291bnQgPiBwYWdlU2l6ZSlcIiBbb3B0aW9uc109XCJwYWdlc1wiIFtzZWxlY3RlZF09XCJwYWdlXCIgKHNlbGVjdGVkQ2hhbmdlZCk9XCJwYWdlT3B0aW9uQ2hhbmdlZCgkZXZlbnQpXCI+PC9saWItZHJvcC1kb3duLW1lbnU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,72 @@
1
+ import { SidePaneOverlayType, SidePaneSize } from './../../types';
2
+ import { Component, Input, Inject, EventEmitter, Output } from '@angular/core';
3
+ import { DOCUMENT } from '@angular/common';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/router";
6
+ import * as i2 from "@angular/common";
7
+ export class SidePaneComponent {
8
+ constructor(router, document) {
9
+ this.router = router;
10
+ this.document = document;
11
+ // tslint:disable-next-line:no-input-rename
12
+ this.showPane = false;
13
+ this.sizeContainerStyle = 'side-pane-box-size';
14
+ this.overlayStyle = 'side-pane-overlay';
15
+ this.onComplete = new EventEmitter();
16
+ }
17
+ ngOnDestroy() {
18
+ }
19
+ ngOnInit() {
20
+ }
21
+ onSidePaneActivated(component) {
22
+ this.document.body.classList.add('modal-active');
23
+ let sizeStyleSuffix = '';
24
+ const state = this.router.getCurrentNavigation()?.extras.state;
25
+ if (state) {
26
+ if (state.paneSize) {
27
+ if (state.paneSize === SidePaneSize.Small25) {
28
+ sizeStyleSuffix = '-25';
29
+ }
30
+ else if (state.paneSize === SidePaneSize.Medium50) {
31
+ sizeStyleSuffix = '-50';
32
+ }
33
+ else if (state.paneSize === SidePaneSize.Large75) {
34
+ sizeStyleSuffix = '-75';
35
+ }
36
+ }
37
+ if (state.paneOverlay) {
38
+ if (state.paneOverlay === SidePaneOverlayType.None) {
39
+ this.overlayStyle = 'side-pane-overlay-opacity-0';
40
+ }
41
+ else if (state.paneOverlay === SidePaneOverlayType.Dark) {
42
+ this.overlayStyle = 'side-pane-overlay-opacity-50';
43
+ }
44
+ else {
45
+ this.overlayStyle = 'side-pane-overlay';
46
+ }
47
+ }
48
+ }
49
+ this.sizeContainerStyle = `side-pane-box-size${sizeStyleSuffix}`;
50
+ this.showPane = true;
51
+ }
52
+ onSidePaneDeactivated($event) {
53
+ this.document.body.classList.remove('modal-active');
54
+ this.showPane = false;
55
+ this.onComplete.emit(true);
56
+ }
57
+ }
58
+ SidePaneComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SidePaneComponent, deps: [{ token: i1.Router }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
59
+ SidePaneComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: SidePaneComponent, selector: "lib-side-pane", inputs: { showPane: ["visible", "showPane"] }, outputs: { onComplete: "onComplete" }, ngImport: i0, template: "<div *ngIf=\"showPane\" class=\"side-pane-outer-container\" aria-labelledby=\"slide-over\" role=\"dialog\" aria-modal=\"true\">\n <div [class]=\"showPane ? overlayStyle : 'hidden'\" aria-hidden=\"true\"></div>\n <div [class]=\"showPane ? 'side-pane-container' : 'hidden'\">\n <div [class]=\"sizeContainerStyle\">\n <div class=\"side-pane\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
60
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SidePaneComponent, decorators: [{
61
+ type: Component,
62
+ args: [{ selector: 'lib-side-pane', template: "<div *ngIf=\"showPane\" class=\"side-pane-outer-container\" aria-labelledby=\"slide-over\" role=\"dialog\" aria-modal=\"true\">\n <div [class]=\"showPane ? overlayStyle : 'hidden'\" aria-hidden=\"true\"></div>\n <div [class]=\"showPane ? 'side-pane-container' : 'hidden'\">\n <div [class]=\"sizeContainerStyle\">\n <div class=\"side-pane\">\n <ng-content></ng-content>\n </div>\n </div>\n </div>\n</div>\n" }]
63
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: undefined, decorators: [{
64
+ type: Inject,
65
+ args: [DOCUMENT]
66
+ }] }]; }, propDecorators: { showPane: [{
67
+ type: Input,
68
+ args: ['visible']
69
+ }], onComplete: [{
70
+ type: Output
71
+ }] } });
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lkZS1wYW5lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9zaWRlLXBhbmUvc2lkZS1wYW5lLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9zaWRlLXBhbmUvc2lkZS1wYW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQU0zQyxNQUFNLE9BQU8saUJBQWlCO0lBTzVCLFlBQW9CLE1BQWMsRUFBNEIsUUFBYTtRQUF2RCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQTRCLGFBQVEsR0FBUixRQUFRLENBQUs7UUFOM0UsMkNBQTJDO1FBQ3pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDNUIsdUJBQWtCLEdBQUcsb0JBQW9CLENBQUM7UUFDMUMsaUJBQVksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxlQUFVLEdBQTBCLElBQUksWUFBWSxFQUFXLENBQUM7SUFFTSxDQUFDO0lBRWpGLFdBQVc7SUFDWCxDQUFDO0lBRUQsUUFBUTtJQUNSLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxTQUFjO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDakQsSUFBSSxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQy9ELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFO2dCQUNsQixJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLE9BQU8sRUFBRTtvQkFDM0MsZUFBZSxHQUFHLEtBQUssQ0FBQztpQkFDekI7cUJBQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFlBQVksQ0FBQyxRQUFRLEVBQUU7b0JBQ25ELGVBQWUsR0FBRyxLQUFLLENBQUM7aUJBQ3pCO3FCQUFNLElBQUksS0FBSyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQUMsT0FBTyxFQUFFO29CQUNsRCxlQUFlLEdBQUcsS0FBSyxDQUFDO2lCQUN6QjthQUNGO1lBQ0QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUNyQixJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFHO29CQUNuRCxJQUFJLENBQUMsWUFBWSxHQUFHLDZCQUE2QixDQUFDO2lCQUNuRDtxQkFBTSxJQUFJLEtBQUssQ0FBQyxXQUFXLEtBQUssbUJBQW1CLENBQUMsSUFBSSxFQUFFO29CQUN6RCxJQUFJLENBQUMsWUFBWSxHQUFHLDhCQUE4QixDQUFDO2lCQUNwRDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsWUFBWSxHQUFHLG1CQUFtQixDQUFDO2lCQUN6QzthQUNGO1NBQ0Y7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcscUJBQXFCLGVBQWUsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxNQUFXO1FBQ3RDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQzs7OEdBL0NVLGlCQUFpQix3Q0FPZ0IsUUFBUTtrR0FQekMsaUJBQWlCLDJJQ1Q5QixpYkFVQTsyRkREYSxpQkFBaUI7a0JBSjdCLFNBQVM7K0JBQ0UsZUFBZTs7MEJBVVksTUFBTTsyQkFBQyxRQUFROzRDQUxsQyxRQUFRO3NCQUF6QixLQUFLO3VCQUFDLFNBQVM7Z0JBR04sVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZGVQYW5lT3ZlcmxheVR5cGUsIFNpZGVQYW5lU2l6ZSB9IGZyb20gJy4vLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95LCBJbmplY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1zaWRlLXBhbmUnLFxuICB0ZW1wbGF0ZVVybDogJy4vc2lkZS1wYW5lLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTaWRlUGFuZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWlucHV0LXJlbmFtZVxuICBASW5wdXQoJ3Zpc2libGUnKSBzaG93UGFuZSA9IGZhbHNlO1xuICBwdWJsaWMgc2l6ZUNvbnRhaW5lclN0eWxlID0gJ3NpZGUtcGFuZS1ib3gtc2l6ZSc7XG4gIHB1YmxpYyBvdmVybGF5U3R5bGUgPSAnc2lkZS1wYW5lLW92ZXJsYXknO1xuICBAT3V0cHV0KCkgb25Db21wbGV0ZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LCkgeyB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkICB7XG4gIH1cblxuICBwdWJsaWMgb25TaWRlUGFuZUFjdGl2YXRlZChjb21wb25lbnQ6IGFueSk6IHZvaWQgIHtcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbW9kYWwtYWN0aXZlJyk7XG4gICAgbGV0IHNpemVTdHlsZVN1ZmZpeCA9ICcnO1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5yb3V0ZXIuZ2V0Q3VycmVudE5hdmlnYXRpb24oKT8uZXh0cmFzLnN0YXRlO1xuICAgIGlmIChzdGF0ZSkge1xuICAgICAgaWYgKHN0YXRlLnBhbmVTaXplKSB7XG4gICAgICAgIGlmIChzdGF0ZS5wYW5lU2l6ZSA9PT0gU2lkZVBhbmVTaXplLlNtYWxsMjUpIHtcbiAgICAgICAgICBzaXplU3R5bGVTdWZmaXggPSAnLTI1JztcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS5wYW5lU2l6ZSA9PT0gU2lkZVBhbmVTaXplLk1lZGl1bTUwKSB7XG4gICAgICAgICAgc2l6ZVN0eWxlU3VmZml4ID0gJy01MCc7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUucGFuZVNpemUgPT09IFNpZGVQYW5lU2l6ZS5MYXJnZTc1KSB7XG4gICAgICAgICAgc2l6ZVN0eWxlU3VmZml4ID0gJy03NSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZS5wYW5lT3ZlcmxheSkge1xuICAgICAgICBpZiAoc3RhdGUucGFuZU92ZXJsYXkgPT09IFNpZGVQYW5lT3ZlcmxheVR5cGUuTm9uZSkgIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSA9ICdzaWRlLXBhbmUtb3ZlcmxheS1vcGFjaXR5LTAnO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBhbmVPdmVybGF5ID09PSBTaWRlUGFuZU92ZXJsYXlUeXBlLkRhcmspIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSA9ICdzaWRlLXBhbmUtb3ZlcmxheS1vcGFjaXR5LTUwJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlTdHlsZSA9ICdzaWRlLXBhbmUtb3ZlcmxheSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zaXplQ29udGFpbmVyU3R5bGUgPSBgc2lkZS1wYW5lLWJveC1zaXplJHtzaXplU3R5bGVTdWZmaXh9YDtcbiAgICB0aGlzLnNob3dQYW5lID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBvblNpZGVQYW5lRGVhY3RpdmF0ZWQoJGV2ZW50OiBhbnkpOiB2b2lkICB7ICBcbiAgICB0aGlzLmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgnbW9kYWwtYWN0aXZlJyk7XG4gICAgdGhpcy5zaG93UGFuZSA9IGZhbHNlO1xuICAgIHRoaXMub25Db21wbGV0ZS5lbWl0KHRydWUpO1xuICB9XG5cbn1cbiIsIjxkaXYgKm5nSWY9XCJzaG93UGFuZVwiIGNsYXNzPVwic2lkZS1wYW5lLW91dGVyLWNvbnRhaW5lclwiIGFyaWEtbGFiZWxsZWRieT1cInNsaWRlLW92ZXJcIiByb2xlPVwiZGlhbG9nXCIgYXJpYS1tb2RhbD1cInRydWVcIj5cbiAgPGRpdiBbY2xhc3NdPVwic2hvd1BhbmUgPyBvdmVybGF5U3R5bGUgOiAnaGlkZGVuJ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvZGl2PlxuICA8ZGl2IFtjbGFzc109XCJzaG93UGFuZSA/ICdzaWRlLXBhbmUtY29udGFpbmVyJyA6ICdoaWRkZW4nXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwic2l6ZUNvbnRhaW5lclN0eWxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2lkZS1wYW5lXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -0,0 +1,25 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ export class SkeletonLoaderComponent {
5
+ constructor() {
6
+ this.count = 5;
7
+ this.type = 'tiles'; // 'large-tile', 'table'
8
+ }
9
+ ngOnInit() {
10
+ }
11
+ counter(i) {
12
+ return new Array(i);
13
+ }
14
+ }
15
+ SkeletonLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SkeletonLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
16
+ SkeletonLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: SkeletonLoaderComponent, selector: "lib-skeleton-loader", inputs: { count: "count", type: "type" }, ngImport: i0, template: "<!-- <h1>SKELETON LOADER!</h1> -->\n<ng-container *ngSwitch=\"type\">\n <div class=\"cards-deck-4\" *ngSwitchCase=\"'tiles'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-32 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-3\" *ngSwitchCase=\"'large-tiles'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-52 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-1\" *ngSwitchCase=\"'table'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"border border-light-blue-300 shadow rounded-sm p-4 max-w-sm w-full mx-auto mb-4\">\n <div class=\"animate-pulse flex space-x-4\">\n <div class=\"rounded-full bg-light-blue-400 h-12 w-12\">&nbsp;</div>\n <div class=\"flex-1 space-y-4 py-1\">\n <div class=\"h-4 bg-light-blue-400 rounded w-3/4\">&nbsp;</div>\n <div class=\"space-y-2\">\n <div class=\"h-4 bg-light-blue-400 rounded\">&nbsp;</div>\n <div class=\"h-4 bg-light-blue-400 rounded w-5/6\">&nbsp;</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-3\" *ngSwitchDefault>\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-52 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }] });
17
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SkeletonLoaderComponent, decorators: [{
18
+ type: Component,
19
+ args: [{ selector: 'lib-skeleton-loader', template: "<!-- <h1>SKELETON LOADER!</h1> -->\n<ng-container *ngSwitch=\"type\">\n <div class=\"cards-deck-4\" *ngSwitchCase=\"'tiles'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-32 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-3\" *ngSwitchCase=\"'large-tiles'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-52 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-1\" *ngSwitchCase=\"'table'\">\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"border border-light-blue-300 shadow rounded-sm p-4 max-w-sm w-full mx-auto mb-4\">\n <div class=\"animate-pulse flex space-x-4\">\n <div class=\"rounded-full bg-light-blue-400 h-12 w-12\">&nbsp;</div>\n <div class=\"flex-1 space-y-4 py-1\">\n <div class=\"h-4 bg-light-blue-400 rounded w-3/4\">&nbsp;</div>\n <div class=\"space-y-2\">\n <div class=\"h-4 bg-light-blue-400 rounded\">&nbsp;</div>\n <div class=\"h-4 bg-light-blue-400 rounded w-5/6\">&nbsp;</div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n <div class=\"cards-deck-3\" *ngSwitchDefault>\n <ng-container *ngFor=\"let i of counter(count)\">\n <div class=\"relative p-4 w-full bg-white rounded-lg overflow-hidden shadow hover:shadow-md rounded-lg\">\n <div class=\"animate-pulse flex flex-col\">\n <div class=\"rounded w-full h-52 bg-gray-200\"></div>\n <div class=\"flex flex-col mt-5\">\n <div class=\"w-full h-5 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-10/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-8/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"grid grid-cols-2 mt-5 gap-x-2 gap-y-1\">\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n <div class=\"mt-2 w-full h-3 bg-gray-200 rounded\"></div>\n </div>\n\n <div class=\"flex items-center mt-5\">\n <div>\n <div class=\"rounded-full bg-gray-200 w-10 h-10\"></div>\n </div>\n <div class=\"flex justify-between w-full ml-3\">\n <div class=\"w-5/12 h-3 bg-gray-200 rounded\"></div>\n <div class=\"w-2/12 h-3 bg-gray-200 rounded\"></div>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n" }]
20
+ }], ctorParameters: function () { return []; }, propDecorators: { count: [{
21
+ type: Input
22
+ }], type: [{
23
+ type: Input
24
+ }] } });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9za2VsZXRvbi1sb2FkZXIvc2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9za2VsZXRvbi1sb2FkZXIvc2tlbGV0b24tbG9hZGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDOzs7QUFPekQsTUFBTSxPQUFPLHVCQUF1QjtJQUdsQztRQUZTLFVBQUssR0FBRyxDQUFDLENBQUM7UUFDVixTQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsd0JBQXdCO0lBQ2pDLENBQUM7SUFFakIsUUFBUTtJQUNSLENBQUM7SUFFTSxPQUFPLENBQUMsQ0FBUztRQUN0QixPQUFPLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RCLENBQUM7O29IQVZVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLHFHQ1BwQyx1a0tBZ0hBOzJGRHpHYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBRUUscUJBQXFCOzBFQUl0QixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbGliLXNrZWxldG9uLWxvYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9za2VsZXRvbi1sb2FkZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFNrZWxldG9uTG9hZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgY291bnQgPSA1O1xuICBASW5wdXQoKSB0eXBlID0gJ3RpbGVzJzsgLy8gJ2xhcmdlLXRpbGUnLCAndGFibGUnXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBwdWJsaWMgY291bnRlcihpOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheShpKTtcbiAgfVxuXG59XG4iLCI8IS0tIDxoMT5TS0VMRVRPTiBMT0FERVIhPC9oMT4gLS0+XG48bmctY29udGFpbmVyICpuZ1N3aXRjaD1cInR5cGVcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmRzLWRlY2stNFwiICpuZ1N3aXRjaENhc2U9XCIndGlsZXMnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaSBvZiBjb3VudGVyKGNvdW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHAtNCB3LWZ1bGwgYmctd2hpdGUgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gc2hhZG93IGhvdmVyOnNoYWRvdy1tZCByb3VuZGVkLWxnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXB1bHNlIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZCB3LWZ1bGwgaC0zMiBiZy1ncmF5LTIwMFwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC01IGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctMTAvMTIgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctOC8xMiBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgbXQtNSBnYXAteC0yIGdhcC15LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctZnVsbCBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdy1mdWxsIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LWZ1bGwgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctZnVsbCBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTVcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgYmctZ3JheS0yMDAgdy0xMCBoLTEwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgbWwtM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01LzEyIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIvMTIgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmRzLWRlY2stM1wiICpuZ1N3aXRjaENhc2U9XCInbGFyZ2UtdGlsZXMnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaSBvZiBjb3VudGVyKGNvdW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJlbGF0aXZlIHAtNCB3LWZ1bGwgYmctd2hpdGUgcm91bmRlZC1sZyBvdmVyZmxvdy1oaWRkZW4gc2hhZG93IGhvdmVyOnNoYWRvdy1tZCByb3VuZGVkLWxnXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhbmltYXRlLXB1bHNlIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZCB3LWZ1bGwgaC01MiBiZy1ncmF5LTIwMFwiPjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG10LTVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgaC01IGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctMTAvMTIgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctOC8xMiBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQgZ3JpZC1jb2xzLTIgbXQtNSBnYXAteC0yIGdhcC15LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctZnVsbCBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdy1mdWxsIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LWZ1bGwgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctZnVsbCBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIG10LTVcIj5cbiAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3VuZGVkLWZ1bGwgYmctZ3JheS0yMDAgdy0xMCBoLTEwXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktYmV0d2VlbiB3LWZ1bGwgbWwtM1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy01LzEyIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LTIvMTIgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImNhcmRzLWRlY2stMVwiICpuZ1N3aXRjaENhc2U9XCIndGFibGUnXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaSBvZiBjb3VudGVyKGNvdW50KVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJvcmRlciBib3JkZXItbGlnaHQtYmx1ZS0zMDAgc2hhZG93IHJvdW5kZWQtc20gcC00IG1heC13LXNtIHctZnVsbCBteC1hdXRvIG1iLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFuaW1hdGUtcHVsc2UgZmxleCBzcGFjZS14LTRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsIGJnLWxpZ2h0LWJsdWUtNDAwIGgtMTIgdy0xMlwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LTEgc3BhY2UteS00IHB5LTFcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoLTQgYmctbGlnaHQtYmx1ZS00MDAgcm91bmRlZCB3LTMvNFwiPiZuYnNwOzwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC00IGJnLWxpZ2h0LWJsdWUtNDAwIHJvdW5kZWRcIj4mbmJzcDs8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtNCBiZy1saWdodC1ibHVlLTQwMCByb3VuZGVkIHctNS82XCI+Jm5ic3A7PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYXJkcy1kZWNrLTNcIiAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGkgb2YgY291bnRlcihjb3VudClcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBwLTQgdy1mdWxsIGJnLXdoaXRlIHJvdW5kZWQtbGcgb3ZlcmZsb3ctaGlkZGVuIHNoYWRvdyBob3ZlcjpzaGFkb3ctbWQgcm91bmRlZC1sZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYW5pbWF0ZS1wdWxzZSBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQgdy1mdWxsIGgtNTIgYmctZ3JheS0yMDBcIj48L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtdC01XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGgtNSBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LTEwLzEyIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LTgvMTIgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmlkIGdyaWQtY29scy0yIG10LTUgZ2FwLXgtMiBnYXAteS0xXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LWZ1bGwgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0yIHctZnVsbCBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgdy1mdWxsIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtMiB3LWZ1bGwgaC0zIGJnLWdyYXktMjAwIHJvdW5kZWRcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBtdC01XCI+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsIGJnLWdyYXktMjAwIHctMTAgaC0xMFwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWJldHdlZW4gdy1mdWxsIG1sLTNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctNS8xMiBoLTMgYmctZ3JheS0yMDAgcm91bmRlZFwiPjwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0yLzEyIGgtMyBiZy1ncmF5LTIwMCByb3VuZGVkXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
@@ -0,0 +1,59 @@
1
+ import { Component, ContentChildren, EventEmitter, forwardRef, Output } from '@angular/core';
2
+ import { LIBTABGROUP_ACCESSOR } from '../../tokens';
3
+ import { LibTabComponent } from './lib-tab.component';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ export class LibTabGroupComponent {
7
+ constructor() {
8
+ /** The inner tabs of the group. */
9
+ this.tabs = undefined;
10
+ /** Emmited when a step change occurs. */
11
+ this.tabChanged = new EventEmitter();
12
+ }
13
+ /** The current tab. */
14
+ get currentTab() {
15
+ return this.tabs?.find(x => x.isActive);
16
+ }
17
+ /** The index (starting from zero) of the current tab. */
18
+ get currentΤabIndex() {
19
+ return this.currentTab?.index || undefined;
20
+ }
21
+ ngOnInit() { }
22
+ ngAfterContentInit() {
23
+ if (!this.tabs) {
24
+ return;
25
+ }
26
+ }
27
+ ngAfterContentChecked() {
28
+ if (this.tabs && this.tabs.length > 0) {
29
+ const anyActive = this.tabs.filter(x => x.isActive).length > 0;
30
+ if (!anyActive) {
31
+ this.tabs.get(0).isActive = true;
32
+ }
33
+ }
34
+ }
35
+ onTabChanged(selectedTab) {
36
+ this.tabs.forEach((tab) => tab.isActive = tab.id === selectedTab.id);
37
+ this.tabChanged.emit(selectedTab);
38
+ }
39
+ onTabSelectChanged(selectedTabIndex) {
40
+ this.tabs.forEach((tab, index) => tab.isActive = index === selectedTabIndex);
41
+ this.tabChanged.emit(this.tabs?.get(selectedTabIndex));
42
+ }
43
+ }
44
+ LibTabGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
45
+ LibTabGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: LibTabGroupComponent, selector: "lib-tab-group", outputs: { tabChanged: "tabChanged" }, providers: [
46
+ { provide: LIBTABGROUP_ACCESSOR, useExisting: forwardRef(() => LibTabGroupComponent) }
47
+ ], queries: [{ propertyName: "tabs", predicate: LibTabComponent, descendants: true }], ngImport: i0, template: "<div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">Select a tab</label>\n <select id=\"tabs\" name=\"tabs\" (change)=\"onTabSelectChanged(+tabsSelect.value)\" class=\"tab-group-select\" #tabsSelect>\n <option [value]=\"i\" *ngFor=\"let tab of tabs; let i = index\">{{ tab.label }}</option>\n </select>\n</div>\n<div class=\"hidden sm:block\">\n <div class=\"tab-group-container\">\n <nav class=\"-mb-px flex space-x-8\" aria-label=\"Tabs\">\n <a *ngFor=\"let tab of tabs\" href=\"javascript:void(0)\" [class.tab]=\"!tab.isActive\" [class.tab-active]=\"tab.isActive\" (click)=\"onTabChanged(tab)\">\n {{ tab.label }}\n </a>\n </nav>\n </div>\n</div>\n<div *ngIf=\"currentTab?.content\">\n <ng-container [ngTemplateOutlet]=\"currentTab!.content\"></ng-container>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabGroupComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'lib-tab-group', providers: [
51
+ { provide: LIBTABGROUP_ACCESSOR, useExisting: forwardRef(() => LibTabGroupComponent) }
52
+ ], template: "<div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">Select a tab</label>\n <select id=\"tabs\" name=\"tabs\" (change)=\"onTabSelectChanged(+tabsSelect.value)\" class=\"tab-group-select\" #tabsSelect>\n <option [value]=\"i\" *ngFor=\"let tab of tabs; let i = index\">{{ tab.label }}</option>\n </select>\n</div>\n<div class=\"hidden sm:block\">\n <div class=\"tab-group-container\">\n <nav class=\"-mb-px flex space-x-8\" aria-label=\"Tabs\">\n <a *ngFor=\"let tab of tabs\" href=\"javascript:void(0)\" [class.tab]=\"!tab.isActive\" [class.tab-active]=\"tab.isActive\" (click)=\"onTabChanged(tab)\">\n {{ tab.label }}\n </a>\n </nav>\n </div>\n</div>\n<div *ngIf=\"currentTab?.content\">\n <ng-container [ngTemplateOutlet]=\"currentTab!.content\"></ng-container>\n</div>" }]
53
+ }], ctorParameters: function () { return []; }, propDecorators: { tabs: [{
54
+ type: ContentChildren,
55
+ args: [LibTabComponent, { descendants: true }]
56
+ }], tabChanged: [{
57
+ type: Output
58
+ }] } });
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXRhYi1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvdGFicy9saWItdGFiLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy90YWJzL2xpYi10YWItZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QyxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQTBCLE1BQU0sRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUN2SyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7QUFTdEQsTUFBTSxPQUFPLG9CQUFvQjtJQUM3QjtRQUVBLG1DQUFtQztRQUM2QixTQUFJLEdBQTJDLFNBQVMsQ0FBQztRQUN6SCx5Q0FBeUM7UUFDeEIsZUFBVSxHQUFrQyxJQUFJLFlBQVksRUFBbUIsQ0FBQztJQUxqRixDQUFDO0lBT2pCLHVCQUF1QjtJQUN2QixJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQseURBQXlEO0lBQ3pELElBQVcsZUFBZTtRQUN0QixPQUFPLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sUUFBUSxLQUFXLENBQUM7SUFFcEIsa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osT0FBTztTQUNWO0lBQ0wsQ0FBQztJQUVNLHFCQUFxQjtRQUN4QixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUUsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ3JDO1NBQ0o7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLFdBQTRCO1FBQzVDLElBQUksQ0FBQyxJQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBb0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sa0JBQWtCLENBQUMsZ0JBQXdCO1FBQzlDLElBQUksQ0FBQyxJQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBb0IsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxLQUFLLGdCQUFnQixDQUFDLENBQUM7UUFDdkcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7O2lIQTNDUSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwrRUFKbEI7UUFDUCxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLEVBQUU7S0FDekYsK0NBTWdCLGVBQWUsZ0RDaEJwQyw2MUJBaUJNOzJGRExPLG9CQUFvQjtrQkFQaEMsU0FBUzsrQkFDSSxlQUFlLGFBRWQ7d0JBQ1AsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUscUJBQXFCLENBQUMsRUFBRTtxQkFDekY7MEVBTStELElBQUk7c0JBQW5FLGVBQWU7dUJBQUMsZUFBZSxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFdEMsVUFBVTtzQkFBMUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkcmVuLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIEluamVjdGlvblRva2VuLCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMSUJUQUJHUk9VUF9BQ0NFU1NPUiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5cbmltcG9ydCB7IExpYlRhYkNvbXBvbmVudCB9IGZyb20gJy4vbGliLXRhYi5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi10YWItZ3JvdXAnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9saWItdGFiLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBMSUJUQUJHUk9VUF9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTGliVGFiR3JvdXBDb21wb25lbnQpIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYlRhYkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgLyoqIFRoZSBpbm5lciB0YWJzIG9mIHRoZSBncm91cC4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpYlRhYkNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBwdWJsaWMgdGFiczogUXVlcnlMaXN0PExpYlRhYkNvbXBvbmVudD4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgLyoqIEVtbWl0ZWQgd2hlbiBhIHN0ZXAgY2hhbmdlIG9jY3Vycy4gKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHRhYkNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxMaWJUYWJDb21wb25lbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxMaWJUYWJDb21wb25lbnQ+KCk7XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgdGFiLiAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudFRhYigpOiBMaWJUYWJDb21wb25lbnQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzPy5maW5kKHggPT4geC5pc0FjdGl2ZSk7XG4gICAgfVxuXG4gICAgLyoqIFRoZSBpbmRleCAoc3RhcnRpbmcgZnJvbSB6ZXJvKSBvZiB0aGUgY3VycmVudCB0YWIuICovXG4gICAgcHVibGljIGdldCBjdXJyZW50zqRhYkluZGV4KCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUYWI/LmluZGV4IHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIHB1YmxpYyBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50YWJzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50YWJzICYmIHRoaXMudGFicy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBhbnlBY3RpdmUgPSB0aGlzLnRhYnMuZmlsdGVyKHggPT4geC5pc0FjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIGlmICghYW55QWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJzLmdldCgwKSEuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFiQ2hhbmdlZChzZWxlY3RlZFRhYjogTGliVGFiQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFicyEuZm9yRWFjaCgodGFiOiBMaWJUYWJDb21wb25lbnQpID0+IHRhYi5pc0FjdGl2ZSA9IHRhYi5pZCA9PT0gc2VsZWN0ZWRUYWIuaWQpO1xuICAgICAgICB0aGlzLnRhYkNoYW5nZWQuZW1pdChzZWxlY3RlZFRhYik7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFiU2VsZWN0Q2hhbmdlZChzZWxlY3RlZFRhYkluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy50YWJzIS5mb3JFYWNoKCh0YWI6IExpYlRhYkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4gdGFiLmlzQWN0aXZlID0gaW5kZXggPT09IHNlbGVjdGVkVGFiSW5kZXgpO1xuICAgICAgICB0aGlzLnRhYkNoYW5nZWQuZW1pdCh0aGlzLnRhYnM/LmdldChzZWxlY3RlZFRhYkluZGV4KSk7XG4gICAgfVxufSIsIjxkaXYgY2xhc3M9XCJzbTpoaWRkZW5cIj5cbiAgICA8bGFiZWwgZm9yPVwidGFic1wiIGNsYXNzPVwic3Itb25seVwiPlNlbGVjdCBhIHRhYjwvbGFiZWw+XG4gICAgPHNlbGVjdCBpZD1cInRhYnNcIiBuYW1lPVwidGFic1wiIChjaGFuZ2UpPVwib25UYWJTZWxlY3RDaGFuZ2VkKCt0YWJzU2VsZWN0LnZhbHVlKVwiIGNsYXNzPVwidGFiLWdyb3VwLXNlbGVjdFwiICN0YWJzU2VsZWN0PlxuICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJpXCIgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzOyBsZXQgaSA9IGluZGV4XCI+e3sgdGFiLmxhYmVsIH19PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJoaWRkZW4gc206YmxvY2tcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFiLWdyb3VwLWNvbnRhaW5lclwiPlxuICAgICAgICA8bmF2IGNsYXNzPVwiLW1iLXB4IGZsZXggc3BhY2UteC04XCIgYXJpYS1sYWJlbD1cIlRhYnNcIj5cbiAgICAgICAgICAgIDxhICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiBbY2xhc3MudGFiXT1cIiF0YWIuaXNBY3RpdmVcIiBbY2xhc3MudGFiLWFjdGl2ZV09XCJ0YWIuaXNBY3RpdmVcIiAoY2xpY2spPVwib25UYWJDaGFuZ2VkKHRhYilcIj5cbiAgICAgICAgICAgICAgICB7eyB0YWIubGFiZWwgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9uYXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJjdXJyZW50VGFiPy5jb250ZW50XCI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJjdXJyZW50VGFiIS5jb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj4iXX0=