@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.
Files changed (99) hide show
  1. package/buttons/index.d.ts +4 -1
  2. package/datatable/index.d.ts +92 -53
  3. package/fesm2022/theseam-ui-common-asset-reader.mjs +10 -10
  4. package/fesm2022/theseam-ui-common-asset-reader.mjs.map +1 -1
  5. package/fesm2022/theseam-ui-common-breadcrumbs.mjs +6 -6
  6. package/fesm2022/theseam-ui-common-breadcrumbs.mjs.map +1 -1
  7. package/fesm2022/theseam-ui-common-buttons.mjs +35 -28
  8. package/fesm2022/theseam-ui-common-buttons.mjs.map +1 -1
  9. package/fesm2022/theseam-ui-common-card.mjs +16 -16
  10. package/fesm2022/theseam-ui-common-card.mjs.map +1 -1
  11. package/fesm2022/theseam-ui-common-carousel.mjs +10 -10
  12. package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
  13. package/fesm2022/theseam-ui-common-checkbox.mjs +7 -7
  14. package/fesm2022/theseam-ui-common-checkbox.mjs.map +1 -1
  15. package/fesm2022/theseam-ui-common-confirm-dialog.mjs +13 -13
  16. package/fesm2022/theseam-ui-common-confirm-dialog.mjs.map +1 -1
  17. package/fesm2022/theseam-ui-common-data-exporter.mjs +31 -14
  18. package/fesm2022/theseam-ui-common-data-exporter.mjs.map +1 -1
  19. package/fesm2022/theseam-ui-common-data-filters.mjs +13 -13
  20. package/fesm2022/theseam-ui-common-data-filters.mjs.map +1 -1
  21. package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +12 -12
  22. package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
  23. package/fesm2022/theseam-ui-common-datatable-dynamic.mjs +25 -25
  24. package/fesm2022/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
  25. package/fesm2022/theseam-ui-common-datatable.mjs +279 -185
  26. package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
  27. package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs +7 -7
  28. package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
  29. package/fesm2022/theseam-ui-common-dynamic.mjs +21 -21
  30. package/fesm2022/theseam-ui-common-dynamic.mjs.map +1 -1
  31. package/fesm2022/theseam-ui-common-footer-bar.mjs +7 -7
  32. package/fesm2022/theseam-ui-common-footer-bar.mjs.map +1 -1
  33. package/fesm2022/theseam-ui-common-form-field-error.mjs +16 -16
  34. package/fesm2022/theseam-ui-common-form-field-error.mjs.map +1 -1
  35. package/fesm2022/theseam-ui-common-form-field.mjs +22 -22
  36. package/fesm2022/theseam-ui-common-form-field.mjs.map +1 -1
  37. package/fesm2022/theseam-ui-common-framework.mjs +157 -157
  38. package/fesm2022/theseam-ui-common-framework.mjs.map +1 -1
  39. package/fesm2022/theseam-ui-common-google-maps.mjs +40 -40
  40. package/fesm2022/theseam-ui-common-google-maps.mjs.map +1 -1
  41. package/fesm2022/theseam-ui-common-graphql.mjs +3 -3
  42. package/fesm2022/theseam-ui-common-graphql.mjs.map +1 -1
  43. package/fesm2022/theseam-ui-common-icon.mjs +13 -13
  44. package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
  45. package/fesm2022/theseam-ui-common-layout.mjs +7 -7
  46. package/fesm2022/theseam-ui-common-layout.mjs.map +1 -1
  47. package/fesm2022/theseam-ui-common-loading.mjs +10 -10
  48. package/fesm2022/theseam-ui-common-loading.mjs.map +1 -1
  49. package/fesm2022/theseam-ui-common-menu.mjs +25 -25
  50. package/fesm2022/theseam-ui-common-menu.mjs.map +1 -1
  51. package/fesm2022/theseam-ui-common-modal.mjs +43 -43
  52. package/fesm2022/theseam-ui-common-modal.mjs.map +1 -1
  53. package/fesm2022/theseam-ui-common-navigation-reload.mjs +3 -3
  54. package/fesm2022/theseam-ui-common-navigation-reload.mjs.map +1 -1
  55. package/fesm2022/theseam-ui-common-popover.mjs +10 -10
  56. package/fesm2022/theseam-ui-common-popover.mjs.map +1 -1
  57. package/fesm2022/theseam-ui-common-progress.mjs +7 -7
  58. package/fesm2022/theseam-ui-common-progress.mjs.map +1 -1
  59. package/fesm2022/theseam-ui-common-rich-text.mjs +7 -7
  60. package/fesm2022/theseam-ui-common-rich-text.mjs.map +1 -1
  61. package/fesm2022/theseam-ui-common-scrollbar.mjs +6 -6
  62. package/fesm2022/theseam-ui-common-scrollbar.mjs.map +1 -1
  63. package/fesm2022/theseam-ui-common-services.mjs +12 -12
  64. package/fesm2022/theseam-ui-common-services.mjs.map +1 -1
  65. package/fesm2022/theseam-ui-common-shared.mjs +37 -37
  66. package/fesm2022/theseam-ui-common-shared.mjs.map +1 -1
  67. package/fesm2022/theseam-ui-common-storage.mjs +3 -3
  68. package/fesm2022/theseam-ui-common-storage.mjs.map +1 -1
  69. package/fesm2022/theseam-ui-common-story-helpers.mjs +26 -26
  70. package/fesm2022/theseam-ui-common-story-helpers.mjs.map +1 -1
  71. package/fesm2022/theseam-ui-common-tabbed.mjs +22 -22
  72. package/fesm2022/theseam-ui-common-tabbed.mjs.map +1 -1
  73. package/fesm2022/theseam-ui-common-table-cell-type.mjs +39 -11
  74. package/fesm2022/theseam-ui-common-table-cell-type.mjs.map +1 -1
  75. package/fesm2022/theseam-ui-common-table-cell-types.mjs +31 -31
  76. package/fesm2022/theseam-ui-common-table-cell-types.mjs.map +1 -1
  77. package/fesm2022/theseam-ui-common-table.mjs +23 -21
  78. package/fesm2022/theseam-ui-common-table.mjs.map +1 -1
  79. package/fesm2022/theseam-ui-common-tel-input.mjs +13 -13
  80. package/fesm2022/theseam-ui-common-tel-input.mjs.map +1 -1
  81. package/fesm2022/theseam-ui-common-tiled-select.mjs +22 -22
  82. package/fesm2022/theseam-ui-common-tiled-select.mjs.map +1 -1
  83. package/fesm2022/theseam-ui-common-toggle-edit.mjs +16 -16
  84. package/fesm2022/theseam-ui-common-toggle-edit.mjs.map +1 -1
  85. package/fesm2022/theseam-ui-common-toggle-group.mjs +10 -10
  86. package/fesm2022/theseam-ui-common-toggle-group.mjs.map +1 -1
  87. package/fesm2022/theseam-ui-common-tooltip.mjs +10 -10
  88. package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
  89. package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs +10 -10
  90. package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
  91. package/fesm2022/theseam-ui-common-vertical-list-filter.mjs +3 -3
  92. package/fesm2022/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
  93. package/fesm2022/theseam-ui-common-viewers.mjs +12 -12
  94. package/fesm2022/theseam-ui-common-viewers.mjs.map +1 -1
  95. package/fesm2022/theseam-ui-common-widget.mjs +135 -135
  96. package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
  97. package/package.json +33 -33
  98. package/table/index.d.ts +1 -2
  99. package/table-cell-type/index.d.ts +27 -2
@@ -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
  }
@@ -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, TemplateRef, OnChanges, PipeTransform, SimpleChanges, InjectionToken, KeyValueDiffers, OnInit, OnDestroy, ChangeDetectorRef, ElementRef, ViewContainerRef, NgZone } from '@angular/core';
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 i30 from '@marklb/ngx-datatable';
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 i34 from '@theseam/ui-common/shared';
12
+ import * as i30 from '@theseam/ui-common/shared';
13
13
  import { TheSeamElementResizedEvent } from '@theseam/ui-common/shared';
14
- import * as i32 from '@angular/cdk/overlay';
14
+ import * as i28 from '@angular/cdk/overlay';
15
15
  import { ConnectionPositionPair, Overlay } from '@angular/cdk/overlay';
16
- import * as i35 from '@angular/router';
16
+ import * as i31 from '@angular/router';
17
17
  import { Router } from '@angular/router';
18
- import * as i42 from '@theseam/ui-common/confirm-dialog';
18
+ import * as i38 from '@theseam/ui-common/confirm-dialog';
19
19
  import { SeamConfirmDialogService } from '@theseam/ui-common/confirm-dialog';
20
- import * as i36 from '@theseam/ui-common/menu';
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 i47 from '@theseam/ui-common/table-cell-type';
24
- import { TableCellTypeName, TableCellTypeConfig, TableCellTypeColumn, TableCellTypeExportProps } from '@theseam/ui-common/table-cell-type';
25
- import * as i46 from '@angular/forms';
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 i38 from '@theseam/ui-common/icon';
29
+ import * as i34 from '@theseam/ui-common/icon';
30
30
  import { SeamIcon } from '@theseam/ui-common/icon';
31
- import * as i39 from 'ngx-toastr';
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 i40 from '@theseam/ui-common/loading';
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 i29 from '@angular/common';
42
- import * as i31 from '@fortawesome/angular-fontawesome';
43
- import * as i33 from '@angular/cdk/a11y';
44
- import * as i37 from '@theseam/ui-common/buttons';
45
- import * as i41 from '@angular/cdk/portal';
46
- import * as i43 from '@theseam/ui-common/popover';
47
- import * as i44 from '@theseam/ui-common/checkbox';
48
- import * as i45 from '@theseam/ui-common/form-field';
49
- import * as i49 from '@ng-select/ng-select';
50
- import * as i50 from '@theseam/ui-common/toggle-group';
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
- _cellTemplateQuery?: TemplateRef<any>;
130
+ set _setCellTemplateQuery(value: TemplateRef<any> | null);
131
+ _cellTemplateQuery?: TemplateRef<any> | null;
144
132
  get cellTemplate(): TemplateRef<any> | undefined | null;
145
- constructor(_columnChangesService: DatatableColumnChangesService);
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; }; }, {}, ["cellTplDirective", "_cellTemplateQuery"], never, false, never>;
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, false, 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, false, 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, false, 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, false, 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 DatatableColumnFilterMenuComponent, typeof DatatableColumnFilterSearchTextComponent, typeof DatatableColumnFilterSearchNumericComponent, typeof DatatableColumnFilterSearchDateComponent, typeof DatatableColumnFilterTplDirective, typeof TheSeamDatatableColumnFilterDirective], [typeof i29.CommonModule, typeof i30.NgxDatatableModule, typeof i31.FontAwesomeModule, typeof i32.OverlayModule, typeof i33.A11yModule, typeof i34.TheSeamSharedModule, typeof i35.RouterModule, typeof i36.TheSeamMenuModule, typeof i37.TheSeamButtonsModule, typeof i38.TheSeamIconModule, typeof i39.ToastrModule, typeof i40.TheSeamLoadingModule, typeof i41.PortalModule, typeof i42.TheSeamConfirmDialogModule, typeof i43.TheSeamPopoverModule, typeof i44.TheSeamCheckboxComponent, typeof i45.TheSeamFormFieldModule, typeof i46.ReactiveFormsModule, typeof i47.TheSeamTableCellTypeModule, typeof _theseam_ui_common_data_filters.TheSeamDataFiltersModule, typeof i49.NgSelectModule, typeof i50.TheSeamToggleGroupModule], [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]>;
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.6", 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.6", ngImport: i0, type: AssetReaderHelperService, providedIn: 'root' });
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.6", ngImport: i0, type: AssetReaderHelperService, decorators: [{
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.6", 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.6", 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 });
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.6", ngImport: i0, type: EncryptedAssetLinkDirective, decorators: [{
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.6", ngImport: i0, type: TheSeamAssetReaderModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
176
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.6", ngImport: i0, type: TheSeamAssetReaderModule, declarations: [EncryptedAssetLinkDirective], exports: [EncryptedAssetLinkDirective] });
177
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamAssetReaderModule });
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.6", ngImport: i0, type: TheSeamAssetReaderModule, decorators: [{
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.6", ngImport: i0, type: TheSeamBreadcrumbsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
140
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamBreadcrumbsService, providedIn: 'root' });
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.6", ngImport: i0, type: TheSeamBreadcrumbsService, decorators: [{
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.6", ngImport: i0, type: TheSeamBreadcrumbsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
153
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.6", 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 });
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.6", ngImport: i0, type: TheSeamBreadcrumbsComponent, decorators: [{
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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"}