@theseam/ui-common 1.0.0-beta.8 → 1.0.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/buttons/index.d.ts +4 -1
- package/datatable/index.d.ts +92 -53
- package/fesm2022/theseam-ui-common-asset-reader.mjs +10 -10
- package/fesm2022/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs +6 -6
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-buttons.mjs +35 -28
- package/fesm2022/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-card.mjs +16 -16
- package/fesm2022/theseam-ui-common-card.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-carousel.mjs +10 -10
- package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-checkbox.mjs +7 -7
- package/fesm2022/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs +13 -13
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-exporter.mjs +31 -14
- package/fesm2022/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-filters.mjs +13 -13
- package/fesm2022/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +12 -12
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs +25 -25
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable.mjs +279 -185
- package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs +7 -7
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic.mjs +21 -21
- package/fesm2022/theseam-ui-common-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-footer-bar.mjs +7 -7
- package/fesm2022/theseam-ui-common-footer-bar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field-error.mjs +16 -16
- package/fesm2022/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field.mjs +22 -22
- package/fesm2022/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-framework.mjs +157 -157
- package/fesm2022/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-google-maps.mjs +40 -40
- package/fesm2022/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-graphql.mjs +3 -3
- package/fesm2022/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-icon.mjs +13 -13
- package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-layout.mjs +7 -7
- package/fesm2022/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-loading.mjs +10 -10
- package/fesm2022/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-menu.mjs +25 -25
- package/fesm2022/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-modal.mjs +43 -43
- package/fesm2022/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-navigation-reload.mjs +3 -3
- package/fesm2022/theseam-ui-common-navigation-reload.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-popover.mjs +10 -10
- package/fesm2022/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-progress.mjs +7 -7
- package/fesm2022/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-rich-text.mjs +7 -7
- package/fesm2022/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-scrollbar.mjs +6 -6
- package/fesm2022/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-services.mjs +12 -12
- package/fesm2022/theseam-ui-common-services.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-shared.mjs +37 -37
- package/fesm2022/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-storage.mjs +3 -3
- package/fesm2022/theseam-ui-common-storage.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-story-helpers.mjs +26 -26
- package/fesm2022/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tabbed.mjs +22 -22
- package/fesm2022/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-type.mjs +39 -11
- package/fesm2022/theseam-ui-common-table-cell-type.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-types.mjs +31 -31
- package/fesm2022/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table.mjs +23 -21
- package/fesm2022/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tel-input.mjs +13 -13
- package/fesm2022/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tiled-select.mjs +22 -22
- package/fesm2022/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-edit.mjs +16 -16
- package/fesm2022/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-group.mjs +10 -10
- package/fesm2022/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tooltip.mjs +10 -10
- package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs +10 -10
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs +3 -3
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-viewers.mjs +12 -12
- package/fesm2022/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-widget.mjs +135 -135
- package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
- package/package.json +33 -33
- package/table/index.d.ts +1 -2
- package/table-cell-type/index.d.ts +27 -2
package/buttons/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { BaseHarnessFilters, ContentContainerComponentHarness, ComponentHarnessConstructor, HarnessPredicate } from '@angular/cdk/testing';
|
|
2
2
|
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { OnDestroy, ElementRef, Renderer2, EventEmitter } from '@angular/core';
|
|
4
|
+
import { OnDestroy, ElementRef, Renderer2, NgZone, EventEmitter } from '@angular/core';
|
|
5
5
|
import { ThemeTypes } from '@theseam/ui-common/models';
|
|
6
6
|
import { CanDisableCtor, CanThemeCtor, CanSizeCtor } from '@theseam/ui-common/core';
|
|
7
7
|
import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
|
|
@@ -141,11 +141,14 @@ declare class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase imple
|
|
|
141
141
|
readonly _elementRef: ElementRef;
|
|
142
142
|
readonly _focusMonitor: FocusMonitor;
|
|
143
143
|
readonly _renderer: Renderer2;
|
|
144
|
+
protected readonly _ngZone: NgZone;
|
|
145
|
+
private readonly _cleanupClick;
|
|
144
146
|
/** Tabindex of the button. */
|
|
145
147
|
tabIndex: number | undefined | null;
|
|
146
148
|
constructor(_elementRef: ElementRef, _focusMonitor: FocusMonitor, _renderer: Renderer2);
|
|
147
149
|
ngOnDestroy(): void;
|
|
148
150
|
_haltDisabledEvents(event: Event): void;
|
|
151
|
+
private _createClickListener;
|
|
149
152
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheSeamAnchorButtonComponent, never>;
|
|
150
153
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamAnchorButtonComponent, "a[seamButton]", ["seamButton", "seamButtonBaseAnchor"], { "disabled": { "alias": "disabled"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "size": { "alias": "size"; "required": false; }; "tabIndex": { "alias": "tabIndex"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
151
154
|
}
|
package/datatable/index.d.ts
CHANGED
|
@@ -2,52 +2,52 @@ import * as _fortawesome_fontawesome_common_types from '@fortawesome/fontawesome
|
|
|
2
2
|
import { BooleanInput, NumberInput } from '@angular/cdk/coercion';
|
|
3
3
|
import { CollectionViewer, DataSource, ListRange } from '@angular/cdk/collections';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { EventEmitter, QueryList,
|
|
5
|
+
import { EventEmitter, QueryList, OnChanges, TemplateRef, PipeTransform, SimpleChanges, InjectionToken, KeyValueDiffers, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewContainerRef, NgZone } from '@angular/core';
|
|
6
6
|
import * as rxjs from 'rxjs';
|
|
7
7
|
import { Observable } from 'rxjs';
|
|
8
|
-
import * as
|
|
8
|
+
import * as i26 from '@marklb/ngx-datatable';
|
|
9
9
|
import { TableColumnProp, TableColumn, SortType, SelectionType, DataTableColumnDirective, DataTableColumnHeaderDirective, DataTableColumnCellTreeToggle, TreeStatus, ColumnMode, ContextmenuType, DatatableComponent as DatatableComponent$1, DatatableRowDetailDirective } from '@marklb/ngx-datatable';
|
|
10
10
|
import * as _theseam_ui_common_data_filters from '@theseam/ui-common/data-filters';
|
|
11
11
|
import { IDataFilter, DataFilterContainer, DataFilter, DataFilterState } from '@theseam/ui-common/data-filters';
|
|
12
|
-
import * as
|
|
12
|
+
import * as i30 from '@theseam/ui-common/shared';
|
|
13
13
|
import { TheSeamElementResizedEvent } from '@theseam/ui-common/shared';
|
|
14
|
-
import * as
|
|
14
|
+
import * as i28 from '@angular/cdk/overlay';
|
|
15
15
|
import { ConnectionPositionPair, Overlay } from '@angular/cdk/overlay';
|
|
16
|
-
import * as
|
|
16
|
+
import * as i31 from '@angular/router';
|
|
17
17
|
import { Router } from '@angular/router';
|
|
18
|
-
import * as
|
|
18
|
+
import * as i38 from '@theseam/ui-common/confirm-dialog';
|
|
19
19
|
import { SeamConfirmDialogService } from '@theseam/ui-common/confirm-dialog';
|
|
20
|
-
import * as
|
|
20
|
+
import * as i32 from '@theseam/ui-common/menu';
|
|
21
21
|
import { MenuComponent } from '@theseam/ui-common/menu';
|
|
22
22
|
import { ThemeTypes } from '@theseam/ui-common/models';
|
|
23
|
-
import * as
|
|
24
|
-
import { TableCellTypeName, TableCellTypeConfig, TableCellTypeColumn, TableCellTypeExportProps } from '@theseam/ui-common/table-cell-type';
|
|
25
|
-
import * as
|
|
23
|
+
import * as i43 from '@theseam/ui-common/table-cell-type';
|
|
24
|
+
import { TableCellTypeName, TableCellTypeConfig, TableCellTypeColumn, TableCellTypeExportProps, TheSeamTableCellTypeColumnAlign } from '@theseam/ui-common/table-cell-type';
|
|
25
|
+
import * as i42 from '@angular/forms';
|
|
26
26
|
import { FormGroup, FormControl, UntypedFormControl } from '@angular/forms';
|
|
27
27
|
import { TheSeamPreferencesBase, TheSeamPreferencesManagerService, TheSeamPreferencesAccessor } from '@theseam/ui-common/services';
|
|
28
28
|
import { AlterationDisplayItem } from '@theseam/ui-common/datatable-alterations-display';
|
|
29
|
-
import * as
|
|
29
|
+
import * as i34 from '@theseam/ui-common/icon';
|
|
30
30
|
import { SeamIcon } from '@theseam/ui-common/icon';
|
|
31
|
-
import * as
|
|
31
|
+
import * as i35 from 'ngx-toastr';
|
|
32
32
|
import { ToastrService } from 'ngx-toastr';
|
|
33
33
|
import { IDataExporter } from '@theseam/ui-common/data-exporter';
|
|
34
34
|
import { DynamicValueHelperService } from '@theseam/ui-common/dynamic';
|
|
35
|
-
import * as
|
|
35
|
+
import * as i36 from '@theseam/ui-common/loading';
|
|
36
36
|
import { TheSeamLoadingOverlayService } from '@theseam/ui-common/loading';
|
|
37
37
|
import { HttpClient } from '@angular/common/http';
|
|
38
38
|
import { TheSeamDynamicComponentLoader } from '@theseam/ui-common/dynamic-component-loader';
|
|
39
39
|
import { Modal } from '@theseam/ui-common/modal';
|
|
40
40
|
import { TheSeamOverlayScrollbarsService } from '@theseam/ui-common/scrollbar';
|
|
41
|
-
import * as
|
|
42
|
-
import * as
|
|
43
|
-
import * as
|
|
44
|
-
import * as
|
|
45
|
-
import * as
|
|
46
|
-
import * as
|
|
47
|
-
import * as
|
|
48
|
-
import * as
|
|
49
|
-
import * as
|
|
50
|
-
import * as
|
|
41
|
+
import * as i25 from '@angular/common';
|
|
42
|
+
import * as i27 from '@fortawesome/angular-fontawesome';
|
|
43
|
+
import * as i29 from '@angular/cdk/a11y';
|
|
44
|
+
import * as i33 from '@theseam/ui-common/buttons';
|
|
45
|
+
import * as i37 from '@angular/cdk/portal';
|
|
46
|
+
import * as i39 from '@theseam/ui-common/popover';
|
|
47
|
+
import * as i40 from '@theseam/ui-common/checkbox';
|
|
48
|
+
import * as i41 from '@theseam/ui-common/form-field';
|
|
49
|
+
import * as i45 from '@ng-select/ng-select';
|
|
50
|
+
import * as i46 from '@theseam/ui-common/toggle-group';
|
|
51
51
|
|
|
52
52
|
declare class DatatableActionMenuItemComponent {
|
|
53
53
|
label: string | undefined | null;
|
|
@@ -95,24 +95,9 @@ declare class DatatableActionMenuComponent {
|
|
|
95
95
|
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableActionMenuComponent, "seam-datatable-action-menu", ["seamDatatableActionMenu"], { "isSubMenu": { "alias": "isSubMenu"; "required": false; }; }, {}, ["items"], never, false, never>;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
declare class DatatableCellTplDirective {
|
|
99
|
-
template: TemplateRef<any>;
|
|
100
|
-
constructor(template: TemplateRef<any>);
|
|
101
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableCellTplDirective, never>;
|
|
102
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<DatatableCellTplDirective, "[seamDatatableCellTpl]", never, {}, {}, never, never, false, never>;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
declare class DatatableColumnChangesService {
|
|
106
|
-
private columnInputChanges;
|
|
107
|
-
get columnInputChanges$(): Observable<undefined>;
|
|
108
|
-
onInputChange(): void;
|
|
109
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnChangesService, never>;
|
|
110
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<DatatableColumnChangesService>;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
98
|
type _PipeTransform = PipeTransform | PipeTransform;
|
|
114
99
|
declare class DatatableColumnComponent implements OnChanges {
|
|
115
|
-
private _columnChangesService;
|
|
100
|
+
private readonly _columnChangesService;
|
|
116
101
|
name?: string | null;
|
|
117
102
|
prop?: TableColumnProp | null;
|
|
118
103
|
flexGrow?: number | null;
|
|
@@ -137,17 +122,36 @@ declare class DatatableColumnComponent implements OnChanges {
|
|
|
137
122
|
summaryFunc?: ((cells: any[]) => any) | null;
|
|
138
123
|
summaryTemplate?: TemplateRef<any> | null;
|
|
139
124
|
hidden?: boolean | null;
|
|
125
|
+
align?: 'left' | 'center' | 'right' | null;
|
|
126
|
+
alignHeader?: 'left' | 'center' | 'right' | null;
|
|
127
|
+
alignCell?: 'left' | 'center' | 'right' | null;
|
|
140
128
|
private _isFirstChange;
|
|
141
|
-
cellTplDirective?: DatatableCellTplDirective;
|
|
142
129
|
_cellTemplateInput?: TemplateRef<any> | null;
|
|
143
|
-
|
|
130
|
+
set _setCellTemplateQuery(value: TemplateRef<any> | null);
|
|
131
|
+
_cellTemplateQuery?: TemplateRef<any> | null;
|
|
144
132
|
get cellTemplate(): TemplateRef<any> | undefined | null;
|
|
145
|
-
|
|
133
|
+
readonly __propsChanged: string[];
|
|
146
134
|
ngOnChanges(changes: SimpleChanges): void;
|
|
147
|
-
getCellDirective(): DatatableCellTplDirective | null;
|
|
148
135
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnComponent, never>;
|
|
149
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnComponent, "seam-datatable-column", never, { "name": { "alias": "name"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "flexGrow": { "alias": "flexGrow"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "width": { "alias": "width"; "required": false; }; "resizeable": { "alias": "resizeable"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "canAutoResize": { "alias": "canAutoResize"; "required": false; }; "comparator": { "alias": "comparator"; "required": false; }; "headerTemplate": { "alias": "headerTemplate"; "required": false; }; "checkboxable": { "alias": "checkboxable"; "required": false; }; "headerCheckboxable": { "alias": "headerCheckboxable"; "required": false; }; "headerClass": { "alias": "headerClass"; "required": false; }; "cellClass": { "alias": "cellClass"; "required": false; }; "frozenLeft": { "alias": "frozenLeft"; "required": false; }; "frozenRight": { "alias": "frozenRight"; "required": false; }; "pipe": { "alias": "pipe"; "required": false; }; "isTreeColumn": { "alias": "isTreeColumn"; "required": false; }; "treeLevelIndent": { "alias": "treeLevelIndent"; "required": false; }; "summaryFunc": { "alias": "summaryFunc"; "required": false; }; "summaryTemplate": { "alias": "summaryTemplate"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "_cellTemplateInput": { "alias": "cellTemplate"; "required": false; }; }, {}, ["
|
|
136
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnComponent, "seam-datatable-column", never, { "name": { "alias": "name"; "required": false; }; "prop": { "alias": "prop"; "required": false; }; "flexGrow": { "alias": "flexGrow"; "required": false; }; "minWidth": { "alias": "minWidth"; "required": false; }; "maxWidth": { "alias": "maxWidth"; "required": false; }; "width": { "alias": "width"; "required": false; }; "resizeable": { "alias": "resizeable"; "required": false; }; "sortable": { "alias": "sortable"; "required": false; }; "draggable": { "alias": "draggable"; "required": false; }; "canAutoResize": { "alias": "canAutoResize"; "required": false; }; "comparator": { "alias": "comparator"; "required": false; }; "headerTemplate": { "alias": "headerTemplate"; "required": false; }; "checkboxable": { "alias": "checkboxable"; "required": false; }; "headerCheckboxable": { "alias": "headerCheckboxable"; "required": false; }; "headerClass": { "alias": "headerClass"; "required": false; }; "cellClass": { "alias": "cellClass"; "required": false; }; "frozenLeft": { "alias": "frozenLeft"; "required": false; }; "frozenRight": { "alias": "frozenRight"; "required": false; }; "pipe": { "alias": "pipe"; "required": false; }; "isTreeColumn": { "alias": "isTreeColumn"; "required": false; }; "treeLevelIndent": { "alias": "treeLevelIndent"; "required": false; }; "summaryFunc": { "alias": "summaryFunc"; "required": false; }; "summaryTemplate": { "alias": "summaryTemplate"; "required": false; }; "hidden": { "alias": "hidden"; "required": false; }; "align": { "alias": "align"; "required": false; }; "alignHeader": { "alias": "alignHeader"; "required": false; }; "alignCell": { "alias": "alignCell"; "required": false; }; "_cellTemplateInput": { "alias": "cellTemplate"; "required": false; }; }, {}, ["_setCellTemplateQuery"], never, false, never>;
|
|
150
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if a column is bound to a property.
|
|
140
|
+
*
|
|
141
|
+
* This is not guaranteed to be 100% accurate in all cases, but Angular seems
|
|
142
|
+
* to now define properties on the instance for all inputs. So, just relying
|
|
143
|
+
* on defined properties determine if bound will not work. The workaround is
|
|
144
|
+
* to track changes in `ngOnChanges` and use that to determine if a property
|
|
145
|
+
* is bound.
|
|
146
|
+
*
|
|
147
|
+
* NOTE: This is not an instance method, because the way we are handling the
|
|
148
|
+
* instance was causing the method to not be available where needed.
|
|
149
|
+
*
|
|
150
|
+
* @param column the column to check
|
|
151
|
+
* @param propName name of an input property
|
|
152
|
+
* @returns true if the property is bound, false otherwise
|
|
153
|
+
*/
|
|
154
|
+
declare function isColumnBoundToProp(column: DatatableColumnComponent, propName: string): boolean;
|
|
151
155
|
|
|
152
156
|
declare class TheSeamDatatableFooterDirective {
|
|
153
157
|
_templateInput: TemplateRef<any> | undefined | null;
|
|
@@ -270,6 +274,12 @@ interface TheSeamDatatableColumnFilterable<T extends TheSeamDatatableColumnFilte
|
|
|
270
274
|
* Additional options for a specific filter type.
|
|
271
275
|
*/
|
|
272
276
|
filterOptions?: T;
|
|
277
|
+
/**
|
|
278
|
+
* Whether the filter is active or not.
|
|
279
|
+
*
|
|
280
|
+
* This is set internally, it will likely not work if set from outside.
|
|
281
|
+
*/
|
|
282
|
+
filterActive?: boolean;
|
|
273
283
|
}
|
|
274
284
|
interface TheSeamDatatableColumnFilterableConfig {
|
|
275
285
|
/**
|
|
@@ -285,7 +295,7 @@ interface TheSeamDatatableColumnFilterableConfig {
|
|
|
285
295
|
*/
|
|
286
296
|
filterType?: string;
|
|
287
297
|
}
|
|
288
|
-
type TheSeamDatatableColumn<T extends TableCellTypeName = any, C extends TableCellTypeConfig<T> = any, F extends TheSeamDatatableColumnFilterableConfig = any> = TableColumn & TableCellTypeColumn<T, C> & TableCellTypeExportProps & TheSeamDatatableColumnHidable & TheSeamDatatableColumnFilterable<F
|
|
298
|
+
type TheSeamDatatableColumn<T extends TableCellTypeName = any, C extends TableCellTypeConfig<T> = any, F extends TheSeamDatatableColumnFilterableConfig = any> = TableColumn & TableCellTypeColumn<T, C> & TableCellTypeExportProps & TheSeamDatatableColumnHidable & TheSeamDatatableColumnFilterable<F> & TheSeamTableCellTypeColumnAlign;
|
|
289
299
|
|
|
290
300
|
interface TheSeamDatatableAccessor {
|
|
291
301
|
columns: TheSeamDatatableColumn[];
|
|
@@ -302,6 +312,14 @@ interface TheSeamDatatableAccessor {
|
|
|
302
312
|
pageInfo: TheSeamPageInfo;
|
|
303
313
|
}
|
|
304
314
|
|
|
315
|
+
declare class DatatableColumnChangesService {
|
|
316
|
+
private columnInputChanges;
|
|
317
|
+
get columnInputChanges$(): Observable<undefined>;
|
|
318
|
+
onInputChange(): void;
|
|
319
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnChangesService, never>;
|
|
320
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<DatatableColumnChangesService>;
|
|
321
|
+
}
|
|
322
|
+
|
|
305
323
|
interface ColumnsDataFilterStateState<T = any, O = any> {
|
|
306
324
|
prop?: string;
|
|
307
325
|
formValue?: Partial<T>;
|
|
@@ -440,6 +458,7 @@ declare class ColumnsManagerService {
|
|
|
440
458
|
private _getInternalColumns;
|
|
441
459
|
private _getInternalColumn;
|
|
442
460
|
private _findColumnByProp;
|
|
461
|
+
private _getTemplateColumnByProp;
|
|
443
462
|
private _getDifMapForColumnsType;
|
|
444
463
|
private _getColumnDiffer;
|
|
445
464
|
private _getColDif;
|
|
@@ -575,6 +594,7 @@ interface ColumnsAlterationsChangedEvent {
|
|
|
575
594
|
declare class ColumnsAlterationsManagerService {
|
|
576
595
|
private readonly _changesSubject;
|
|
577
596
|
private _alterations;
|
|
597
|
+
private _defaultSorts;
|
|
578
598
|
readonly changes: Observable<ColumnsAlterationsChangedEvent>;
|
|
579
599
|
constructor();
|
|
580
600
|
get(): ColumnsAlteration[];
|
|
@@ -597,6 +617,7 @@ declare class ColumnsAlterationsManagerService {
|
|
|
597
617
|
clear(options?: {
|
|
598
618
|
emitEvent?: boolean;
|
|
599
619
|
}): ColumnsAlterationsChangedRecord[];
|
|
620
|
+
setDefaultSorts(sorts: SortItem[]): void;
|
|
600
621
|
private _removeNonPersistant;
|
|
601
622
|
private _emitChanges;
|
|
602
623
|
static ɵfac: i0.ɵɵFactoryDeclaration<ColumnsAlterationsManagerService, never>;
|
|
@@ -727,7 +748,7 @@ interface ICellContext {
|
|
|
727
748
|
declare const THESEAM_DATATABLE: InjectionToken<DataFilter>;
|
|
728
749
|
declare const _THESEAM_DATATABLE: any;
|
|
729
750
|
declare const _THESEAM_DATATABLE_ACCESSOR: any;
|
|
730
|
-
declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, TheSeamDatatableAccessor, CollectionViewer {
|
|
751
|
+
declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, OnChanges, TheSeamDatatableAccessor, CollectionViewer {
|
|
731
752
|
private readonly _preferences;
|
|
732
753
|
private readonly _columnsManager;
|
|
733
754
|
private readonly _columnsAlterationsManager;
|
|
@@ -852,8 +873,8 @@ declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, TheSe
|
|
|
852
873
|
_columnFilterIcon: SeamIcon | undefined | null;
|
|
853
874
|
get columnFilterUpdateMethod(): TheSeamDatatableColumnFilterUpdateMethod | undefined | null;
|
|
854
875
|
set columnFilterUpdateMethod(value: TheSeamDatatableColumnFilterUpdateMethod | undefined | null);
|
|
855
|
-
private readonly _columnFilterUpdateMethodDefault;
|
|
856
876
|
_columnFilterUpdateMethod: TheSeamDatatableColumnFilterUpdateMethod | undefined | null;
|
|
877
|
+
private readonly _columnFilterUpdateMethodDefault;
|
|
857
878
|
get columnFilterUpdateDebounce(): number | undefined | null;
|
|
858
879
|
set columnFilterUpdateDebounce(value: number | undefined | null);
|
|
859
880
|
private readonly _columnFilterUpdateDebounceDefault;
|
|
@@ -918,6 +939,7 @@ declare class DatatableComponent<TRow = any> implements OnInit, OnDestroy, TheSe
|
|
|
918
939
|
ngOnDestroy(): void;
|
|
919
940
|
private _setMenuBarFilters;
|
|
920
941
|
getColumnComponent(propName: string): DatatableColumnComponent | null;
|
|
942
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
921
943
|
_columnData(col: any): {
|
|
922
944
|
col: any;
|
|
923
945
|
comp: DatatableColumnComponent | null;
|
|
@@ -953,7 +975,7 @@ declare class DatatableColumnFilterMenuComponent implements OnInit {
|
|
|
953
975
|
submit(): void;
|
|
954
976
|
clearFilter(): void;
|
|
955
977
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnFilterMenuComponent, never>;
|
|
956
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterMenuComponent, "seam-datatable-column-filter-menu", never, { "column": { "alias": "column"; "required": false; }; "updateMethod": { "alias": "updateMethod"; "required": false; }; "debounce": { "alias": "debounce"; "required": false; }; }, { "closePopover": "closePopover"; }, never, never,
|
|
978
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterMenuComponent, "seam-datatable-column-filter-menu", never, { "column": { "alias": "column"; "required": false; }; "updateMethod": { "alias": "updateMethod"; "required": false; }; "debounce": { "alias": "debounce"; "required": false; }; }, { "closePopover": "closePopover"; }, never, never, true, never>;
|
|
957
979
|
}
|
|
958
980
|
|
|
959
981
|
declare const THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_NAME: "search-date";
|
|
@@ -1032,7 +1054,7 @@ declare class DatatableColumnFilterSearchDateComponent implements OnInit {
|
|
|
1032
1054
|
showRangeInputs$: Observable<boolean> | undefined;
|
|
1033
1055
|
ngOnInit(): void;
|
|
1034
1056
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnFilterSearchDateComponent, never>;
|
|
1035
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchDateComponent, "seam-datatable-column-filter-search-date", never, { "options": { "alias": "options"; "required": false; }; "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never,
|
|
1057
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchDateComponent, "seam-datatable-column-filter-search-date", never, { "options": { "alias": "options"; "required": false; }; "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never, true, never>;
|
|
1036
1058
|
}
|
|
1037
1059
|
|
|
1038
1060
|
declare class DatatableColumnFilterSearchNumericComponent implements OnInit {
|
|
@@ -1045,7 +1067,7 @@ declare class DatatableColumnFilterSearchNumericComponent implements OnInit {
|
|
|
1045
1067
|
showRangeInputs$: Observable<boolean> | undefined;
|
|
1046
1068
|
ngOnInit(): void;
|
|
1047
1069
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnFilterSearchNumericComponent, never>;
|
|
1048
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchNumericComponent, "seam-datatable-column-filter-search-numeric", never, { "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never,
|
|
1070
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchNumericComponent, "seam-datatable-column-filter-search-numeric", never, { "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never, true, never>;
|
|
1049
1071
|
}
|
|
1050
1072
|
|
|
1051
1073
|
declare class DatatableColumnFilterSearchTextComponent implements OnInit {
|
|
@@ -1057,7 +1079,7 @@ declare class DatatableColumnFilterSearchTextComponent implements OnInit {
|
|
|
1057
1079
|
showTextbox$: Observable<boolean> | undefined;
|
|
1058
1080
|
ngOnInit(): void;
|
|
1059
1081
|
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnFilterSearchTextComponent, never>;
|
|
1060
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchTextComponent, "seam-datatable-column-filter-search-text", never, { "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never,
|
|
1082
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnFilterSearchTextComponent, "seam-datatable-column-filter-search-text", never, { "filterForm": { "alias": "filterForm"; "required": false; }; }, {}, never, never, true, never>;
|
|
1061
1083
|
}
|
|
1062
1084
|
|
|
1063
1085
|
declare class DatatableColumnPreferencesComponent {
|
|
@@ -1211,6 +1233,13 @@ declare class DatatableActionMenuToggleDirective {
|
|
|
1211
1233
|
static ɵdir: i0.ɵɵDirectiveDeclaration<DatatableActionMenuToggleDirective, "[seamDatatableActionMenuToggle]", ["seamDatatableActionMenuToggle"], { "seamDatatableActionMenuToggle": { "alias": "seamDatatableActionMenuToggle"; "required": false; }; }, {}, never, never, false, never>;
|
|
1212
1234
|
}
|
|
1213
1235
|
|
|
1236
|
+
declare class DatatableCellTplDirective {
|
|
1237
|
+
template: TemplateRef<any>;
|
|
1238
|
+
constructor(template: TemplateRef<any>);
|
|
1239
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableCellTplDirective, never>;
|
|
1240
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<DatatableCellTplDirective, "[seamDatatableCellTpl]", never, {}, {}, never, never, false, never>;
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1214
1243
|
declare class DatatableColumnFilterTplDirective {
|
|
1215
1244
|
template: TemplateRef<any>;
|
|
1216
1245
|
constructor(template: TemplateRef<any>);
|
|
@@ -1329,11 +1358,21 @@ declare function withStoredColumnInfo(columns: TheSeamDatatableColumn[], prefere
|
|
|
1329
1358
|
|
|
1330
1359
|
declare function mapColumnsAlterationsStates(states: ColumnsAlterationState[]): ColumnsAlteration[];
|
|
1331
1360
|
|
|
1361
|
+
declare class DatatableColumnHeaderComponent {
|
|
1362
|
+
column: i0.InputSignal<TheSeamDatatableColumn>;
|
|
1363
|
+
sortFn: i0.InputSignal<() => void>;
|
|
1364
|
+
columnFilterIcon: i0.InputSignal<SeamIcon | null | undefined>;
|
|
1365
|
+
columnFilterUpdateMethod: i0.InputSignal<TheSeamDatatableColumnFilterUpdateMethod | null | undefined>;
|
|
1366
|
+
columnFilterUpdateDebounce: i0.InputSignal<number | null | undefined>;
|
|
1367
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatatableColumnHeaderComponent, never>;
|
|
1368
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatatableColumnHeaderComponent, "seam-datatable-column-header", never, { "column": { "alias": "column"; "required": true; "isSignal": true; }; "sortFn": { "alias": "sortFn"; "required": true; "isSignal": true; }; "columnFilterIcon": { "alias": "columnFilterIcon"; "required": false; "isSignal": true; }; "columnFilterUpdateMethod": { "alias": "columnFilterUpdateMethod"; "required": false; "isSignal": true; }; "columnFilterUpdateDebounce": { "alias": "columnFilterUpdateDebounce"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1332
1371
|
declare class TheSeamDatatableModule {
|
|
1333
1372
|
static ɵfac: i0.ɵɵFactoryDeclaration<TheSeamDatatableModule, never>;
|
|
1334
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<TheSeamDatatableModule, [typeof DatatableComponent, typeof DatatableCellTplDirective, typeof DatatableColumnComponent, typeof DatatableActionMenuComponent, typeof DatatableActionMenuToggleDirective, typeof DatatableActionMenuItemComponent, typeof DatatableMenuBarComponent, typeof DatatableFilterDirective, typeof DatatableRowActionItemDirective, typeof DatatableExportButtonComponent, typeof TheSeamDatatableRowDetailDirective, typeof DatatableRowDetailTplDirective, typeof TheSeamDatatableFooterDirective, typeof DatatableFooterTplDirective, typeof DatatableColumnPreferencesComponent, typeof DatatableColumnPreferencesButtonComponent, typeof DatatableActionMenuItemDirective, typeof DatatableMenuBarRowComponent, typeof DatatableMenuBarColumnLeftComponent, typeof DatatableMenuBarColumnCenterComponent, typeof DatatableMenuBarColumnRightComponent, typeof DatatableMenuBarTextComponent, typeof
|
|
1373
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<TheSeamDatatableModule, [typeof DatatableComponent, typeof DatatableCellTplDirective, typeof DatatableColumnComponent, typeof DatatableActionMenuComponent, typeof DatatableActionMenuToggleDirective, typeof DatatableActionMenuItemComponent, typeof DatatableMenuBarComponent, typeof DatatableFilterDirective, typeof DatatableRowActionItemDirective, typeof DatatableExportButtonComponent, typeof TheSeamDatatableRowDetailDirective, typeof DatatableRowDetailTplDirective, typeof TheSeamDatatableFooterDirective, typeof DatatableFooterTplDirective, typeof DatatableColumnPreferencesComponent, typeof DatatableColumnPreferencesButtonComponent, typeof DatatableActionMenuItemDirective, typeof DatatableMenuBarRowComponent, typeof DatatableMenuBarColumnLeftComponent, typeof DatatableMenuBarColumnCenterComponent, typeof DatatableMenuBarColumnRightComponent, typeof DatatableMenuBarTextComponent, typeof DatatableColumnFilterTplDirective, typeof TheSeamDatatableColumnFilterDirective], [typeof i25.CommonModule, typeof i26.NgxDatatableModule, typeof i27.FontAwesomeModule, typeof i28.OverlayModule, typeof i29.A11yModule, typeof i30.TheSeamSharedModule, typeof i31.RouterModule, typeof i32.TheSeamMenuModule, typeof i33.TheSeamButtonsModule, typeof i34.TheSeamIconModule, typeof i35.ToastrModule, typeof i36.TheSeamLoadingModule, typeof i37.PortalModule, typeof i38.TheSeamConfirmDialogModule, typeof i39.TheSeamPopoverModule, typeof i40.TheSeamCheckboxComponent, typeof i41.TheSeamFormFieldModule, typeof i42.ReactiveFormsModule, typeof i43.TheSeamTableCellTypeModule, typeof _theseam_ui_common_data_filters.TheSeamDataFiltersModule, typeof i45.NgSelectModule, typeof i46.TheSeamToggleGroupModule, typeof DatatableColumnHeaderComponent, typeof DatatableColumnFilterMenuComponent, typeof DatatableColumnFilterSearchTextComponent, typeof DatatableColumnFilterSearchNumericComponent, typeof DatatableColumnFilterSearchDateComponent], [typeof DatatableComponent, typeof DatatableCellTplDirective, typeof DatatableColumnComponent, typeof DatatableActionMenuComponent, typeof DatatableActionMenuItemComponent, typeof DatatableMenuBarComponent, typeof DatatableFilterDirective, typeof DatatableRowActionItemDirective, typeof DatatableExportButtonComponent, typeof TheSeamDatatableRowDetailDirective, typeof DatatableRowDetailTplDirective, typeof TheSeamDatatableFooterDirective, typeof DatatableFooterTplDirective, typeof DatatableColumnPreferencesComponent, typeof DatatableColumnPreferencesButtonComponent, typeof DatatableActionMenuItemDirective, typeof DatatableMenuBarRowComponent, typeof DatatableMenuBarColumnLeftComponent, typeof DatatableMenuBarColumnCenterComponent, typeof DatatableMenuBarColumnRightComponent, typeof DatatableMenuBarTextComponent, typeof DatatableColumnFilterMenuComponent, typeof DatatableColumnFilterSearchTextComponent, typeof DatatableColumnFilterSearchNumericComponent, typeof DatatableColumnFilterSearchDateComponent, typeof DatatableColumnFilterTplDirective, typeof TheSeamDatatableColumnFilterDirective]>;
|
|
1335
1374
|
static ɵinj: i0.ɵɵInjectorDeclaration<TheSeamDatatableModule>;
|
|
1336
1375
|
}
|
|
1337
1376
|
|
|
1338
|
-
export { CURRENT_DATATABLE_PREFERENCES_VERSION, ColumnsAlteration, ColumnsDataFilter, ColumnsFiltersService, DatatableActionMenuComponent, DatatableActionMenuItemComponent, DatatableActionMenuItemDirective, DatatableActionMenuToggleDirective, DatatableCellTplDirective, DatatableColumnChangesService, DatatableColumnComponent, DatatableColumnFilterMenuComponent, DatatableColumnFilterSearchDateComponent, DatatableColumnFilterSearchNumericComponent, DatatableColumnFilterSearchTextComponent, DatatableColumnFilterTplDirective, DatatableColumnPreferencesButtonComponent, DatatableColumnPreferencesComponent, DatatableComponent, DatatableDataSource, DatatableExportButtonComponent, DatatableFilterDirective, DatatableFooterTplDirective, DatatableGqlDataSource, DatatableMenuBarColumnCenterComponent, DatatableMenuBarColumnLeftComponent, DatatableMenuBarColumnRightComponent, DatatableMenuBarComponent, DatatableMenuBarRowComponent, DatatableMenuBarTextComponent, DatatablePreferencesService, DatatableRowActionItemDirective, DatatableRowDetailTplDirective, EMPTY_DATATABLE_PREFERENCES, SearchDateColumnsDataFilter, SearchNumericColumnsDataFilter, SearchTextColumnsDataFilter, THESEAM_COLUMNS_DATA_FILTER, THESEAM_COLUMNS_DATA_FILTERS_DEFAULT, THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES, THESEAM_DATATABLE, THESEAM_DATATABLE_CONFIG, THESEAM_DATATABLE_PREFERENCES_ACCESSOR, THESEAM_MENUBAR_ITEM_DATA, TheSeamDatatableColumnFilterDirective, TheSeamDatatableFooterDirective, TheSeamDatatableModule, TheSeamDatatableRowDetailDirective, TheSeamDatatableScrollbarHelperService, _THESEAM_DATATABLE, _THESEAM_DATATABLE_ACCESSOR, _THESEAM_DATA_FILTER_CONTAINER, getFormattedDateForComparison, mapColumnsAlterationsStates, withStoredColumnInfo };
|
|
1377
|
+
export { CURRENT_DATATABLE_PREFERENCES_VERSION, ColumnsAlteration, ColumnsDataFilter, ColumnsFiltersService, DatatableActionMenuComponent, DatatableActionMenuItemComponent, DatatableActionMenuItemDirective, DatatableActionMenuToggleDirective, DatatableCellTplDirective, DatatableColumnChangesService, DatatableColumnComponent, DatatableColumnFilterMenuComponent, DatatableColumnFilterSearchDateComponent, DatatableColumnFilterSearchNumericComponent, DatatableColumnFilterSearchTextComponent, DatatableColumnFilterTplDirective, DatatableColumnPreferencesButtonComponent, DatatableColumnPreferencesComponent, DatatableComponent, DatatableDataSource, DatatableExportButtonComponent, DatatableFilterDirective, DatatableFooterTplDirective, DatatableGqlDataSource, DatatableMenuBarColumnCenterComponent, DatatableMenuBarColumnLeftComponent, DatatableMenuBarColumnRightComponent, DatatableMenuBarComponent, DatatableMenuBarRowComponent, DatatableMenuBarTextComponent, DatatablePreferencesService, DatatableRowActionItemDirective, DatatableRowDetailTplDirective, EMPTY_DATATABLE_PREFERENCES, SearchDateColumnsDataFilter, SearchNumericColumnsDataFilter, SearchTextColumnsDataFilter, THESEAM_COLUMNS_DATA_FILTER, THESEAM_COLUMNS_DATA_FILTERS_DEFAULT, THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_NAME, THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_SELECT_SEARCH_TYPES, THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES, THESEAM_DATATABLE, THESEAM_DATATABLE_CONFIG, THESEAM_DATATABLE_PREFERENCES_ACCESSOR, THESEAM_MENUBAR_ITEM_DATA, TheSeamDatatableColumnFilterDirective, TheSeamDatatableFooterDirective, TheSeamDatatableModule, TheSeamDatatableRowDetailDirective, TheSeamDatatableScrollbarHelperService, _THESEAM_DATATABLE, _THESEAM_DATATABLE_ACCESSOR, _THESEAM_DATA_FILTER_CONTAINER, getFormattedDateForComparison, isColumnBoundToProp, mapColumnsAlterationsStates, withStoredColumnInfo };
|
|
1339
1378
|
export type { ColumnsAlterationState, ColumnsDataFilterState, ColumnsDataFilterStateState, ICellContext, IDatatableExportButtonData, MenubarItemData, SortEvent, SortItem, TheSeamColumnsDataFilterDateSearchDateType, TheSeamColumnsDataFilterDateSearchForm, TheSeamColumnsDataFilterDateSearchFormState, TheSeamColumnsDataFilterDateSearchOptions, TheSeamColumnsDataFilterDateSearchType, TheSeamColumnsDataFilterNumericSearchForm, TheSeamColumnsDataFilterNumericSearchFormState, TheSeamColumnsDataFilterNumericSearchType, TheSeamColumnsDataFilterTextSearchForm, TheSeamColumnsDataFilterTextSearchFormState, TheSeamColumnsDataFilterTextSearchType, TheSeamDatatableAccessor, TheSeamDatatableColumn, TheSeamDatatableColumnFilterUpdateMethod, TheSeamDatatableColumnFilterable, TheSeamDatatableColumnFilterableConfig, TheSeamDatatableColumnHidable, TheSeamDatatableConfig, TheSeamDatatableDateColumnFilterableConfig, TheSeamDatatableMessages, TheSeamDatatablePreferences, TheSeamDatatablePreferencesAccessor, TheSeamDatatablePreferencesColumn, TheSeamDatatablePreferences_v1, TheSeamDatatablePreferences_v2, TheSeamDatatableRow, TheSeamPageInfo };
|
|
@@ -81,10 +81,10 @@ class AssetReaderHelperService {
|
|
|
81
81
|
}
|
|
82
82
|
return of(false);
|
|
83
83
|
}
|
|
84
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
85
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
84
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AssetReaderHelperService, deps: [{ token: EncryptedAssetReader, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
85
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AssetReaderHelperService, providedIn: 'root' });
|
|
86
86
|
}
|
|
87
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: AssetReaderHelperService, decorators: [{
|
|
88
88
|
type: Injectable,
|
|
89
89
|
args: [{
|
|
90
90
|
providedIn: 'root',
|
|
@@ -137,8 +137,8 @@ class EncryptedAssetLinkDirective {
|
|
|
137
137
|
_getTarget() {
|
|
138
138
|
return this._elementRef.nativeElement.target;
|
|
139
139
|
}
|
|
140
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
141
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
140
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EncryptedAssetLinkDirective, deps: [{ token: i0.ElementRef }, { token: AssetReaderHelperService }, { token: i2.TheSeamLoadingOverlayService }], target: i0.ɵɵFactoryTarget.Directive });
|
|
141
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.15", type: EncryptedAssetLinkDirective, isStandalone: false, selector: "[seamEncryptedAssetLink]", inputs: { seamEncryptedAssetLink: "seamEncryptedAssetLink", seamShowLoadingOverlay: "seamShowLoadingOverlay", seamDetectMimeFromContent: "seamDetectMimeFromContent", seamDownloadAsset: "seamDownloadAsset" }, host: { listeners: { "click": "_onClick($event)" }, properties: { "attr.href": "this._attrHref" } }, ngImport: i0 });
|
|
142
142
|
}
|
|
143
143
|
__decorate([
|
|
144
144
|
InputBoolean()
|
|
@@ -149,7 +149,7 @@ __decorate([
|
|
|
149
149
|
__decorate([
|
|
150
150
|
InputBoolean()
|
|
151
151
|
], EncryptedAssetLinkDirective.prototype, "seamDownloadAsset", void 0);
|
|
152
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: EncryptedAssetLinkDirective, decorators: [{
|
|
153
153
|
type: Directive,
|
|
154
154
|
args: [{
|
|
155
155
|
selector: '[seamEncryptedAssetLink]',
|
|
@@ -172,11 +172,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
|
|
|
172
172
|
}] } });
|
|
173
173
|
|
|
174
174
|
class TheSeamAssetReaderModule {
|
|
175
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
176
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
177
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
175
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamAssetReaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
176
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.15", ngImport: i0, type: TheSeamAssetReaderModule, declarations: [EncryptedAssetLinkDirective], exports: [EncryptedAssetLinkDirective] });
|
|
177
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamAssetReaderModule });
|
|
178
178
|
}
|
|
179
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamAssetReaderModule, decorators: [{
|
|
180
180
|
type: NgModule,
|
|
181
181
|
args: [{
|
|
182
182
|
declarations: [EncryptedAssetLinkDirective],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-asset-reader.mjs","sources":["../../../projects/ui-common/asset-reader/encrypted-asset-reader.ts","../../../projects/ui-common/asset-reader/asset-reader-helper.service.ts","../../../projects/ui-common/asset-reader/encrypted-asset-link.directive.ts","../../../projects/ui-common/asset-reader/asset-reader.module.ts","../../../projects/ui-common/asset-reader/theseam-ui-common-asset-reader.ts"],"sourcesContent":["import { Observable } from 'rxjs'\n\n/**\n *\n * THIS SHOULD BE IMPLEMENTED AND PROVIDED BY APPLICATION USING 'ui-common'.\n *\n * Example:\n * ```\n * @NgModule({\n * imports: [ ... ],\n * declarations: [ ... ]\n * providers: [\n * ...,\n * { provide: IEncryptedAssetReaderService useClass: YourAssetService }\n * ]\n * }\n * ```\n *\n */\n\nexport abstract class EncryptedAssetReader {\n abstract getAssetBlobFromUrl(\n url: string,\n detectMimeFromContent: boolean,\n ): Observable<Blob | { blob: Blob; filename?: string }>\n}\n","import { Injectable, isDevMode, Optional } from '@angular/core'\nimport { from, Observable, of, throwError } from 'rxjs'\nimport { catchError, map, mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n openBlob,\n readFileAsync,\n} from '@theseam/ui-common/utils'\n\nimport { EncryptedAssetReader } from './encrypted-asset-reader'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AssetReaderHelperService {\n constructor(@Optional() private _assetReader?: EncryptedAssetReader) {\n if (isDevMode() && !this._assetReader) {\n // eslint-disable-next-line no-console\n console.warn(\n `[EncryptedAssetLinkDirective] Unable to get encrypted files unless an EncryptedAssetReader is provided.`,\n )\n }\n }\n\n public openLink(\n url: string,\n detectMimeFromContent: boolean = true,\n download: boolean = true,\n target?: string,\n ): Observable<boolean> {\n if (!(url === undefined || url === null)) {\n if (!this._assetReader) {\n // Fallback\n const win = window.open(url, target)\n // TODO: Consider if always setting opener to null is to restrictive\n // if (win && target && target.toLowerCase() === '_blank') {\n // win.opener = null\n // }\n return of(false)\n }\n\n const data$ = this._assetReader\n .getAssetBlobFromUrl(url, detectMimeFromContent)\n .pipe(\n switchMap((v) => {\n const filename: string | undefined =\n v instanceof Blob ? undefined : v.filename\n const blob: Blob = v instanceof Blob ? v : v.blob\n return from(readFileAsync(blob)).pipe(\n switchMap((_buf) =>\n _buf\n ? from(fileDataFromBuffer(_buf))\n : throwError('Unable to read file.'),\n ),\n map((data) => ({ ...data, blob, filename })),\n )\n }),\n )\n\n const open$ = data$.pipe(\n tap((data) => {\n if (!data || !data.blob) {\n throw new Error('File unsuccessfully read.')\n }\n const filename = data.filename\n ? data.filename\n : `Untitled${data.ext ? `.${data.ext}` : ''}`\n if (download) {\n FileSaver.saveAs(data.blob, filename)\n } else {\n openBlob(data.blob, target, filename)\n }\n }),\n catchError((err) => {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.error('err', err)\n }\n return of(false)\n }),\n mapTo(true),\n )\n\n return open$\n }\n\n return of(false)\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n} from '@angular/core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { TheSeamLoadingOverlayService } from '@theseam/ui-common/loading'\n\nimport { AssetReaderHelperService } from './asset-reader-helper.service'\n\n// TODO: Add a dev warning or handle both `seamEncryptedAssetLink` and `attr.href` being set on a single element.\n\n// TODO: This can easily be used for non-encrypted assets, because the provided\n// reader can do whatever it wants. So, consider renaming to 'seamAssetLink'.\n\n@Directive({\n selector: '[seamEncryptedAssetLink]',\n standalone: false,\n})\nexport class EncryptedAssetLinkDirective {\n static ngAcceptInputType_seamShowLoadingOverlay: BooleanInput\n static ngAcceptInputType_seamDetectMimeFromContent: BooleanInput\n static ngAcceptInputType_seamDownloadAsset: BooleanInput\n\n @Input() seamEncryptedAssetLink: string | undefined | null\n @Input() @InputBoolean() seamShowLoadingOverlay = true\n @Input() @InputBoolean() seamDetectMimeFromContent = true\n @Input() @InputBoolean() seamDownloadAsset = false\n\n // TODO: Find out why I need this for buttons.\n @HostBinding('attr.href') get _attrHref() {\n return this.seamEncryptedAssetLink\n }\n\n @HostListener('click', ['$event'])\n _onClick(event: MouseEvent) {\n if (!this.seamEncryptedAssetLink) {\n return\n }\n\n let open$ = this._assetReaderHelper.openLink(\n this.seamEncryptedAssetLink,\n this.seamDetectMimeFromContent,\n this.seamDownloadAsset,\n this._isAnchor() && this._hasTarget() ? this._getTarget() : undefined,\n )\n if (this.seamShowLoadingOverlay) {\n open$ = this._loading.while(open$)\n }\n open$.subscribe()\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _assetReaderHelper: AssetReaderHelperService,\n private _loading: TheSeamLoadingOverlayService,\n ) {}\n\n /** Determines if the component host is an anchor. */\n protected _isAnchor(): boolean {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'a'\n }\n\n protected _hasTarget(): boolean {\n const elem = this._elementRef.nativeElement as HTMLAnchorElement\n return !(elem.target === undefined || elem.target === null)\n }\n\n protected _getTarget(): string {\n return (this._elementRef.nativeElement as HTMLAnchorElement).target\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { EncryptedAssetLinkDirective } from './encrypted-asset-link.directive'\n\n@NgModule({\n declarations: [EncryptedAssetLinkDirective],\n exports: [EncryptedAssetLinkDirective],\n})\nexport class TheSeamAssetReaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EncryptedAssetReader","i1.AssetReaderHelperService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-asset-reader.mjs","sources":["../../../projects/ui-common/asset-reader/encrypted-asset-reader.ts","../../../projects/ui-common/asset-reader/asset-reader-helper.service.ts","../../../projects/ui-common/asset-reader/encrypted-asset-link.directive.ts","../../../projects/ui-common/asset-reader/asset-reader.module.ts","../../../projects/ui-common/asset-reader/theseam-ui-common-asset-reader.ts"],"sourcesContent":["import { Observable } from 'rxjs'\n\n/**\n *\n * THIS SHOULD BE IMPLEMENTED AND PROVIDED BY APPLICATION USING 'ui-common'.\n *\n * Example:\n * ```\n * @NgModule({\n * imports: [ ... ],\n * declarations: [ ... ]\n * providers: [\n * ...,\n * { provide: IEncryptedAssetReaderService useClass: YourAssetService }\n * ]\n * }\n * ```\n *\n */\n\nexport abstract class EncryptedAssetReader {\n abstract getAssetBlobFromUrl(\n url: string,\n detectMimeFromContent: boolean,\n ): Observable<Blob | { blob: Blob; filename?: string }>\n}\n","import { Injectable, isDevMode, Optional } from '@angular/core'\nimport { from, Observable, of, throwError } from 'rxjs'\nimport { catchError, map, mapTo, switchMap, tap } from 'rxjs/operators'\n\nimport FileSaver from 'file-saver'\n\nimport {\n fileDataFromBuffer,\n openBlob,\n readFileAsync,\n} from '@theseam/ui-common/utils'\n\nimport { EncryptedAssetReader } from './encrypted-asset-reader'\n\n@Injectable({\n providedIn: 'root',\n})\nexport class AssetReaderHelperService {\n constructor(@Optional() private _assetReader?: EncryptedAssetReader) {\n if (isDevMode() && !this._assetReader) {\n // eslint-disable-next-line no-console\n console.warn(\n `[EncryptedAssetLinkDirective] Unable to get encrypted files unless an EncryptedAssetReader is provided.`,\n )\n }\n }\n\n public openLink(\n url: string,\n detectMimeFromContent: boolean = true,\n download: boolean = true,\n target?: string,\n ): Observable<boolean> {\n if (!(url === undefined || url === null)) {\n if (!this._assetReader) {\n // Fallback\n const win = window.open(url, target)\n // TODO: Consider if always setting opener to null is to restrictive\n // if (win && target && target.toLowerCase() === '_blank') {\n // win.opener = null\n // }\n return of(false)\n }\n\n const data$ = this._assetReader\n .getAssetBlobFromUrl(url, detectMimeFromContent)\n .pipe(\n switchMap((v) => {\n const filename: string | undefined =\n v instanceof Blob ? undefined : v.filename\n const blob: Blob = v instanceof Blob ? v : v.blob\n return from(readFileAsync(blob)).pipe(\n switchMap((_buf) =>\n _buf\n ? from(fileDataFromBuffer(_buf))\n : throwError('Unable to read file.'),\n ),\n map((data) => ({ ...data, blob, filename })),\n )\n }),\n )\n\n const open$ = data$.pipe(\n tap((data) => {\n if (!data || !data.blob) {\n throw new Error('File unsuccessfully read.')\n }\n const filename = data.filename\n ? data.filename\n : `Untitled${data.ext ? `.${data.ext}` : ''}`\n if (download) {\n FileSaver.saveAs(data.blob, filename)\n } else {\n openBlob(data.blob, target, filename)\n }\n }),\n catchError((err) => {\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.error('err', err)\n }\n return of(false)\n }),\n mapTo(true),\n )\n\n return open$\n }\n\n return of(false)\n }\n}\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport {\n Directive,\n ElementRef,\n HostBinding,\n HostListener,\n Input,\n} from '@angular/core'\n\nimport { InputBoolean } from '@theseam/ui-common/core'\nimport { TheSeamLoadingOverlayService } from '@theseam/ui-common/loading'\n\nimport { AssetReaderHelperService } from './asset-reader-helper.service'\n\n// TODO: Add a dev warning or handle both `seamEncryptedAssetLink` and `attr.href` being set on a single element.\n\n// TODO: This can easily be used for non-encrypted assets, because the provided\n// reader can do whatever it wants. So, consider renaming to 'seamAssetLink'.\n\n@Directive({\n selector: '[seamEncryptedAssetLink]',\n standalone: false,\n})\nexport class EncryptedAssetLinkDirective {\n static ngAcceptInputType_seamShowLoadingOverlay: BooleanInput\n static ngAcceptInputType_seamDetectMimeFromContent: BooleanInput\n static ngAcceptInputType_seamDownloadAsset: BooleanInput\n\n @Input() seamEncryptedAssetLink: string | undefined | null\n @Input() @InputBoolean() seamShowLoadingOverlay = true\n @Input() @InputBoolean() seamDetectMimeFromContent = true\n @Input() @InputBoolean() seamDownloadAsset = false\n\n // TODO: Find out why I need this for buttons.\n @HostBinding('attr.href') get _attrHref() {\n return this.seamEncryptedAssetLink\n }\n\n @HostListener('click', ['$event'])\n _onClick(event: MouseEvent) {\n if (!this.seamEncryptedAssetLink) {\n return\n }\n\n let open$ = this._assetReaderHelper.openLink(\n this.seamEncryptedAssetLink,\n this.seamDetectMimeFromContent,\n this.seamDownloadAsset,\n this._isAnchor() && this._hasTarget() ? this._getTarget() : undefined,\n )\n if (this.seamShowLoadingOverlay) {\n open$ = this._loading.while(open$)\n }\n open$.subscribe()\n }\n\n constructor(\n private _elementRef: ElementRef,\n private _assetReaderHelper: AssetReaderHelperService,\n private _loading: TheSeamLoadingOverlayService,\n ) {}\n\n /** Determines if the component host is an anchor. */\n protected _isAnchor(): boolean {\n return this._elementRef.nativeElement.nodeName.toLowerCase() === 'a'\n }\n\n protected _hasTarget(): boolean {\n const elem = this._elementRef.nativeElement as HTMLAnchorElement\n return !(elem.target === undefined || elem.target === null)\n }\n\n protected _getTarget(): string {\n return (this._elementRef.nativeElement as HTMLAnchorElement).target\n }\n}\n","import { NgModule } from '@angular/core'\n\nimport { EncryptedAssetLinkDirective } from './encrypted-asset-link.directive'\n\n@NgModule({\n declarations: [EncryptedAssetLinkDirective],\n exports: [EncryptedAssetLinkDirective],\n})\nexport class TheSeamAssetReaderModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.EncryptedAssetReader","i1.AssetReaderHelperService"],"mappings":"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"}
|
|
@@ -136,10 +136,10 @@ class TheSeamBreadcrumbsService {
|
|
|
136
136
|
}
|
|
137
137
|
return breadcrumbs;
|
|
138
138
|
}
|
|
139
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
140
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
139
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamBreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
140
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamBreadcrumbsService, providedIn: 'root' });
|
|
141
141
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamBreadcrumbsService, decorators: [{
|
|
143
143
|
type: Injectable,
|
|
144
144
|
args: [{
|
|
145
145
|
providedIn: 'root',
|
|
@@ -149,10 +149,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImpor
|
|
|
149
149
|
class TheSeamBreadcrumbsComponent {
|
|
150
150
|
_breadcrumbs = inject(TheSeamBreadcrumbsService);
|
|
151
151
|
crumbs$ = this._breadcrumbs.crumbs$;
|
|
152
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
153
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.
|
|
152
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
153
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.15", type: TheSeamBreadcrumbsComponent, isStandalone: true, selector: "seam-breadcrumbs", ngImport: i0, template: "<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb mb-0\">\n <li\n *ngFor=\"let crumb of crumbs$ | async; last as isLast\"\n class=\"breadcrumb-item\"\n [ngClass]=\"{ active: isLast }\"\n [attr.aria-current]=\"isLast ? 'page' : undefined\"\n >\n <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{\n crumb.value\n }}</a>\n <ng-template #notLink>{{ crumb.value }}</ng-template>\n </li>\n </ol>\n</nav>\n", styles: ["seam-breadcrumbs li{color:#fff}seam-breadcrumbs li a{color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
154
154
|
}
|
|
155
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.15", ngImport: i0, type: TheSeamBreadcrumbsComponent, decorators: [{
|
|
156
156
|
type: Component,
|
|
157
157
|
args: [{ selector: 'seam-breadcrumbs', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [RouterModule, NgFor, AsyncPipe, NgClass, NgIf], template: "<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb mb-0\">\n <li\n *ngFor=\"let crumb of crumbs$ | async; last as isLast\"\n class=\"breadcrumb-item\"\n [ngClass]=\"{ active: isLast }\"\n [attr.aria-current]=\"isLast ? 'page' : undefined\"\n >\n <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{\n crumb.value\n }}</a>\n <ng-template #notLink>{{ crumb.value }}</ng-template>\n </li>\n </ol>\n</nav>\n", styles: ["seam-breadcrumbs li{color:#fff}seam-breadcrumbs li a{color:#fff}\n"] }]
|
|
158
158
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theseam-ui-common-breadcrumbs.mjs","sources":["../../../projects/ui-common/breadcrumbs/breadcrumbs.service.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.html","../../../projects/ui-common/breadcrumbs/theseam-ui-common-breadcrumbs.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { filter, map, startWith, switchMap } from 'rxjs/operators'\n\nimport {\n hasProperty,\n leafChildRoute,\n notNullOrUndefined,\n routeSnapshotPathFull,\n willHaveDataProp,\n} from '@theseam/ui-common/utils'\n\nimport { TheSeamBreadcrumb } from './breadcrumb'\n\ninterface BreadcrumbDataExtras {\n dataProps?: string[]\n}\n\ninterface ExtrasPropRef {\n prop: string\n value: Observable<string>\n}\n\ninterface BreadcrumbData {\n breadcrumb?: string\n breadcrumbExtras?: BreadcrumbDataExtras\n\n activatedRoute: ActivatedRoute\n extrasPropRefs: ExtrasPropRef[]\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TheSeamBreadcrumbsService {\n private readonly _router = inject(Router)\n private readonly _activatedRoute = inject(ActivatedRoute)\n\n private readonly dataProps: (keyof Omit<BreadcrumbData, 'activatedRoute'>)[] =\n ['breadcrumb', 'breadcrumbExtras']\n\n public readonly crumbs$ = this._crumbsFromRoute()\n\n private _crumbsFromRoute(): Observable<TheSeamBreadcrumb[]> {\n return this._router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map(() => this._activatedRoute),\n startWith(this._activatedRoute),\n switchMap((activatedRoute) =>\n this._crumbsFromActivatedRoute(activatedRoute),\n ),\n )\n }\n\n private _crumbsFromActivatedRoute(\n activatedRoute: ActivatedRoute,\n ): Observable<TheSeamBreadcrumb[]> {\n return this._breadcrumbDatasFromRoot(activatedRoute).pipe(\n map((bcDatas) => this._breadcrumbsFromData(bcDatas)),\n )\n }\n\n private _breadcrumbDatasFromRoot(\n activatedRoute: ActivatedRoute,\n ): Observable<BreadcrumbData[]> {\n const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map((r) =>\n this._breadcrumbData(r),\n )\n return combineLatest(bcDataObs).pipe(\n map((v) => v.filter(notNullOrUndefined)),\n switchMap((v) => this._applyBreadcrumbExtras(v)),\n )\n }\n\n private _breadcrumbData(\n activatedRoute: ActivatedRoute,\n ): Observable<BreadcrumbData | null> {\n return activatedRoute.data.pipe(\n map((data) => {\n const bcData: BreadcrumbData = {\n activatedRoute,\n extrasPropRefs: [],\n }\n\n let found = false\n for (const prop of this.dataProps) {\n if (\n prop === 'breadcrumb' &&\n !willHaveDataProp(activatedRoute, prop)\n ) {\n // Need to skip if the 'breadcrumb' data prop is not in the config,\n // because we will get duplicates if the data 'breadcrumb' prop is\n // inheritted from a parent route.\n continue\n }\n\n if (hasProperty(data, prop)) {\n bcData[prop] = data[prop]\n found = true\n }\n }\n\n if (!found) {\n return null\n }\n\n bcData.extrasPropRefs = this._getBreadcrumbExtrasDataProps(bcData)\n\n return bcData\n }),\n )\n }\n\n private _applyBreadcrumbExtras(\n datas: BreadcrumbData[],\n ): Observable<BreadcrumbData[]> {\n const newDatas: BreadcrumbData[] = []\n\n let pending: BreadcrumbData[] = []\n for (const data of datas) {\n if (!hasProperty(data, 'breadcrumb')) {\n pending.push(data)\n continue\n }\n\n newDatas.push(data)\n\n pending = []\n }\n\n if (newDatas.length === 0) {\n return of([])\n }\n\n if (pending.length > 0) {\n // add extras\n newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs(\n [\n ...newDatas[newDatas.length - 1].extrasPropRefs,\n ...pending\n .map((p) => p.extrasPropRefs)\n .reduce((prev, curr) => [...prev, ...curr], []),\n ],\n )\n }\n\n return combineLatest(\n newDatas.map((data) => {\n if (data.extrasPropRefs.length === 0) {\n return of(data)\n }\n\n return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(\n map((extrasStr) => {\n data.breadcrumb = `${data.breadcrumb} ${extrasStr}`\n return data\n }),\n )\n }),\n )\n }\n\n private _observeExtrasPropRefs(\n propRefs: ExtrasPropRef[],\n ): Observable<string> {\n return combineLatest(propRefs.map((pf) => pf.value)).pipe(\n map((values) => values.map((v) => `(${v})`).join(' ')),\n )\n }\n\n private _getBreadcrumbExtrasDataProps(data: BreadcrumbData): ExtrasPropRef[] {\n if (!hasProperty(data, 'breadcrumbExtras')) {\n return []\n }\n\n if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {\n return []\n }\n\n const propRefs = data.breadcrumbExtras.dataProps.map((prop) => {\n return { prop, value: this._getDataProp(data.activatedRoute, prop) }\n })\n\n return this._filterExtrasPropRefs(propRefs)\n }\n\n private _filterExtrasPropRefs(propRefs: ExtrasPropRef[]): ExtrasPropRef[] {\n const seen: { [key: string]: boolean } = {}\n return propRefs.filter((propRef) => {\n if (seen[propRef.prop]) {\n return false\n }\n seen[propRef.prop] = true\n return true\n })\n }\n\n private _getDataProp(\n activatedRoute: ActivatedRoute,\n prop: string,\n ): Observable<string> {\n if (activatedRoute.routeConfig !== null) {\n if (willHaveDataProp(activatedRoute, prop)) {\n return activatedRoute.data.pipe(map((d) => d[prop]))\n }\n }\n\n let r = activatedRoute.parent\n while (r !== null) {\n if (willHaveDataProp(r, prop)) {\n return r.data.pipe(map((d) => d[prop]))\n }\n\n r = r.parent\n }\n\n throw Error(`DataProp '${prop}' not found.`)\n }\n\n private _breadcrumbsFromData(datas: BreadcrumbData[]): TheSeamBreadcrumb[] {\n const breadcrumbs: TheSeamBreadcrumb[] = []\n\n for (const data of datas) {\n if (hasProperty(data, 'breadcrumb')) {\n const breadcrumb: TheSeamBreadcrumb = {\n value: data.breadcrumb,\n path: routeSnapshotPathFull(data.activatedRoute.snapshot),\n route: data.activatedRoute,\n }\n breadcrumbs.push(breadcrumb)\n }\n }\n\n return breadcrumbs\n }\n}\n","import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n ViewEncapsulation,\n} from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { TheSeamBreadcrumbsService } from '../breadcrumbs.service'\n\n@Component({\n selector: 'seam-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterModule, NgFor, AsyncPipe, NgClass, NgIf],\n})\nexport class TheSeamBreadcrumbsComponent {\n private readonly _breadcrumbs = inject(TheSeamBreadcrumbsService)\n public readonly crumbs$ = this._breadcrumbs.crumbs$\n}\n","<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb mb-0\">\n <li\n *ngFor=\"let crumb of crumbs$ | async; last as isLast\"\n class=\"breadcrumb-item\"\n [ngClass]=\"{ active: isLast }\"\n [attr.aria-current]=\"isLast ? 'page' : undefined\"\n >\n <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{\n crumb.value\n }}</a>\n <ng-template #notLink>{{ crumb.value }}</ng-template>\n </li>\n </ol>\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"theseam-ui-common-breadcrumbs.mjs","sources":["../../../projects/ui-common/breadcrumbs/breadcrumbs.service.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.ts","../../../projects/ui-common/breadcrumbs/breadcrumbs/breadcrumbs.component.html","../../../projects/ui-common/breadcrumbs/theseam-ui-common-breadcrumbs.ts"],"sourcesContent":["import { inject, Injectable } from '@angular/core'\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router'\nimport { combineLatest, Observable, of } from 'rxjs'\nimport { filter, map, startWith, switchMap } from 'rxjs/operators'\n\nimport {\n hasProperty,\n leafChildRoute,\n notNullOrUndefined,\n routeSnapshotPathFull,\n willHaveDataProp,\n} from '@theseam/ui-common/utils'\n\nimport { TheSeamBreadcrumb } from './breadcrumb'\n\ninterface BreadcrumbDataExtras {\n dataProps?: string[]\n}\n\ninterface ExtrasPropRef {\n prop: string\n value: Observable<string>\n}\n\ninterface BreadcrumbData {\n breadcrumb?: string\n breadcrumbExtras?: BreadcrumbDataExtras\n\n activatedRoute: ActivatedRoute\n extrasPropRefs: ExtrasPropRef[]\n}\n\n@Injectable({\n providedIn: 'root',\n})\nexport class TheSeamBreadcrumbsService {\n private readonly _router = inject(Router)\n private readonly _activatedRoute = inject(ActivatedRoute)\n\n private readonly dataProps: (keyof Omit<BreadcrumbData, 'activatedRoute'>)[] =\n ['breadcrumb', 'breadcrumbExtras']\n\n public readonly crumbs$ = this._crumbsFromRoute()\n\n private _crumbsFromRoute(): Observable<TheSeamBreadcrumb[]> {\n return this._router.events.pipe(\n filter((event): event is NavigationEnd => event instanceof NavigationEnd),\n map(() => this._activatedRoute),\n startWith(this._activatedRoute),\n switchMap((activatedRoute) =>\n this._crumbsFromActivatedRoute(activatedRoute),\n ),\n )\n }\n\n private _crumbsFromActivatedRoute(\n activatedRoute: ActivatedRoute,\n ): Observable<TheSeamBreadcrumb[]> {\n return this._breadcrumbDatasFromRoot(activatedRoute).pipe(\n map((bcDatas) => this._breadcrumbsFromData(bcDatas)),\n )\n }\n\n private _breadcrumbDatasFromRoot(\n activatedRoute: ActivatedRoute,\n ): Observable<BreadcrumbData[]> {\n const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map((r) =>\n this._breadcrumbData(r),\n )\n return combineLatest(bcDataObs).pipe(\n map((v) => v.filter(notNullOrUndefined)),\n switchMap((v) => this._applyBreadcrumbExtras(v)),\n )\n }\n\n private _breadcrumbData(\n activatedRoute: ActivatedRoute,\n ): Observable<BreadcrumbData | null> {\n return activatedRoute.data.pipe(\n map((data) => {\n const bcData: BreadcrumbData = {\n activatedRoute,\n extrasPropRefs: [],\n }\n\n let found = false\n for (const prop of this.dataProps) {\n if (\n prop === 'breadcrumb' &&\n !willHaveDataProp(activatedRoute, prop)\n ) {\n // Need to skip if the 'breadcrumb' data prop is not in the config,\n // because we will get duplicates if the data 'breadcrumb' prop is\n // inheritted from a parent route.\n continue\n }\n\n if (hasProperty(data, prop)) {\n bcData[prop] = data[prop]\n found = true\n }\n }\n\n if (!found) {\n return null\n }\n\n bcData.extrasPropRefs = this._getBreadcrumbExtrasDataProps(bcData)\n\n return bcData\n }),\n )\n }\n\n private _applyBreadcrumbExtras(\n datas: BreadcrumbData[],\n ): Observable<BreadcrumbData[]> {\n const newDatas: BreadcrumbData[] = []\n\n let pending: BreadcrumbData[] = []\n for (const data of datas) {\n if (!hasProperty(data, 'breadcrumb')) {\n pending.push(data)\n continue\n }\n\n newDatas.push(data)\n\n pending = []\n }\n\n if (newDatas.length === 0) {\n return of([])\n }\n\n if (pending.length > 0) {\n // add extras\n newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs(\n [\n ...newDatas[newDatas.length - 1].extrasPropRefs,\n ...pending\n .map((p) => p.extrasPropRefs)\n .reduce((prev, curr) => [...prev, ...curr], []),\n ],\n )\n }\n\n return combineLatest(\n newDatas.map((data) => {\n if (data.extrasPropRefs.length === 0) {\n return of(data)\n }\n\n return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(\n map((extrasStr) => {\n data.breadcrumb = `${data.breadcrumb} ${extrasStr}`\n return data\n }),\n )\n }),\n )\n }\n\n private _observeExtrasPropRefs(\n propRefs: ExtrasPropRef[],\n ): Observable<string> {\n return combineLatest(propRefs.map((pf) => pf.value)).pipe(\n map((values) => values.map((v) => `(${v})`).join(' ')),\n )\n }\n\n private _getBreadcrumbExtrasDataProps(data: BreadcrumbData): ExtrasPropRef[] {\n if (!hasProperty(data, 'breadcrumbExtras')) {\n return []\n }\n\n if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {\n return []\n }\n\n const propRefs = data.breadcrumbExtras.dataProps.map((prop) => {\n return { prop, value: this._getDataProp(data.activatedRoute, prop) }\n })\n\n return this._filterExtrasPropRefs(propRefs)\n }\n\n private _filterExtrasPropRefs(propRefs: ExtrasPropRef[]): ExtrasPropRef[] {\n const seen: { [key: string]: boolean } = {}\n return propRefs.filter((propRef) => {\n if (seen[propRef.prop]) {\n return false\n }\n seen[propRef.prop] = true\n return true\n })\n }\n\n private _getDataProp(\n activatedRoute: ActivatedRoute,\n prop: string,\n ): Observable<string> {\n if (activatedRoute.routeConfig !== null) {\n if (willHaveDataProp(activatedRoute, prop)) {\n return activatedRoute.data.pipe(map((d) => d[prop]))\n }\n }\n\n let r = activatedRoute.parent\n while (r !== null) {\n if (willHaveDataProp(r, prop)) {\n return r.data.pipe(map((d) => d[prop]))\n }\n\n r = r.parent\n }\n\n throw Error(`DataProp '${prop}' not found.`)\n }\n\n private _breadcrumbsFromData(datas: BreadcrumbData[]): TheSeamBreadcrumb[] {\n const breadcrumbs: TheSeamBreadcrumb[] = []\n\n for (const data of datas) {\n if (hasProperty(data, 'breadcrumb')) {\n const breadcrumb: TheSeamBreadcrumb = {\n value: data.breadcrumb,\n path: routeSnapshotPathFull(data.activatedRoute.snapshot),\n route: data.activatedRoute,\n }\n breadcrumbs.push(breadcrumb)\n }\n }\n\n return breadcrumbs\n }\n}\n","import { AsyncPipe, NgClass, NgFor, NgIf } from '@angular/common'\nimport {\n ChangeDetectionStrategy,\n Component,\n inject,\n ViewEncapsulation,\n} from '@angular/core'\nimport { RouterModule } from '@angular/router'\n\nimport { TheSeamBreadcrumbsService } from '../breadcrumbs.service'\n\n@Component({\n selector: 'seam-breadcrumbs',\n templateUrl: './breadcrumbs.component.html',\n styleUrls: ['./breadcrumbs.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [RouterModule, NgFor, AsyncPipe, NgClass, NgIf],\n})\nexport class TheSeamBreadcrumbsComponent {\n private readonly _breadcrumbs = inject(TheSeamBreadcrumbsService)\n public readonly crumbs$ = this._breadcrumbs.crumbs$\n}\n","<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb mb-0\">\n <li\n *ngFor=\"let crumb of crumbs$ | async; last as isLast\"\n class=\"breadcrumb-item\"\n [ngClass]=\"{ active: isLast }\"\n [attr.aria-current]=\"isLast ? 'page' : undefined\"\n >\n <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{\n crumb.value\n }}</a>\n <ng-template #notLink>{{ crumb.value }}</ng-template>\n </li>\n </ol>\n</nav>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|