@mintplayer/ng-bootstrap 21.13.0 → 21.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/mintplayer-ng-bootstrap-carousel.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs +4 -4
- package/fesm2022/mintplayer-ng-bootstrap-color-picker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs +15 -19
- package/fesm2022/mintplayer-ng-bootstrap-datatable.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-datepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-file-upload.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs +12 -20
- package/fesm2022/mintplayer-ng-bootstrap-navbar.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-select2.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs +7 -7
- package/fesm2022/mintplayer-ng-bootstrap-signature-pad.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-spinner.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs +5 -5
- package/fesm2022/mintplayer-ng-bootstrap-timepicker.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-typeahead.mjs.map +1 -1
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs +9 -15
- package/fesm2022/mintplayer-ng-bootstrap-virtual-datatable.mjs.map +1 -1
- package/package.json +1 -5
- package/types/mintplayer-ng-bootstrap-carousel.d.ts +2 -2
- package/types/mintplayer-ng-bootstrap-color-picker.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-datatable.d.ts +17 -17
- package/types/mintplayer-ng-bootstrap-datepicker.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-file-upload.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-navbar.d.ts +4 -5
- package/types/mintplayer-ng-bootstrap-select2.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-signature-pad.d.ts +2 -2
- package/types/mintplayer-ng-bootstrap-spinner.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-timepicker.d.ts +2 -2
- package/types/mintplayer-ng-bootstrap-typeahead.d.ts +1 -1
- package/types/mintplayer-ng-bootstrap-virtual-datatable.d.ts +9 -10
- package/fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs +0 -47
- package/fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs.map +0 -1
- package/types/mintplayer-ng-bootstrap-async-host-binding.d.ts +0 -13
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-typeahead.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/typeahead/src/typeahead.component.ts","../../../../libs/mintplayer-ng-bootstrap/typeahead/src/typeahead.component.html","../../../../libs/mintplayer-ng-bootstrap/typeahead/mintplayer-ng-bootstrap-typeahead.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, output, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDropdownDirective, BsDropdownMenuDirective } from '@mintplayer/ng-bootstrap/dropdown';\nimport { BsDropdownMenuComponent, BsDropdownItemComponent } from '@mintplayer/ng-bootstrap/dropdown-menu';\nimport { BsFormComponent, BsFormControlDirective } from '@mintplayer/ng-bootstrap/form';\nimport { BsHasOverlayComponent } from '@mintplayer/ng-bootstrap/has-overlay';\nimport { BsProgressComponent } from '@mintplayer/ng-bootstrap/progress-bar';\n\nlet typeaheadIdCounter = 0;\n\n@Component({\n selector: 'bs-typeahead',\n templateUrl: './typeahead.component.html',\n styleUrls: ['./typeahead.component.scss'],\n imports: [FormsModule, BsFormComponent, BsFormControlDirective, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsProgressComponent, BsHasOverlayComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTypeaheadComponent {\n\n isOpen = model(false);\n listboxId = `typeahead-listbox-${typeaheadIdCounter++}`;\n\n suggestions = input<any[]>([]);\n isLoading = signal<boolean>(false);\n showNoSuggestions = computed(() => this.suggestions().length === 0);\n\n readonly textbox = viewChild.required<ElementRef<HTMLInputElement>>('textbox');\n searchterm = model('');\n isLoadingText = input('Loading...');\n noSuggestionsText = input('No suggestions found');\n provideSuggestions = output<string>();\n suggestionSelected = output<any>();\n submitted = output<string>();\n\n constructor() {\n effect(() => {\n const suggestions = this.suggestions();\n if (suggestions) {\n this.isLoading.set(false);\n }\n });\n }\n\n onProvideSuggestions(value: string) {\n this.searchterm.set(value);\n if (value === '') {\n this.isOpen.set(false);\n } else {\n this.isLoading.set(true);\n this.isOpen.set(true);\n this.provideSuggestions.emit(value);\n }\n }\n\n suggestionClicked(suggestion: any) {\n this.searchterm.set(suggestion.text);\n this.isOpen.set(false);\n this.suggestionSelected.emit(suggestion);\n }\n\n onSubmit() {\n this.isOpen.set(false);\n this.submitted.emit(this.searchterm());\n }\n\n public focus() {\n this.textbox().nativeElement.focus();\n }\n}\n","<bs-has-overlay></bs-has-overlay>\n<bs-form>\n <div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [sameDropdownWidth]=\"true\" role=\"combobox\" [attr.aria-expanded]=\"isOpen()\">\n <input type=\"text\"\n #textbox\n [ngModel]=\"searchterm()\"\n (ngModelChange)=\"onProvideSuggestions($event)\"\n (keyup.enter)=\"onSubmit()\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"isOpen() ? listboxId : null\"\n autocomplete=\"off\" />\n <bs-dropdown-menu *bsDropdownMenu role=\"listbox\" [id]=\"listboxId\">\n @if (isLoading()) {\n <bs-progress [height]=\"2\" [isIndeterminate]=\"true\"></bs-progress>\n <bs-dropdown-item [disabled]=\"true\" role=\"option\" aria-disabled=\"true\">\n {{ isLoadingText() }}\n </bs-dropdown-item>\n }\n @if (!isLoading()) {\n @if (showNoSuggestions()) {\n <bs-dropdown-item [disabled]=\"true\" role=\"option\" aria-disabled=\"true\">\n {{ noSuggestionsText() }}\n </bs-dropdown-item>\n }\n @for (suggestion of suggestions(); track suggestion) {\n <bs-dropdown-item (click)=\"suggestionClicked(suggestion)\" role=\"option\">\n {{ suggestion.text }}\n </bs-dropdown-item>\n }\n }\n </bs-dropdown-menu>\n </div>\n</bs-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;AAQA,IAAI,kBAAkB,GAAG,CAAC;MASb,oBAAoB,CAAA;AAiB/B,IAAA,WAAA,GAAA;AAfA,QAAA,IAAA,CAAA,MAAM,GAAG,KAAK,CAAC,KAAK,kDAAC;
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-typeahead.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/typeahead/src/typeahead.component.ts","../../../../libs/mintplayer-ng-bootstrap/typeahead/src/typeahead.component.html","../../../../libs/mintplayer-ng-bootstrap/typeahead/mintplayer-ng-bootstrap-typeahead.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, input, model, output, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { BsDropdownDirective, BsDropdownMenuDirective } from '@mintplayer/ng-bootstrap/dropdown';\nimport { BsDropdownMenuComponent, BsDropdownItemComponent } from '@mintplayer/ng-bootstrap/dropdown-menu';\nimport { BsFormComponent, BsFormControlDirective } from '@mintplayer/ng-bootstrap/form';\nimport { BsHasOverlayComponent } from '@mintplayer/ng-bootstrap/has-overlay';\nimport { BsProgressComponent } from '@mintplayer/ng-bootstrap/progress-bar';\n\nlet typeaheadIdCounter = 0;\n\n@Component({\n selector: 'bs-typeahead',\n templateUrl: './typeahead.component.html',\n styleUrls: ['./typeahead.component.scss'],\n imports: [FormsModule, BsFormComponent, BsFormControlDirective, BsDropdownDirective, BsDropdownMenuDirective, BsDropdownMenuComponent, BsDropdownItemComponent, BsProgressComponent, BsHasOverlayComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsTypeaheadComponent {\n\n isOpen = model(false);\n readonly listboxId = `typeahead-listbox-${typeaheadIdCounter++}`;\n\n suggestions = input<any[]>([]);\n isLoading = signal<boolean>(false);\n showNoSuggestions = computed(() => this.suggestions().length === 0);\n\n readonly textbox = viewChild.required<ElementRef<HTMLInputElement>>('textbox');\n searchterm = model('');\n isLoadingText = input('Loading...');\n noSuggestionsText = input('No suggestions found');\n provideSuggestions = output<string>();\n suggestionSelected = output<any>();\n submitted = output<string>();\n\n constructor() {\n effect(() => {\n const suggestions = this.suggestions();\n if (suggestions) {\n this.isLoading.set(false);\n }\n });\n }\n\n onProvideSuggestions(value: string) {\n this.searchterm.set(value);\n if (value === '') {\n this.isOpen.set(false);\n } else {\n this.isLoading.set(true);\n this.isOpen.set(true);\n this.provideSuggestions.emit(value);\n }\n }\n\n suggestionClicked(suggestion: any) {\n this.searchterm.set(suggestion.text);\n this.isOpen.set(false);\n this.suggestionSelected.emit(suggestion);\n }\n\n onSubmit() {\n this.isOpen.set(false);\n this.submitted.emit(this.searchterm());\n }\n\n public focus() {\n this.textbox().nativeElement.focus();\n }\n}\n","<bs-has-overlay></bs-has-overlay>\n<bs-form>\n <div bsDropdown [(isOpen)]=\"isOpen\" [hasBackdrop]=\"false\" [sameDropdownWidth]=\"true\" role=\"combobox\" [attr.aria-expanded]=\"isOpen()\">\n <input type=\"text\"\n #textbox\n [ngModel]=\"searchterm()\"\n (ngModelChange)=\"onProvideSuggestions($event)\"\n (keyup.enter)=\"onSubmit()\"\n aria-autocomplete=\"list\"\n aria-haspopup=\"listbox\"\n [attr.aria-controls]=\"isOpen() ? listboxId : null\"\n autocomplete=\"off\" />\n <bs-dropdown-menu *bsDropdownMenu role=\"listbox\" [id]=\"listboxId\">\n @if (isLoading()) {\n <bs-progress [height]=\"2\" [isIndeterminate]=\"true\"></bs-progress>\n <bs-dropdown-item [disabled]=\"true\" role=\"option\" aria-disabled=\"true\">\n {{ isLoadingText() }}\n </bs-dropdown-item>\n }\n @if (!isLoading()) {\n @if (showNoSuggestions()) {\n <bs-dropdown-item [disabled]=\"true\" role=\"option\" aria-disabled=\"true\">\n {{ noSuggestionsText() }}\n </bs-dropdown-item>\n }\n @for (suggestion of suggestions(); track suggestion) {\n <bs-dropdown-item (click)=\"suggestionClicked(suggestion)\" role=\"option\">\n {{ suggestion.text }}\n </bs-dropdown-item>\n }\n }\n </bs-dropdown-menu>\n </div>\n</bs-form>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, ElementRef,
|
|
2
|
+
import { inject, ElementRef, input, signal, ChangeDetectionStrategy, Component, TemplateRef, Directive } from '@angular/core';
|
|
3
3
|
import { NgTemplateOutlet } from '@angular/common';
|
|
4
4
|
import * as i1 from '@angular/cdk/scrolling';
|
|
5
5
|
import { ScrollingModule } from '@angular/cdk/scrolling';
|
|
@@ -13,11 +13,11 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
|
|
|
13
13
|
constructor() {
|
|
14
14
|
super(...arguments);
|
|
15
15
|
this.elementRef = inject(ElementRef);
|
|
16
|
-
this.ngZone = inject(NgZone);
|
|
17
16
|
this.cleanup = [];
|
|
18
17
|
this.dataSource = input.required(...(ngDevMode ? [{ debugName: "dataSource" }] : []));
|
|
19
18
|
this.isResponsive = input(false, ...(ngDevMode ? [{ debugName: "isResponsive" }] : []));
|
|
20
19
|
this.itemSize = input(48, ...(ngDevMode ? [{ debugName: "itemSize" }] : []));
|
|
20
|
+
this.rowTemplate = signal(undefined, ...(ngDevMode ? [{ debugName: "rowTemplate" }] : []));
|
|
21
21
|
}
|
|
22
22
|
ngAfterViewInit() {
|
|
23
23
|
this.setupScrollSync();
|
|
@@ -47,10 +47,8 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
|
|
|
47
47
|
headerScrollContainer.scrollLeft = viewport.scrollLeft;
|
|
48
48
|
syncing = false;
|
|
49
49
|
};
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
viewport.addEventListener('scroll', onViewportScroll, { passive: true });
|
|
53
|
-
});
|
|
50
|
+
headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });
|
|
51
|
+
viewport.addEventListener('scroll', onViewportScroll, { passive: true });
|
|
54
52
|
this.cleanup.push(() => {
|
|
55
53
|
headerScrollContainer.removeEventListener('scroll', onHeaderScroll);
|
|
56
54
|
viewport.removeEventListener('scroll', onViewportScroll);
|
|
@@ -140,24 +138,20 @@ class BsVirtualDatatableComponent extends DatatableSortBase {
|
|
|
140
138
|
viewport.scrollLeft = savedViewportScroll;
|
|
141
139
|
};
|
|
142
140
|
// Sync after first render
|
|
143
|
-
|
|
144
|
-
requestAnimationFrame(() => syncWidths());
|
|
145
|
-
});
|
|
141
|
+
requestAnimationFrame(() => syncWidths());
|
|
146
142
|
// Re-sync when body rows change (virtual scroll swaps rows)
|
|
147
143
|
const observer = new MutationObserver(() => {
|
|
148
144
|
requestAnimationFrame(() => syncWidths());
|
|
149
145
|
});
|
|
150
|
-
|
|
151
|
-
observer.observe(bodyTableBody, { childList: true, subtree: true });
|
|
152
|
-
});
|
|
146
|
+
observer.observe(bodyTableBody, { childList: true, subtree: true });
|
|
153
147
|
this.cleanup.push(() => observer.disconnect());
|
|
154
148
|
}
|
|
155
149
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsVirtualDatatableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
156
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsVirtualDatatableComponent, isStandalone: true, selector: "bs-virtual-datatable", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, isResponsive: { classPropertyName: "isResponsive", publicName: "isResponsive", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate
|
|
150
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: BsVirtualDatatableComponent, isStandalone: true, selector: "bs-virtual-datatable", inputs: { dataSource: { classPropertyName: "dataSource", publicName: "dataSource", isSignal: true, isRequired: true, transformFunction: null }, isResponsive: { classPropertyName: "isResponsive", publicName: "isResponsive", isSignal: true, isRequired: false, transformFunction: null }, itemSize: { classPropertyName: "itemSize", publicName: "itemSize", isSignal: true, isRequired: false, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td> </td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "directive", type: i1.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "directive", type: i1.CdkVirtualForOf, selector: "[cdkVirtualFor][cdkVirtualForOf]", inputs: ["cdkVirtualForOf", "cdkVirtualForTrackBy", "cdkVirtualForTemplate", "cdkVirtualForTemplateCacheSize"] }, { kind: "component", type: i1.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: BsTableComponent, selector: "bs-table", inputs: ["isResponsive", "striped", "hover", "border"] }, { kind: "component", type: BsTableStylesComponent, selector: "bs-table-styles" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
157
151
|
}
|
|
158
152
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: BsVirtualDatatableComponent, decorators: [{
|
|
159
153
|
type: Component,
|
|
160
|
-
args: [{ selector: 'bs-virtual-datatable', imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate
|
|
154
|
+
args: [{ selector: 'bs-virtual-datatable', imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td> </td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n", styles: ["@charset \"UTF-8\";bs-table thead th.sort{position:relative;cursor:pointer;padding-right:2rem}bs-table thead th.sort:before,bs-table thead th.sort:after{position:absolute;display:block;opacity:.3;bottom:.5em}bs-table thead th.sort:before{content:\"\\2191\";right:1em}bs-table thead th.sort:after{content:\"\\2193\";right:.5em}bs-table thead th.sort.sort-asc:after{opacity:1}bs-table thead th.sort.sort-desc:before{opacity:1}bs-table thead th.sort .sort-priority{position:absolute;right:.1em;bottom:.3em;font-size:.65em;font-weight:700;opacity:.7}:host{display:block;height:100%}.virtual-datatable-container{display:flex;flex-direction:column;height:100%}.virtual-datatable-container bs-table{flex-shrink:0}bs-table ::ng-deep table,.virtual-scroll-viewport table{table-layout:auto;width:max-content}.virtual-scroll-viewport .nowrap td{white-space:nowrap}bs-table ::ng-deep .table-responsive{overflow-x:hidden;scrollbar-gutter:stable}.virtual-scroll-viewport{flex:1 1 auto;min-height:0;scrollbar-gutter:stable}.virtual-scroll-viewport table{margin-bottom:0}\n"] }]
|
|
161
155
|
}], propDecorators: { dataSource: [{ type: i0.Input, args: [{ isSignal: true, alias: "dataSource", required: true }] }], isResponsive: [{ type: i0.Input, args: [{ isSignal: true, alias: "isResponsive", required: false }] }], itemSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemSize", required: false }] }] } });
|
|
162
156
|
|
|
163
157
|
class VirtualDatatableDataSource extends DataSource {
|
|
@@ -238,7 +232,7 @@ class BsVirtualRowTemplateDirective {
|
|
|
238
232
|
constructor() {
|
|
239
233
|
this.datatableComponent = inject(BsVirtualDatatableComponent);
|
|
240
234
|
this.templateRef = inject(TemplateRef);
|
|
241
|
-
this.datatableComponent.rowTemplate
|
|
235
|
+
this.datatableComponent.rowTemplate.set(this.templateRef);
|
|
242
236
|
}
|
|
243
237
|
static ngTemplateContextGuard(dir, ctx) {
|
|
244
238
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-virtual-datatable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.html","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable-data-source.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-row-template/virtual-row-template.directive.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/mintplayer-ng-bootstrap-virtual-datatable.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, input, NgZone, OnDestroy, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { BsTableComponent, BsTableStylesComponent } from '@mintplayer/ng-bootstrap/table';\nimport { DatatableSortBase } from '@mintplayer/ng-bootstrap/datatable';\nimport { VirtualDatatableDataSource } from '../virtual-datatable-data-source';\nimport { BsVirtualRowTemplateContext } from '../virtual-row-template/virtual-row-template.directive';\n\n@Component({\n selector: 'bs-virtual-datatable',\n templateUrl: './virtual-datatable.component.html',\n styleUrls: ['./virtual-datatable.component.scss'],\n imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsVirtualDatatableComponent<TData> extends DatatableSortBase implements AfterViewInit, OnDestroy {\n\n private readonly elementRef = inject(ElementRef);\n private readonly ngZone = inject(NgZone);\n private cleanup: (() => void)[] = [];\n\n dataSource = input.required<VirtualDatatableDataSource<TData>>();\n isResponsive = input(false);\n itemSize = input(48);\n\n rowTemplate?: TemplateRef<BsVirtualRowTemplateContext<TData>>;\n\n ngAfterViewInit() {\n this.setupScrollSync();\n this.setupColumnWidthSync();\n }\n\n ngOnDestroy() {\n this.cleanup.forEach(fn => fn());\n }\n\n private setupScrollSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n\n if (!headerScrollContainer || !viewport) return;\n\n let syncing = false;\n\n const onHeaderScroll = () => {\n if (syncing) return;\n syncing = true;\n viewport.scrollLeft = headerScrollContainer.scrollLeft;\n syncing = false;\n };\n\n const onViewportScroll = () => {\n if (syncing) return;\n syncing = true;\n headerScrollContainer.scrollLeft = viewport.scrollLeft;\n syncing = false;\n };\n\n this.ngZone.runOutsideAngular(() => {\n headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });\n viewport.addEventListener('scroll', onViewportScroll, { passive: true });\n });\n\n this.cleanup.push(() => {\n headerScrollContainer.removeEventListener('scroll', onHeaderScroll);\n viewport.removeEventListener('scroll', onViewportScroll);\n });\n }\n\n private setupColumnWidthSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const bodyTableBody = el.querySelector('cdk-virtual-scroll-viewport tbody') as HTMLElement;\n\n if (!bodyTableBody) return;\n\n // Track the max width seen for each column so columns only grow, never\n // shrink (prevents layout jumps as rows scroll in/out of view).\n const maxWidths: number[] = [];\n\n const syncWidths = () => {\n const headerCells = el.querySelectorAll<HTMLElement>('bs-table thead th');\n const allBodyRows = Array.from(bodyTableBody.querySelectorAll<HTMLTableRowElement>('tr'));\n const firstBodyRow = allBodyRows[0];\n const bodyCells = firstBodyRow?.cells;\n\n if (!headerCells.length || !bodyCells?.length) return;\n\n const columnCount = Math.min(headerCells.length, bodyCells.length);\n\n // Save scroll positions before measurement (clearing min-width can shrink\n // the table and cause the browser to clamp scrollLeft to 0).\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n const savedHeaderScroll = headerScrollContainer?.scrollLeft ?? 0;\n const savedViewportScroll = viewport?.scrollLeft ?? 0;\n\n // Clear inline min-widths on ALL body rows. CDK virtual scroll recycles\n // <tr> DOM elements, so rows that were previously the \"first row\" retain\n // stale min-width styles. With table-layout: auto the column width is\n // determined by the widest cell across all visible rows, so stale\n // min-widths on any row prevent columns from ever shrinking.\n for (const row of allBodyRows) {\n const tds = row.cells;\n for (let i = 0; i < Math.min(tds.length, columnCount); i++) {\n tds[i].style.minWidth = '';\n }\n }\n for (let i = 0; i < columnCount; i++) {\n headerCells[i].style.minWidth = '';\n }\n\n // Temporarily force both tables to size to content only, overriding\n // Bootstrap's width:100% which causes table-layout:auto to redistribute\n // extra space across columns. Without this, measured widths include\n // redistributed space that varies with each data slice.\n const headerTable = el.querySelector<HTMLElement>('bs-table table');\n const bodyTable = el.querySelector<HTMLElement>('cdk-virtual-scroll-viewport table');\n headerTable?.style.setProperty('width', 'max-content', 'important');\n bodyTable?.style.setProperty('width', 'max-content', 'important');\n\n // Measure natural content widths across all visible rows\n for (let i = 0; i < columnCount; i++) {\n let colWidth = headerCells[i].offsetWidth;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n const w = tds[i].offsetWidth;\n if (w > colWidth) colWidth = w;\n }\n }\n // Update tracked maximum so columns only grow, never shrink\n if (!maxWidths[i] || colWidth > maxWidths[i]) {\n maxWidths[i] = colWidth;\n }\n }\n\n // Remove temporary width override so tables render normally\n headerTable?.style.removeProperty('width');\n bodyTable?.style.removeProperty('width');\n\n // Apply max widths to header and ALL body rows to keep them in sync.\n // Setting min-width on every row prevents table-layout:auto from\n // redistributing extra space differently across the two tables when\n // some rows contain placeholder content.\n for (let i = 0; i < columnCount; i++) {\n const w = `${maxWidths[i]}px`;\n headerCells[i].style.minWidth = w;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n tds[i].style.minWidth = w;\n }\n }\n }\n\n // Restore scroll positions after min-widths are re-applied\n if (headerScrollContainer) headerScrollContainer.scrollLeft = savedHeaderScroll;\n if (viewport) viewport.scrollLeft = savedViewportScroll;\n };\n\n // Sync after first render\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n // Re-sync when body rows change (virtual scroll swaps rows)\n const observer = new MutationObserver(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n this.ngZone.runOutsideAngular(() => {\n observer.observe(bodyTableBody, { childList: true, subtree: true });\n });\n\n this.cleanup.push(() => observer.disconnect());\n }\n}\n","<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable\"\n [class.sort-asc]=\"column.sortable && getSortDirection(column.name) === 'ascending'\"\n [class.sort-desc]=\"column.sortable && getSortDirection(column.name) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate) {\n <ng-container *ngTemplateOutlet=\"rowTemplate; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td> </td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subject, Subscription, from, merge, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nexport class VirtualDatatableDataSource<T> extends DataSource<T> {\n private readonly fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>;\n private readonly pageSize: number;\n private readonly cachedPages = new Map<number, T[]>();\n private totalRecords = 0;\n private dataStream = new BehaviorSubject<T[]>([]);\n private subscription?: Subscription;\n private resetSubject = new Subject<void>();\n private resetVersion = 0;\n\n constructor(\n fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>,\n pageSize = 50\n ) {\n super();\n this.fetchFn = fetchFn;\n this.pageSize = pageSize;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n // Support reconnection after disconnect (which completes the previous dataStream)\n this.dataStream = new BehaviorSubject<T[]>([]);\n this.cachedPages.clear();\n this.totalRecords = 0;\n\n // Track the last viewport range so reset() can re-trigger a fetch.\n // resetVersion is incremented on reset() to bypass distinctUntilChanged.\n let lastRange = { start: 0, end: this.pageSize };\n this.subscription = merge(\n collectionViewer.viewChange.pipe(startWith(lastRange)),\n this.resetSubject.pipe(map(() => lastRange))\n ).pipe(\n filter(range => range.end > range.start),\n map(range => { lastRange = range; return { pages: this.getPageIndices(range), version: this.resetVersion }; }),\n distinctUntilChanged((a, b) => a.version === b.version && a.pages.join() === b.pages.join()),\n switchMap(({ pages }) => from(this.fetchPages(pages)).pipe(\n catchError(() => of(this.dataStream.value))\n ))\n ).subscribe(data => this.dataStream.next(data));\n\n return this.dataStream;\n }\n\n disconnect(): void {\n this.subscription?.unsubscribe();\n this.dataStream.complete();\n }\n\n get length(): number {\n return this.totalRecords;\n }\n\n reset(): void {\n this.cachedPages.clear();\n this.resetVersion++;\n this.resetSubject.next();\n }\n\n private getPageIndices(range: { start: number; end: number }): number[] {\n const startPage = Math.floor(range.start / this.pageSize);\n const endPage = Math.floor((range.end - 1) / this.pageSize);\n const pages: number[] = [];\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n }\n\n private async fetchPages(pageIndices: number[]): Promise<T[]> {\n const uncachedPages = pageIndices.filter(p => !this.cachedPages.has(p));\n\n const results = await Promise.all(\n uncachedPages.map(async pageIndex => {\n const skip = pageIndex * this.pageSize;\n const result = await this.fetchFn(skip, this.pageSize);\n return { pageIndex, result };\n })\n );\n\n for (const { pageIndex, result } of results) {\n this.cachedPages.set(pageIndex, result.data);\n }\n if (results.length > 0) {\n this.totalRecords = results[0].result.totalRecords;\n }\n\n // Build the full data array with placeholders for unloaded pages\n const totalPages = Math.ceil(this.totalRecords / this.pageSize);\n const data: T[] = [];\n for (let i = 0; i < totalPages; i++) {\n const page = this.cachedPages.get(i);\n if (page) {\n data.push(...page);\n } else {\n // Fill with empty slots to maintain correct virtual scroll positioning\n const remaining = Math.min(this.pageSize, this.totalRecords - i * this.pageSize);\n data.push(...new Array<T>(remaining));\n }\n }\n return data;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { BsVirtualDatatableComponent } from '../virtual-datatable/virtual-datatable.component';\n\n@Directive({\n selector: '[bsVirtualRowTemplate]',\n})\nexport class BsVirtualRowTemplateDirective<TData> {\n\n private datatableComponent = inject<BsVirtualDatatableComponent<TData>>(BsVirtualDatatableComponent);\n private templateRef = inject<TemplateRef<BsVirtualRowTemplateContext<TData>>>(TemplateRef);\n\n constructor() {\n this.datatableComponent.rowTemplate = this.templateRef;\n }\n\n public static ngTemplateContextGuard<TData>(\n dir: BsVirtualRowTemplateDirective<TData>,\n ctx: any\n ): ctx is BsVirtualRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>> {\n return true;\n }\n}\n\nexport class BsVirtualRowTemplateContext<TData = unknown> {\n public $implicit: TData = null!;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mintplayer-ng-bootstrap-virtual-datatable.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable/virtual-datatable.component.html","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-datatable-data-source.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/src/virtual-row-template/virtual-row-template.directive.ts","../../../../libs/mintplayer-ng-bootstrap/virtual-datatable/mintplayer-ng-bootstrap-virtual-datatable.ts"],"sourcesContent":["import { AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, inject, input, OnDestroy, signal, TemplateRef } from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { BsTableComponent, BsTableStylesComponent } from '@mintplayer/ng-bootstrap/table';\nimport { DatatableSortBase } from '@mintplayer/ng-bootstrap/datatable';\nimport { VirtualDatatableDataSource } from '../virtual-datatable-data-source';\nimport { BsVirtualRowTemplateContext } from '../virtual-row-template/virtual-row-template.directive';\n\n@Component({\n selector: 'bs-virtual-datatable',\n templateUrl: './virtual-datatable.component.html',\n styleUrls: ['./virtual-datatable.component.scss'],\n imports: [NgTemplateOutlet, ScrollingModule, BsTableComponent, BsTableStylesComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class BsVirtualDatatableComponent<TData> extends DatatableSortBase implements AfterViewInit, OnDestroy {\n\n private readonly elementRef = inject(ElementRef);\n private cleanup: (() => void)[] = [];\n\n dataSource = input.required<VirtualDatatableDataSource<TData>>();\n isResponsive = input(false);\n itemSize = input(48);\n\n readonly rowTemplate = signal<TemplateRef<BsVirtualRowTemplateContext<TData>> | undefined>(undefined);\n\n ngAfterViewInit() {\n this.setupScrollSync();\n this.setupColumnWidthSync();\n }\n\n ngOnDestroy() {\n this.cleanup.forEach(fn => fn());\n }\n\n private setupScrollSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n\n if (!headerScrollContainer || !viewport) return;\n\n let syncing = false;\n\n const onHeaderScroll = () => {\n if (syncing) return;\n syncing = true;\n viewport.scrollLeft = headerScrollContainer.scrollLeft;\n syncing = false;\n };\n\n const onViewportScroll = () => {\n if (syncing) return;\n syncing = true;\n headerScrollContainer.scrollLeft = viewport.scrollLeft;\n syncing = false;\n };\n\n headerScrollContainer.addEventListener('scroll', onHeaderScroll, { passive: true });\n viewport.addEventListener('scroll', onViewportScroll, { passive: true });\n\n this.cleanup.push(() => {\n headerScrollContainer.removeEventListener('scroll', onHeaderScroll);\n viewport.removeEventListener('scroll', onViewportScroll);\n });\n }\n\n private setupColumnWidthSync() {\n const el = this.elementRef.nativeElement as HTMLElement;\n const bodyTableBody = el.querySelector('cdk-virtual-scroll-viewport tbody') as HTMLElement;\n\n if (!bodyTableBody) return;\n\n // Track the max width seen for each column so columns only grow, never\n // shrink (prevents layout jumps as rows scroll in/out of view).\n const maxWidths: number[] = [];\n\n const syncWidths = () => {\n const headerCells = el.querySelectorAll<HTMLElement>('bs-table thead th');\n const allBodyRows = Array.from(bodyTableBody.querySelectorAll<HTMLTableRowElement>('tr'));\n const firstBodyRow = allBodyRows[0];\n const bodyCells = firstBodyRow?.cells;\n\n if (!headerCells.length || !bodyCells?.length) return;\n\n const columnCount = Math.min(headerCells.length, bodyCells.length);\n\n // Save scroll positions before measurement (clearing min-width can shrink\n // the table and cause the browser to clamp scrollLeft to 0).\n const headerScrollContainer = el.querySelector('.table-responsive') as HTMLElement;\n const viewport = el.querySelector('cdk-virtual-scroll-viewport') as HTMLElement;\n const savedHeaderScroll = headerScrollContainer?.scrollLeft ?? 0;\n const savedViewportScroll = viewport?.scrollLeft ?? 0;\n\n // Clear inline min-widths on ALL body rows. CDK virtual scroll recycles\n // <tr> DOM elements, so rows that were previously the \"first row\" retain\n // stale min-width styles. With table-layout: auto the column width is\n // determined by the widest cell across all visible rows, so stale\n // min-widths on any row prevent columns from ever shrinking.\n for (const row of allBodyRows) {\n const tds = row.cells;\n for (let i = 0; i < Math.min(tds.length, columnCount); i++) {\n tds[i].style.minWidth = '';\n }\n }\n for (let i = 0; i < columnCount; i++) {\n headerCells[i].style.minWidth = '';\n }\n\n // Temporarily force both tables to size to content only, overriding\n // Bootstrap's width:100% which causes table-layout:auto to redistribute\n // extra space across columns. Without this, measured widths include\n // redistributed space that varies with each data slice.\n const headerTable = el.querySelector<HTMLElement>('bs-table table');\n const bodyTable = el.querySelector<HTMLElement>('cdk-virtual-scroll-viewport table');\n headerTable?.style.setProperty('width', 'max-content', 'important');\n bodyTable?.style.setProperty('width', 'max-content', 'important');\n\n // Measure natural content widths across all visible rows\n for (let i = 0; i < columnCount; i++) {\n let colWidth = headerCells[i].offsetWidth;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n const w = tds[i].offsetWidth;\n if (w > colWidth) colWidth = w;\n }\n }\n // Update tracked maximum so columns only grow, never shrink\n if (!maxWidths[i] || colWidth > maxWidths[i]) {\n maxWidths[i] = colWidth;\n }\n }\n\n // Remove temporary width override so tables render normally\n headerTable?.style.removeProperty('width');\n bodyTable?.style.removeProperty('width');\n\n // Apply max widths to header and ALL body rows to keep them in sync.\n // Setting min-width on every row prevents table-layout:auto from\n // redistributing extra space differently across the two tables when\n // some rows contain placeholder content.\n for (let i = 0; i < columnCount; i++) {\n const w = `${maxWidths[i]}px`;\n headerCells[i].style.minWidth = w;\n for (const row of allBodyRows) {\n const tds = row.cells;\n if (i < tds.length) {\n tds[i].style.minWidth = w;\n }\n }\n }\n\n // Restore scroll positions after min-widths are re-applied\n if (headerScrollContainer) headerScrollContainer.scrollLeft = savedHeaderScroll;\n if (viewport) viewport.scrollLeft = savedViewportScroll;\n };\n\n // Sync after first render\n requestAnimationFrame(() => syncWidths());\n\n // Re-sync when body rows change (virtual scroll swaps rows)\n const observer = new MutationObserver(() => {\n requestAnimationFrame(() => syncWidths());\n });\n\n observer.observe(bodyTableBody, { childList: true, subtree: true });\n\n this.cleanup.push(() => observer.disconnect());\n }\n}\n","<div class=\"virtual-datatable-container\">\n <bs-table [isResponsive]=\"isResponsive()\" [striped]=\"true\" [hover]=\"true\">\n <thead>\n <tr>\n @for (column of columnsArray; track column) {\n <th class=\"text-nowrap\"\n [class.sort]=\"column.sortable()\"\n [class.sort-asc]=\"column.sortable() && getSortDirection(column.name()) === 'ascending'\"\n [class.sort-desc]=\"column.sortable() && getSortDirection(column.name()) === 'descending'\"\n (mousedown)=\"onHeaderMouseDown($event)\"\n (click)=\"columnHeaderClicked(column, $event)\">\n <ng-container *ngTemplateOutlet=\"column.templateRef\"></ng-container>\n @if (settings().sortColumns.length > 1 && getSortIndex(column.name()) >= 0) {\n <span class=\"sort-priority\">{{ getSortIndex(column.name()) + 1 }}</span>\n }\n </th>\n }\n </tr>\n </thead>\n </bs-table>\n\n <bs-table-styles>\n <cdk-virtual-scroll-viewport [itemSize]=\"itemSize()\" class=\"virtual-scroll-viewport\">\n <table class=\"table table-striped table-hover\" [class.nowrap]=\"isResponsive()\">\n <tbody>\n <tr *cdkVirtualFor=\"let item of dataSource()\" class=\"virtual-row\">\n @if (item && rowTemplate()) {\n <ng-container *ngTemplateOutlet=\"rowTemplate()!; context: { $implicit: item }\"></ng-container>\n } @else {\n @for (column of columnsArray; track column) {\n <td> </td>\n }\n }\n </tr>\n </tbody>\n </table>\n </cdk-virtual-scroll-viewport>\n </bs-table-styles>\n</div>\n","import { CollectionViewer, DataSource } from '@angular/cdk/collections';\nimport { BehaviorSubject, Observable, Subject, Subscription, from, merge, of } from 'rxjs';\nimport { catchError, distinctUntilChanged, filter, map, startWith, switchMap } from 'rxjs/operators';\n\nexport class VirtualDatatableDataSource<T> extends DataSource<T> {\n private readonly fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>;\n private readonly pageSize: number;\n private readonly cachedPages = new Map<number, T[]>();\n private totalRecords = 0;\n private dataStream = new BehaviorSubject<T[]>([]);\n private subscription?: Subscription;\n private resetSubject = new Subject<void>();\n private resetVersion = 0;\n\n constructor(\n fetchFn: (skip: number, take: number) => Promise<{ data: T[]; totalRecords: number }>,\n pageSize = 50\n ) {\n super();\n this.fetchFn = fetchFn;\n this.pageSize = pageSize;\n }\n\n connect(collectionViewer: CollectionViewer): Observable<T[]> {\n // Support reconnection after disconnect (which completes the previous dataStream)\n this.dataStream = new BehaviorSubject<T[]>([]);\n this.cachedPages.clear();\n this.totalRecords = 0;\n\n // Track the last viewport range so reset() can re-trigger a fetch.\n // resetVersion is incremented on reset() to bypass distinctUntilChanged.\n let lastRange = { start: 0, end: this.pageSize };\n this.subscription = merge(\n collectionViewer.viewChange.pipe(startWith(lastRange)),\n this.resetSubject.pipe(map(() => lastRange))\n ).pipe(\n filter(range => range.end > range.start),\n map(range => { lastRange = range; return { pages: this.getPageIndices(range), version: this.resetVersion }; }),\n distinctUntilChanged((a, b) => a.version === b.version && a.pages.join() === b.pages.join()),\n switchMap(({ pages }) => from(this.fetchPages(pages)).pipe(\n catchError(() => of(this.dataStream.value))\n ))\n ).subscribe(data => this.dataStream.next(data));\n\n return this.dataStream;\n }\n\n disconnect(): void {\n this.subscription?.unsubscribe();\n this.dataStream.complete();\n }\n\n get length(): number {\n return this.totalRecords;\n }\n\n reset(): void {\n this.cachedPages.clear();\n this.resetVersion++;\n this.resetSubject.next();\n }\n\n private getPageIndices(range: { start: number; end: number }): number[] {\n const startPage = Math.floor(range.start / this.pageSize);\n const endPage = Math.floor((range.end - 1) / this.pageSize);\n const pages: number[] = [];\n for (let i = startPage; i <= endPage; i++) {\n pages.push(i);\n }\n return pages;\n }\n\n private async fetchPages(pageIndices: number[]): Promise<T[]> {\n const uncachedPages = pageIndices.filter(p => !this.cachedPages.has(p));\n\n const results = await Promise.all(\n uncachedPages.map(async pageIndex => {\n const skip = pageIndex * this.pageSize;\n const result = await this.fetchFn(skip, this.pageSize);\n return { pageIndex, result };\n })\n );\n\n for (const { pageIndex, result } of results) {\n this.cachedPages.set(pageIndex, result.data);\n }\n if (results.length > 0) {\n this.totalRecords = results[0].result.totalRecords;\n }\n\n // Build the full data array with placeholders for unloaded pages\n const totalPages = Math.ceil(this.totalRecords / this.pageSize);\n const data: T[] = [];\n for (let i = 0; i < totalPages; i++) {\n const page = this.cachedPages.get(i);\n if (page) {\n data.push(...page);\n } else {\n // Fill with empty slots to maintain correct virtual scroll positioning\n const remaining = Math.min(this.pageSize, this.totalRecords - i * this.pageSize);\n data.push(...new Array<T>(remaining));\n }\n }\n return data;\n }\n}\n","import { Directive, inject, TemplateRef } from '@angular/core';\nimport { BsVirtualDatatableComponent } from '../virtual-datatable/virtual-datatable.component';\n\n@Directive({\n selector: '[bsVirtualRowTemplate]',\n})\nexport class BsVirtualRowTemplateDirective<TData> {\n\n private datatableComponent = inject<BsVirtualDatatableComponent<TData>>(BsVirtualDatatableComponent);\n private templateRef = inject<TemplateRef<BsVirtualRowTemplateContext<TData>>>(TemplateRef);\n\n constructor() {\n this.datatableComponent.rowTemplate.set(this.templateRef);\n }\n\n public static ngTemplateContextGuard<TData>(\n dir: BsVirtualRowTemplateDirective<TData>,\n ctx: any\n ): ctx is BsVirtualRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>> {\n return true;\n }\n}\n\nexport class BsVirtualRowTemplateContext<TData = unknown> {\n public $implicit: TData = null!;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;AAeM,MAAO,2BAAmC,SAAQ,iBAAiB,CAAA;AAPzE,IAAA,WAAA,GAAA;;AASmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QACxC,IAAA,CAAA,OAAO,GAAmB,EAAE;AAEpC,QAAA,IAAA,CAAA,UAAU,GAAG,KAAK,CAAC,QAAQ,qDAAqC;AAChE,QAAA,IAAA,CAAA,YAAY,GAAG,KAAK,CAAC,KAAK,wDAAC;AAC3B,QAAA,IAAA,CAAA,QAAQ,GAAG,KAAK,CAAC,EAAE,oDAAC;AAEX,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAA8D,SAAS,uDAAC;AAkJtG,IAAA;IAhJC,eAAe,GAAA;QACb,IAAI,CAAC,eAAe,EAAE;QACtB,IAAI,CAAC,oBAAoB,EAAE;IAC7B;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC;IAClC;IAEQ,eAAe,GAAA;AACrB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;QACvD,MAAM,qBAAqB,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAgB;QAClF,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,6BAA6B,CAAgB;AAE/E,QAAA,IAAI,CAAC,qBAAqB,IAAI,CAAC,QAAQ;YAAE;QAEzC,IAAI,OAAO,GAAG,KAAK;QAEnB,MAAM,cAAc,GAAG,MAAK;AAC1B,YAAA,IAAI,OAAO;gBAAE;YACb,OAAO,GAAG,IAAI;AACd,YAAA,QAAQ,CAAC,UAAU,GAAG,qBAAqB,CAAC,UAAU;YACtD,OAAO,GAAG,KAAK;AACjB,QAAA,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAK;AAC5B,YAAA,IAAI,OAAO;gBAAE;YACb,OAAO,GAAG,IAAI;AACd,YAAA,qBAAqB,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU;YACtD,OAAO,GAAG,KAAK;AACjB,QAAA,CAAC;AAED,QAAA,qBAAqB,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACnF,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAExE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAK;AACrB,YAAA,qBAAqB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC;AACnE,YAAA,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AAC1D,QAAA,CAAC,CAAC;IACJ;IAEQ,oBAAoB,GAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,aAA4B;QACvD,MAAM,aAAa,GAAG,EAAE,CAAC,aAAa,CAAC,mCAAmC,CAAgB;AAE1F,QAAA,IAAI,CAAC,aAAa;YAAE;;;QAIpB,MAAM,SAAS,GAAa,EAAE;QAE9B,MAAM,UAAU,GAAG,MAAK;YACtB,MAAM,WAAW,GAAG,EAAE,CAAC,gBAAgB,CAAc,mBAAmB,CAAC;AACzE,YAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAsB,IAAI,CAAC,CAAC;AACzF,YAAA,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;AACnC,YAAA,MAAM,SAAS,GAAG,YAAY,EAAE,KAAK;YAErC,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,SAAS,EAAE,MAAM;gBAAE;AAE/C,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC;;;YAIlE,MAAM,qBAAqB,GAAG,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAgB;YAClF,MAAM,QAAQ,GAAG,EAAE,CAAC,aAAa,CAAC,6BAA6B,CAAgB;AAC/E,YAAA,MAAM,iBAAiB,GAAG,qBAAqB,EAAE,UAAU,IAAI,CAAC;AAChE,YAAA,MAAM,mBAAmB,GAAG,QAAQ,EAAE,UAAU,IAAI,CAAC;;;;;;AAOrD,YAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;AAC7B,gBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1D,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;gBAC5B;YACF;AACA,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBACpC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;YACpC;;;;;YAMA,MAAM,WAAW,GAAG,EAAE,CAAC,aAAa,CAAc,gBAAgB,CAAC;YACnE,MAAM,SAAS,GAAG,EAAE,CAAC,aAAa,CAAc,mCAAmC,CAAC;YACpF,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC;YACnE,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,EAAE,aAAa,EAAE,WAAW,CAAC;;AAGjE,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW;AACzC,gBAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;AAC7B,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK;AACrB,oBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;wBAClB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW;wBAC5B,IAAI,CAAC,GAAG,QAAQ;4BAAE,QAAQ,GAAG,CAAC;oBAChC;gBACF;;AAEA,gBAAA,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE;AAC5C,oBAAA,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ;gBACzB;YACF;;AAGA,YAAA,WAAW,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;AAC1C,YAAA,SAAS,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC;;;;;AAMxC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;gBACpC,MAAM,CAAC,GAAG,CAAA,EAAG,SAAS,CAAC,CAAC,CAAC,IAAI;gBAC7B,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;AACjC,gBAAA,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE;AAC7B,oBAAA,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK;AACrB,oBAAA,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;wBAClB,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC;oBAC3B;gBACF;YACF;;AAGA,YAAA,IAAI,qBAAqB;AAAE,gBAAA,qBAAqB,CAAC,UAAU,GAAG,iBAAiB;AAC/E,YAAA,IAAI,QAAQ;AAAE,gBAAA,QAAQ,CAAC,UAAU,GAAG,mBAAmB;AACzD,QAAA,CAAC;;AAGD,QAAA,qBAAqB,CAAC,MAAM,UAAU,EAAE,CAAC;;AAGzC,QAAA,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,MAAK;AACzC,YAAA,qBAAqB,CAAC,MAAM,UAAU,EAAE,CAAC;AAC3C,QAAA,CAAC,CAAC;AAEF,QAAA,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAEnE,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAChD;8GA1JW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA3B,2BAA2B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECfxC,w+DAuCA,EAAA,MAAA,EAAA,CAAA,miCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED3BY,gBAAgB,mJAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,uCAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,aAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,sBAAA,EAAA,uBAAA,EAAA,gCAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,wBAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,YAAA,CAAA,EAAA,OAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,gBAAgB,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,sBAAsB,EAAA,QAAA,EAAA,iBAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAG1E,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAPvC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,sBAAsB,EAAA,OAAA,EAGvB,CAAC,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,sBAAsB,CAAC,EAAA,eAAA,EACrE,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,w+DAAA,EAAA,MAAA,EAAA,CAAA,miCAAA,CAAA,EAAA;;;AET3C,MAAO,0BAA8B,SAAQ,UAAa,CAAA;AAU9D,IAAA,WAAA,CACE,OAAqF,EACrF,QAAQ,GAAG,EAAE,EAAA;AAEb,QAAA,KAAK,EAAE;AAXQ,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAAe;QAC7C,IAAA,CAAA,YAAY,GAAG,CAAC;AAChB,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAEzC,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;QAClC,IAAA,CAAA,YAAY,GAAG,CAAC;AAOtB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;IAC1B;AAEA,IAAA,OAAO,CAAC,gBAAkC,EAAA;;QAExC,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,CAAC;;;AAIrB,QAAA,IAAI,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,EAAE;AAChD,QAAA,IAAI,CAAC,YAAY,GAAG,KAAK,CACvB,gBAAgB,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EACtD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC,CAC7C,CAAC,IAAI,CACJ,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,EACxC,GAAG,CAAC,KAAK,IAAG,EAAG,SAAS,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9G,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAC5F,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CACxD,UAAU,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAC5C,CAAC,CACH,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC,UAAU;IACxB;IAEA,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE;AAChC,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC5B;AAEA,IAAA,IAAI,MAAM,GAAA;QACR,OAAO,IAAI,CAAC,YAAY;IAC1B;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;QACxB,IAAI,CAAC,YAAY,EAAE;AACnB,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;IAC1B;AAEQ,IAAA,cAAc,CAAC,KAAqC,EAAA;AAC1D,QAAA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC;QAC3D,MAAM,KAAK,GAAa,EAAE;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,IAAI,OAAO,EAAE,CAAC,EAAE,EAAE;AACzC,YAAA,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACf;AACA,QAAA,OAAO,KAAK;IACd;IAEQ,MAAM,UAAU,CAAC,WAAqB,EAAA;QAC5C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAEvE,QAAA,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,aAAa,CAAC,GAAG,CAAC,OAAM,SAAS,KAAG;AAClC,YAAA,MAAM,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ;AACtC,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC;AACtD,YAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE;QAC9B,CAAC,CAAC,CACH;QAED,KAAK,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,OAAO,EAAE;YAC3C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC;QAC9C;AACA,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY;QACpD;;AAGA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/D,MAAM,IAAI,GAAQ,EAAE;AACpB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,EAAE;AACR,gBAAA,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB;iBAAO;;gBAEL,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAChF,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,CAAI,SAAS,CAAC,CAAC;YACvC;QACF;AACA,QAAA,OAAO,IAAI;IACb;AACD;;MCnGY,6BAA6B,CAAA;AAKxC,IAAA,WAAA,GAAA;AAHQ,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAqC,2BAA2B,CAAC;AAC5F,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAkD,WAAW,CAAC;QAGxF,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;IAC3D;AAEO,IAAA,OAAO,sBAAsB,CAClC,GAAyC,EACzC,GAAQ,EAAA;AAER,QAAA,OAAO,IAAI;IACb;8GAdW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA7B,6BAA6B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAHzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,wBAAwB;AACnC,iBAAA;;MAkBY,2BAA2B,CAAA;AAAxC,IAAA,WAAA,GAAA;QACS,IAAA,CAAA,SAAS,GAAU,IAAK;IACjC;AAAC;;ACzBD;;AAEG;;;;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mintplayer/ng-bootstrap",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "21.
|
|
4
|
+
"version": "21.15.0",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/MintPlayer/mintplayer-ng-bootstrap",
|
|
@@ -24,10 +24,6 @@
|
|
|
24
24
|
"types": "./types/mintplayer-ng-bootstrap-alert.d.ts",
|
|
25
25
|
"default": "./fesm2022/mintplayer-ng-bootstrap-alert.mjs"
|
|
26
26
|
},
|
|
27
|
-
"./async-host-binding": {
|
|
28
|
-
"types": "./types/mintplayer-ng-bootstrap-async-host-binding.d.ts",
|
|
29
|
-
"default": "./fesm2022/mintplayer-ng-bootstrap-async-host-binding.mjs"
|
|
30
|
-
},
|
|
31
27
|
"./badge": {
|
|
32
28
|
"types": "./types/mintplayer-ng-bootstrap-badge.d.ts",
|
|
33
29
|
"default": "./fesm2022/mintplayer-ng-bootstrap-badge.mjs"
|
|
@@ -18,8 +18,8 @@ declare class BsCarouselImageDirective {
|
|
|
18
18
|
declare class BsCarouselComponent implements AfterViewInit, OnDestroy {
|
|
19
19
|
private platformId;
|
|
20
20
|
private destroyRef;
|
|
21
|
-
colors: typeof Color;
|
|
22
|
-
isServerSide: boolean;
|
|
21
|
+
readonly colors: typeof Color;
|
|
22
|
+
readonly isServerSide: boolean;
|
|
23
23
|
currentImageIndex: _angular_core.WritableSignal<number>;
|
|
24
24
|
readonly images: _angular_core.Signal<readonly BsCarouselImageDirective[]>;
|
|
25
25
|
resizeObserver?: ResizeObserver;
|
|
@@ -34,7 +34,7 @@ declare class BsColorWheelComponent {
|
|
|
34
34
|
hsChange: _angular_core.OutputEmitterRef<HS>;
|
|
35
35
|
disabled: _angular_core.InputSignal<boolean>;
|
|
36
36
|
viewInited: _angular_core.WritableSignal<boolean>;
|
|
37
|
-
private isPointerDown;
|
|
37
|
+
private readonly isPointerDown;
|
|
38
38
|
private canvasContext;
|
|
39
39
|
squareSize: _angular_core.Signal<number | null>;
|
|
40
40
|
shiftX: _angular_core.Signal<number | null>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { TemplateRef } from '@angular/core';
|
|
3
3
|
import { SortColumn, PaginationRequest, PaginationResponse } from '@mintplayer/pagination';
|
|
4
4
|
|
|
@@ -19,45 +19,45 @@ declare class DatatableSettings {
|
|
|
19
19
|
|
|
20
20
|
declare class BsDatatableColumnDirective {
|
|
21
21
|
templateRef: TemplateRef<any>;
|
|
22
|
-
name: string
|
|
23
|
-
sortable: boolean
|
|
24
|
-
static ɵfac:
|
|
25
|
-
static ɵdir:
|
|
22
|
+
readonly name: _angular_core.InputSignal<string>;
|
|
23
|
+
readonly sortable: _angular_core.InputSignal<boolean>;
|
|
24
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsDatatableColumnDirective, never>;
|
|
25
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsDatatableColumnDirective, "[bsDatatableColumn]", never, { "name": { "alias": "bsDatatableColumn"; "required": false; "isSignal": true; }; "sortable": { "alias": "bsDatatableColumnSortable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
declare abstract class DatatableSortBase {
|
|
29
|
-
readonly columns:
|
|
29
|
+
readonly columns: _angular_core.Signal<readonly BsDatatableColumnDirective[]>;
|
|
30
30
|
get columnsArray(): readonly BsDatatableColumnDirective[];
|
|
31
|
-
settings:
|
|
31
|
+
settings: _angular_core.ModelSignal<DatatableSettings>;
|
|
32
32
|
getSortIndex(columnName: string): number;
|
|
33
33
|
getSortDirection(columnName: string): 'ascending' | 'descending' | null;
|
|
34
34
|
onHeaderMouseDown(event: MouseEvent): void;
|
|
35
35
|
columnHeaderClicked(column: BsDatatableColumnDirective, event: MouseEvent): void;
|
|
36
|
-
static ɵfac:
|
|
37
|
-
static ɵdir:
|
|
36
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DatatableSortBase, never>;
|
|
37
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DatatableSortBase, never, never, { "settings": { "alias": "settings"; "required": false; "isSignal": true; }; }, { "settings": "settingsChange"; }, ["columns"], never, true, never>;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
declare class BsRowTemplateDirective<TData> {
|
|
41
41
|
private datatableComponent;
|
|
42
42
|
private templateRef;
|
|
43
43
|
constructor();
|
|
44
|
-
readonly bsRowTemplateOf:
|
|
44
|
+
readonly bsRowTemplateOf: _angular_core.InputSignal<PaginationResponse<TData> | undefined>;
|
|
45
45
|
static ngTemplateContextGuard<TData>(dir: BsRowTemplateDirective<TData>, ctx: any): ctx is BsRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>>;
|
|
46
|
-
static ɵfac:
|
|
47
|
-
static ɵdir:
|
|
46
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsRowTemplateDirective<any>, never>;
|
|
47
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsRowTemplateDirective<any>, "[bsRowTemplate]", never, { "bsRowTemplateOf": { "alias": "bsRowTemplateOf"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
48
48
|
}
|
|
49
49
|
declare class BsRowTemplateContext<TData = unknown> {
|
|
50
50
|
$implicit: TData;
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
declare class BsDatatableComponent<TData> extends DatatableSortBase {
|
|
54
|
-
numberOfColumns:
|
|
55
|
-
data:
|
|
56
|
-
rowTemplate
|
|
54
|
+
numberOfColumns: _angular_core.Signal<number>;
|
|
55
|
+
data: _angular_core.ModelSignal<PaginationResponse<TData> | undefined>;
|
|
56
|
+
readonly rowTemplate: _angular_core.WritableSignal<TemplateRef<BsRowTemplateContext<TData>> | undefined>;
|
|
57
57
|
onPerPageChange(perPage: number): void;
|
|
58
58
|
onPageChange(page: number): void;
|
|
59
|
-
static ɵfac:
|
|
60
|
-
static ɵcmp:
|
|
59
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsDatatableComponent<any>, never>;
|
|
60
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsDatatableComponent<any>, "bs-datatable", never, { "data": { "alias": "data"; "required": false; "isSignal": true; }; }, { "data": "dataChange"; }, never, never, true, never>;
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export { BsDatatableColumnDirective, BsDatatableComponent, BsRowTemplateContext, BsRowTemplateDirective, DatatableSettings, DatatableSortBase };
|
|
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { Color } from '@mintplayer/ng-bootstrap';
|
|
3
3
|
|
|
4
4
|
declare class BsDatepickerComponent {
|
|
5
|
-
colors: typeof Color;
|
|
5
|
+
readonly colors: typeof Color;
|
|
6
6
|
selectedDate: _angular_core.ModelSignal<Date>;
|
|
7
7
|
currentMonth: _angular_core.ModelSignal<Date>;
|
|
8
8
|
disableDateFn: _angular_core.InputSignal<((date: Date) => boolean) | undefined>;
|
|
@@ -12,7 +12,7 @@ declare class BsFileUploadComponent {
|
|
|
12
12
|
readonly dropFilesCaption: _angular_core.InputSignal<string>;
|
|
13
13
|
readonly browseFilesCaption: _angular_core.InputSignal<string>;
|
|
14
14
|
readonly placeholder: _angular_core.InputSignal<string>;
|
|
15
|
-
colors: typeof Color;
|
|
15
|
+
readonly colors: typeof Color;
|
|
16
16
|
isDraggingFile: _angular_core.WritableSignal<boolean>;
|
|
17
17
|
fileTemplate?: TemplateRef<FileUpload>;
|
|
18
18
|
readonly files: _angular_core.ModelSignal<FileUpload[]>;
|
|
@@ -55,8 +55,8 @@ declare class BsNavbarDropdownComponent implements OnDestroy {
|
|
|
55
55
|
private injector;
|
|
56
56
|
private document;
|
|
57
57
|
private platformId;
|
|
58
|
-
private isAttached;
|
|
59
|
-
private isDestroyed;
|
|
58
|
+
private readonly isAttached;
|
|
59
|
+
private readonly isDestroyed;
|
|
60
60
|
private domPortal?;
|
|
61
61
|
private overlay?;
|
|
62
62
|
private pendingShowInOverlay;
|
|
@@ -83,7 +83,7 @@ declare class BsNavbarItemComponent implements AfterContentInit, AfterContentChe
|
|
|
83
83
|
private platformId;
|
|
84
84
|
private router;
|
|
85
85
|
parentDropdown: any;
|
|
86
|
-
hasDropdown: boolean
|
|
86
|
+
readonly hasDropdown: _angular_core.Signal<boolean>;
|
|
87
87
|
anchorTag: HTMLAnchorElement | null;
|
|
88
88
|
readonly dropdowns: _angular_core.Signal<readonly BsNavbarDropdownComponent[]>;
|
|
89
89
|
constructor();
|
|
@@ -117,11 +117,10 @@ declare class BsExpandButtonContext {
|
|
|
117
117
|
$implicit: boolean;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
declare class DropdownToggleDirective
|
|
120
|
+
declare class DropdownToggleDirective {
|
|
121
121
|
private elementRef;
|
|
122
122
|
private bsNavbarItem;
|
|
123
123
|
childDropdowns: QueryList<BsNavbarDropdownComponent>;
|
|
124
|
-
ngAfterContentInit(): void;
|
|
125
124
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<DropdownToggleDirective, never>;
|
|
126
125
|
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<DropdownToggleDirective, "bs-navbar-item", never, {}, {}, ["childDropdowns"], never, true, never>;
|
|
127
126
|
}
|
|
@@ -13,7 +13,7 @@ declare class BsSelect2Component<T extends HasId<U>, U> {
|
|
|
13
13
|
provideSuggestions: _angular_core.OutputEmitterRef<string>;
|
|
14
14
|
isFocused: _angular_core.WritableSignal<boolean>;
|
|
15
15
|
selectedItems: _angular_core.ModelSignal<T[]>;
|
|
16
|
-
private charWidth;
|
|
16
|
+
private readonly charWidth;
|
|
17
17
|
searchWidth: _angular_core.WritableSignal<number>;
|
|
18
18
|
itemTemplate?: TemplateRef<T>;
|
|
19
19
|
suggestionTemplate?: TemplateRef<T>;
|
|
@@ -18,8 +18,8 @@ declare class BsSignaturePadComponent implements AfterViewInit {
|
|
|
18
18
|
signature: _angular_core.ModelSignal<Signature>;
|
|
19
19
|
width: _angular_core.InputSignal<number>;
|
|
20
20
|
height: _angular_core.InputSignal<number>;
|
|
21
|
-
minHeight
|
|
22
|
-
isDrawing: boolean
|
|
21
|
+
readonly minHeight = 5;
|
|
22
|
+
readonly isDrawing: _angular_core.WritableSignal<boolean>;
|
|
23
23
|
readonly canvas: _angular_core.Signal<ElementRef<HTMLCanvasElement>>;
|
|
24
24
|
context: CanvasRenderingContext2D | null;
|
|
25
25
|
ngAfterViewInit(): void;
|
|
@@ -2,7 +2,7 @@ import * as _angular_core from '@angular/core';
|
|
|
2
2
|
import { Color } from '@mintplayer/ng-bootstrap';
|
|
3
3
|
|
|
4
4
|
declare class BsSpinnerComponent {
|
|
5
|
-
colors: typeof Color;
|
|
5
|
+
readonly colors: typeof Color;
|
|
6
6
|
type: _angular_core.InputSignal<"border" | "grow">;
|
|
7
7
|
color: _angular_core.InputSignal<Color>;
|
|
8
8
|
spinnerClass: _angular_core.Signal<string>;
|
|
@@ -6,9 +6,9 @@ declare class BsTimepickerComponent {
|
|
|
6
6
|
private sanitizer;
|
|
7
7
|
constructor();
|
|
8
8
|
clock: _angular_core.WritableSignal<SafeHtml | undefined>;
|
|
9
|
-
colors: typeof Color;
|
|
9
|
+
readonly colors: typeof Color;
|
|
10
10
|
isOpen: _angular_core.ModelSignal<boolean>;
|
|
11
|
-
presetTimestamps: Date[]
|
|
11
|
+
readonly presetTimestamps: _angular_core.WritableSignal<Date[]>;
|
|
12
12
|
isFocused: _angular_core.WritableSignal<boolean>;
|
|
13
13
|
selectAll(box: HTMLInputElement): void;
|
|
14
14
|
setNumber(event: Event, max: number, nextInput: HTMLInputElement | null): void;
|
|
@@ -3,7 +3,7 @@ import { ElementRef } from '@angular/core';
|
|
|
3
3
|
|
|
4
4
|
declare class BsTypeaheadComponent {
|
|
5
5
|
isOpen: _angular_core.ModelSignal<boolean>;
|
|
6
|
-
listboxId: string;
|
|
6
|
+
readonly listboxId: string;
|
|
7
7
|
suggestions: _angular_core.InputSignal<any[]>;
|
|
8
8
|
isLoading: _angular_core.WritableSignal<boolean>;
|
|
9
9
|
showNoSuggestions: _angular_core.Signal<boolean>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import * as
|
|
1
|
+
import * as _angular_core from '@angular/core';
|
|
2
2
|
import { AfterViewInit, OnDestroy, TemplateRef } from '@angular/core';
|
|
3
3
|
import { DatatableSortBase } from '@mintplayer/ng-bootstrap/datatable';
|
|
4
4
|
import { DataSource, CollectionViewer } from '@angular/cdk/collections';
|
|
@@ -30,8 +30,8 @@ declare class BsVirtualRowTemplateDirective<TData> {
|
|
|
30
30
|
private templateRef;
|
|
31
31
|
constructor();
|
|
32
32
|
static ngTemplateContextGuard<TData>(dir: BsVirtualRowTemplateDirective<TData>, ctx: any): ctx is BsVirtualRowTemplateContext<Exclude<TData, false | 0 | '' | null | undefined>>;
|
|
33
|
-
static ɵfac:
|
|
34
|
-
static ɵdir:
|
|
33
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsVirtualRowTemplateDirective<any>, never>;
|
|
34
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BsVirtualRowTemplateDirective<any>, "[bsVirtualRowTemplate]", never, {}, {}, never, never, true, never>;
|
|
35
35
|
}
|
|
36
36
|
declare class BsVirtualRowTemplateContext<TData = unknown> {
|
|
37
37
|
$implicit: TData;
|
|
@@ -39,18 +39,17 @@ declare class BsVirtualRowTemplateContext<TData = unknown> {
|
|
|
39
39
|
|
|
40
40
|
declare class BsVirtualDatatableComponent<TData> extends DatatableSortBase implements AfterViewInit, OnDestroy {
|
|
41
41
|
private readonly elementRef;
|
|
42
|
-
private readonly ngZone;
|
|
43
42
|
private cleanup;
|
|
44
|
-
dataSource:
|
|
45
|
-
isResponsive:
|
|
46
|
-
itemSize:
|
|
47
|
-
rowTemplate
|
|
43
|
+
dataSource: _angular_core.InputSignal<VirtualDatatableDataSource<TData>>;
|
|
44
|
+
isResponsive: _angular_core.InputSignal<boolean>;
|
|
45
|
+
itemSize: _angular_core.InputSignal<number>;
|
|
46
|
+
readonly rowTemplate: _angular_core.WritableSignal<TemplateRef<BsVirtualRowTemplateContext<TData>> | undefined>;
|
|
48
47
|
ngAfterViewInit(): void;
|
|
49
48
|
ngOnDestroy(): void;
|
|
50
49
|
private setupScrollSync;
|
|
51
50
|
private setupColumnWidthSync;
|
|
52
|
-
static ɵfac:
|
|
53
|
-
static ɵcmp:
|
|
51
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BsVirtualDatatableComponent<any>, never>;
|
|
52
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BsVirtualDatatableComponent<any>, "bs-virtual-datatable", never, { "dataSource": { "alias": "dataSource"; "required": true; "isSignal": true; }; "isResponsive": { "alias": "isResponsive"; "required": false; "isSignal": true; }; "itemSize": { "alias": "itemSize"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
54
53
|
}
|
|
55
54
|
|
|
56
55
|
export { BsVirtualDatatableComponent, BsVirtualRowTemplateContext, BsVirtualRowTemplateDirective, VirtualDatatableDataSource };
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';
|
|
2
|
-
import { EMPTY } from 'rxjs';
|
|
3
|
-
import { take, switchMap } from 'rxjs/operators';
|
|
4
|
-
|
|
5
|
-
class BsBindEventPlugin {
|
|
6
|
-
supports(event) {
|
|
7
|
-
return event.startsWith('$.');
|
|
8
|
-
}
|
|
9
|
-
addEventListener(element, event) {
|
|
10
|
-
const el = element;
|
|
11
|
-
el[event] = EMPTY;
|
|
12
|
-
const method = this.getMethod(element, event);
|
|
13
|
-
const sub = this.manager.getZone()
|
|
14
|
-
.onStable.pipe(take(1), switchMap(() => el[event]))
|
|
15
|
-
.subscribe((value) => method(value));
|
|
16
|
-
return () => sub.unsubscribe();
|
|
17
|
-
}
|
|
18
|
-
getMethod(element, event) {
|
|
19
|
-
const el = element;
|
|
20
|
-
const [, key, value, unit = ''] = event.split('.');
|
|
21
|
-
if (event.endsWith('.attr')) {
|
|
22
|
-
return (v) => element.setAttribute(key, String(v));
|
|
23
|
-
}
|
|
24
|
-
if (key === 'class') {
|
|
25
|
-
return (v) => element.classList.toggle(value, !!v);
|
|
26
|
-
}
|
|
27
|
-
if (key === 'style') {
|
|
28
|
-
return (v) => element.style.setProperty(value, `${v}${unit}`);
|
|
29
|
-
}
|
|
30
|
-
return (v) => (el[key] = v);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function provideAsyncHostBindings() {
|
|
35
|
-
return [{
|
|
36
|
-
provide: EVENT_MANAGER_PLUGINS,
|
|
37
|
-
useClass: BsBindEventPlugin,
|
|
38
|
-
multi: true,
|
|
39
|
-
}];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Generated bundle index. Do not edit.
|
|
44
|
-
*/
|
|
45
|
-
|
|
46
|
-
export { BsBindEventPlugin, provideAsyncHostBindings };
|
|
47
|
-
//# sourceMappingURL=mintplayer-ng-bootstrap-async-host-binding.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mintplayer-ng-bootstrap-async-host-binding.mjs","sources":["../../../../libs/mintplayer-ng-bootstrap/async-host-binding/src/bind-event.plugin.ts","../../../../libs/mintplayer-ng-bootstrap/async-host-binding/src/provide-async-host-bindings.ts","../../../../libs/mintplayer-ng-bootstrap/async-host-binding/mintplayer-ng-bootstrap-async-host-binding.ts"],"sourcesContent":["import { EventManager } from '@angular/platform-browser';\nimport { EMPTY } from 'rxjs';\nimport { switchMap, take } from 'rxjs/operators';\n\nexport class BsBindEventPlugin {\n manager!: EventManager;\n\n supports(event: string) {\n return event.startsWith('$.');\n }\n\n addEventListener(element: HTMLElement, event: string) {\n const el = <any>element;\n el[event] = EMPTY;\n\n const method = this.getMethod(element, event);\n const sub = this.manager.getZone()\n .onStable.pipe(take(1), switchMap(() => el[event]))\n .subscribe((value) => method(value));\n\n return () => sub.unsubscribe();\n }\n\n private getMethod(element: HTMLElement, event: string) {\n const el = <any>element;\n const [, key, value, unit = ''] = event.split('.');\n\n if (event.endsWith('.attr')) {\n return (v: unknown) => element.setAttribute(key, String(v));\n }\n\n if (key === 'class') {\n return (v: unknown) => element.classList.toggle(value, !!v);\n }\n\n if (key === 'style') {\n return (v: unknown) => element.style.setProperty(value, `${v}${unit}`);\n }\n\n return (v: unknown) => (el[key] = v);\n }\n}","import { Provider } from '@angular/core';\nimport { EVENT_MANAGER_PLUGINS } from '@angular/platform-browser';\nimport { BsBindEventPlugin } from './bind-event.plugin';\n\nexport function provideAsyncHostBindings(): Provider[] {\n return [{\n provide: EVENT_MANAGER_PLUGINS,\n useClass: BsBindEventPlugin,\n multi: true,\n }];\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;MAIa,iBAAiB,CAAA;AAG5B,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;IAC/B;IAEA,gBAAgB,CAAC,OAAoB,EAAE,KAAa,EAAA;QAClD,MAAM,EAAE,GAAQ,OAAO;AACvB,QAAA,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK;QAEjB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC;AAC7C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO;AAC7B,aAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC;aACjD,SAAS,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AAEtC,QAAA,OAAO,MAAM,GAAG,CAAC,WAAW,EAAE;IAChC;IAEQ,SAAS,CAAC,OAAoB,EAAE,KAAa,EAAA;QACnD,MAAM,EAAE,GAAQ,OAAO;AACvB,QAAA,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAElD,QAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC3B,YAAA,OAAO,CAAC,CAAU,KAAK,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAC7D;AAEA,QAAA,IAAI,GAAG,KAAK,OAAO,EAAE;AACnB,YAAA,OAAO,CAAC,CAAU,KAAK,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D;AAEA,QAAA,IAAI,GAAG,KAAK,OAAO,EAAE;AACnB,YAAA,OAAO,CAAC,CAAU,KAAK,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA,EAAG,CAAC,GAAG,IAAI,CAAA,CAAE,CAAC;QACxE;AAEA,QAAA,OAAO,CAAC,CAAU,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC;AACD;;SCrCe,wBAAwB,GAAA;AACtC,IAAA,OAAO,CAAC;AACN,YAAA,OAAO,EAAE,qBAAqB;AAC9B,YAAA,QAAQ,EAAE,iBAAiB;AAC3B,YAAA,KAAK,EAAE,IAAI;AACZ,SAAA,CAAC;AACJ;;ACVA;;AAEG;;;;"}
|