@mintplayer/ng-bootstrap 13.1.4 → 13.1.9

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 (154) hide show
  1. package/esm2020/index.mjs +3 -1
  2. package/esm2020/lib/components/accordion/accordion-tab/accordion-tab.component.mjs +4 -3
  3. package/esm2020/lib/components/accordion/accordion-tab-header/accordion-tab-header.component.mjs +7 -3
  4. package/esm2020/lib/components/alert/alert/alert.component.mjs +4 -4
  5. package/esm2020/lib/components/calendar/calendar.component.mjs +77 -34
  6. package/esm2020/lib/components/card/card/card.component.mjs +1 -2
  7. package/esm2020/lib/components/carousel/carousel/carousel.component.mjs +22 -8
  8. package/esm2020/lib/components/context-menu/context-menu.directive.mjs +57 -0
  9. package/esm2020/lib/components/context-menu/context-menu.module.mjs +26 -0
  10. package/esm2020/lib/components/context-menu/index.mjs +3 -0
  11. package/esm2020/lib/components/datatable/datatable/datatable.component.mjs +51 -0
  12. package/esm2020/lib/components/datatable/datatable-column/datatable-column-metadata.mjs +2 -0
  13. package/esm2020/lib/components/datatable/datatable-column/datatable-column.directive.mjs +19 -0
  14. package/esm2020/lib/components/datatable/datatable-settings.mjs +37 -0
  15. package/esm2020/lib/components/datatable/datatable.module.mjs +40 -0
  16. package/esm2020/lib/components/datatable/index.mjs +6 -0
  17. package/esm2020/lib/components/datatable/row-template/row-template.directive.mjs +19 -0
  18. package/esm2020/lib/components/datepicker/datepicker.component.mjs +22 -0
  19. package/esm2020/lib/components/datepicker/datepicker.module.mjs +34 -0
  20. package/esm2020/lib/components/datepicker/index.mjs +3 -0
  21. package/esm2020/lib/components/dropdown/dropdown/dropdown.directive.mjs +51 -0
  22. package/esm2020/lib/components/dropdown/dropdown-menu/dropdown-menu.directive.mjs +91 -0
  23. package/esm2020/lib/components/dropdown/dropdown-toggle/dropdown-toggle.directive.mjs +28 -0
  24. package/esm2020/lib/components/dropdown/dropdown.module.mjs +44 -0
  25. package/esm2020/lib/components/dropdown/index.mjs +5 -0
  26. package/esm2020/lib/components/index.mjs +16 -4
  27. package/esm2020/lib/components/multiselect/index.mjs +3 -0
  28. package/esm2020/lib/components/multiselect/multiselect.component.mjs +36 -0
  29. package/esm2020/lib/components/multiselect/multiselect.module.mjs +34 -0
  30. package/esm2020/lib/components/navbar/nav-link/nav-link.directive.mjs +1 -1
  31. package/esm2020/lib/components/navbar/navbar-nav/navbar-nav.component.mjs +4 -3
  32. package/esm2020/lib/components/pagination/index.mjs +3 -0
  33. package/esm2020/lib/components/pagination/pagination/pagination.component.mjs +146 -0
  34. package/esm2020/lib/components/pagination/pagination.module.mjs +26 -0
  35. package/esm2020/lib/components/progress-bar/index.mjs +4 -0
  36. package/esm2020/lib/components/progress-bar/progress/progress.component.mjs +27 -0
  37. package/esm2020/lib/components/progress-bar/progress-bar/progress-bar.component.mjs +121 -0
  38. package/esm2020/lib/components/progress-bar/progress-bar.module.mjs +31 -0
  39. package/esm2020/lib/components/scrollspy/component/scrollspy.component.mjs +28 -12
  40. package/esm2020/lib/components/select2/component/select2.component.mjs +96 -0
  41. package/esm2020/lib/components/select2/directive/item-template.directive.mjs +20 -0
  42. package/esm2020/lib/components/select2/index.mjs +4 -0
  43. package/esm2020/lib/components/select2/select2.module.mjs +43 -0
  44. package/esm2020/lib/components/snackbar/component/snackbar.component.mjs +35 -0
  45. package/esm2020/lib/components/snackbar/directives/index.mjs +2 -0
  46. package/esm2020/lib/components/snackbar/directives/snackbar-close/snackbar-close.directive.mjs +27 -0
  47. package/esm2020/lib/components/snackbar/index.mjs +6 -0
  48. package/esm2020/lib/components/snackbar/interfaces/index.mjs +2 -0
  49. package/esm2020/lib/components/snackbar/interfaces/snackbar-animation-meta.mjs +2 -0
  50. package/esm2020/lib/components/snackbar/providers/snackbar-content.provider.mjs +3 -0
  51. package/esm2020/lib/components/snackbar/service/snackbar.service.mjs +50 -0
  52. package/esm2020/lib/components/snackbar/snackbar.module.mjs +38 -0
  53. package/esm2020/lib/components/toggle-button/index.mjs +3 -0
  54. package/esm2020/lib/components/toggle-button/toggle-button.component.mjs +42 -0
  55. package/esm2020/lib/components/toggle-button/toggle-button.module.mjs +26 -0
  56. package/esm2020/lib/components/tooltip/component/tooltip.component.mjs +25 -0
  57. package/esm2020/lib/components/tooltip/directive/tooltip.directive.mjs +104 -0
  58. package/esm2020/lib/components/tooltip/index.mjs +4 -0
  59. package/esm2020/lib/components/tooltip/providers/tooltip-content.provider.mjs +3 -0
  60. package/esm2020/lib/components/tooltip/tooltip.module.mjs +29 -0
  61. package/esm2020/lib/components/typeahead/index.mjs +3 -0
  62. package/esm2020/lib/components/typeahead/typeahead.component.mjs +90 -0
  63. package/esm2020/lib/components/typeahead/typeahead.module.mjs +38 -0
  64. package/esm2020/lib/enums/index.mjs +2 -1
  65. package/esm2020/lib/enums/position.enum.mjs +8 -0
  66. package/esm2020/lib/interfaces/index.mjs +2 -0
  67. package/esm2020/lib/interfaces/page-with-selection.mjs +2 -0
  68. package/esm2020/lib/pipes/font-color/font-color.module.mjs +26 -0
  69. package/esm2020/lib/pipes/font-color/font-color.pipe.mjs +26 -0
  70. package/esm2020/lib/pipes/font-color/index.mjs +3 -0
  71. package/esm2020/lib/pipes/in-list/in-list.module.mjs +26 -0
  72. package/esm2020/lib/pipes/in-list/in-list.pipe.mjs +16 -0
  73. package/esm2020/lib/pipes/index.mjs +2 -0
  74. package/esm2020/lib/pipes/month-name/month-name.pipe.mjs +7 -2
  75. package/esm2020/lib/services/calendar-month/calendar-month.service.mjs +12 -14
  76. package/esm2020/lib/services/scroll-offset/scroll-offset.service.mjs +31 -0
  77. package/esm2020/lib/types/page-number.type.mjs +2 -0
  78. package/fesm2015/mintplayer-ng-bootstrap.mjs +1912 -277
  79. package/fesm2015/mintplayer-ng-bootstrap.mjs.map +1 -1
  80. package/fesm2020/mintplayer-ng-bootstrap.mjs +1897 -275
  81. package/fesm2020/mintplayer-ng-bootstrap.mjs.map +1 -1
  82. package/index.d.ts +2 -0
  83. package/lib/components/accordion/accordion-tab-header/accordion-tab-header.component.d.ts +1 -0
  84. package/lib/components/calendar/calendar.component.d.ts +21 -13
  85. package/lib/components/carousel/carousel/carousel.component.d.ts +4 -1
  86. package/lib/components/context-menu/context-menu.directive.d.ts +16 -0
  87. package/lib/components/context-menu/context-menu.module.d.ts +8 -0
  88. package/lib/components/context-menu/index.d.ts +2 -0
  89. package/lib/components/datatable/datatable/datatable.component.d.ts +17 -0
  90. package/lib/components/datatable/datatable-column/datatable-column-metadata.d.ts +4 -0
  91. package/lib/components/datatable/datatable-column/datatable-column.directive.d.ts +10 -0
  92. package/lib/components/datatable/datatable-settings.d.ts +15 -0
  93. package/lib/components/datatable/datatable.module.d.ts +11 -0
  94. package/lib/components/datatable/index.d.ts +5 -0
  95. package/lib/components/datatable/row-template/row-template.directive.d.ts +9 -0
  96. package/lib/components/datepicker/datepicker.component.d.ts +10 -0
  97. package/lib/components/datepicker/datepicker.module.d.ts +10 -0
  98. package/lib/components/datepicker/index.d.ts +2 -0
  99. package/lib/components/dropdown/dropdown/dropdown.directive.d.ts +20 -0
  100. package/lib/components/dropdown/dropdown-menu/dropdown-menu.directive.d.ts +20 -0
  101. package/lib/components/dropdown/dropdown-toggle/dropdown-toggle.directive.d.ts +11 -0
  102. package/lib/components/dropdown/dropdown.module.d.ts +12 -0
  103. package/lib/components/dropdown/index.d.ts +4 -0
  104. package/lib/components/index.d.ts +15 -3
  105. package/lib/components/multiselect/index.d.ts +2 -0
  106. package/lib/components/multiselect/multiselect.component.d.ts +12 -0
  107. package/lib/components/multiselect/multiselect.module.d.ts +10 -0
  108. package/lib/components/pagination/index.d.ts +2 -0
  109. package/lib/components/pagination/pagination/pagination.component.d.ts +45 -0
  110. package/lib/components/pagination/pagination.module.d.ts +8 -0
  111. package/lib/components/progress-bar/index.d.ts +3 -0
  112. package/lib/components/progress-bar/progress/progress.component.d.ts +8 -0
  113. package/lib/components/progress-bar/progress-bar/progress-bar.component.d.ts +31 -0
  114. package/lib/components/progress-bar/progress-bar.module.d.ts +9 -0
  115. package/lib/components/scrollspy/component/scrollspy.component.d.ts +6 -4
  116. package/lib/components/select2/component/select2.component.d.ts +30 -0
  117. package/lib/components/select2/directive/item-template.directive.d.ts +9 -0
  118. package/lib/components/select2/index.d.ts +3 -0
  119. package/lib/components/select2/select2.module.d.ts +12 -0
  120. package/lib/components/snackbar/component/snackbar.component.d.ts +16 -0
  121. package/lib/components/snackbar/directives/index.d.ts +1 -0
  122. package/lib/components/snackbar/directives/snackbar-close/snackbar-close.directive.d.ts +11 -0
  123. package/lib/components/snackbar/index.d.ts +5 -0
  124. package/lib/components/snackbar/interfaces/index.d.ts +1 -0
  125. package/lib/components/snackbar/interfaces/snackbar-animation-meta.d.ts +7 -0
  126. package/lib/components/snackbar/providers/snackbar-content.provider.d.ts +2 -0
  127. package/lib/components/snackbar/service/snackbar.service.d.ts +14 -0
  128. package/lib/components/snackbar/snackbar.module.d.ts +9 -0
  129. package/lib/components/toggle-button/index.d.ts +2 -0
  130. package/lib/components/toggle-button/toggle-button.component.d.ts +15 -0
  131. package/lib/components/toggle-button/toggle-button.module.d.ts +8 -0
  132. package/lib/components/tooltip/component/tooltip.component.d.ts +11 -0
  133. package/lib/components/tooltip/directive/tooltip.directive.d.ts +19 -0
  134. package/lib/components/tooltip/index.d.ts +2 -0
  135. package/lib/components/tooltip/providers/tooltip-content.provider.d.ts +2 -0
  136. package/lib/components/tooltip/tooltip.module.d.ts +9 -0
  137. package/lib/components/typeahead/index.d.ts +2 -0
  138. package/lib/components/typeahead/typeahead.component.d.ts +29 -0
  139. package/lib/components/typeahead/typeahead.module.d.ts +11 -0
  140. package/lib/enums/index.d.ts +1 -0
  141. package/lib/enums/position.enum.d.ts +6 -0
  142. package/lib/interfaces/index.d.ts +1 -0
  143. package/lib/interfaces/page-with-selection.d.ts +5 -0
  144. package/lib/pipes/font-color/font-color.module.d.ts +8 -0
  145. package/lib/pipes/font-color/font-color.pipe.d.ts +7 -0
  146. package/lib/pipes/font-color/index.d.ts +2 -0
  147. package/lib/pipes/in-list/in-list.module.d.ts +8 -0
  148. package/lib/pipes/in-list/in-list.pipe.d.ts +7 -0
  149. package/lib/pipes/index.d.ts +1 -0
  150. package/lib/pipes/month-name/month-name.pipe.d.ts +1 -1
  151. package/lib/services/calendar-month/calendar-month.service.d.ts +0 -1
  152. package/lib/services/scroll-offset/scroll-offset.service.d.ts +9 -0
  153. package/lib/types/page-number.type.d.ts +1 -0
  154. package/package.json +6 -2
@@ -1,14 +1,120 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Component, Input, NgModule, Injectable, Pipe, Directive, ContentChildren, ViewChild, Optional, forwardRef, SkipSelf, Host, Inject, TemplateRef, ContentChild, HostListener } from '@angular/core';
2
+ import { Component, ContentChildren, NgModule, Input, Injectable, Pipe, EventEmitter, Output, Directive, HostBinding, Host, SkipSelf, HostListener, forwardRef, PLATFORM_ID, Inject, ContentChild, TemplateRef, ViewChild, Optional, ViewChildren, InjectionToken, Injector } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
- import { SlideUpDownAnimation, FadeInOutAnimation, CarouselSlideAnimation } from '@mintplayer/ng-animations';
6
- import { Subject, BehaviorSubject } from 'rxjs';
7
- import { map, takeUntil, take } from 'rxjs/operators';
8
- import { RouterModule } from '@angular/router';
9
- import * as i1$1 from '@mintplayer/ng-click-outside';
10
- import { ClickOutsideModule } from '@mintplayer/ng-click-outside';
11
5
  import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
6
+ import { SlideUpDownAnimation, FadeInOutAnimation, CarouselSlideAnimation, ColorTransitionAnimation } from '@mintplayer/ng-animations';
7
+ import { Subject, BehaviorSubject, map, takeUntil, filter, take, Observable, combineLatest } from 'rxjs';
8
+ import { map as map$1, takeUntil as takeUntil$1, take as take$1 } from 'rxjs/operators';
9
+ import * as i1$1 from '@angular/cdk/overlay';
10
+ import { OverlayModule } from '@angular/cdk/overlay';
11
+ import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
12
+ import '@mintplayer/ng-pagination';
13
+ import * as i1$2 from '@mintplayer/ng-click-outside';
14
+ import { ClickOutsideDirective, ClickOutsideModule } from '@mintplayer/ng-click-outside';
15
+ import { FocusOnLoadModule } from '@mintplayer/ng-focus-on-load';
16
+ import { RouterModule, ROUTER_CONFIGURATION } from '@angular/router';
17
+ import * as i3 from '@angular/forms';
18
+ import { FormsModule } from '@angular/forms';
19
+
20
+ class BsAccordionTabComponent {
21
+ constructor(accordion) {
22
+ this.accordion = accordion;
23
+ }
24
+ ngOnInit() {
25
+ }
26
+ headerClicked(event) {
27
+ if (this.accordion.activeTab === this) {
28
+ this.accordion.activeTab = null;
29
+ }
30
+ else {
31
+ this.accordion.activeTab = this;
32
+ }
33
+ }
34
+ }
35
+ BsAccordionTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabComponent, deps: [{ token: BsAccordionComponent }], target: i0.ɵɵFactoryTarget.Component });
36
+ BsAccordionTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionTabComponent, selector: "bs-accordion-tab", ngImport: i0, template: "<div class=\"card\">\n <ng-content select=\"bs-accordion-tab-header\"></ng-content>\n <div class=\"card-block overflow-hidden\" [@slideUpDown] *ngIf=\"accordion.activeTab === this\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card,.card-header,.card-block{border-radius:0}.card{margin-bottom:-1px}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [SlideUpDownAnimation] });
37
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabComponent, decorators: [{
38
+ type: Component,
39
+ args: [{ selector: 'bs-accordion-tab', animations: [SlideUpDownAnimation], template: "<div class=\"card\">\n <ng-content select=\"bs-accordion-tab-header\"></ng-content>\n <div class=\"card-block overflow-hidden\" [@slideUpDown] *ngIf=\"accordion.activeTab === this\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card,.card-header,.card-block{border-radius:0}.card{margin-bottom:-1px}\n"] }]
40
+ }], ctorParameters: function () { return [{ type: BsAccordionComponent }]; } });
41
+
42
+ class BsAccordionComponent {
43
+ constructor() {
44
+ this.activeTab = null;
45
+ }
46
+ ngOnInit() {
47
+ }
48
+ }
49
+ BsAccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
50
+ BsAccordionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionComponent, selector: "bs-accordion", queries: [{ propertyName: "tabPages", predicate: BsAccordionTabComponent }], ngImport: i0, template: "<ng-content></ng-content>", styles: [""] });
51
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionComponent, decorators: [{
52
+ type: Component,
53
+ args: [{ selector: 'bs-accordion', template: "<ng-content></ng-content>", styles: [""] }]
54
+ }], ctorParameters: function () { return []; }, propDecorators: { tabPages: [{
55
+ type: ContentChildren,
56
+ args: [BsAccordionTabComponent]
57
+ }] } });
58
+
59
+ class BsAccordionTabHeaderComponent {
60
+ constructor(accordionTab, accordion) {
61
+ this.accordionTab = accordionTab;
62
+ this.accordion = accordion;
63
+ }
64
+ ngOnInit() {
65
+ }
66
+ headerClicked(event) {
67
+ event.preventDefault();
68
+ if (this.accordion.activeTab === this.accordionTab) {
69
+ this.accordion.activeTab = null;
70
+ }
71
+ else {
72
+ this.accordion.activeTab = this.accordionTab;
73
+ }
74
+ }
75
+ foo(event) {
76
+ event.preventDefault();
77
+ }
78
+ }
79
+ BsAccordionTabHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabHeaderComponent, deps: [{ token: BsAccordionTabComponent }, { token: BsAccordionComponent }], target: i0.ɵɵFactoryTarget.Component });
80
+ BsAccordionTabHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionTabHeaderComponent, selector: "bs-accordion-tab-header", ngImport: i0, template: "<div class=\"card-header cursor-pointer\" (click)=\"headerClicked($event)\" (contextmenu)=\"foo($event)\">\n <ng-content></ng-content>\n</div>", styles: [""] });
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabHeaderComponent, decorators: [{
82
+ type: Component,
83
+ args: [{ selector: 'bs-accordion-tab-header', template: "<div class=\"card-header cursor-pointer\" (click)=\"headerClicked($event)\" (contextmenu)=\"foo($event)\">\n <ng-content></ng-content>\n</div>", styles: [""] }]
84
+ }], ctorParameters: function () { return [{ type: BsAccordionTabComponent }, { type: BsAccordionComponent }]; } });
85
+
86
+ class BsAccordionModule {
87
+ }
88
+ BsAccordionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
89
+ BsAccordionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, declarations: [BsAccordionComponent,
90
+ BsAccordionTabComponent,
91
+ BsAccordionTabHeaderComponent], imports: [CommonModule,
92
+ BrowserAnimationsModule], exports: [BsAccordionComponent,
93
+ BsAccordionTabComponent,
94
+ BsAccordionTabHeaderComponent] });
95
+ BsAccordionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, imports: [[
96
+ CommonModule,
97
+ BrowserAnimationsModule
98
+ ]] });
99
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, decorators: [{
100
+ type: NgModule,
101
+ args: [{
102
+ declarations: [
103
+ BsAccordionComponent,
104
+ BsAccordionTabComponent,
105
+ BsAccordionTabHeaderComponent
106
+ ],
107
+ imports: [
108
+ CommonModule,
109
+ BrowserAnimationsModule
110
+ ],
111
+ exports: [
112
+ BsAccordionComponent,
113
+ BsAccordionTabComponent,
114
+ BsAccordionTabHeaderComponent
115
+ ]
116
+ }]
117
+ }] });
12
118
 
13
119
  var Color;
14
120
  (function (Color) {
@@ -25,6 +131,14 @@ var Color;
25
131
  Color[Color["transparent"] = 10] = "transparent";
26
132
  })(Color || (Color = {}));
27
133
 
134
+ var Position;
135
+ (function (Position) {
136
+ Position[Position["top"] = 0] = "top";
137
+ Position[Position["left"] = 1] = "left";
138
+ Position[Position["bottom"] = 2] = "bottom";
139
+ Position[Position["right"] = 3] = "right";
140
+ })(Position || (Position = {}));
141
+
28
142
  class BsAlertComponent {
29
143
  constructor() {
30
144
  this.type = Color.primary;
@@ -35,10 +149,10 @@ class BsAlertComponent {
35
149
  }
36
150
  }
37
151
  BsAlertComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAlertComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
38
- BsAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAlertComponent, selector: "bs-alert", inputs: { type: "type" }, ngImport: i0, template: "<div class=\"mb-3 overflow-hidden\" *ngIf=\"isVisible\" [@fadeInOut]>\n <div class=\"alert mb-0\" [ngClass]=\"'alert-' + colors[type]\">\n <ng-content></ng-content>\n </div>\n</div>", styles: ["::ng-deep .alert .btn{bottom:0;display:inline-flex;align-items:center}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [SlideUpDownAnimation, FadeInOutAnimation] });
152
+ BsAlertComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAlertComponent, selector: "bs-alert", inputs: { type: "type" }, ngImport: i0, template: "<div class=\"mb-3 overflow-hidden\" *ngIf=\"isVisible\" [@fadeInOut]>\n <div class=\"alert mb-0\" [ngClass]=\"'alert-' + colors[type]\">\n <ng-content></ng-content>\n </div>\n</div>", styles: ["::ng-deep .alert .btn{bottom:0;display:inline-flex;align-items:center}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], animations: [FadeInOutAnimation] });
39
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAlertComponent, decorators: [{
40
154
  type: Component,
41
- args: [{ selector: 'bs-alert', animations: [SlideUpDownAnimation, FadeInOutAnimation], template: "<div class=\"mb-3 overflow-hidden\" *ngIf=\"isVisible\" [@fadeInOut]>\n <div class=\"alert mb-0\" [ngClass]=\"'alert-' + colors[type]\">\n <ng-content></ng-content>\n </div>\n</div>", styles: ["::ng-deep .alert .btn{bottom:0;display:inline-flex;align-items:center}\n"] }]
155
+ args: [{ selector: 'bs-alert', animations: [FadeInOutAnimation], template: "<div class=\"mb-3 overflow-hidden\" *ngIf=\"isVisible\" [@fadeInOut]>\n <div class=\"alert mb-0\" [ngClass]=\"'alert-' + colors[type]\">\n <ng-content></ng-content>\n </div>\n</div>", styles: ["::ng-deep .alert .btn{bottom:0;display:inline-flex;align-items:center}\n"] }]
42
156
  }], ctorParameters: function () { return []; }, propDecorators: { type: [{
43
157
  type: Input
44
158
  }] } });
@@ -82,64 +196,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
82
196
  }]
83
197
  }] });
84
198
 
85
- class BsCardComponent {
86
- constructor() {
87
- }
88
- ngOnInit() {
89
- }
90
- ngAfterViewInit() {
91
- // console.log('header', this.header);
92
- }
93
- }
94
- BsCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
95
- BsCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCardComponent, selector: "bs-card", ngImport: i0, template: "<div class=\"card\" style=\"width: 18rem;\">\n <ng-content select=\"bs-card-header\"></ng-content>\n <div class=\"card-block\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card-block{margin:-1px}\n"] });
96
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardComponent, decorators: [{
97
- type: Component,
98
- args: [{ selector: 'bs-card', template: "<div class=\"card\" style=\"width: 18rem;\">\n <ng-content select=\"bs-card-header\"></ng-content>\n <div class=\"card-block\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card-block{margin:-1px}\n"] }]
99
- }], ctorParameters: function () { return []; } });
100
-
101
- class BsCardHeaderComponent {
102
- constructor() {
103
- }
104
- ngOnInit() {
105
- }
106
- }
107
- BsCardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
108
- BsCardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCardHeaderComponent, selector: "bs-card-header", ngImport: i0, template: "<div class=\"card-header\">\n <ng-content></ng-content>\n</div>", styles: [""] });
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardHeaderComponent, decorators: [{
110
- type: Component,
111
- args: [{ selector: 'bs-card-header', template: "<div class=\"card-header\">\n <ng-content></ng-content>\n</div>", styles: [""] }]
112
- }], ctorParameters: function () { return []; } });
113
-
114
- class BsCardModule {
115
- }
116
- BsCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
117
- BsCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, declarations: [BsCardComponent,
118
- BsCardHeaderComponent], imports: [CommonModule], exports: [BsCardComponent,
119
- BsCardHeaderComponent] });
120
- BsCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, imports: [[CommonModule]] });
121
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, decorators: [{
122
- type: NgModule,
123
- args: [{
124
- imports: [CommonModule],
125
- declarations: [
126
- BsCardComponent,
127
- BsCardHeaderComponent
128
- ],
129
- exports: [
130
- BsCardComponent,
131
- BsCardHeaderComponent
132
- ]
133
- }]
134
- }] });
135
-
136
199
  class BsCalendarMonthService {
137
- constructor() {
138
- }
139
200
  getWeeks(month) {
140
- let firstAndLast = this.getFirstAndLastDayOfMonth(month);
141
- let days = this.dateDiff(firstAndLast.first, firstAndLast.last) + 1;
142
- let allDays = [
201
+ const firstAndLast = this.getFirstAndLastDayOfMonth(month);
202
+ const days = this.dateDiff(firstAndLast.first, firstAndLast.last) + 1;
203
+ const allDays = [
143
204
  ...this.generateList(this.dayOfWeekMondayBased(firstAndLast.first)).map(d => null),
144
205
  ...this.generateList(days).map(d => {
145
206
  return {
@@ -149,8 +210,8 @@ class BsCalendarMonthService {
149
210
  }),
150
211
  ...this.generateList(6 - this.dayOfWeekMondayBased(firstAndLast.last)).map(d => null),
151
212
  ];
152
- let weeks = this.chunk(allDays, 7);
153
- let weeksMapped = weeks.map((w, i) => {
213
+ const weeks = this.chunk(allDays, 7);
214
+ const weeksMapped = weeks.map((w, i) => {
154
215
  return {
155
216
  number: this.weekOfYear(new Date(month.getFullYear(), month.getMonth(), w.find(d => d !== null)?.dayOfMonth)),
156
217
  week: w
@@ -162,7 +223,7 @@ class BsCalendarMonthService {
162
223
  return [...Array(count).keys()];
163
224
  }
164
225
  dayOfWeekMondayBased(date) {
165
- let d = date.getDay() - 1;
226
+ const d = date.getDay() - 1;
166
227
  if (d < 0) {
167
228
  return 6;
168
229
  }
@@ -171,10 +232,10 @@ class BsCalendarMonthService {
171
232
  }
172
233
  }
173
234
  weekOfYear(date) {
174
- let dateClone = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
235
+ const dateClone = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
175
236
  dateClone.setUTCDate(dateClone.getUTCDate() + 4 - (dateClone.getUTCDay() || 7));
176
- let yearStart = new Date(Date.UTC(dateClone.getUTCFullYear(), 0, 1));
177
- let utcDiff = this.toUTC(dateClone) - this.toUTC(yearStart);
237
+ const yearStart = new Date(Date.UTC(dateClone.getUTCFullYear(), 0, 1));
238
+ const utcDiff = this.toUTC(dateClone) - this.toUTC(yearStart);
178
239
  return Math.ceil((utcDiff / (1000 * 60 * 60 * 24) + 1) / 7);
179
240
  }
180
241
  getFirstAndLastDayOfMonth(date) {
@@ -197,7 +258,7 @@ class BsCalendarMonthService {
197
258
  return Date.UTC(date.getFullYear(), date.getMonth(), date.getDate());
198
259
  }
199
260
  chunk(items, size) {
200
- let result = [];
261
+ const result = [];
201
262
  for (let i = 0; i < items.length; i += size) {
202
263
  result.push(items.slice(i, i + size));
203
264
  }
@@ -211,7 +272,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
211
272
  args: [{
212
273
  providedIn: 'root'
213
274
  }]
214
- }], ctorParameters: function () { return []; } });
275
+ }] });
215
276
 
216
277
  class UcFirstPipe {
217
278
  transform(value, ...args) {
@@ -229,7 +290,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
229
290
 
230
291
  class MonthNamePipe {
231
292
  transform(date, ...args) {
232
- return date.toLocaleString("default", { month: 'long' });
293
+ if (date) {
294
+ return date.toLocaleString("default", { month: 'long' });
295
+ }
296
+ else {
297
+ return '';
298
+ }
233
299
  }
234
300
  }
235
301
  MonthNamePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: MonthNamePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
@@ -242,58 +308,100 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
242
308
  }] });
243
309
 
244
310
  class BsCalendarComponent {
245
- constructor(calendarMonthService) {
311
+ constructor(calendarMonthService, ref) {
246
312
  this.calendarMonthService = calendarMonthService;
247
- this.daysOfWeek = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
313
+ this.ref = ref;
314
+ this.destroyed$ = new Subject();
315
+ //#region CurrentMonth
316
+ this.currentMonth$ = new BehaviorSubject(new Date());
317
+ this.currentMonthChange = new EventEmitter();
318
+ //#endregion
248
319
  //#region SelectedDate
249
- this.selectedDate = new Date();
320
+ this.selectedDate$ = new BehaviorSubject(new Date());
321
+ this.selectedDateChange = new EventEmitter();
250
322
  //#endregion
251
- //#region Weeks
252
- this._weeks = [];
323
+ this.daysOfWeek = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'];
324
+ this.weeks$ = this.currentMonth$
325
+ .pipe(map((month) => this.calendarMonthService.getWeeks(month)))
326
+ .pipe(takeUntil(this.destroyed$));
327
+ this.daysOfWeek$ = this.weeks$
328
+ .pipe(filter((weeks) => weeks.length > 1))
329
+ .pipe(map((weeks) => weeks[1].week))
330
+ .pipe(map((week) => {
331
+ const firstDay = week[0];
332
+ if (firstDay) {
333
+ return week.map((d) => {
334
+ const date = new Date(firstDay.date.getFullYear(), firstDay.date.getMonth(), d?.dayOfMonth);
335
+ return date.toLocaleString('default', { weekday: 'short' });
336
+ });
337
+ }
338
+ else {
339
+ return [];
340
+ }
341
+ }));
342
+ this.selectedDate$.pipe(takeUntil(this.destroyed$)).subscribe((date) => {
343
+ this.selectedDateChange.emit(date);
344
+ });
345
+ this.currentMonth$.pipe(takeUntil(this.destroyed$)).subscribe((month) => {
346
+ this.currentMonthChange.emit(month);
347
+ });
253
348
  }
254
- ngOnInit() {
255
- this.month = new Date();
349
+ get currentMonth() {
350
+ return this.currentMonth$.value;
256
351
  }
257
- get month() {
258
- return this._month;
352
+ set currentMonth(value) {
353
+ this.currentMonth$.next(value);
259
354
  }
260
- set month(value) {
261
- this._month = value;
262
- this.weeks = this.calendarMonthService.getWeeks(this.month);
355
+ get selectedDate() {
356
+ return this.selectedDate$.value;
263
357
  }
264
- get weeks() {
265
- return this._weeks;
358
+ set selectedDate(value) {
359
+ this.selectedDate$.next(value);
266
360
  }
267
- set weeks(value) {
268
- this._weeks = value;
269
- if (this._weeks.length > 1) {
270
- this.daysOfWeek = this._weeks[1].week.map(d => {
271
- let date = new Date(this.month.getFullYear(), this.month.getMonth(), d?.dayOfMonth);
272
- return date.toLocaleString("default", { weekday: 'short' });
273
- });
274
- }
361
+ ngOnDestroy() {
362
+ this.destroyed$.next(true);
275
363
  }
276
- //#endregion
277
364
  previousMonth() {
278
- this.month = new Date(this.month.getFullYear(), this.month.getMonth() - 1, 1);
365
+ this.currentMonth$.pipe(take(1)).subscribe((month) => {
366
+ this.currentMonth$.next(new Date(month.getFullYear(), month.getMonth() - 1, 1));
367
+ });
279
368
  return false;
280
369
  }
281
370
  nextMonth() {
282
- this.month = new Date(this.month.getFullYear(), this.month.getMonth() + 1, 1);
371
+ this.currentMonth$.pipe(take(1)).subscribe((month) => {
372
+ this.currentMonth$.next(new Date(month.getFullYear(), month.getMonth() + 1, 1));
373
+ });
283
374
  return false;
284
375
  }
285
376
  isSameDate(date1, date2) {
286
- return (date1.getFullYear() === date2.getFullYear())
287
- && (date1.getMonth() === date2.getMonth())
288
- && (date1.getDate() === date2.getDate());
377
+ if (date1 === null && date2 === null)
378
+ return true;
379
+ if (date1 === null || date2 === null)
380
+ return false;
381
+ return (date1.getFullYear() === date2.getFullYear() &&
382
+ date1.getMonth() === date2.getMonth() &&
383
+ date1.getDate() === date2.getDate());
384
+ }
385
+ goto(day) {
386
+ if (day) {
387
+ this.selectedDate$.next(day.date);
388
+ }
289
389
  }
290
390
  }
291
- BsCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCalendarComponent, deps: [{ token: BsCalendarMonthService }], target: i0.ɵɵFactoryTarget.Component });
292
- BsCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCalendarComponent, selector: "bs-calendar", ngImport: i0, template: "<table class=\"table w-auto\">\n <tr>\n <td>\n <button class=\"btn btn-default\" (click)=\"previousMonth()\">\n <i class=\"bi bi-chevron-left fw-bolder\"></i>\n </button>\n </td>\n <td colspan=\"6\" class=\"fw-bolder\">\n {{ month | monthName | ucFirst }}\n {{ month.getFullYear() }}\n </td>\n <td>\n <button class=\"btn btn-default border-bottom-0\" (click)=\"nextMonth()\">\n <i class=\"bi bi-chevron-right fw-bolder\"></i>\n </button>\n </td>\n </tr>\n <tr>\n <th></th>\n <th *ngFor=\"let dayOfWeek of daysOfWeek\">\n {{ dayOfWeek }}\n </th>\n </tr>\n <tr *ngFor=\"let week of weeks\">\n <th>\n {{ week.number }}\n </th>\n <td [class.selected]=\"day === null ? false : isSameDate(selectedDate, day.date)\" *ngFor=\"let day of week.week\" (click)=\"day && selectedDate = day.date\">\n <span *ngIf=\"day !== null\">{{ day.dayOfMonth }}</span>\n </td>\n </tr>\n</table>", styles: ["table{border-collapse:collapse;border:1px solid rgba(0,0,0,.125)}table td,table th{width:40px;height:40px;text-align:center}table td span,table th span{cursor:pointer;white-space:nowrap}table td.selected{background-color:#0d6efd;color:#fff}table th{background-color:#f8f9fa}table tr{border-top:none}table tr:first-child>td{border-bottom:1px solid rgba(0,0,0,.125)}table tr:nth-of-type(2)>th:not(:nth-of-type(1)){border-bottom:1px solid rgba(0,0,0,.125)}table tr:not(:nth-of-type(2))>th:nth-of-type(1){border-right:1px solid rgba(0,0,0,.125)}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "ucFirst": UcFirstPipe, "monthName": MonthNamePipe } });
391
+ BsCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCalendarComponent, deps: [{ token: BsCalendarMonthService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
392
+ BsCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCalendarComponent, selector: "bs-calendar", inputs: { currentMonth: "currentMonth", selectedDate: "selectedDate" }, outputs: { currentMonthChange: "currentMonthChange", selectedDateChange: "selectedDateChange" }, ngImport: i0, template: "<table class=\"table w-auto mb-0\">\n <tr>\n <td>\n <button class=\"btn btn-default\" (click)=\"previousMonth()\">\n <i class=\"bi bi-chevron-left fw-bolder\"></i>\n </button>\n </td>\n <td colspan=\"6\" class=\"fw-bolder\">\n {{ currentMonth$ | async | monthName | ucFirst }}\n {{ (currentMonth$ | async)?.getFullYear() }}\n </td>\n <td>\n <button class=\"btn btn-default border-bottom-0\" (click)=\"nextMonth()\">\n <i class=\"bi bi-chevron-right fw-bolder\"></i>\n </button>\n </td>\n </tr>\n <tr>\n <th></th>\n <th *ngFor=\"let dayOfWeek of daysOfWeek\">\n {{ dayOfWeek }}\n </th>\n </tr>\n <tr *ngFor=\"let week of (weeks$ | async)\">\n <th>\n {{ week.number }}\n </th>\n <td [class.selected]=\"day === null ? false : isSameDate(selectedDate$ | async, day.date)\" *ngFor=\"let day of week.week\" (click)=\"goto(day)\">\n <span *ngIf=\"day !== null\">{{ day.dayOfMonth }}</span>\n </td>\n </tr>\n</table>", styles: ["table{border-collapse:collapse;border:1px solid rgba(0,0,0,.125);background:#fff}table td,table th{width:40px;height:40px;text-align:center}table td span,table th span{cursor:pointer;white-space:nowrap}table td.selected{background-color:#0d6efd;color:#fff}table th{background-color:#f8f9fa}table tr{border-top:none}table tr:first-child>td{border-bottom:1px solid rgba(0,0,0,.125)}table tr:nth-of-type(2)>th:not(:nth-of-type(1)){border-bottom:1px solid rgba(0,0,0,.125)}table tr:not(:nth-of-type(2))>th:nth-of-type(1){border-right:1px solid rgba(0,0,0,.125)}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "ucFirst": UcFirstPipe, "monthName": MonthNamePipe, "async": i1.AsyncPipe } });
293
393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCalendarComponent, decorators: [{
294
394
  type: Component,
295
- args: [{ selector: 'bs-calendar', template: "<table class=\"table w-auto\">\n <tr>\n <td>\n <button class=\"btn btn-default\" (click)=\"previousMonth()\">\n <i class=\"bi bi-chevron-left fw-bolder\"></i>\n </button>\n </td>\n <td colspan=\"6\" class=\"fw-bolder\">\n {{ month | monthName | ucFirst }}\n {{ month.getFullYear() }}\n </td>\n <td>\n <button class=\"btn btn-default border-bottom-0\" (click)=\"nextMonth()\">\n <i class=\"bi bi-chevron-right fw-bolder\"></i>\n </button>\n </td>\n </tr>\n <tr>\n <th></th>\n <th *ngFor=\"let dayOfWeek of daysOfWeek\">\n {{ dayOfWeek }}\n </th>\n </tr>\n <tr *ngFor=\"let week of weeks\">\n <th>\n {{ week.number }}\n </th>\n <td [class.selected]=\"day === null ? false : isSameDate(selectedDate, day.date)\" *ngFor=\"let day of week.week\" (click)=\"day && selectedDate = day.date\">\n <span *ngIf=\"day !== null\">{{ day.dayOfMonth }}</span>\n </td>\n </tr>\n</table>", styles: ["table{border-collapse:collapse;border:1px solid rgba(0,0,0,.125)}table td,table th{width:40px;height:40px;text-align:center}table td span,table th span{cursor:pointer;white-space:nowrap}table td.selected{background-color:#0d6efd;color:#fff}table th{background-color:#f8f9fa}table tr{border-top:none}table tr:first-child>td{border-bottom:1px solid rgba(0,0,0,.125)}table tr:nth-of-type(2)>th:not(:nth-of-type(1)){border-bottom:1px solid rgba(0,0,0,.125)}table tr:not(:nth-of-type(2))>th:nth-of-type(1){border-right:1px solid rgba(0,0,0,.125)}\n"] }]
296
- }], ctorParameters: function () { return [{ type: BsCalendarMonthService }]; } });
395
+ args: [{ selector: 'bs-calendar', template: "<table class=\"table w-auto mb-0\">\n <tr>\n <td>\n <button class=\"btn btn-default\" (click)=\"previousMonth()\">\n <i class=\"bi bi-chevron-left fw-bolder\"></i>\n </button>\n </td>\n <td colspan=\"6\" class=\"fw-bolder\">\n {{ currentMonth$ | async | monthName | ucFirst }}\n {{ (currentMonth$ | async)?.getFullYear() }}\n </td>\n <td>\n <button class=\"btn btn-default border-bottom-0\" (click)=\"nextMonth()\">\n <i class=\"bi bi-chevron-right fw-bolder\"></i>\n </button>\n </td>\n </tr>\n <tr>\n <th></th>\n <th *ngFor=\"let dayOfWeek of daysOfWeek\">\n {{ dayOfWeek }}\n </th>\n </tr>\n <tr *ngFor=\"let week of (weeks$ | async)\">\n <th>\n {{ week.number }}\n </th>\n <td [class.selected]=\"day === null ? false : isSameDate(selectedDate$ | async, day.date)\" *ngFor=\"let day of week.week\" (click)=\"goto(day)\">\n <span *ngIf=\"day !== null\">{{ day.dayOfMonth }}</span>\n </td>\n </tr>\n</table>", styles: ["table{border-collapse:collapse;border:1px solid rgba(0,0,0,.125);background:#fff}table td,table th{width:40px;height:40px;text-align:center}table td span,table th span{cursor:pointer;white-space:nowrap}table td.selected{background-color:#0d6efd;color:#fff}table th{background-color:#f8f9fa}table tr{border-top:none}table tr:first-child>td{border-bottom:1px solid rgba(0,0,0,.125)}table tr:nth-of-type(2)>th:not(:nth-of-type(1)){border-bottom:1px solid rgba(0,0,0,.125)}table tr:not(:nth-of-type(2))>th:nth-of-type(1){border-right:1px solid rgba(0,0,0,.125)}\n"] }]
396
+ }], ctorParameters: function () { return [{ type: BsCalendarMonthService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { currentMonthChange: [{
397
+ type: Output
398
+ }], currentMonth: [{
399
+ type: Input
400
+ }], selectedDateChange: [{
401
+ type: Output
402
+ }], selectedDate: [{
403
+ type: Input
404
+ }] } });
297
405
 
298
406
  class BsMonthNamePipeModule {
299
407
  }
@@ -406,6 +514,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
406
514
  }]
407
515
  }] });
408
516
 
517
+ class BsCardComponent {
518
+ constructor() {
519
+ }
520
+ ngOnInit() {
521
+ }
522
+ ngAfterViewInit() {
523
+ }
524
+ }
525
+ BsCardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
526
+ BsCardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCardComponent, selector: "bs-card", ngImport: i0, template: "<div class=\"card\" style=\"width: 18rem;\">\n <ng-content select=\"bs-card-header\"></ng-content>\n <div class=\"card-block\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card-block{margin:-1px}\n"] });
527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardComponent, decorators: [{
528
+ type: Component,
529
+ args: [{ selector: 'bs-card', template: "<div class=\"card\" style=\"width: 18rem;\">\n <ng-content select=\"bs-card-header\"></ng-content>\n <div class=\"card-block\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card-block{margin:-1px}\n"] }]
530
+ }], ctorParameters: function () { return []; } });
531
+
532
+ class BsCardHeaderComponent {
533
+ constructor() {
534
+ }
535
+ ngOnInit() {
536
+ }
537
+ }
538
+ BsCardHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
539
+ BsCardHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCardHeaderComponent, selector: "bs-card-header", ngImport: i0, template: "<div class=\"card-header\">\n <ng-content></ng-content>\n</div>", styles: [""] });
540
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardHeaderComponent, decorators: [{
541
+ type: Component,
542
+ args: [{ selector: 'bs-card-header', template: "<div class=\"card-header\">\n <ng-content></ng-content>\n</div>", styles: [""] }]
543
+ }], ctorParameters: function () { return []; } });
544
+
545
+ class BsCardModule {
546
+ }
547
+ BsCardModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
548
+ BsCardModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, declarations: [BsCardComponent,
549
+ BsCardHeaderComponent], imports: [CommonModule], exports: [BsCardComponent,
550
+ BsCardHeaderComponent] });
551
+ BsCardModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, imports: [[CommonModule]] });
552
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCardModule, decorators: [{
553
+ type: NgModule,
554
+ args: [{
555
+ imports: [CommonModule],
556
+ declarations: [
557
+ BsCardComponent,
558
+ BsCardHeaderComponent
559
+ ],
560
+ exports: [
561
+ BsCardComponent,
562
+ BsCardHeaderComponent
563
+ ]
564
+ }]
565
+ }] });
566
+
409
567
  class BsCarouselImageDirective {
410
568
  constructor(templateRef) {
411
569
  this.templateRef = templateRef;
@@ -423,20 +581,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
423
581
 
424
582
  class BsCarouselComponent {
425
583
  constructor() {
426
- // @HostBinding('@.disabled')
427
- // public animationsDisabled = false;
428
- this.animation = 'slide';
584
+ this.animationsDisabled = false;
585
+ //#region Animation
586
+ this._animation = 'slide';
587
+ //#endregion
429
588
  this.destroyed$ = new Subject();
430
589
  this.currentImageCounter$ = new BehaviorSubject(-1);
431
590
  this.currentImageIndex$ = this.currentImageCounter$
432
- .pipe(map((counter) => {
591
+ .pipe(map$1((counter) => {
433
592
  const l = this.images.length;
434
593
  return ((counter % l) + l) % l;
435
594
  }))
436
- .pipe(takeUntil(this.destroyed$));
595
+ .pipe(takeUntil$1(this.destroyed$));
437
596
  this.currentImage$ = this.currentImageIndex$
438
- .pipe(map((index) => this.images.get(index)?.itemTemplate ?? null))
439
- .pipe(takeUntil(this.destroyed$));
597
+ .pipe(map$1((index) => this.images.get(index)?.itemTemplate ?? null))
598
+ .pipe(takeUntil$1(this.destroyed$));
440
599
  }
441
600
  ngOnInit() { }
442
601
  ngOnDestroy() {
@@ -450,16 +609,26 @@ class BsCarouselComponent {
450
609
  this.currentImageCounter$.next(-1);
451
610
  }
452
611
  }
612
+ set animation(value) {
613
+ this.animationsDisabled = true;
614
+ this._animation = value;
615
+ setTimeout(() => {
616
+ this.animationsDisabled = false;
617
+ }, 20);
618
+ }
619
+ get animation() {
620
+ return this._animation;
621
+ }
453
622
  previousImage() {
454
623
  this.currentImageCounter$
455
- .pipe(take(1))
624
+ .pipe(take$1(1))
456
625
  .subscribe((currentImageCounter) => {
457
626
  this.currentImageCounter$.next(currentImageCounter - 1);
458
627
  });
459
628
  }
460
629
  nextImage() {
461
630
  this.currentImageCounter$
462
- .pipe(take(1))
631
+ .pipe(take$1(1))
463
632
  .subscribe((currentImageCounter) => {
464
633
  this.currentImageCounter$.next(currentImageCounter + 1);
465
634
  });
@@ -473,11 +642,14 @@ class BsCarouselComponent {
473
642
  }
474
643
  }
475
644
  BsCarouselComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCarouselComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
476
- BsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCarouselComponent, selector: "bs-carousel", inputs: { animation: "animation" }, queries: [{ propertyName: "images", predicate: BsCarouselImageDirective }], ngImport: i0, template: "<div class=\"carousel slide\">\n <div class=\"carousel-indicators\">\n <button *ngFor=\"let image of images; let i = index\" type=\"button\" (click)=\"setCurrentImage(i)\"\n [class.active]=\"(currentImageIndex$ | async) === i\"\n [attr.aria-current]=\"(currentImageIndex$ | async) === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n </div>\n\n\n\n <!-- [@carouselSlide]=\"currentImageCounter$ | async\" -->\n <div class=\"carousel-inner\" [@carouselSlide]=\"currentImageCounter$ | async\" *ngIf=\"animation === 'slide'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n <div class=\"carousel-inner\" *ngIf=\"animation === 'fade'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n\n\n\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n</div>", styles: [".carousel{min-height:100px}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe }, animations: [FadeInOutAnimation, CarouselSlideAnimation] });
645
+ BsCarouselComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsCarouselComponent, selector: "bs-carousel", inputs: { animation: "animation" }, host: { properties: { "@.disabled": "this.animationsDisabled" } }, queries: [{ propertyName: "images", predicate: BsCarouselImageDirective }], ngImport: i0, template: "<div class=\"carousel slide\">\n <div class=\"carousel-indicators\">\n <button *ngFor=\"let image of images; let i = index\" type=\"button\" (click)=\"setCurrentImage(i)\"\n [class.active]=\"(currentImageIndex$ | async) === i\" data-bs-target\n [attr.aria-current]=\"(currentImageIndex$ | async) === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n </div>\n\n <div class=\"carousel-inner\" [@carouselSlide]=\"currentImageCounter$ | async\" *ngIf=\"animation === 'slide'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n <div class=\"carousel-inner\" *ngIf=\"animation === 'fade'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n</div>", styles: [".carousel{min-height:100px}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "async": i1.AsyncPipe }, animations: [FadeInOutAnimation, CarouselSlideAnimation] });
477
646
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsCarouselComponent, decorators: [{
478
647
  type: Component,
479
- args: [{ selector: 'bs-carousel', animations: [FadeInOutAnimation, CarouselSlideAnimation], template: "<div class=\"carousel slide\">\n <div class=\"carousel-indicators\">\n <button *ngFor=\"let image of images; let i = index\" type=\"button\" (click)=\"setCurrentImage(i)\"\n [class.active]=\"(currentImageIndex$ | async) === i\"\n [attr.aria-current]=\"(currentImageIndex$ | async) === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n </div>\n\n\n\n <!-- [@carouselSlide]=\"currentImageCounter$ | async\" -->\n <div class=\"carousel-inner\" [@carouselSlide]=\"currentImageCounter$ | async\" *ngIf=\"animation === 'slide'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n <div class=\"carousel-inner\" *ngIf=\"animation === 'fade'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n\n\n\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n</div>", styles: [".carousel{min-height:100px}\n"] }]
480
- }], ctorParameters: function () { return []; }, propDecorators: { animation: [{
648
+ args: [{ selector: 'bs-carousel', animations: [FadeInOutAnimation, CarouselSlideAnimation], template: "<div class=\"carousel slide\">\n <div class=\"carousel-indicators\">\n <button *ngFor=\"let image of images; let i = index\" type=\"button\" (click)=\"setCurrentImage(i)\"\n [class.active]=\"(currentImageIndex$ | async) === i\" data-bs-target\n [attr.aria-current]=\"(currentImageIndex$ | async) === i ? true : null\"\n [attr.aria-label]=\"'Slide ' + i\"></button>\n </div>\n\n <div class=\"carousel-inner\" [@carouselSlide]=\"currentImageCounter$ | async\" *ngIf=\"animation === 'slide'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n <div class=\"carousel-inner\" *ngIf=\"animation === 'fade'\">\n <ng-container *ngFor=\"let image of images; let i = index\">\n <div class=\"carousel-item\" [class.active]=\"true\" @fadeInOut *ngIf=\"(currentImageIndex$ | async) === i\">\n <ng-container [ngTemplateOutlet]=\"image.itemTemplate\"></ng-container> \n </div>\n </ng-container>\n </div>\n\n <button class=\"carousel-control-prev\" type=\"button\" (click)=\"previousImage()\">\n <span class=\"carousel-control-prev-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Previous</span>\n </button>\n <button class=\"carousel-control-next\" type=\"button\" (click)=\"nextImage()\">\n <span class=\"carousel-control-next-icon\" aria-hidden=\"true\"></span>\n <span class=\"visually-hidden\">Next</span>\n </button>\n</div>", styles: [".carousel{min-height:100px}\n"] }]
649
+ }], ctorParameters: function () { return []; }, propDecorators: { animationsDisabled: [{
650
+ type: HostBinding,
651
+ args: ['@.disabled']
652
+ }], animation: [{
481
653
  type: Input
482
654
  }], images: [{
483
655
  type: ContentChildren,
@@ -510,26 +682,639 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
510
682
  }]
511
683
  }] });
512
684
 
513
- class BsListGroupItemComponent {
514
- constructor() {
685
+ class BsContextMenuDirective {
686
+ constructor(overlay, templateRef, viewContainerRef, element) {
687
+ this.overlay = overlay;
688
+ this.templateRef = templateRef;
689
+ this.viewContainerRef = viewContainerRef;
690
+ this.element = element;
691
+ this.overlayRef = null;
692
+ this.templatePortal = null;
693
+ this.element.nativeElement.oncontextmenu = (ev) => {
694
+ ev.preventDefault();
695
+ this.checkAndCloseExisting(ev);
696
+ this.overlayRef = this.overlay.create({
697
+ scrollStrategy: this.overlay.scrollStrategies.noop(),
698
+ positionStrategy: this.overlay.position()
699
+ .global()
700
+ .left(ev.x + 'px')
701
+ .bottom((window.innerHeight - ev.y) + 'px')
702
+ .top(ev.y + 'px')
703
+ });
704
+ this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);
705
+ this.overlayRef.attach(this.templatePortal);
706
+ };
515
707
  }
516
- ngOnInit() {
708
+ clickAnywhere(ev) {
709
+ this.checkAndCloseExisting(ev);
710
+ }
711
+ checkAndCloseExisting(ev) {
712
+ if (this.overlayRef) {
713
+ if (!this.overlayRef.overlayElement.contains(ev.target)) {
714
+ this.overlayRef.detach();
715
+ this.overlayRef.dispose();
716
+ this.overlayRef = null;
717
+ }
718
+ }
517
719
  }
518
720
  }
519
- BsListGroupItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
520
- BsListGroupItemComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsListGroupItemComponent, selector: "bs-list-group-item", ngImport: i0, template: "<li class=\"list-group-item\">\n <ng-content></ng-content>\n</li>", styles: [".list-group-item{margin-bottom:-1px}\n"] });
521
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupItemComponent, decorators: [{
522
- type: Component,
523
- args: [{ selector: 'bs-list-group-item', template: "<li class=\"list-group-item\">\n <ng-content></ng-content>\n</li>", styles: [".list-group-item{margin-bottom:-1px}\n"] }]
524
- }], ctorParameters: function () { return []; } });
721
+ BsContextMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuDirective, deps: [{ token: i1$1.Overlay }, { token: i0.TemplateRef }, { token: i0.ViewContainerRef }, { token: i0.ElementRef, host: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
722
+ BsContextMenuDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsContextMenuDirective, selector: "[bsContextMenu]", host: { listeners: { "document:click": "clickAnywhere($event)" } }, ngImport: i0 });
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuDirective, decorators: [{
724
+ type: Directive,
725
+ args: [{
726
+ selector: '[bsContextMenu]'
727
+ }]
728
+ }], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.TemplateRef }, { type: i0.ViewContainerRef }, { type: i0.ElementRef, decorators: [{
729
+ type: Host
730
+ }, {
731
+ type: SkipSelf
732
+ }] }]; }, propDecorators: { clickAnywhere: [{
733
+ type: HostListener,
734
+ args: ['document:click', ['$event']]
735
+ }] } });
525
736
 
526
- class BsListGroupComponent {
527
- constructor() {
528
- }
529
- ngOnInit() {
530
- }
737
+ class BsContextMenuModule {
531
738
  }
532
- BsListGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
739
+ BsContextMenuModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
740
+ BsContextMenuModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuModule, declarations: [BsContextMenuDirective], imports: [CommonModule], exports: [BsContextMenuDirective] });
741
+ BsContextMenuModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuModule, imports: [[
742
+ CommonModule
743
+ ]] });
744
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsContextMenuModule, decorators: [{
745
+ type: NgModule,
746
+ args: [{
747
+ declarations: [
748
+ BsContextMenuDirective
749
+ ],
750
+ imports: [
751
+ CommonModule
752
+ ],
753
+ exports: [
754
+ BsContextMenuDirective
755
+ ]
756
+ }]
757
+ }] });
758
+
759
+ class BsDatatableColumnDirective {
760
+ constructor(templateRef) {
761
+ this.bsDatatableColumn = { name: '', sortable: true };
762
+ this.templateRef = templateRef;
763
+ }
764
+ }
765
+ BsDatatableColumnDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableColumnDirective, deps: [{ token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
766
+ BsDatatableColumnDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsDatatableColumnDirective, selector: "[bsDatatableColumn]", inputs: { bsDatatableColumn: "bsDatatableColumn" }, ngImport: i0 });
767
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableColumnDirective, decorators: [{
768
+ type: Directive,
769
+ args: [{
770
+ selector: '[bsDatatableColumn]'
771
+ }]
772
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef }]; }, propDecorators: { bsDatatableColumn: [{
773
+ type: Input
774
+ }] } });
775
+
776
+ class DatatableSettings {
777
+ constructor(data) {
778
+ this.sortProperty = '';
779
+ this.sortDirection = 'ascending';
780
+ Object.assign(this, data);
781
+ if (data && data.perPage) {
782
+ this.perPage = data.perPage;
783
+ }
784
+ else {
785
+ // Set default value
786
+ this.perPage = {
787
+ values: [10, 20, 50],
788
+ selected: 20
789
+ };
790
+ }
791
+ if (data && data.page) {
792
+ this.page = data.page;
793
+ }
794
+ else {
795
+ // Set default value
796
+ this.page = {
797
+ values: [1],
798
+ selected: 1
799
+ };
800
+ }
801
+ }
802
+ toPagination() {
803
+ const res = {
804
+ sortProperty: this.sortProperty,
805
+ sortDirection: this.sortDirection,
806
+ perPage: this.perPage.selected,
807
+ page: this.page.selected
808
+ };
809
+ return res;
810
+ }
811
+ }
812
+
813
+ class BsPaginationComponent {
814
+ constructor() {
815
+ /** All page numbers. */
816
+ this.pageNumbers$ = new BehaviorSubject([]);
817
+ /** Selected number. */
818
+ this.selectedPageNumber$ = new BehaviorSubject(1);
819
+ /** Number of boxes. */
820
+ this.numberOfBoxes$ = new BehaviorSubject(0);
821
+ /** Display previous/next arrows. */
822
+ this.showArrows$ = new BehaviorSubject(true);
823
+ /** Indicates if first value is selected. */
824
+ this.isFirstPage$ = new Observable();
825
+ /** Indicates if last value is selected. */
826
+ this.isLastPage$ = new Observable();
827
+ /** The number of boxes (excluding arrows) that's being shown on the pagination component. */
828
+ this.visibleNumberOfNumberBoxes$ = new Observable();
829
+ this._selectedPageNumber = 0;
830
+ this.selectedPageNumberChange = new EventEmitter();
831
+ this._numberOfBoxes = 0;
832
+ this._pageNumbers = [];
833
+ this._showArrows = true;
834
+ this.destroyed$ = new Subject();
835
+ this.visibleNumberOfNumberBoxes$ =
836
+ combineLatest([this.numberOfBoxes$, this.pageNumbers$, this.showArrows$])
837
+ .pipe(takeUntil(this.destroyed$))
838
+ .pipe(map(([numberOfBoxes, pageNumbers, showArrows]) => {
839
+ if (numberOfBoxes <= 0) {
840
+ return pageNumbers.length;
841
+ }
842
+ else if (!showArrows) {
843
+ return Math.min(numberOfBoxes, pageNumbers.length);
844
+ }
845
+ else if (numberOfBoxes <= 2) {
846
+ return Math.min(1, pageNumbers.length);
847
+ }
848
+ else {
849
+ return Math.min(numberOfBoxes - 2, pageNumbers.length);
850
+ }
851
+ }));
852
+ this.shownPageNumbers$ =
853
+ combineLatest([this.pageNumbers$, this.selectedPageNumber$, this.visibleNumberOfNumberBoxes$])
854
+ .pipe(takeUntil(this.destroyed$))
855
+ .pipe(map(([pageNumbers, selectedPageNumber, visibleNumberOfNumberBoxes]) => {
856
+ let startIndex = 0;
857
+ const half = Math.round((visibleNumberOfNumberBoxes - 1) / 2);
858
+ if (pageNumbers.indexOf(selectedPageNumber) < half) {
859
+ startIndex = 0;
860
+ }
861
+ else if (pageNumbers.indexOf(selectedPageNumber) >= (pageNumbers.length - half)) {
862
+ startIndex = pageNumbers.length - visibleNumberOfNumberBoxes;
863
+ }
864
+ else {
865
+ startIndex = pageNumbers.indexOf(selectedPageNumber) - half;
866
+ }
867
+ return [...Array(visibleNumberOfNumberBoxes).keys()]
868
+ .map(p => p + startIndex)
869
+ .map(p => ({
870
+ page: pageNumbers[p],
871
+ selected: pageNumbers[p] === selectedPageNumber
872
+ }));
873
+ }));
874
+ this.isFirstPage$ =
875
+ combineLatest([this.pageNumbers$, this.selectedPageNumber$])
876
+ .pipe(takeUntil(this.destroyed$))
877
+ .pipe(map(([pageNumbers, selectedPageNumber]) => {
878
+ return pageNumbers.indexOf(selectedPageNumber) === 0;
879
+ }));
880
+ this.isLastPage$ =
881
+ combineLatest([this.pageNumbers$, this.selectedPageNumber$])
882
+ .pipe(takeUntil(this.destroyed$))
883
+ .pipe(map(([pageNumbers, selectedPageNumber]) => {
884
+ return pageNumbers.indexOf(selectedPageNumber) === (pageNumbers.length - 1);
885
+ }));
886
+ this.selectedPageNumber$
887
+ .pipe(takeUntil(this.destroyed$))
888
+ .subscribe((selectedPageNumber) => {
889
+ this.selectedPageNumberChange.emit(selectedPageNumber);
890
+ });
891
+ }
892
+ ngOnInit() {
893
+ }
894
+ ngOnDestroy() {
895
+ this.destroyed$.next(true);
896
+ }
897
+ onSelectPage(event, page) {
898
+ this.selectedPageNumber$.next(page);
899
+ return false;
900
+ }
901
+ onPrevious() {
902
+ this.selectedPageNumber$.next(this.selectedPageNumber$.value - 1);
903
+ return false;
904
+ }
905
+ onNext() {
906
+ this.selectedPageNumber$.next(this.selectedPageNumber$.value + 1);
907
+ return false;
908
+ }
909
+ set selectedPageNumber(value) {
910
+ this._selectedPageNumber = value;
911
+ this.selectedPageNumber$.next(value);
912
+ }
913
+ get selectedPageNumber() {
914
+ return this._selectedPageNumber;
915
+ }
916
+ set numberOfBoxes(value) {
917
+ this._numberOfBoxes = value;
918
+ this.numberOfBoxes$.next(value);
919
+ }
920
+ get numberOfBoxes() {
921
+ return this._numberOfBoxes;
922
+ }
923
+ set pageNumbers(value) {
924
+ this._pageNumbers = value;
925
+ this.pageNumbers$.next(value);
926
+ }
927
+ get pageNumbers() {
928
+ return this._pageNumbers;
929
+ }
930
+ set showArrows(value) {
931
+ this._showArrows = value;
932
+ this.showArrows$.next(value);
933
+ }
934
+ get showArrows() {
935
+ return this._showArrows;
936
+ }
937
+ }
938
+ BsPaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
939
+ BsPaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsPaginationComponent, selector: "bs-pagination", inputs: { selectedPageNumber: "selectedPageNumber", numberOfBoxes: "numberOfBoxes", pageNumbers: "pageNumbers", showArrows: "showArrows" }, outputs: { selectedPageNumberChange: "selectedPageNumberChange" }, ngImport: i0, template: "<ul class=\"pagination\">\n <li class=\"page-item\" *ngIf=\"showArrows$ | async\" [class.disabled]=\"isFirstPage$ | async\">\n <a class=\"page-link\" href=\"\" (click)=\"onPrevious()\" aria-label=\"Previous\">\n <span aria-hidden=\"true\">&laquo;</span>\n <span class=\"visually-hidden\">Previous</span>\n </a>\n </li>\n <li *ngFor=\"let pageNumber of (shownPageNumbers$ | async)\" class=\"page-item\"\n [ngClass]=\"{ 'active': pageNumber.selected }\">\n <a class=\"page-link\" href=\"\" (click)=\"onSelectPage($event, pageNumber.page)\" *ngIf=\"pageNumber.page != '...'\">\n {{ pageNumber.page }}\n <span class=\"visually-hidden\" *ngIf=\"pageNumber.selected\">(current)</span>\n </a>\n </li>\n <li class=\"page-item\" *ngIf=\"showArrows$ | async\" [class.disabled]=\"isLastPage$ | async\">\n <a class=\"page-link\" href=\"\" (click)=\"onNext()\" aria-label=\"Next\">\n <span aria-hidden=\"true\">&raquo;</span>\n <span class=\"visually-hidden\">Next</span>\n </a>\n </li>\n</ul>", styles: [":host{display:inline-block}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], pipes: { "async": i1.AsyncPipe } });
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationComponent, decorators: [{
941
+ type: Component,
942
+ args: [{ selector: 'bs-pagination', template: "<ul class=\"pagination\">\n <li class=\"page-item\" *ngIf=\"showArrows$ | async\" [class.disabled]=\"isFirstPage$ | async\">\n <a class=\"page-link\" href=\"\" (click)=\"onPrevious()\" aria-label=\"Previous\">\n <span aria-hidden=\"true\">&laquo;</span>\n <span class=\"visually-hidden\">Previous</span>\n </a>\n </li>\n <li *ngFor=\"let pageNumber of (shownPageNumbers$ | async)\" class=\"page-item\"\n [ngClass]=\"{ 'active': pageNumber.selected }\">\n <a class=\"page-link\" href=\"\" (click)=\"onSelectPage($event, pageNumber.page)\" *ngIf=\"pageNumber.page != '...'\">\n {{ pageNumber.page }}\n <span class=\"visually-hidden\" *ngIf=\"pageNumber.selected\">(current)</span>\n </a>\n </li>\n <li class=\"page-item\" *ngIf=\"showArrows$ | async\" [class.disabled]=\"isLastPage$ | async\">\n <a class=\"page-link\" href=\"\" (click)=\"onNext()\" aria-label=\"Next\">\n <span aria-hidden=\"true\">&raquo;</span>\n <span class=\"visually-hidden\">Next</span>\n </a>\n </li>\n</ul>", styles: [":host{display:inline-block}\n"] }]
943
+ }], ctorParameters: function () { return []; }, propDecorators: { selectedPageNumberChange: [{
944
+ type: Output
945
+ }], selectedPageNumber: [{
946
+ type: Input
947
+ }], numberOfBoxes: [{
948
+ type: Input
949
+ }], pageNumbers: [{
950
+ type: Input
951
+ }], showArrows: [{
952
+ type: Input
953
+ }] } });
954
+
955
+ class BsDatatableComponent {
956
+ constructor() {
957
+ this.columns = [];
958
+ this.onReloadData = new EventEmitter();
959
+ this.settings = new DatatableSettings();
960
+ this.settings.sortProperty = '';
961
+ this.settings.sortDirection = 'ascending';
962
+ this.settings.perPage = { values: [10, 20, 50], selected: 20 };
963
+ this.settings.page = { values: [1], selected: 1 };
964
+ }
965
+ columnHeaderClicked(column) {
966
+ if (column.bsDatatableColumn.sortable) {
967
+ if (this.settings.sortProperty !== column.bsDatatableColumn.name) {
968
+ this.settings.sortProperty = column.bsDatatableColumn.name;
969
+ this.settings.sortDirection = 'ascending';
970
+ }
971
+ else if (this.settings.sortDirection === 'descending') {
972
+ this.settings.sortDirection = 'ascending';
973
+ }
974
+ else {
975
+ this.settings.sortDirection = 'descending';
976
+ }
977
+ this.onReloadData.emit();
978
+ }
979
+ }
980
+ ngOnInit() {
981
+ }
982
+ }
983
+ BsDatatableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
984
+ BsDatatableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsDatatableComponent, selector: "bs-datatable", inputs: { settings: "settings", data: "data" }, outputs: { onReloadData: "onReloadData" }, queries: [{ propertyName: "columns", predicate: BsDatatableColumnDirective }], ngImport: i0, template: "<div class=\"table-responsive overflow-y-hidden mb-3\">\n <table class=\"table table-striped table-hover w-100 mb-0\" cellspacing=\"0\" role=\"grid\">\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\" class=\"text-nowrap\"\n [class.sort]=\"column.bsDatatableColumn.sortable\"\n [class.sort-asc]=\"column.bsDatatableColumn.sortable && (settings.sortProperty === column.bsDatatableColumn.name) && (settings.sortDirection === 'ascending')\"\n [class.sort-desc]=\"column.bsDatatableColumn.sortable && (settings.sortProperty === column.bsDatatableColumn.name) && (settings.sortDirection === 'descending')\"\n (click)=\"columnHeaderClicked(column)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"!!data && !!rowTemplate\">\n <ng-container *ngFor=\"let item of data.data\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n</div>\n<div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <bs-pagination class=\"float-start\" [pageNumbers]=\"settings.perPage.values\"\n [(selectedPageNumber)]=\"settings.perPage.selected\" (selectedPageNumberChange)=\"onReloadData.emit()\"\n [showArrows]=\"false\"></bs-pagination>\n <bs-pagination class=\"float-end\" [pageNumbers]=\"settings.page.values\"\n [(selectedPageNumber)]=\"settings.page.selected\" (selectedPageNumberChange)=\"onReloadData.emit()\"\n [showArrows]=\"true\"></bs-pagination>\n </div>\n </div>\n</div>", styles: ["@charset \"UTF-8\";.overflow-y-hidden{overflow-y:hidden}.table thead th.sort{position:relative;cursor:pointer}.table thead th.sort:before,.table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}.table thead th.sort:before{content:\"\\2191\";right:1em}.table thead th.sort:after{content:\"\\2193\";right:.5em}.table thead th.sort.sort-asc:after{opacity:1}.table thead th.sort.sort-desc:before{opacity:1}\n"], components: [{ type: BsPaginationComponent, selector: "bs-pagination", inputs: ["selectedPageNumber", "numberOfBoxes", "pageNumbers", "showArrows"], outputs: ["selectedPageNumberChange"] }], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
985
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableComponent, decorators: [{
986
+ type: Component,
987
+ args: [{ selector: 'bs-datatable', template: "<div class=\"table-responsive overflow-y-hidden mb-3\">\n <table class=\"table table-striped table-hover w-100 mb-0\" cellspacing=\"0\" role=\"grid\">\n <thead>\n <tr>\n <th *ngFor=\"let column of columns\" class=\"text-nowrap\"\n [class.sort]=\"column.bsDatatableColumn.sortable\"\n [class.sort-asc]=\"column.bsDatatableColumn.sortable && (settings.sortProperty === column.bsDatatableColumn.name) && (settings.sortDirection === 'ascending')\"\n [class.sort-desc]=\"column.bsDatatableColumn.sortable && (settings.sortProperty === column.bsDatatableColumn.name) && (settings.sortDirection === 'descending')\"\n (click)=\"columnHeaderClicked(column)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n </th>\n </tr>\n </thead>\n <tbody>\n <ng-container *ngIf=\"!!data && !!rowTemplate\">\n <ng-container *ngFor=\"let item of data.data\">\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n </ng-container>\n </ng-container>\n </tbody>\n </table>\n</div>\n<div class=\"container-fluid\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <bs-pagination class=\"float-start\" [pageNumbers]=\"settings.perPage.values\"\n [(selectedPageNumber)]=\"settings.perPage.selected\" (selectedPageNumberChange)=\"onReloadData.emit()\"\n [showArrows]=\"false\"></bs-pagination>\n <bs-pagination class=\"float-end\" [pageNumbers]=\"settings.page.values\"\n [(selectedPageNumber)]=\"settings.page.selected\" (selectedPageNumberChange)=\"onReloadData.emit()\"\n [showArrows]=\"true\"></bs-pagination>\n </div>\n </div>\n</div>", styles: ["@charset \"UTF-8\";.overflow-y-hidden{overflow-y:hidden}.table thead th.sort{position:relative;cursor:pointer}.table thead th.sort:before,.table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}.table thead th.sort:before{content:\"\\2191\";right:1em}.table thead th.sort:after{content:\"\\2193\";right:.5em}.table thead th.sort.sort-asc:after{opacity:1}.table thead th.sort.sort-desc:before{opacity:1}\n"] }]
988
+ }], ctorParameters: function () { return []; }, propDecorators: { columns: [{
989
+ type: ContentChildren,
990
+ args: [BsDatatableColumnDirective]
991
+ }], settings: [{
992
+ type: Input
993
+ }], data: [{
994
+ type: Input
995
+ }], onReloadData: [{
996
+ type: Output
997
+ }] } });
998
+
999
+ class BsRowTemplateDirective {
1000
+ constructor(datatableComponent, templateRef) {
1001
+ this.datatableComponent = datatableComponent;
1002
+ this.datatableComponent.rowTemplate = templateRef;
1003
+ }
1004
+ }
1005
+ BsRowTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsRowTemplateDirective, deps: [{ token: BsDatatableComponent }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
1006
+ BsRowTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsRowTemplateDirective, selector: "[rowTemplate]", ngImport: i0 });
1007
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsRowTemplateDirective, decorators: [{
1008
+ type: Directive,
1009
+ args: [{
1010
+ selector: '[rowTemplate]'
1011
+ }]
1012
+ }], ctorParameters: function () { return [{ type: BsDatatableComponent }, { type: i0.TemplateRef }]; } });
1013
+
1014
+ class BsPaginationModule {
1015
+ }
1016
+ BsPaginationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1017
+ BsPaginationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationModule, declarations: [BsPaginationComponent], imports: [CommonModule], exports: [BsPaginationComponent] });
1018
+ BsPaginationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationModule, imports: [[
1019
+ CommonModule
1020
+ ]] });
1021
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsPaginationModule, decorators: [{
1022
+ type: NgModule,
1023
+ args: [{
1024
+ declarations: [
1025
+ BsPaginationComponent
1026
+ ],
1027
+ imports: [
1028
+ CommonModule
1029
+ ],
1030
+ exports: [
1031
+ BsPaginationComponent
1032
+ ]
1033
+ }]
1034
+ }] });
1035
+
1036
+ class BsDatatableModule {
1037
+ }
1038
+ BsDatatableModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1039
+ BsDatatableModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableModule, declarations: [BsDatatableComponent,
1040
+ BsRowTemplateDirective,
1041
+ BsDatatableColumnDirective], imports: [CommonModule,
1042
+ BsPaginationModule], exports: [BsDatatableComponent,
1043
+ BsRowTemplateDirective,
1044
+ BsDatatableColumnDirective] });
1045
+ BsDatatableModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableModule, imports: [[
1046
+ CommonModule,
1047
+ BsPaginationModule
1048
+ ]] });
1049
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatatableModule, decorators: [{
1050
+ type: NgModule,
1051
+ args: [{
1052
+ declarations: [
1053
+ BsDatatableComponent,
1054
+ BsRowTemplateDirective,
1055
+ BsDatatableColumnDirective
1056
+ ],
1057
+ imports: [
1058
+ CommonModule,
1059
+ BsPaginationModule
1060
+ ],
1061
+ exports: [
1062
+ BsDatatableComponent,
1063
+ BsRowTemplateDirective,
1064
+ BsDatatableColumnDirective
1065
+ ]
1066
+ }]
1067
+ }] });
1068
+
1069
+ class BsDropdownMenuDirective extends ClickOutsideDirective {
1070
+ constructor(dropdown, document, viewContainerRef, templateRef, overlay, elementRef, zone, platformId) {
1071
+ super(elementRef, zone, platformId);
1072
+ this.dropdown = dropdown;
1073
+ this.viewContainerRef = viewContainerRef;
1074
+ this.templateRef = templateRef;
1075
+ this.overlay = overlay;
1076
+ this.wait = false;
1077
+ this.destroyed$ = new Subject();
1078
+ this.overlayRef = null;
1079
+ this.templatePortal = null;
1080
+ this.document = document;
1081
+ this.dropdown.isOpen$
1082
+ .pipe(takeUntil(this.destroyed$))
1083
+ .subscribe((isOpen) => {
1084
+ if (isOpen) {
1085
+ this.wait = true;
1086
+ setTimeout(() => this.wait = false, 100);
1087
+ this.overlayRef = this.overlay.create({
1088
+ hasBackdrop: this.dropdown.hasBackdrop,
1089
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
1090
+ positionStrategy: this.overlay.position()
1091
+ .flexibleConnectedTo(!this.dropdown.toggle ? dropdown.elementRef : this.dropdown.toggle.toggleButton)
1092
+ .withPositions([
1093
+ { originX: "start", originY: "bottom", overlayX: "start", overlayY: "top", offsetY: 0 },
1094
+ { originX: "start", originY: "top", overlayX: "start", overlayY: "bottom", offsetY: 0 },
1095
+ ]),
1096
+ });
1097
+ if (this.dropdown.hasBackdrop && this.dropdown.closeOnClickOutside) {
1098
+ this.overlayRef.backdropClick().subscribe(() => {
1099
+ this.dropdown.isOpen = false;
1100
+ });
1101
+ }
1102
+ this.templatePortal = new TemplatePortal(this.templateRef, this.viewContainerRef);
1103
+ this.overlayRef.attach(this.templatePortal);
1104
+ }
1105
+ else {
1106
+ if (this.overlayRef) {
1107
+ this.overlayRef.detach();
1108
+ this.overlayRef.dispose();
1109
+ this.overlayRef = null;
1110
+ }
1111
+ }
1112
+ });
1113
+ }
1114
+ clickedOutside(ev) {
1115
+ if (!this.wait) {
1116
+ if (!this.overlayRef?.overlayElement.contains(ev.target)) {
1117
+ this.dropdown.isOpen$.pipe(take(1)).subscribe((isOpen) => {
1118
+ if (isOpen && !this.dropdown.hasBackdrop && this.dropdown.closeOnClickOutside) {
1119
+ this.dropdown.isOpen = false;
1120
+ }
1121
+ });
1122
+ }
1123
+ }
1124
+ }
1125
+ }
1126
+ BsDropdownMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownMenuDirective, deps: [{ token: forwardRef(() => BsDropdownDirective) }, { token: DOCUMENT }, { token: i0.ViewContainerRef }, { token: i0.TemplateRef }, { token: i1$1.Overlay }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: PLATFORM_ID }], target: i0.ɵɵFactoryTarget.Directive });
1127
+ BsDropdownMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]", host: { listeners: { "clickOutside": "clickedOutside($event)" }, properties: { "class.show": "dropdown.isOpen" } }, usesInheritance: true, ngImport: i0 });
1128
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownMenuDirective, decorators: [{
1129
+ type: Directive,
1130
+ args: [{
1131
+ selector: '[bsDropdownMenu]',
1132
+ host: {
1133
+ '[class.show]': 'dropdown.isOpen',
1134
+ },
1135
+ }]
1136
+ }], ctorParameters: function () { return [{ type: BsDropdownDirective, decorators: [{
1137
+ type: Inject,
1138
+ args: [forwardRef(() => BsDropdownDirective)]
1139
+ }] }, { type: undefined, decorators: [{
1140
+ type: Inject,
1141
+ args: [DOCUMENT]
1142
+ }] }, { type: i0.ViewContainerRef }, { type: i0.TemplateRef }, { type: i1$1.Overlay }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: Object, decorators: [{
1143
+ type: Inject,
1144
+ args: [PLATFORM_ID]
1145
+ }] }]; }, propDecorators: { clickedOutside: [{
1146
+ type: HostListener,
1147
+ args: ['clickOutside', ['$event']]
1148
+ }] } });
1149
+
1150
+ class BsDropdownToggleDirective {
1151
+ constructor(dropdown, toggleButton) {
1152
+ this.dropdown = dropdown;
1153
+ this.toggleButton = toggleButton;
1154
+ }
1155
+ onClick() {
1156
+ this.dropdown.isOpen$.pipe(take(1)).subscribe((isOpen) => {
1157
+ this.dropdown.isOpen$.next(!isOpen);
1158
+ });
1159
+ }
1160
+ }
1161
+ BsDropdownToggleDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownToggleDirective, deps: [{ token: BsDropdownDirective }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1162
+ BsDropdownToggleDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsDropdownToggleDirective, selector: "[bsDropdownToggle]", host: { listeners: { "click": "onClick()" } }, ngImport: i0 });
1163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownToggleDirective, decorators: [{
1164
+ type: Directive,
1165
+ args: [{
1166
+ selector: '[bsDropdownToggle]'
1167
+ }]
1168
+ }], ctorParameters: function () { return [{ type: BsDropdownDirective }, { type: i0.ElementRef }]; }, propDecorators: { onClick: [{
1169
+ type: HostListener,
1170
+ args: ['click']
1171
+ }] } });
1172
+
1173
+ class BsDropdownDirective {
1174
+ constructor(elementRef) {
1175
+ this.isOpen$ = new BehaviorSubject(false);
1176
+ this.toggle = null;
1177
+ this.hasBackdrop = false;
1178
+ this.sameWidth = false;
1179
+ this.closeOnClickOutside = false;
1180
+ this.isOpenChange = new EventEmitter();
1181
+ this.elementRef = elementRef;
1182
+ }
1183
+ //#region IsOpen
1184
+ get isOpen() {
1185
+ return this.isOpen$.value;
1186
+ }
1187
+ set isOpen(value) {
1188
+ if (this.isOpen$.value !== value) {
1189
+ this.isOpen$.next(value);
1190
+ this.isOpenChange.emit(value);
1191
+ }
1192
+ }
1193
+ }
1194
+ BsDropdownDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1195
+ BsDropdownDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsDropdownDirective, selector: "[bsDropdown]", inputs: { hasBackdrop: "hasBackdrop", sameWidth: "sameWidth", closeOnClickOutside: "closeOnClickOutside", isOpen: "isOpen" }, outputs: { isOpenChange: "isOpenChange" }, queries: [{ propertyName: "menu", first: true, predicate: BsDropdownMenuDirective, descendants: true }, { propertyName: "toggle", first: true, predicate: BsDropdownToggleDirective, descendants: true }], ngImport: i0 });
1196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownDirective, decorators: [{
1197
+ type: Directive,
1198
+ args: [{
1199
+ selector: '[bsDropdown]'
1200
+ }]
1201
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { menu: [{
1202
+ type: ContentChild,
1203
+ args: [BsDropdownMenuDirective, { static: false }]
1204
+ }], toggle: [{
1205
+ type: ContentChild,
1206
+ args: [BsDropdownToggleDirective, { static: false }]
1207
+ }], hasBackdrop: [{
1208
+ type: Input
1209
+ }], sameWidth: [{
1210
+ type: Input
1211
+ }], closeOnClickOutside: [{
1212
+ type: Input
1213
+ }], isOpenChange: [{
1214
+ type: Output
1215
+ }], isOpen: [{
1216
+ type: Input
1217
+ }] } });
1218
+
1219
+ class BsDatepickerComponent {
1220
+ constructor() {
1221
+ this.selectedDate = new Date();
1222
+ this.currentMonth = new Date();
1223
+ }
1224
+ ngOnInit() {
1225
+ }
1226
+ }
1227
+ BsDatepickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1228
+ BsDatepickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsDatepickerComponent, selector: "bs-datepicker", ngImport: i0, template: "<div bsDropdown [hasBackdrop]=\"true\" [closeOnClickOutside]=\"true\">\n <button bsDropdownToggle class=\"btn btn-primary\">{{ selectedDate | date }}</button>\n <div *bsDropdownMenu>\n <bs-calendar [(selectedDate)]=\"selectedDate\" [(currentMonth)]=\"currentMonth\"></bs-calendar>\n </div>\n</div>", styles: [""], components: [{ type: BsCalendarComponent, selector: "bs-calendar", inputs: ["currentMonth", "selectedDate"], outputs: ["currentMonthChange", "selectedDateChange"] }], directives: [{ type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "isOpen"], outputs: ["isOpenChange"] }, { type: BsDropdownToggleDirective, selector: "[bsDropdownToggle]" }, { type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }], pipes: { "date": i1.DatePipe } });
1229
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerComponent, decorators: [{
1230
+ type: Component,
1231
+ args: [{ selector: 'bs-datepicker', template: "<div bsDropdown [hasBackdrop]=\"true\" [closeOnClickOutside]=\"true\">\n <button bsDropdownToggle class=\"btn btn-primary\">{{ selectedDate | date }}</button>\n <div *bsDropdownMenu>\n <bs-calendar [(selectedDate)]=\"selectedDate\" [(currentMonth)]=\"currentMonth\"></bs-calendar>\n </div>\n</div>", styles: [""] }]
1232
+ }], ctorParameters: function () { return []; } });
1233
+
1234
+ class BsDropdownModule {
1235
+ }
1236
+ BsDropdownModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1237
+ BsDropdownModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownModule, declarations: [BsDropdownDirective,
1238
+ BsDropdownToggleDirective,
1239
+ BsDropdownMenuDirective], imports: [CommonModule,
1240
+ OverlayModule,
1241
+ ClickOutsideModule], exports: [BsDropdownDirective,
1242
+ BsDropdownToggleDirective,
1243
+ BsDropdownMenuDirective] });
1244
+ BsDropdownModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownModule, imports: [[
1245
+ CommonModule,
1246
+ OverlayModule,
1247
+ ClickOutsideModule
1248
+ ]] });
1249
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDropdownModule, decorators: [{
1250
+ type: NgModule,
1251
+ args: [{
1252
+ declarations: [
1253
+ BsDropdownDirective,
1254
+ BsDropdownToggleDirective,
1255
+ BsDropdownMenuDirective
1256
+ ],
1257
+ imports: [
1258
+ CommonModule,
1259
+ OverlayModule,
1260
+ ClickOutsideModule
1261
+ ],
1262
+ exports: [
1263
+ BsDropdownDirective,
1264
+ BsDropdownToggleDirective,
1265
+ BsDropdownMenuDirective
1266
+ ]
1267
+ }]
1268
+ }] });
1269
+
1270
+ class BsDatepickerModule {
1271
+ }
1272
+ BsDatepickerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1273
+ BsDatepickerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerModule, declarations: [BsDatepickerComponent], imports: [CommonModule,
1274
+ BsCalendarModule,
1275
+ BsDropdownModule], exports: [BsDatepickerComponent] });
1276
+ BsDatepickerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerModule, imports: [[
1277
+ CommonModule,
1278
+ BsCalendarModule,
1279
+ BsDropdownModule
1280
+ ]] });
1281
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsDatepickerModule, decorators: [{
1282
+ type: NgModule,
1283
+ args: [{
1284
+ declarations: [
1285
+ BsDatepickerComponent
1286
+ ],
1287
+ imports: [
1288
+ CommonModule,
1289
+ BsCalendarModule,
1290
+ BsDropdownModule
1291
+ ],
1292
+ exports: [
1293
+ BsDatepickerComponent
1294
+ ]
1295
+ }]
1296
+ }] });
1297
+
1298
+ class BsListGroupItemComponent {
1299
+ constructor() {
1300
+ }
1301
+ ngOnInit() {
1302
+ }
1303
+ }
1304
+ BsListGroupItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1305
+ BsListGroupItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsListGroupItemComponent, selector: "bs-list-group-item", ngImport: i0, template: "<li class=\"list-group-item\">\n <ng-content></ng-content>\n</li>", styles: [".list-group-item{margin-bottom:-1px}\n"] });
1306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupItemComponent, decorators: [{
1307
+ type: Component,
1308
+ args: [{ selector: 'bs-list-group-item', template: "<li class=\"list-group-item\">\n <ng-content></ng-content>\n</li>", styles: [".list-group-item{margin-bottom:-1px}\n"] }]
1309
+ }], ctorParameters: function () { return []; } });
1310
+
1311
+ class BsListGroupComponent {
1312
+ constructor() {
1313
+ }
1314
+ ngOnInit() {
1315
+ }
1316
+ }
1317
+ BsListGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
533
1318
  BsListGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsListGroupComponent, selector: "bs-list-group", queries: [{ propertyName: "items", predicate: BsListGroupItemComponent }], ngImport: i0, template: "<ul class=\"list-group mt-0\">\n <ng-content></ng-content>\n</ul>", styles: [""] });
534
1319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsListGroupComponent, decorators: [{
535
1320
  type: Component,
@@ -561,6 +1346,64 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
561
1346
  }]
562
1347
  }] });
563
1348
 
1349
+ class BsMultiselectComponent {
1350
+ constructor() {
1351
+ this.items = [];
1352
+ this.selectedItems = [];
1353
+ }
1354
+ itemChange(item, event) {
1355
+ if (!!event.target.checked) {
1356
+ this.selectedItems.push(item);
1357
+ }
1358
+ else {
1359
+ this.selectedItems.splice(this.selectedItems.findIndex((i) => i === item), 1);
1360
+ }
1361
+ }
1362
+ ngOnInit() {
1363
+ }
1364
+ }
1365
+ BsMultiselectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1366
+ BsMultiselectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsMultiselectComponent, selector: "bs-multiselect", inputs: { items: "items", selectedItems: "selectedItems" }, queries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0, template: "<div bsDropdown [hasBackdrop]=\"true\" [closeOnClickOutside]=\"true\">\n <button bsDropdownToggle class=\"btn btn-primary\">{{ selectedItems.length }} selected</button>\n <div *bsDropdownMenu class=\"bg-white mw-250px p-3 border rounded shadow\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n <hr class=\"my-2\">\n <label *ngFor=\"let item of items\" class=\"form-check\">\n <input type=\"checkbox\" [checked]=\"selectedItems.indexOf(item) > -1\" (change)=\"itemChange(item, $event)\" class=\"form-check-input\">\n <span class=\"form-check-label\">{{ item }}</span>\n </label>\n </div>\n</div>", styles: [".mw-250px{min-width:250px}\n"], directives: [{ type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "isOpen"], outputs: ["isOpenChange"] }, { type: BsDropdownToggleDirective, selector: "[bsDropdownToggle]" }, { type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
1367
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectComponent, decorators: [{
1368
+ type: Component,
1369
+ args: [{ selector: 'bs-multiselect', template: "<div bsDropdown [hasBackdrop]=\"true\" [closeOnClickOutside]=\"true\">\n <button bsDropdownToggle class=\"btn btn-primary\">{{ selectedItems.length }} selected</button>\n <div *bsDropdownMenu class=\"bg-white mw-250px p-3 border rounded shadow\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n <hr class=\"my-2\">\n <label *ngFor=\"let item of items\" class=\"form-check\">\n <input type=\"checkbox\" [checked]=\"selectedItems.indexOf(item) > -1\" (change)=\"itemChange(item, $event)\" class=\"form-check-input\">\n <span class=\"form-check-label\">{{ item }}</span>\n </label>\n </div>\n</div>", styles: [".mw-250px{min-width:250px}\n"] }]
1370
+ }], ctorParameters: function () { return []; }, propDecorators: { template: [{
1371
+ type: ContentChild,
1372
+ args: [TemplateRef]
1373
+ }], items: [{
1374
+ type: Input
1375
+ }], selectedItems: [{
1376
+ type: Input
1377
+ }] } });
1378
+
1379
+ class BsMultiselectModule {
1380
+ }
1381
+ BsMultiselectModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1382
+ BsMultiselectModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectModule, declarations: [BsMultiselectComponent], imports: [CommonModule,
1383
+ BsDropdownModule,
1384
+ FocusOnLoadModule], exports: [BsMultiselectComponent] });
1385
+ BsMultiselectModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectModule, imports: [[
1386
+ CommonModule,
1387
+ BsDropdownModule,
1388
+ FocusOnLoadModule,
1389
+ ]] });
1390
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsMultiselectModule, decorators: [{
1391
+ type: NgModule,
1392
+ args: [{
1393
+ declarations: [
1394
+ BsMultiselectComponent
1395
+ ],
1396
+ imports: [
1397
+ CommonModule,
1398
+ BsDropdownModule,
1399
+ FocusOnLoadModule,
1400
+ ],
1401
+ exports: [
1402
+ BsMultiselectComponent
1403
+ ]
1404
+ }]
1405
+ }] });
1406
+
564
1407
  class BsNavbarComponent {
565
1408
  constructor() {
566
1409
  this.isExpanded = false;
@@ -595,10 +1438,10 @@ class BsNavbarNavComponent {
595
1438
  }
596
1439
  }
597
1440
  BsNavbarNavComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarNavComponent, deps: [{ token: BsNavbarComponent }], target: i0.ɵɵFactoryTarget.Component });
598
- BsNavbarNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsNavbarNavComponent, selector: "bs-navbar-nav", inputs: { collapse: "collapse" }, ngImport: i0, template: "<div class=\"navbar-collapse collapse w-100 show\" [@slideUpDown]=\"bsNavbar.isExpanded ? 'down' : 'up'\">\n <ul class=\"navbar-nav mr-auto\">\n <ng-content></ng-content>\n </ul>\n</div>", styles: [":host{margin-right:auto}@media screen and (max-width: 767px){:host{width:100%!important}.navbar-collapse.collapse{overflow:hidden}}\n"], animations: [SlideUpDownAnimation] });
1441
+ BsNavbarNavComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsNavbarNavComponent, selector: "bs-navbar-nav", inputs: { collapse: "collapse" }, ngImport: i0, template: "<div class=\"navbar-collapse collapse w-100 show\" *ngIf=\"bsNavbar.isExpanded\" [@slideUpDown]>\n <ul class=\"navbar-nav mr-auto\">\n <ng-content></ng-content>\n </ul>\n</div>", styles: [":host{margin-right:auto}@media screen and (max-width: 767px){:host{width:100%!important}.navbar-collapse.collapse{overflow:hidden}}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [SlideUpDownAnimation] });
599
1442
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarNavComponent, decorators: [{
600
1443
  type: Component,
601
- args: [{ selector: 'bs-navbar-nav', animations: [SlideUpDownAnimation], template: "<div class=\"navbar-collapse collapse w-100 show\" [@slideUpDown]=\"bsNavbar.isExpanded ? 'down' : 'up'\">\n <ul class=\"navbar-nav mr-auto\">\n <ng-content></ng-content>\n </ul>\n</div>", styles: [":host{margin-right:auto}@media screen and (max-width: 767px){:host{width:100%!important}.navbar-collapse.collapse{overflow:hidden}}\n"] }]
1444
+ args: [{ selector: 'bs-navbar-nav', animations: [SlideUpDownAnimation], template: "<div class=\"navbar-collapse collapse w-100 show\" *ngIf=\"bsNavbar.isExpanded\" [@slideUpDown]>\n <ul class=\"navbar-nav mr-auto\">\n <ng-content></ng-content>\n </ul>\n</div>", styles: [":host{margin-right:auto}@media screen and (max-width: 767px){:host{width:100%!important}.navbar-collapse.collapse{overflow:hidden}}\n"] }]
602
1445
  }], ctorParameters: function () { return [{ type: BsNavbarComponent }]; }, propDecorators: { collapse: [{
603
1446
  type: Input
604
1447
  }] } });
@@ -659,7 +1502,7 @@ class BsNavbarDropdownComponent {
659
1502
  }
660
1503
  }
661
1504
  BsNavbarDropdownComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarDropdownComponent, deps: [{ token: BsNavbarDropdownComponent, host: true, optional: true, skipSelf: true }, { token: forwardRef(() => BsNavbarItemComponent), host: true }], target: i0.ɵɵFactoryTarget.Component });
662
- BsNavbarDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsNavbarDropdownComponent, selector: "bs-navbar-dropdown", queries: [{ propertyName: "childDropdowns", predicate: i0.forwardRef(function () { return BsNavbarDropdownComponent; }), descendants: true }], ngImport: i0, template: "<ul class=\"dropdown-menu\" [class.show]=\"isVisible\" [class.submenu]=\"!!parentDropdown\" (clickOutside)=\"isVisible = false\" [exclude]=\"elementsToExclude\" aria-labelledby=\"navbarDropdown\">\n <ng-content></ng-content>\n</ul>", styles: ["@media (max-width: 767px){.submenu{margin-left:.5rem;margin-right:.5rem}}@media (min-width: 768px){.submenu{position:absolute;left:100%;top:-1px}}\n"], directives: [{ type: i1$1.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }] });
1505
+ BsNavbarDropdownComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsNavbarDropdownComponent, selector: "bs-navbar-dropdown", queries: [{ propertyName: "childDropdowns", predicate: i0.forwardRef(function () { return BsNavbarDropdownComponent; }), descendants: true }], ngImport: i0, template: "<ul class=\"dropdown-menu\" [class.show]=\"isVisible\" [class.submenu]=\"!!parentDropdown\" (clickOutside)=\"isVisible = false\" [exclude]=\"elementsToExclude\" aria-labelledby=\"navbarDropdown\">\n <ng-content></ng-content>\n</ul>", styles: ["@media (max-width: 767px){.submenu{margin-left:.5rem;margin-right:.5rem}}@media (min-width: 768px){.submenu{position:absolute;left:100%;top:-1px}}\n"], directives: [{ type: i1$2.ClickOutsideDirective, selector: "[clickOutside]", inputs: ["clickOutsideEnabled", "attachOutsideOnClick", "delayClickOutsideInit", "emitOnBlur", "exclude", "excludeBeforeClick", "clickOutsideEvents"], outputs: ["clickOutside"] }] });
663
1506
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarDropdownComponent, decorators: [{
664
1507
  type: Component,
665
1508
  args: [{ selector: 'bs-navbar-dropdown', template: "<ul class=\"dropdown-menu\" [class.show]=\"isVisible\" [class.submenu]=\"!!parentDropdown\" (clickOutside)=\"isVisible = false\" [exclude]=\"elementsToExclude\" aria-labelledby=\"navbarDropdown\">\n <ng-content></ng-content>\n</ul>", styles: ["@media (max-width: 767px){.submenu{margin-left:.5rem;margin-right:.5rem}}@media (min-width: 768px){.submenu{position:absolute;left:100%;top:-1px}}\n"] }]
@@ -786,129 +1629,630 @@ BsNavbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version:
786
1629
  NavbarContentDirective] });
787
1630
  BsNavbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarModule, imports: [[
788
1631
  CommonModule,
789
- RouterModule,
790
- ClickOutsideModule
1632
+ RouterModule,
1633
+ ClickOutsideModule
1634
+ ]] });
1635
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarModule, decorators: [{
1636
+ type: NgModule,
1637
+ args: [{
1638
+ declarations: [
1639
+ BsNavbarComponent,
1640
+ BsNavbarNavComponent,
1641
+ BsNavbarDropdownComponent,
1642
+ BsNavbarItemComponent,
1643
+ DropdownToggleDirective,
1644
+ NavLinkDirective,
1645
+ NavbarContentDirective
1646
+ ],
1647
+ imports: [
1648
+ CommonModule,
1649
+ RouterModule,
1650
+ ClickOutsideModule
1651
+ ],
1652
+ exports: [
1653
+ BsNavbarComponent,
1654
+ BsNavbarNavComponent,
1655
+ BsNavbarDropdownComponent,
1656
+ BsNavbarItemComponent,
1657
+ DropdownToggleDirective,
1658
+ NavLinkDirective,
1659
+ NavbarContentDirective
1660
+ ]
1661
+ }]
1662
+ }] });
1663
+
1664
+ class BsProgressComponent {
1665
+ constructor() {
1666
+ this.progressClass = true;
1667
+ this.height = null;
1668
+ this.isIndeterminate = false;
1669
+ }
1670
+ }
1671
+ BsProgressComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1672
+ BsProgressComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsProgressComponent, selector: "bs-progress", inputs: { height: "height", isIndeterminate: "isIndeterminate" }, host: { properties: { "class.progress": "this.progressClass", "style.height.px": "this.height" } }, ngImport: i0, template: "<ng-content *ngIf=\"!isIndeterminate\"></ng-content>\n<div *ngIf=\"isIndeterminate\" class=\"progress-bar progress-bar-infinite\" role=\"progressbar\" aria-valuenow=\"infinite\"></div>", styles: ["@keyframes progress-infinite{0%{width:10%;margin-left:0%}25%{width:70%;margin-left:15%}50%{width:10%;margin-left:90%}75%{width:70%;margin-left:15%}to{width:10%;margin-left:0%}}.progress-bar-infinite{animation:progress-infinite 1.5s infinite}\n"], directives: [{ type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1673
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressComponent, decorators: [{
1674
+ type: Component,
1675
+ args: [{ selector: 'bs-progress', template: "<ng-content *ngIf=\"!isIndeterminate\"></ng-content>\n<div *ngIf=\"isIndeterminate\" class=\"progress-bar progress-bar-infinite\" role=\"progressbar\" aria-valuenow=\"infinite\"></div>", styles: ["@keyframes progress-infinite{0%{width:10%;margin-left:0%}25%{width:70%;margin-left:15%}50%{width:10%;margin-left:90%}75%{width:70%;margin-left:15%}to{width:10%;margin-left:0%}}.progress-bar-infinite{animation:progress-infinite 1.5s infinite}\n"] }]
1676
+ }], propDecorators: { progressClass: [{
1677
+ type: HostBinding,
1678
+ args: ['class.progress']
1679
+ }], height: [{
1680
+ type: Input
1681
+ }, {
1682
+ type: HostBinding,
1683
+ args: ['style.height.px']
1684
+ }], isIndeterminate: [{
1685
+ type: Input
1686
+ }] } });
1687
+
1688
+ class BsProgressBarComponent {
1689
+ constructor() {
1690
+ this.destroyed$ = new Subject();
1691
+ this.minimum$ = new BehaviorSubject(0);
1692
+ this.maximum$ = new BehaviorSubject(100);
1693
+ this.value$ = new BehaviorSubject(50);
1694
+ this.color$ = new BehaviorSubject(Color.primary);
1695
+ this.striped = false;
1696
+ this.animated = false;
1697
+ this.progressBar = true;
1698
+ this.colorClass = 'bg-primary';
1699
+ this.widthStyle = '0';
1700
+ this.role = 'progressbar';
1701
+ this.valueNow = 50;
1702
+ this.valueMin = 0;
1703
+ this.valueMax = 100;
1704
+ this.percentage$ = combineLatest([this.minimum$, this.maximum$, this.value$])
1705
+ .pipe(map(([minimum, maximum, value]) => {
1706
+ return (value - minimum) / (maximum - minimum) * 100;
1707
+ }));
1708
+ this.width$ = this.percentage$
1709
+ .pipe(map((width) => {
1710
+ return String(width) + '%';
1711
+ }));
1712
+ this.colorClass$ = this.color$
1713
+ .pipe(map((color) => {
1714
+ const name = Color[color];
1715
+ return `bg-${name}`;
1716
+ }));
1717
+ this.colorClass$
1718
+ .pipe(takeUntil(this.destroyed$))
1719
+ .subscribe((color) => {
1720
+ this.colorClass = color;
1721
+ });
1722
+ this.width$
1723
+ .pipe(takeUntil(this.destroyed$))
1724
+ .subscribe((width) => {
1725
+ this.widthStyle = width;
1726
+ });
1727
+ this.value$
1728
+ .pipe(takeUntil(this.destroyed$))
1729
+ .subscribe((value) => {
1730
+ this.valueNow = value;
1731
+ });
1732
+ this.minimum$
1733
+ .pipe(takeUntil(this.destroyed$))
1734
+ .subscribe((value) => {
1735
+ this.valueMin = value;
1736
+ });
1737
+ this.maximum$
1738
+ .pipe(takeUntil(this.destroyed$))
1739
+ .subscribe((value) => {
1740
+ this.valueMax = value;
1741
+ });
1742
+ }
1743
+ set minimum(value) {
1744
+ this.minimum$.next(value);
1745
+ }
1746
+ set maximum(value) {
1747
+ this.maximum$.next(value);
1748
+ }
1749
+ set value(value) {
1750
+ this.value$.next(value);
1751
+ }
1752
+ set color(value) {
1753
+ this.color$.next(value);
1754
+ }
1755
+ ngOnDestroy() {
1756
+ this.destroyed$.next(true);
1757
+ }
1758
+ }
1759
+ BsProgressBarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1760
+ BsProgressBarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsProgressBarComponent, selector: "bs-progress-bar", inputs: { minimum: "minimum", maximum: "maximum", value: "value", color: "color", striped: "striped", animated: "animated" }, host: { properties: { "class.progress-bar-striped": "this.striped", "class.progress-bar-animated": "this.animated", "class.progress-bar": "this.progressBar", "class": "this.colorClass", "style.width": "this.widthStyle", "attr.role": "this.role", "attr.aria-valuenow": "this.valueNow", "attr.aria-valuemin": "this.valueMin", "attr.aria-valuemax": "this.valueMax" } }, ngImport: i0, template: "", styles: [""] });
1761
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarComponent, decorators: [{
1762
+ type: Component,
1763
+ args: [{ selector: 'bs-progress-bar', template: "", styles: [""] }]
1764
+ }], ctorParameters: function () { return []; }, propDecorators: { minimum: [{
1765
+ type: Input
1766
+ }], maximum: [{
1767
+ type: Input
1768
+ }], value: [{
1769
+ type: Input
1770
+ }], color: [{
1771
+ type: Input
1772
+ }], striped: [{
1773
+ type: Input
1774
+ }, {
1775
+ type: HostBinding,
1776
+ args: ['class.progress-bar-striped']
1777
+ }], animated: [{
1778
+ type: Input
1779
+ }, {
1780
+ type: HostBinding,
1781
+ args: ['class.progress-bar-animated']
1782
+ }], progressBar: [{
1783
+ type: HostBinding,
1784
+ args: ['class.progress-bar']
1785
+ }], colorClass: [{
1786
+ type: HostBinding,
1787
+ args: ['class']
1788
+ }], widthStyle: [{
1789
+ type: HostBinding,
1790
+ args: ['style.width']
1791
+ }], role: [{
1792
+ type: HostBinding,
1793
+ args: ['attr.role']
1794
+ }], valueNow: [{
1795
+ type: HostBinding,
1796
+ args: ['attr.aria-valuenow']
1797
+ }], valueMin: [{
1798
+ type: HostBinding,
1799
+ args: ['attr.aria-valuemin']
1800
+ }], valueMax: [{
1801
+ type: HostBinding,
1802
+ args: ['attr.aria-valuemax']
1803
+ }] } });
1804
+
1805
+ class BsProgressBarModule {
1806
+ }
1807
+ BsProgressBarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1808
+ BsProgressBarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarModule, declarations: [BsProgressBarComponent,
1809
+ BsProgressComponent], imports: [CommonModule], exports: [BsProgressBarComponent,
1810
+ BsProgressComponent] });
1811
+ BsProgressBarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarModule, imports: [[
1812
+ CommonModule
1813
+ ]] });
1814
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsProgressBarModule, decorators: [{
1815
+ type: NgModule,
1816
+ args: [{
1817
+ declarations: [
1818
+ BsProgressBarComponent,
1819
+ BsProgressComponent
1820
+ ],
1821
+ imports: [
1822
+ CommonModule
1823
+ ],
1824
+ exports: [
1825
+ BsProgressBarComponent,
1826
+ BsProgressComponent
1827
+ ]
1828
+ }]
1829
+ }] });
1830
+
1831
+ class BsScrollOffsetService {
1832
+ constructor(routerConfig) {
1833
+ this.routerConfig = routerConfig;
1834
+ }
1835
+ getScrollOffset() {
1836
+ if (!this.routerConfig.scrollOffset) {
1837
+ return [0, 0];
1838
+ }
1839
+ else if (Array.isArray(this.routerConfig.scrollOffset)) {
1840
+ return this.routerConfig.scrollOffset;
1841
+ }
1842
+ else {
1843
+ return this.routerConfig.scrollOffset();
1844
+ }
1845
+ }
1846
+ }
1847
+ BsScrollOffsetService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollOffsetService, deps: [{ token: ROUTER_CONFIGURATION }], target: i0.ɵɵFactoryTarget.Injectable });
1848
+ BsScrollOffsetService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollOffsetService, providedIn: 'root' });
1849
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollOffsetService, decorators: [{
1850
+ type: Injectable,
1851
+ args: [{
1852
+ providedIn: 'root'
1853
+ }]
1854
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1855
+ type: Inject,
1856
+ args: [ROUTER_CONFIGURATION]
1857
+ }] }]; } });
1858
+
1859
+ class BsScrollspyDirective {
1860
+ constructor(element) {
1861
+ this.element = element;
1862
+ }
1863
+ }
1864
+ BsScrollspyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
1865
+ BsScrollspyDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsScrollspyDirective, selector: "[bsScrollspy]", ngImport: i0 });
1866
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyDirective, decorators: [{
1867
+ type: Directive,
1868
+ args: [{
1869
+ selector: '[bsScrollspy]'
1870
+ }]
1871
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
1872
+
1873
+ class BsScrollspyComponent {
1874
+ constructor(scrollOffsetService, document) {
1875
+ this.scrollOffsetService = scrollOffsetService;
1876
+ this.activeDirective = null;
1877
+ this.doc = document;
1878
+ }
1879
+ ngAfterViewInit() {
1880
+ this.onWindowScroll();
1881
+ }
1882
+ onWindowScroll() {
1883
+ const offsetY = this.scrollOffsetService.getScrollOffset()[1];
1884
+ const dirs = this.directives.filter((d) => d.element.nativeElement.getBoundingClientRect().y < offsetY);
1885
+ if (this.directives.length === 0) {
1886
+ this.activeDirective = null;
1887
+ }
1888
+ else if (dirs.length === 0) {
1889
+ this.activeDirective = this.directives.get(0) ?? null;
1890
+ }
1891
+ else {
1892
+ this.activeDirective = dirs[dirs.length - 1];
1893
+ }
1894
+ if (window && (window.innerWidth >= 768)) {
1895
+ if (this.activeDirective) {
1896
+ const index = this.directives.toArray().findIndex((v, i) => v === this.activeDirective);
1897
+ const anchor = this.anchors.get(index);
1898
+ if (anchor && anchor.nativeElement.parentElement) {
1899
+ anchor.nativeElement.scrollIntoView({ block: 'nearest', inline: 'nearest' });
1900
+ }
1901
+ }
1902
+ }
1903
+ }
1904
+ scrollToHeader(directive) {
1905
+ const header = directive.element.nativeElement;
1906
+ const offsetY = this.scrollOffsetService.getScrollOffset()[1];
1907
+ const y = header.getBoundingClientRect().top + window.scrollY - offsetY + 1;
1908
+ window.scrollTo({ top: y, behavior: 'smooth' });
1909
+ }
1910
+ }
1911
+ BsScrollspyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyComponent, deps: [{ token: BsScrollOffsetService }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
1912
+ BsScrollspyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsScrollspyComponent, selector: "bs-scrollspy", host: { listeners: { "window:scroll": "onWindowScroll($event)" } }, queries: [{ propertyName: "directives", predicate: BsScrollspyDirective, descendants: true }], viewQueries: [{ propertyName: "anchors", predicate: ["anchor"], descendants: true }], ngImport: i0, template: "<div class=\"spy\">\n <ul class=\"text-muted\">\n <li *ngFor=\"let dir of directives; let i = index\">\n <span [attr.data-index]=\"i\" class=\"cursor-pointer\" [ngClass]=\"'nav' + dir.element.nativeElement.tagName\" [class.fw-bold]=\"activeDirective?.element === dir.element\" (click)=\"scrollToHeader(dir)\" [title]=\"dir.element.nativeElement.textContent\" #anchor>\n {{ dir.element.nativeElement.textContent }}\n </span>\n </li>\n </ul>\n</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}.spy>ul{list-style-type:none;padding-left:0}.spy>ul>li:hover{color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.spy>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 768px){:host{display:grid;grid-template-areas:\"content toc\";grid-template-columns:auto 200px;grid-template-rows:auto;grid-gap:inherit;gap:inherit;grid-area:main}.spy{position:sticky;top:5rem;right:0;z-index:2;height:calc(100vh - 7rem);overflow-y:auto;grid-area:toc}.spy>ul{padding-left:2rem}}.navH2{margin-left:20px}.navH3{margin-left:40px}.navH4{margin-left:60px}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
1913
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyComponent, decorators: [{
1914
+ type: Component,
1915
+ args: [{ selector: 'bs-scrollspy', template: "<div class=\"spy\">\n <ul class=\"text-muted\">\n <li *ngFor=\"let dir of directives; let i = index\">\n <span [attr.data-index]=\"i\" class=\"cursor-pointer\" [ngClass]=\"'nav' + dir.element.nativeElement.tagName\" [class.fw-bold]=\"activeDirective?.element === dir.element\" (click)=\"scrollToHeader(dir)\" [title]=\"dir.element.nativeElement.textContent\" #anchor>\n {{ dir.element.nativeElement.textContent }}\n </span>\n </li>\n </ul>\n</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}.spy>ul{list-style-type:none;padding-left:0}.spy>ul>li:hover{color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}.spy>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media (min-width: 768px){:host{display:grid;grid-template-areas:\"content toc\";grid-template-columns:auto 200px;grid-template-rows:auto;grid-gap:inherit;gap:inherit;grid-area:main}.spy{position:sticky;top:5rem;right:0;z-index:2;height:calc(100vh - 7rem);overflow-y:auto;grid-area:toc}.spy>ul{padding-left:2rem}}.navH2{margin-left:20px}.navH3{margin-left:40px}.navH4{margin-left:60px}\n"] }]
1916
+ }], ctorParameters: function () { return [{ type: BsScrollOffsetService }, { type: undefined, decorators: [{
1917
+ type: Inject,
1918
+ args: [DOCUMENT]
1919
+ }] }]; }, propDecorators: { directives: [{
1920
+ type: ContentChildren,
1921
+ args: [BsScrollspyDirective, { descendants: true }]
1922
+ }], anchors: [{
1923
+ type: ViewChildren,
1924
+ args: ['anchor']
1925
+ }], onWindowScroll: [{
1926
+ type: HostListener,
1927
+ args: ['window:scroll', ['$event']]
1928
+ }] } });
1929
+
1930
+ class BsScrollspyModule {
1931
+ }
1932
+ BsScrollspyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1933
+ BsScrollspyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, declarations: [BsScrollspyComponent,
1934
+ BsScrollspyDirective], imports: [CommonModule], exports: [BsScrollspyComponent,
1935
+ BsScrollspyDirective] });
1936
+ BsScrollspyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, imports: [[
1937
+ CommonModule
1938
+ ]] });
1939
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, decorators: [{
1940
+ type: NgModule,
1941
+ args: [{
1942
+ declarations: [
1943
+ BsScrollspyComponent,
1944
+ BsScrollspyDirective
1945
+ ],
1946
+ imports: [
1947
+ CommonModule
1948
+ ],
1949
+ exports: [
1950
+ BsScrollspyComponent,
1951
+ BsScrollspyDirective
1952
+ ]
1953
+ }]
1954
+ }] });
1955
+
1956
+ class BsInListPipe {
1957
+ transform(items, parameter) {
1958
+ return items.some(item => item.id === parameter);
1959
+ }
1960
+ }
1961
+ BsInListPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1962
+ BsInListPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListPipe, name: "inList" });
1963
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListPipe, decorators: [{
1964
+ type: Pipe,
1965
+ args: [{
1966
+ name: 'inList'
1967
+ }]
1968
+ }] });
1969
+
1970
+ class BsSelect2Component {
1971
+ constructor() {
1972
+ this.isOpen = false;
1973
+ this.suggestions$ = new BehaviorSubject([]);
1974
+ this.isLoading$ = new BehaviorSubject(false);
1975
+ this.hostWidth$ = new BehaviorSubject(200);
1976
+ this.searchterm = '';
1977
+ this.suggestions = [];
1978
+ this.provideSuggestions = new EventEmitter();
1979
+ this.selectedItems = [];
1980
+ this.isFocused = false;
1981
+ this.charWidth = 10;
1982
+ this.searchWidth = 20;
1983
+ }
1984
+ ngAfterViewInit() {
1985
+ this.onResize();
1986
+ }
1987
+ onProvideSuggestions(value) {
1988
+ this.searchWidth = this.charWidth * (this.searchterm.length + 2);
1989
+ if (value === '') {
1990
+ this.isOpen = false;
1991
+ this.suggestions$.next([]);
1992
+ }
1993
+ else {
1994
+ this.isLoading$.next(true);
1995
+ this.isOpen = true;
1996
+ this.provideSuggestions.emit(value);
1997
+ }
1998
+ }
1999
+ onSuggestionClicked(suggestion) {
2000
+ this.searchterm = '';
2001
+ this.isOpen = false;
2002
+ const existing = this.selectedItems.find((value, index) => value.id === suggestion.id);
2003
+ if (existing === undefined) {
2004
+ this.selectedItems.push(suggestion);
2005
+ }
2006
+ else {
2007
+ this.selectedItems.splice(this.selectedItems.indexOf(existing), 1);
2008
+ }
2009
+ this.searchBox.nativeElement.focus();
2010
+ }
2011
+ onRemoveItem(item, event) {
2012
+ event.stopPropagation();
2013
+ this.selectedItems.splice(this.selectedItems.indexOf(item), 1);
2014
+ this.focus();
2015
+ }
2016
+ ngOnInit() {
2017
+ }
2018
+ onResize() {
2019
+ this.hostWidth$.next(this.itemsBox.nativeElement.offsetWidth);
2020
+ }
2021
+ focus() {
2022
+ this.searchBox.nativeElement.focus();
2023
+ }
2024
+ }
2025
+ BsSelect2Component.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Component, deps: [], target: i0.ɵɵFactoryTarget.Component });
2026
+ BsSelect2Component.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsSelect2Component, selector: "bs-select2", inputs: { searchterm: "searchterm", suggestions: "suggestions", selectedItems: "selectedItems" }, outputs: { provideSuggestions: "provideSuggestions" }, host: { listeners: { "window:resize": "onResize()", "click": "focus()" }, properties: { "class.focus": "this.isFocused" } }, viewQueries: [{ propertyName: "searchBox", first: true, predicate: ["searchBox"], descendants: true }, { propertyName: "itemsBox", first: true, predicate: ["itemsBox"], descendants: true }, { propertyName: "defaultItemTemplate", first: true, predicate: ["defaultItemTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [closeOnClickOutside]=\"true\" #itemsBox class=\"items-box\">\n <ng-container *ngFor=\"let item of selectedItems\">\n <ng-container *ngTemplateOutlet=\"itemTemplate ?? defaultItemTemplate; context: { item: item, select2: this }\"></ng-container>\n </ng-container>\n\n <input type=\"text\" autocomplete=\"off\"\n [(ngModel)]=\"searchterm\"\n (ngModelChange)=\"onProvideSuggestions($event)\"\n (focus)=\"isFocused=true\"\n (blur)=\"isFocused=false\"\n [style.width.px]=\"searchWidth\"\n #searchBox />\n <div *bsDropdownMenu>\n <ul class=\"dropdown-menu d-block position-static p-0\" [style.width.px]=\"hostWidth$ | async\">\n <li *ngFor=\"let suggestion of suggestions\" (click)=\"onSuggestionClicked(suggestion)\" [class.selected]=\"selectedItems | inList:suggestion.id\">{{ suggestion.text }}</li>\n </ul>\n </div>\n</div>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-select2=\"select2\">\n <span class=\"select2-item\">\n <span (click)=\"select2.onRemoveItem(item,$event)\">\u00D7</span>\n {{ item.text }}\n </span>\n</ng-template>\n", styles: [".items-box{display:block;position:relative;width:100%;min-height:38px;padding:0 5px 3px;cursor:text;border:1px solid #ccc}.items-box .select2-item{display:inline-block;background-color:#e4e4e4;color:#1a1a1a;border:1px solid #aaa;border-radius:4px;margin-top:5px;margin-right:5px;padding:0 5px;cursor:default;user-select:none;-webkit-user-select:none}.items-box .select2-item>span{cursor:pointer;color:#999}.items-box .select2-item>span:hover{color:#333}.items-box input{border:none;outline:0;margin:5px 0 2px;background:none}:host{display:block;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}ul{max-height:200px;overflow-y:auto}ul>li{padding:10px;cursor:pointer}ul>li.selected{background:#ddd}ul>li:hover{color:#fff;background-color:#5897fb}\n"], directives: [{ type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "isOpen"], outputs: ["isOpenChange"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }], pipes: { "async": i1.AsyncPipe, "inList": BsInListPipe } });
2027
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Component, decorators: [{
2028
+ type: Component,
2029
+ args: [{ selector: 'bs-select2', template: "<div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [closeOnClickOutside]=\"true\" #itemsBox class=\"items-box\">\n <ng-container *ngFor=\"let item of selectedItems\">\n <ng-container *ngTemplateOutlet=\"itemTemplate ?? defaultItemTemplate; context: { item: item, select2: this }\"></ng-container>\n </ng-container>\n\n <input type=\"text\" autocomplete=\"off\"\n [(ngModel)]=\"searchterm\"\n (ngModelChange)=\"onProvideSuggestions($event)\"\n (focus)=\"isFocused=true\"\n (blur)=\"isFocused=false\"\n [style.width.px]=\"searchWidth\"\n #searchBox />\n <div *bsDropdownMenu>\n <ul class=\"dropdown-menu d-block position-static p-0\" [style.width.px]=\"hostWidth$ | async\">\n <li *ngFor=\"let suggestion of suggestions\" (click)=\"onSuggestionClicked(suggestion)\" [class.selected]=\"selectedItems | inList:suggestion.id\">{{ suggestion.text }}</li>\n </ul>\n </div>\n</div>\n\n<ng-template #defaultItemTemplate let-item=\"item\" let-select2=\"select2\">\n <span class=\"select2-item\">\n <span (click)=\"select2.onRemoveItem(item,$event)\">\u00D7</span>\n {{ item.text }}\n </span>\n</ng-template>\n", styles: [".items-box{display:block;position:relative;width:100%;min-height:38px;padding:0 5px 3px;cursor:text;border:1px solid #ccc}.items-box .select2-item{display:inline-block;background-color:#e4e4e4;color:#1a1a1a;border:1px solid #aaa;border-radius:4px;margin-top:5px;margin-right:5px;padding:0 5px;cursor:default;user-select:none;-webkit-user-select:none}.items-box .select2-item>span{cursor:pointer;color:#999}.items-box .select2-item>span:hover{color:#333}.items-box input{border:none;outline:0;margin:5px 0 2px;background:none}:host{display:block;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}:host.focus{color:#495057;background-color:#fff;border-color:#80bdff!important;outline:0;box-shadow:0 0 0 .2rem #007bff40}ul{max-height:200px;overflow-y:auto}ul>li{padding:10px;cursor:pointer}ul>li.selected{background:#ddd}ul>li:hover{color:#fff;background-color:#5897fb}\n"] }]
2030
+ }], ctorParameters: function () { return []; }, propDecorators: { searchBox: [{
2031
+ type: ViewChild,
2032
+ args: ['searchBox']
2033
+ }], itemsBox: [{
2034
+ type: ViewChild,
2035
+ args: ['itemsBox']
2036
+ }], searchterm: [{
2037
+ type: Input
2038
+ }], suggestions: [{
2039
+ type: Input
2040
+ }], provideSuggestions: [{
2041
+ type: Output
2042
+ }], selectedItems: [{
2043
+ type: Input
2044
+ }], isFocused: [{
2045
+ type: HostBinding,
2046
+ args: ['class.focus']
2047
+ }], onResize: [{
2048
+ type: HostListener,
2049
+ args: ['window:resize']
2050
+ }], focus: [{
2051
+ type: HostListener,
2052
+ args: ['click']
2053
+ }], defaultItemTemplate: [{
2054
+ type: ViewChild,
2055
+ args: ['defaultItemTemplate', { static: true }]
2056
+ }] } });
2057
+
2058
+ class BsItemTemplateDirective {
2059
+ constructor(select2component, templateRef) {
2060
+ this.select2component = select2component;
2061
+ console.log('template', templateRef);
2062
+ this.select2component.itemTemplate = templateRef;
2063
+ }
2064
+ }
2065
+ BsItemTemplateDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsItemTemplateDirective, deps: [{ token: BsSelect2Component }, { token: i0.TemplateRef }], target: i0.ɵɵFactoryTarget.Directive });
2066
+ BsItemTemplateDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsItemTemplateDirective, selector: "[bsItemTemplate]", ngImport: i0 });
2067
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsItemTemplateDirective, decorators: [{
2068
+ type: Directive,
2069
+ args: [{
2070
+ selector: '[bsItemTemplate]'
2071
+ }]
2072
+ }], ctorParameters: function () { return [{ type: BsSelect2Component }, { type: i0.TemplateRef }]; } });
2073
+
2074
+ class BsInListModule {
2075
+ }
2076
+ BsInListModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2077
+ BsInListModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListModule, declarations: [BsInListPipe], imports: [CommonModule], exports: [BsInListPipe] });
2078
+ BsInListModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListModule, imports: [[
2079
+ CommonModule
2080
+ ]] });
2081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsInListModule, decorators: [{
2082
+ type: NgModule,
2083
+ args: [{
2084
+ declarations: [
2085
+ BsInListPipe
2086
+ ],
2087
+ imports: [
2088
+ CommonModule
2089
+ ],
2090
+ exports: [
2091
+ BsInListPipe
2092
+ ]
2093
+ }]
2094
+ }] });
2095
+
2096
+ class BsSelect2Module {
2097
+ }
2098
+ BsSelect2Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2099
+ BsSelect2Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Module, declarations: [BsSelect2Component,
2100
+ BsItemTemplateDirective], imports: [CommonModule,
2101
+ FormsModule,
2102
+ BsDropdownModule,
2103
+ BsInListModule], exports: [BsSelect2Component,
2104
+ BsItemTemplateDirective] });
2105
+ BsSelect2Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Module, imports: [[
2106
+ CommonModule,
2107
+ FormsModule,
2108
+ BsDropdownModule,
2109
+ BsInListModule
791
2110
  ]] });
792
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsNavbarModule, decorators: [{
2111
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSelect2Module, decorators: [{
793
2112
  type: NgModule,
794
2113
  args: [{
795
2114
  declarations: [
796
- BsNavbarComponent,
797
- BsNavbarNavComponent,
798
- BsNavbarDropdownComponent,
799
- BsNavbarItemComponent,
800
- DropdownToggleDirective,
801
- NavLinkDirective,
802
- NavbarContentDirective
2115
+ BsSelect2Component,
2116
+ BsItemTemplateDirective
803
2117
  ],
804
2118
  imports: [
805
2119
  CommonModule,
806
- RouterModule,
807
- ClickOutsideModule
2120
+ FormsModule,
2121
+ BsDropdownModule,
2122
+ BsInListModule
808
2123
  ],
809
2124
  exports: [
810
- BsNavbarComponent,
811
- BsNavbarNavComponent,
812
- BsNavbarDropdownComponent,
813
- BsNavbarItemComponent,
814
- DropdownToggleDirective,
815
- NavLinkDirective,
816
- NavbarContentDirective
2125
+ BsSelect2Component,
2126
+ BsItemTemplateDirective
817
2127
  ]
818
2128
  }]
819
2129
  }] });
820
2130
 
821
- class BsAccordionTabComponent {
822
- constructor(accordion) {
823
- this.accordion = accordion;
824
- }
825
- ngOnInit() {
826
- }
827
- headerClicked(event) {
828
- if (this.accordion.activeTab === this) {
829
- this.accordion.activeTab = null;
830
- }
831
- else {
832
- this.accordion.activeTab = this;
833
- }
2131
+ const SNACKBAR_CONTENT = new InjectionToken('SnackbarContent');
2132
+
2133
+ class BsSnackbarComponent {
2134
+ constructor(content) {
2135
+ this.displayBlock = true;
2136
+ this.width100 = true;
2137
+ this.instance = null;
2138
+ //#region Monitor @slideUpDown hooks
2139
+ this.animationState = '';
2140
+ this.animationStateChanged = new EventEmitter();
2141
+ this.content = content;
2142
+ }
2143
+ onAnimationChanged(event) {
2144
+ this.animationStateChanged.emit(event);
834
2145
  }
835
2146
  }
836
- BsAccordionTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabComponent, deps: [{ token: BsAccordionComponent }], target: i0.ɵɵFactoryTarget.Component });
837
- BsAccordionTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionTabComponent, selector: "bs-accordion-tab", ngImport: i0, template: "<div class=\"card\">\n <ng-content select=\"bs-accordion-tab-header\"></ng-content>\n <div class=\"card-block overflow-hidden\" [@slideUpDown]=\"(accordion.activeTab === this) ? 'down' : 'up'\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card,.card-header,.card-block{border-radius:0}.card{margin-bottom:-1px}\n"], animations: [SlideUpDownAnimation] });
838
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabComponent, decorators: [{
2147
+ BsSnackbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarComponent, deps: [{ token: SNACKBAR_CONTENT }], target: i0.ɵɵFactoryTarget.Component });
2148
+ BsSnackbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsSnackbarComponent, selector: "bs-snackbar", host: { properties: { "class.d-block": "this.displayBlock", "class.w-100": "this.width100" } }, ngImport: i0, template: "<div [@slideUpDown]=\"animationState\"\n (@slideUpDown.start)=\"onAnimationChanged($event)\"\n (@slideUpDown.done)=\"onAnimationChanged($event)\">\n\n <ng-container *ngTemplateOutlet=\"content; context: { $implicit: this }\" ></ng-container>\n</div>", styles: [":host{background:#232323;color:rgba(var(--bs-light-rgb))}\n"], directives: [{ type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [SlideUpDownAnimation] });
2149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarComponent, decorators: [{
839
2150
  type: Component,
840
- args: [{ selector: 'bs-accordion-tab', animations: [SlideUpDownAnimation], template: "<div class=\"card\">\n <ng-content select=\"bs-accordion-tab-header\"></ng-content>\n <div class=\"card-block overflow-hidden\" [@slideUpDown]=\"(accordion.activeTab === this) ? 'down' : 'up'\">\n <ng-content></ng-content>\n </div>\n</div>", styles: [".card,.card-header,.card-block{border-radius:0}.card{margin-bottom:-1px}\n"] }]
841
- }], ctorParameters: function () { return [{ type: BsAccordionComponent }]; } });
2151
+ args: [{ selector: 'bs-snackbar', animations: [SlideUpDownAnimation], template: "<div [@slideUpDown]=\"animationState\"\n (@slideUpDown.start)=\"onAnimationChanged($event)\"\n (@slideUpDown.done)=\"onAnimationChanged($event)\">\n\n <ng-container *ngTemplateOutlet=\"content; context: { $implicit: this }\" ></ng-container>\n</div>", styles: [":host{background:#232323;color:rgba(var(--bs-light-rgb))}\n"] }]
2152
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
2153
+ type: Inject,
2154
+ args: [SNACKBAR_CONTENT]
2155
+ }] }]; }, propDecorators: { displayBlock: [{
2156
+ type: HostBinding,
2157
+ args: ['class.d-block']
2158
+ }], width100: [{
2159
+ type: HostBinding,
2160
+ args: ['class.w-100']
2161
+ }] } });
842
2162
 
843
- class BsAccordionComponent {
844
- constructor() {
845
- this.activeTab = null;
2163
+ class BsSnackbarService {
2164
+ constructor(overlay, parentInjector, componentFactoryResolver) {
2165
+ this.overlay = overlay;
2166
+ this.parentInjector = parentInjector;
2167
+ this.componentFactoryResolver = componentFactoryResolver;
2168
+ }
2169
+ show(template) {
2170
+ const injector = Injector.create({
2171
+ providers: [{ provide: SNACKBAR_CONTENT, useValue: template }],
2172
+ parent: this.parentInjector
2173
+ });
2174
+ const portal = new ComponentPortal(BsSnackbarComponent, null, injector, this.componentFactoryResolver);
2175
+ const overlayRef = this.overlay.create({
2176
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
2177
+ positionStrategy: this.overlay.position()
2178
+ .global().centerHorizontally().bottom('0'),
2179
+ width: '100%'
2180
+ });
2181
+ const componentInstance = overlayRef.attach(portal);
2182
+ // componentInstance.
2183
+ componentInstance.instance['instance'] = {
2184
+ component: componentInstance,
2185
+ overlay: overlayRef
2186
+ };
2187
+ return componentInstance.instance;
846
2188
  }
847
- ngOnInit() {
2189
+ hide(snackbar) {
2190
+ snackbar.animationStateChanged.pipe(filter(ev => ev.phaseName === 'done' && ev.toState === 'void'), take(1)).subscribe(() => {
2191
+ snackbar['instance']?.overlay.dispose();
2192
+ });
2193
+ snackbar.animationState = 'void';
848
2194
  }
849
2195
  }
850
- BsAccordionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
851
- BsAccordionComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionComponent, selector: "bs-accordion", queries: [{ propertyName: "tabPages", predicate: BsAccordionTabComponent }], ngImport: i0, template: "<ng-content></ng-content>", styles: [""] });
852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionComponent, decorators: [{
853
- type: Component,
854
- args: [{ selector: 'bs-accordion', template: "<ng-content></ng-content>", styles: [""] }]
855
- }], ctorParameters: function () { return []; }, propDecorators: { tabPages: [{
856
- type: ContentChildren,
857
- args: [BsAccordionTabComponent]
858
- }] } });
2196
+ BsSnackbarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarService, deps: [{ token: i1$1.Overlay }, { token: i0.Injector }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable });
2197
+ BsSnackbarServiceprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarService, providedIn: 'root' });
2198
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarService, decorators: [{
2199
+ type: Injectable,
2200
+ args: [{
2201
+ providedIn: 'root'
2202
+ }]
2203
+ }], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.Injector }, { type: i0.ComponentFactoryResolver }]; } });
859
2204
 
860
- class BsAccordionTabHeaderComponent {
861
- constructor(accordionTab, accordion) {
862
- this.accordionTab = accordionTab;
863
- this.accordion = accordion;
864
- }
865
- ngOnInit() {
2205
+ class BsSnackbarCloseDirective {
2206
+ constructor(snackbarService) {
2207
+ this.snackbarService = snackbarService;
866
2208
  }
867
- headerClicked(event) {
868
- if (this.accordion.activeTab === this.accordionTab) {
869
- this.accordion.activeTab = null;
870
- }
871
- else {
872
- this.accordion.activeTab = this.accordionTab;
873
- }
2209
+ onClick() {
2210
+ this.snackbarService.hide(this.bsSnackbarClose);
874
2211
  }
875
2212
  }
876
- BsAccordionTabHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabHeaderComponent, deps: [{ token: BsAccordionTabComponent }, { token: BsAccordionComponent }], target: i0.ɵɵFactoryTarget.Component });
877
- BsAccordionTabHeaderComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsAccordionTabHeaderComponent, selector: "bs-accordion-tab-header", ngImport: i0, template: "<div class=\"card-header cursor-pointer\" (click)=\"headerClicked($event)\">\n <ng-content></ng-content>\n</div>", styles: [""] });
878
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionTabHeaderComponent, decorators: [{
879
- type: Component,
880
- args: [{ selector: 'bs-accordion-tab-header', template: "<div class=\"card-header cursor-pointer\" (click)=\"headerClicked($event)\">\n <ng-content></ng-content>\n</div>", styles: [""] }]
881
- }], ctorParameters: function () { return [{ type: BsAccordionTabComponent }, { type: BsAccordionComponent }]; } });
2213
+ BsSnackbarCloseDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarCloseDirective, deps: [{ token: BsSnackbarService }], target: i0.ɵɵFactoryTarget.Directive });
2214
+ BsSnackbarCloseDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsSnackbarCloseDirective, selector: "[bsSnackbarClose]", inputs: { bsSnackbarClose: "bsSnackbarClose" }, host: { listeners: { "click": "onClick()" } }, ngImport: i0 });
2215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarCloseDirective, decorators: [{
2216
+ type: Directive,
2217
+ args: [{
2218
+ selector: '[bsSnackbarClose]'
2219
+ }]
2220
+ }], ctorParameters: function () { return [{ type: BsSnackbarService }]; }, propDecorators: { bsSnackbarClose: [{
2221
+ type: Input
2222
+ }], onClick: [{
2223
+ type: HostListener,
2224
+ args: ['click']
2225
+ }] } });
882
2226
 
883
- class BsAccordionModule {
2227
+ class BsSnackbarModule {
884
2228
  }
885
- BsAccordionModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
886
- BsAccordionModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, declarations: [BsAccordionComponent,
887
- BsAccordionTabComponent,
888
- BsAccordionTabHeaderComponent], imports: [CommonModule,
889
- BrowserAnimationsModule], exports: [BsAccordionComponent,
890
- BsAccordionTabComponent,
891
- BsAccordionTabHeaderComponent] });
892
- BsAccordionModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, imports: [[
893
- CommonModule,
894
- BrowserAnimationsModule
2229
+ BsSnackbarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2230
+ BsSnackbarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarModule, declarations: [BsSnackbarComponent,
2231
+ BsSnackbarCloseDirective], imports: [CommonModule], exports: [BsSnackbarComponent,
2232
+ BsSnackbarCloseDirective] });
2233
+ BsSnackbarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarModule, providers: [
2234
+ // { provide: BsSnackbarComponent, useExisting: forwardRef(() => BsSnackbarComponent) }
2235
+ // { provide: BsSnackbarComponent, useClass: BsSnackbarComponent }
2236
+ ], imports: [[
2237
+ CommonModule
895
2238
  ]] });
896
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsAccordionModule, decorators: [{
2239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsSnackbarModule, decorators: [{
897
2240
  type: NgModule,
898
2241
  args: [{
899
2242
  declarations: [
900
- BsAccordionComponent,
901
- BsAccordionTabComponent,
902
- BsAccordionTabHeaderComponent
2243
+ BsSnackbarComponent,
2244
+ BsSnackbarCloseDirective
903
2245
  ],
904
2246
  imports: [
905
- CommonModule,
906
- BrowserAnimationsModule
2247
+ CommonModule
907
2248
  ],
908
2249
  exports: [
909
- BsAccordionComponent,
910
- BsAccordionTabComponent,
911
- BsAccordionTabHeaderComponent
2250
+ BsSnackbarComponent,
2251
+ BsSnackbarCloseDirective
2252
+ ],
2253
+ providers: [
2254
+ // { provide: BsSnackbarComponent, useExisting: forwardRef(() => BsSnackbarComponent) }
2255
+ // { provide: BsSnackbarComponent, useClass: BsSnackbarComponent }
912
2256
  ]
913
2257
  }]
914
2258
  }] });
@@ -982,85 +2326,363 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
982
2326
  }]
983
2327
  }] });
984
2328
 
985
- class BsScrollspyDirective {
986
- constructor(element) {
987
- this.element = element;
2329
+ class BsToggleButtonComponent {
2330
+ constructor() {
2331
+ this.disableAnimations = true;
2332
+ //#region isToggled
2333
+ this._isToggled = false;
2334
+ this.isToggledChange = new EventEmitter();
2335
+ //#endregion
2336
+ this.offColor = '#CCCCCC';
2337
+ this.onColor = '#2196F3';
2338
+ this.round = true;
2339
+ }
2340
+ ngAfterViewInit() {
2341
+ this.disableAnimations = false;
2342
+ }
2343
+ get isToggled() {
2344
+ return this._isToggled;
2345
+ }
2346
+ set isToggled(value) {
2347
+ this._isToggled = value;
2348
+ this.isToggledChange.emit(this._isToggled);
988
2349
  }
989
2350
  }
990
- BsScrollspyDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
991
- BsScrollspyDirectivedir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsScrollspyDirective, selector: "[bsScrollspy]", ngImport: i0 });
992
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyDirective, decorators: [{
993
- type: Directive,
2351
+ BsToggleButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2352
+ BsToggleButtonComponentcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsToggleButtonComponent, selector: "bs-toggle-button", inputs: { isToggled: "isToggled", offColor: "offColor", onColor: "onColor", round: "round" }, outputs: { isToggledChange: "isToggledChange" }, ngImport: i0, template: "<label (click)=\"isToggled = !isToggled\" class=\"switch\" [class.checked]=\"isToggled\">\n <span class=\"slider\" [class.round]=\"round\" [@colorTransition]=\"{ value: isToggled ? 'color2' : 'color1', params: { color1: offColor, color2: onColor, 'duration': '.4s' } }\"></span>\n</label>", styles: [".switch{position:relative;display:inline-block;width:30px;height:17px}.switch>.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:transform .4s}.switch>.slider.round{border-radius:8.5px}.switch>.slider.round:before{border-radius:50%}.switch>.slider:before{position:absolute;content:\"\";height:13px;width:13px;left:2px;top:0;bottom:0;margin:auto 0;background-color:#fff;transition:transform .4s}.switch.checked .slider:before{transform:translate(13px)}\n"], animations: [ColorTransitionAnimation] });
2353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonComponent, decorators: [{
2354
+ type: Component,
2355
+ args: [{ selector: 'bs-toggle-button', animations: [ColorTransitionAnimation], template: "<label (click)=\"isToggled = !isToggled\" class=\"switch\" [class.checked]=\"isToggled\">\n <span class=\"slider\" [class.round]=\"round\" [@colorTransition]=\"{ value: isToggled ? 'color2' : 'color1', params: { color1: offColor, color2: onColor, 'duration': '.4s' } }\"></span>\n</label>", styles: [".switch{position:relative;display:inline-block;width:30px;height:17px}.switch>.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;transition:transform .4s}.switch>.slider.round{border-radius:8.5px}.switch>.slider.round:before{border-radius:50%}.switch>.slider:before{position:absolute;content:\"\";height:13px;width:13px;left:2px;top:0;bottom:0;margin:auto 0;background-color:#fff;transition:transform .4s}.switch.checked .slider:before{transform:translate(13px)}\n"] }]
2356
+ }], propDecorators: { isToggledChange: [{
2357
+ type: Output
2358
+ }], isToggled: [{
2359
+ type: Input
2360
+ }], offColor: [{
2361
+ type: Input
2362
+ }], onColor: [{
2363
+ type: Input
2364
+ }], round: [{
2365
+ type: Input
2366
+ }] } });
2367
+
2368
+ class BsToggleButtonModule {
2369
+ }
2370
+ BsToggleButtonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2371
+ BsToggleButtonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonModule, declarations: [BsToggleButtonComponent], imports: [CommonModule], exports: [BsToggleButtonComponent] });
2372
+ BsToggleButtonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonModule, imports: [[
2373
+ CommonModule
2374
+ ]] });
2375
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsToggleButtonModule, decorators: [{
2376
+ type: NgModule,
994
2377
  args: [{
995
- selector: '[bsScrollspy]'
2378
+ declarations: [
2379
+ BsToggleButtonComponent
2380
+ ],
2381
+ imports: [
2382
+ CommonModule
2383
+ ],
2384
+ exports: [
2385
+ BsToggleButtonComponent
2386
+ ]
996
2387
  }]
997
- }], ctorParameters: function () { return [{ type: i0.ElementRef }]; } });
2388
+ }] });
998
2389
 
999
- class BsScrollspyComponent {
1000
- constructor(document) {
1001
- this.activeDirective = null;
1002
- this.doc = document;
2390
+ const TOOLTIP_CONTENT = new InjectionToken('TooltipContent');
2391
+
2392
+ class BsTooltipComponent {
2393
+ constructor(content) {
2394
+ this.positions = Position;
2395
+ this.position = Position.bottom;
2396
+ this.template = content;
1003
2397
  }
1004
- ngOnInit() {
2398
+ }
2399
+ BsTooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipComponent, deps: [{ token: TOOLTIP_CONTENT }], target: i0.ɵɵFactoryTarget.Component });
2400
+ BsTooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsTooltipComponent, selector: "bs-tooltip", inputs: { position: "position" }, ngImport: i0, template: "<div [@fadeInOut] class=\"tooltip position-relative show\"\n [class.bs-tooltip-bottom]=\"position === positions.bottom\"\n [class.bs-tooltip-top]=\"position === positions.top\"\n [class.bs-tooltip-start]=\"position === positions.left\"\n [class.bs-tooltip-end]=\"position === positions.right\">\n <div class=\"tooltip-arrow\"></div>\n <div class=\"tooltip-inner\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n</div>\n", styles: [".tooltip.bs-tooltip-bottom .tooltip-arrow,.tooltip.bs-tooltip-top .tooltip-arrow{left:50%;transform:translate(-50%)}.tooltip.bs-tooltip-start .tooltip-arrow,.tooltip.bs-tooltip-end .tooltip-arrow{top:50%;transform:translateY(-50%)}\n"], directives: [{ type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], animations: [FadeInOutAnimation] });
2401
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipComponent, decorators: [{
2402
+ type: Component,
2403
+ args: [{ selector: 'bs-tooltip', animations: [FadeInOutAnimation], template: "<div [@fadeInOut] class=\"tooltip position-relative show\"\n [class.bs-tooltip-bottom]=\"position === positions.bottom\"\n [class.bs-tooltip-top]=\"position === positions.top\"\n [class.bs-tooltip-start]=\"position === positions.left\"\n [class.bs-tooltip-end]=\"position === positions.right\">\n <div class=\"tooltip-arrow\"></div>\n <div class=\"tooltip-inner\">\n <ng-container *ngTemplateOutlet=\"template\"></ng-container>\n </div>\n</div>\n", styles: [".tooltip.bs-tooltip-bottom .tooltip-arrow,.tooltip.bs-tooltip-top .tooltip-arrow{left:50%;transform:translate(-50%)}.tooltip.bs-tooltip-start .tooltip-arrow,.tooltip.bs-tooltip-end .tooltip-arrow{top:50%;transform:translateY(-50%)}\n"] }]
2404
+ }], ctorParameters: function () { return [{ type: i0.TemplateRef, decorators: [{
2405
+ type: Inject,
2406
+ args: [TOOLTIP_CONTENT]
2407
+ }] }]; }, propDecorators: { position: [{
2408
+ type: Input
2409
+ }] } });
2410
+
2411
+ class BsTooltipDirective {
2412
+ constructor(overlay, templateRef, componentFactoryResolver, parentInjector, parent) {
2413
+ this.overlay = overlay;
2414
+ this.templateRef = templateRef;
2415
+ this.parentInjector = parentInjector;
2416
+ this.parent = parent;
2417
+ this.bsTooltip = Position.bottom;
2418
+ this.overlayRef = null;
2419
+ this.injector = Injector.create({
2420
+ providers: [{ provide: TOOLTIP_CONTENT, useValue: this.templateRef }],
2421
+ parent: this.parentInjector
2422
+ });
2423
+ this.portal = new ComponentPortal(BsTooltipComponent, null, this.injector, componentFactoryResolver);
2424
+ parent.nativeElement.onmouseenter = () => {
2425
+ this.showTooltip();
2426
+ };
2427
+ parent.nativeElement.onmouseleave = () => {
2428
+ this.hideTooltip();
2429
+ };
2430
+ }
2431
+ showTooltip() {
2432
+ const positions = [];
2433
+ switch (this.bsTooltip) {
2434
+ case Position.bottom:
2435
+ {
2436
+ positions.push({
2437
+ originX: "center",
2438
+ originY: "bottom",
2439
+ overlayX: "center",
2440
+ overlayY: "top"
2441
+ });
2442
+ }
2443
+ break;
2444
+ case Position.top:
2445
+ {
2446
+ positions.push({
2447
+ originX: "center",
2448
+ originY: "top",
2449
+ overlayX: "center",
2450
+ overlayY: "bottom"
2451
+ });
2452
+ }
2453
+ break;
2454
+ case Position.left:
2455
+ {
2456
+ positions.push({
2457
+ originX: "start",
2458
+ originY: "center",
2459
+ overlayX: "end",
2460
+ overlayY: "center",
2461
+ });
2462
+ }
2463
+ break;
2464
+ case Position.right:
2465
+ {
2466
+ positions.push({
2467
+ originX: "end",
2468
+ originY: "center",
2469
+ overlayX: "start",
2470
+ overlayY: "center"
2471
+ });
2472
+ }
2473
+ break;
2474
+ }
2475
+ this.overlayRef = this.overlay.create({
2476
+ scrollStrategy: this.overlay.scrollStrategies.reposition(),
2477
+ positionStrategy: this.overlay.position()
2478
+ .flexibleConnectedTo(this.parent)
2479
+ .withPositions(positions),
2480
+ });
2481
+ const component = this.overlayRef.attach(this.portal);
2482
+ component.instance.position = this.bsTooltip;
2483
+ }
2484
+ hideTooltip() {
2485
+ if (this.overlayRef) {
2486
+ this.overlayRef.detach();
2487
+ this.overlayRef.dispose();
2488
+ this.overlayRef = null;
2489
+ }
2490
+ }
2491
+ }
2492
+ BsTooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipDirective, deps: [{ token: i1$1.Overlay }, { token: i0.TemplateRef }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i0.ElementRef, host: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Directive });
2493
+ BsTooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.1.1", type: BsTooltipDirective, selector: "*[bsTooltip]", inputs: { bsTooltip: "bsTooltip" }, ngImport: i0 });
2494
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipDirective, decorators: [{
2495
+ type: Directive,
2496
+ args: [{
2497
+ selector: '*[bsTooltip]'
2498
+ }]
2499
+ }], ctorParameters: function () { return [{ type: i1$1.Overlay }, { type: i0.TemplateRef }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i0.ElementRef, decorators: [{
2500
+ type: Host
2501
+ }, {
2502
+ type: SkipSelf
2503
+ }] }]; }, propDecorators: { bsTooltip: [{
2504
+ type: Input
2505
+ }] } });
2506
+
2507
+ class BsTooltipModule {
2508
+ }
2509
+ BsTooltipModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2510
+ BsTooltipModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipModule, declarations: [BsTooltipDirective,
2511
+ BsTooltipComponent], imports: [CommonModule], exports: [BsTooltipDirective] });
2512
+ BsTooltipModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipModule, imports: [[
2513
+ CommonModule
2514
+ ]] });
2515
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTooltipModule, decorators: [{
2516
+ type: NgModule,
2517
+ args: [{
2518
+ declarations: [
2519
+ BsTooltipDirective,
2520
+ BsTooltipComponent
2521
+ ],
2522
+ imports: [
2523
+ CommonModule
2524
+ ],
2525
+ exports: [
2526
+ BsTooltipDirective
2527
+ ]
2528
+ }]
2529
+ }] });
2530
+
2531
+ class BsTypeaheadComponent {
2532
+ constructor() {
2533
+ this.isOpen = false;
2534
+ this.suggestions$ = new BehaviorSubject([]);
2535
+ this.isLoading$ = new BehaviorSubject(false);
2536
+ this.hostWidth$ = new BehaviorSubject(200);
2537
+ this.destroyed$ = new Subject();
2538
+ this.searchterm = '';
2539
+ this.isLoadingText = 'Loading...';
2540
+ this.noSuggestionsText = 'No suggestions found';
2541
+ this.provideSuggestions = new EventEmitter();
2542
+ this.suggestionSelected = new EventEmitter();
2543
+ this.searchtermChange = new EventEmitter();
2544
+ this.submitted = new EventEmitter();
2545
+ this.showNoSuggestions$ = this.suggestions$
2546
+ .pipe(map(suggestions => suggestions.length === 0));
1005
2547
  }
1006
2548
  ngAfterViewInit() {
1007
- this.onWindowScroll();
2549
+ this.onResize();
1008
2550
  }
1009
- onWindowScroll() {
1010
- const dirs = this.directives.filter((d) => d.element.nativeElement.getBoundingClientRect().y <= 0);
1011
- if (this.directives.length === 0) {
1012
- this.activeDirective = null;
1013
- }
1014
- else if (dirs.length === 0) {
1015
- this.activeDirective = this.directives.get(0) ?? null;
2551
+ onProvideSuggestions(value) {
2552
+ this.searchtermChange.emit(value);
2553
+ if (value === '') {
2554
+ this.isOpen = false;
2555
+ this.suggestions$.next([]);
1016
2556
  }
1017
2557
  else {
1018
- this.activeDirective = dirs[dirs.length - 1];
2558
+ this.isLoading$.next(true);
2559
+ this.isOpen = true;
2560
+ this.provideSuggestions.emit(value);
1019
2561
  }
1020
2562
  }
1021
- scrollToHeader(directive) {
1022
- const header = directive.element.nativeElement;
1023
- header.scrollIntoView();
2563
+ set suggestions(value) {
2564
+ this.isLoading$.next(false);
2565
+ this.suggestions$.next(value);
2566
+ }
2567
+ suggestionClicked(suggestion) {
2568
+ this.searchterm = suggestion.text;
2569
+ this.searchtermChange.emit(this.searchterm);
2570
+ this.isOpen = false;
2571
+ this.suggestionSelected.emit(suggestion);
2572
+ }
2573
+ onSubmit() {
2574
+ this.isOpen = false;
2575
+ this.submitted.emit(this.searchterm);
2576
+ }
2577
+ focus() {
2578
+ this.textbox.nativeElement.focus();
2579
+ }
2580
+ onResize() {
2581
+ this.hostWidth$.next(this.textbox.nativeElement.offsetWidth);
1024
2582
  }
1025
2583
  }
1026
- BsScrollspyComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyComponent, deps: [{ token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
1027
- BsScrollspyComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsScrollspyComponent, selector: "bs-scrollspy", host: { listeners: { "window:scroll": "onWindowScroll($event)" } }, queries: [{ propertyName: "directives", predicate: BsScrollspyDirective, descendants: true }], ngImport: i0, template: "<div class=\"spy\">\n <ul class=\"text-muted\">\n <li *ngFor=\"let dir of directives\">\n <span class=\"cursor-pointer\" [ngClass]=\"'nav' + dir.element.nativeElement.tagName\" [class.fw-bold]=\"activeDirective?.element === dir.element\" (click)=\"scrollToHeader(dir)\" [title]=\"dir.element.nativeElement.textContent\">\n {{ dir.element.nativeElement.textContent }}\n </span>\n </li>\n </ul>\n</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}.spy>ul{list-style-type:none;padding-left:0}.spy>ul>li:hover{color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}@media (min-width: 768px){:host{display:grid;grid-template-areas:\"content toc\";grid-template-columns:auto 200px;grid-template-rows:auto;grid-gap:inherit;gap:inherit;grid-area:main}.spy{position:sticky;top:5rem;right:0;z-index:2;height:calc(100% - 60rem);overflow-y:auto;grid-area:toc}.spy>ul{padding-left:2rem}.spy>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.navH2{margin-left:20px}.navH3{margin-left:40px}.navH4{margin-left:60px}\n"], directives: [{ type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
1028
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyComponent, decorators: [{
2584
+ BsTypeaheadComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
2585
+ BsTypeaheadComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: BsTypeaheadComponent, selector: "bs-typeahead", inputs: { searchterm: "searchterm", isLoadingText: "isLoadingText", noSuggestionsText: "noSuggestionsText", suggestions: "suggestions" }, outputs: { provideSuggestions: "provideSuggestions", suggestionSelected: "suggestionSelected", searchtermChange: "searchtermChange", submitted: "submitted" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "textbox", first: true, predicate: ["textbox"], descendants: true }], ngImport: i0, template: "<div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [closeOnClickOutside]=\"true\">\n <input type=\"text\" class=\"form-control\" #textbox [(ngModel)]=\"searchterm\" (ngModelChange)=\"onProvideSuggestions($event)\" (keyup.enter)=\"onSubmit()\" />\n <div *bsDropdownMenu>\n <ul class=\"dropdown-menu d-block position-static\" [style.width.px]=\"hostWidth$ | async\">\n <bs-progress *ngIf=\"isLoading$ | async\" [height]=\"2\" [isIndeterminate]=\"true\"></bs-progress>\n <li *ngIf=\"isLoading$ | async\">\n <a class=\"dropdown-item disabled\">{{ isLoadingText }}</a>\n </li>\n <ng-container *ngIf=\"(isLoading$ | async) === false\">\n <li *ngIf=\"showNoSuggestions$ | async\">\n <a class=\"dropdown-item disabled\">{{ noSuggestionsText }}</a>\n </li>\n <li *ngFor=\"let suggestion of (suggestions$ | async)\" (click)=\"suggestionClicked(suggestion)\">\n <a class=\"dropdown-item cursor-pointer\">{{ suggestion.text }}</a>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>", styles: ["bs-progress{margin-top:-8px;margin-bottom:6px}\n"], components: [{ type: BsProgressComponent, selector: "bs-progress", inputs: ["height", "isIndeterminate"] }], directives: [{ type: BsDropdownDirective, selector: "[bsDropdown]", inputs: ["hasBackdrop", "sameWidth", "closeOnClickOutside", "isOpen"], outputs: ["isOpenChange"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: BsDropdownMenuDirective, selector: "[bsDropdownMenu]" }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "async": i1.AsyncPipe } });
2586
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadComponent, decorators: [{
1029
2587
  type: Component,
1030
- args: [{ selector: 'bs-scrollspy', template: "<div class=\"spy\">\n <ul class=\"text-muted\">\n <li *ngFor=\"let dir of directives\">\n <span class=\"cursor-pointer\" [ngClass]=\"'nav' + dir.element.nativeElement.tagName\" [class.fw-bold]=\"activeDirective?.element === dir.element\" (click)=\"scrollToHeader(dir)\" [title]=\"dir.element.nativeElement.textContent\">\n {{ dir.element.nativeElement.textContent }}\n </span>\n </li>\n </ul>\n</div>\n<div class=\"content\">\n <ng-content></ng-content>\n</div>", styles: [":host{display:block}.spy>ul{list-style-type:none;padding-left:0}.spy>ul>li:hover{color:rgba(var(--bs-dark-rgb),var(--bs-text-opacity))!important}@media (min-width: 768px){:host{display:grid;grid-template-areas:\"content toc\";grid-template-columns:auto 200px;grid-template-rows:auto;grid-gap:inherit;gap:inherit;grid-area:main}.spy{position:sticky;top:5rem;right:0;z-index:2;height:calc(100% - 60rem);overflow-y:auto;grid-area:toc}.spy>ul{padding-left:2rem}.spy>ul>li{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.navH2{margin-left:20px}.navH3{margin-left:40px}.navH4{margin-left:60px}\n"] }]
1031
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
1032
- type: Inject,
1033
- args: [DOCUMENT]
1034
- }] }]; }, propDecorators: { directives: [{
1035
- type: ContentChildren,
1036
- args: [BsScrollspyDirective, { descendants: true }]
1037
- }], onWindowScroll: [{
2588
+ args: [{ selector: 'bs-typeahead', template: "<div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [closeOnClickOutside]=\"true\">\n <input type=\"text\" class=\"form-control\" #textbox [(ngModel)]=\"searchterm\" (ngModelChange)=\"onProvideSuggestions($event)\" (keyup.enter)=\"onSubmit()\" />\n <div *bsDropdownMenu>\n <ul class=\"dropdown-menu d-block position-static\" [style.width.px]=\"hostWidth$ | async\">\n <bs-progress *ngIf=\"isLoading$ | async\" [height]=\"2\" [isIndeterminate]=\"true\"></bs-progress>\n <li *ngIf=\"isLoading$ | async\">\n <a class=\"dropdown-item disabled\">{{ isLoadingText }}</a>\n </li>\n <ng-container *ngIf=\"(isLoading$ | async) === false\">\n <li *ngIf=\"showNoSuggestions$ | async\">\n <a class=\"dropdown-item disabled\">{{ noSuggestionsText }}</a>\n </li>\n <li *ngFor=\"let suggestion of (suggestions$ | async)\" (click)=\"suggestionClicked(suggestion)\">\n <a class=\"dropdown-item cursor-pointer\">{{ suggestion.text }}</a>\n </li>\n </ng-container>\n </ul>\n </div>\n</div>", styles: ["bs-progress{margin-top:-8px;margin-bottom:6px}\n"] }]
2589
+ }], ctorParameters: function () { return []; }, propDecorators: { textbox: [{
2590
+ type: ViewChild,
2591
+ args: ['textbox']
2592
+ }], searchterm: [{
2593
+ type: Input
2594
+ }], isLoadingText: [{
2595
+ type: Input
2596
+ }], noSuggestionsText: [{
2597
+ type: Input
2598
+ }], provideSuggestions: [{
2599
+ type: Output
2600
+ }], suggestionSelected: [{
2601
+ type: Output
2602
+ }], searchtermChange: [{
2603
+ type: Output
2604
+ }], submitted: [{
2605
+ type: Output
2606
+ }], suggestions: [{
2607
+ type: Input
2608
+ }], onResize: [{
1038
2609
  type: HostListener,
1039
- args: ['window:scroll', ['$event']]
2610
+ args: ['window:resize']
1040
2611
  }] } });
1041
2612
 
1042
- class BsScrollspyModule {
2613
+ class BsTypeaheadModule {
1043
2614
  }
1044
- BsScrollspyModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1045
- BsScrollspyModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, declarations: [BsScrollspyComponent,
1046
- BsScrollspyDirective], imports: [CommonModule], exports: [BsScrollspyComponent,
1047
- BsScrollspyDirective] });
1048
- BsScrollspyModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, imports: [[
2615
+ BsTypeaheadModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2616
+ BsTypeaheadModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadModule, declarations: [BsTypeaheadComponent], imports: [CommonModule,
2617
+ FormsModule,
2618
+ BsDropdownModule,
2619
+ BsProgressBarModule], exports: [BsTypeaheadComponent] });
2620
+ BsTypeaheadModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadModule, imports: [[
2621
+ CommonModule,
2622
+ FormsModule,
2623
+ BsDropdownModule,
2624
+ BsProgressBarModule
2625
+ ]] });
2626
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsTypeaheadModule, decorators: [{
2627
+ type: NgModule,
2628
+ args: [{
2629
+ declarations: [
2630
+ BsTypeaheadComponent
2631
+ ],
2632
+ imports: [
2633
+ CommonModule,
2634
+ FormsModule,
2635
+ BsDropdownModule,
2636
+ BsProgressBarModule
2637
+ ],
2638
+ exports: [
2639
+ BsTypeaheadComponent
2640
+ ]
2641
+ }]
2642
+ }] });
2643
+
2644
+ class BsFontColorPipe {
2645
+ transform(color_hex) {
2646
+ if (color_hex === undefined || color_hex === null || color_hex.length < 7 || typeof (color_hex) !== 'string') {
2647
+ return '#FFFFFF';
2648
+ }
2649
+ const R_HEX = color_hex.substr(1, 2);
2650
+ const G_HEX = color_hex.substr(3, 2);
2651
+ const B_HEX = color_hex.substr(5, 2);
2652
+ const R_DEC = parseInt(R_HEX, 16);
2653
+ const G_DEC = parseInt(G_HEX, 16);
2654
+ const B_DEC = parseInt(B_HEX, 16);
2655
+ const CONTRAST_HEX = R_DEC * 0.299 + G_DEC * 0.587 + B_DEC * 0.114 > 186 ? '#000000' : '#FFFFFF';
2656
+ return CONTRAST_HEX;
2657
+ }
2658
+ }
2659
+ BsFontColorPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
2660
+ BsFontColorPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipe, name: "bsFontColor" });
2661
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipe, decorators: [{
2662
+ type: Pipe,
2663
+ args: [{
2664
+ name: 'bsFontColor'
2665
+ }]
2666
+ }] });
2667
+
2668
+ class BsFontColorPipeModule {
2669
+ }
2670
+ BsFontColorPipeModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipeModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2671
+ BsFontColorPipeModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipeModule, declarations: [BsFontColorPipe], imports: [CommonModule], exports: [BsFontColorPipe] });
2672
+ BsFontColorPipeModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipeModule, imports: [[
1049
2673
  CommonModule
1050
2674
  ]] });
1051
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsScrollspyModule, decorators: [{
2675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: BsFontColorPipeModule, decorators: [{
1052
2676
  type: NgModule,
1053
2677
  args: [{
1054
2678
  declarations: [
1055
- BsScrollspyComponent,
1056
- BsScrollspyDirective
2679
+ BsFontColorPipe
1057
2680
  ],
1058
2681
  imports: [
1059
2682
  CommonModule
1060
2683
  ],
1061
2684
  exports: [
1062
- BsScrollspyComponent,
1063
- BsScrollspyDirective
2685
+ BsFontColorPipe
1064
2686
  ]
1065
2687
  }]
1066
2688
  }] });
@@ -1069,5 +2691,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImpor
1069
2691
  * Generated bundle index. Do not edit.
1070
2692
  */
1071
2693
 
1072
- export { BsAccordionComponent, BsAccordionModule, BsAccordionTabComponent, BsAccordionTabHeaderComponent, BsAlertCloseComponent, BsAlertComponent, BsAlertModule, BsCalendarComponent, BsCalendarModule, BsCardComponent, BsCardHeaderComponent, BsCardModule, BsCarouselComponent, BsCarouselImageDirective, BsCarouselModule, BsListGroupComponent, BsListGroupItemComponent, BsListGroupModule, BsNavbarComponent, BsNavbarDropdownComponent, BsNavbarItemComponent, BsNavbarModule, BsNavbarNavComponent, BsScrollspyComponent, BsScrollspyDirective, BsScrollspyModule, BsTabControlComponent, BsTabControlModule, BsTabPageComponent, Color, DropdownToggleDirective, NavLinkDirective, NavbarContentDirective };
2694
+ export { BsAccordionComponent, BsAccordionModule, BsAccordionTabComponent, BsAccordionTabHeaderComponent, BsAlertCloseComponent, BsAlertComponent, BsAlertModule, BsCalendarComponent, BsCalendarModule, BsCardComponent, BsCardHeaderComponent, BsCardModule, BsCarouselComponent, BsCarouselImageDirective, BsCarouselModule, BsContextMenuDirective, BsContextMenuModule, BsDatatableColumnDirective, BsDatatableComponent, BsDatatableModule, BsDatepickerComponent, BsDatepickerModule, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownModule, BsDropdownToggleDirective, BsFontColorPipe, BsFontColorPipeModule, BsItemTemplateDirective, BsListGroupComponent, BsListGroupItemComponent, BsListGroupModule, BsMultiselectComponent, BsMultiselectModule, BsNavbarComponent, BsNavbarDropdownComponent, BsNavbarItemComponent, BsNavbarModule, BsNavbarNavComponent, BsPaginationComponent, BsPaginationModule, BsProgressBarComponent, BsProgressBarModule, BsProgressComponent, BsRowTemplateDirective, BsScrollspyComponent, BsScrollspyDirective, BsScrollspyModule, BsSelect2Component, BsSelect2Module, BsSnackbarCloseDirective, BsSnackbarComponent, BsSnackbarModule, BsSnackbarService, BsTabControlComponent, BsTabControlModule, BsTabPageComponent, BsToggleButtonComponent, BsToggleButtonModule, BsTooltipDirective, BsTooltipModule, BsTypeaheadComponent, BsTypeaheadModule, Color, DatatableSettings, DropdownToggleDirective, NavLinkDirective, NavbarContentDirective, Position };
1073
2695
  //# sourceMappingURL=mintplayer-ng-bootstrap.mjs.map