@theseam/ui-common 1.0.0-beta.6 → 1.0.0-beta.8
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/breadcrumbs/index.d.ts +1 -2
- package/buttons/index.d.ts +20 -13
- package/datatable/index.d.ts +8 -8
- package/dynamic/index.d.ts +5 -5
- package/fesm2022/theseam-ui-common-asset-reader.mjs +28 -29
- package/fesm2022/theseam-ui-common-asset-reader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs +25 -31
- package/fesm2022/theseam-ui-common-breadcrumbs.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-buttons.mjs +108 -66
- package/fesm2022/theseam-ui-common-buttons.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-card.mjs +21 -21
- package/fesm2022/theseam-ui-common-card.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-carousel.mjs +28 -30
- package/fesm2022/theseam-ui-common-carousel.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-checkbox.mjs +27 -27
- package/fesm2022/theseam-ui-common-checkbox.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs +23 -27
- package/fesm2022/theseam-ui-common-confirm-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-core.mjs +31 -11
- package/fesm2022/theseam-ui-common-core.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-exporter.mjs +18 -19
- package/fesm2022/theseam-ui-common-data-exporter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-data-filters.mjs +80 -64
- package/fesm2022/theseam-ui-common-data-filters.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs +51 -49
- package/fesm2022/theseam-ui-common-datatable-alterations-display.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs +145 -112
- package/fesm2022/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-datatable.mjs +592 -388
- package/fesm2022/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs +12 -14
- package/fesm2022/theseam-ui-common-dynamic-component-loader.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-dynamic.mjs +60 -48
- package/fesm2022/theseam-ui-common-dynamic.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-footer-bar.mjs +9 -15
- package/fesm2022/theseam-ui-common-footer-bar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field-error.mjs +60 -43
- package/fesm2022/theseam-ui-common-form-field-error.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-form-field.mjs +120 -74
- package/fesm2022/theseam-ui-common-form-field.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-framework.mjs +669 -543
- package/fesm2022/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-google-maps.mjs +206 -149
- package/fesm2022/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-graphql.mjs +252 -195
- package/fesm2022/theseam-ui-common-graphql.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-icon.mjs +125 -89
- package/fesm2022/theseam-ui-common-icon.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-layout.mjs +18 -26
- package/fesm2022/theseam-ui-common-layout.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-loading.mjs +19 -28
- package/fesm2022/theseam-ui-common-loading.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-menu.mjs +124 -95
- package/fesm2022/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-modal.mjs +177 -129
- package/fesm2022/theseam-ui-common-modal.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-models.mjs +3 -3
- package/fesm2022/theseam-ui-common-models.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-navigation-reload.mjs +13 -11
- package/fesm2022/theseam-ui-common-navigation-reload.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-popover.mjs +81 -88
- package/fesm2022/theseam-ui-common-popover.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-progress.mjs +15 -19
- package/fesm2022/theseam-ui-common-progress.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-rich-text.mjs +65 -52
- package/fesm2022/theseam-ui-common-rich-text.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-scrollbar.mjs +12 -9
- package/fesm2022/theseam-ui-common-scrollbar.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-services.mjs +41 -26
- package/fesm2022/theseam-ui-common-services.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-shared.mjs +123 -67
- package/fesm2022/theseam-ui-common-shared.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-storage.mjs +9 -6
- package/fesm2022/theseam-ui-common-storage.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-story-helpers.mjs +148 -86
- package/fesm2022/theseam-ui-common-story-helpers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tabbed.mjs +43 -39
- package/fesm2022/theseam-ui-common-tabbed.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-type.mjs +34 -38
- package/fesm2022/theseam-ui-common-table-cell-type.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table-cell-types.mjs +182 -144
- package/fesm2022/theseam-ui-common-table-cell-types.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-table.mjs +50 -39
- package/fesm2022/theseam-ui-common-table.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tel-input.mjs +98 -63
- package/fesm2022/theseam-ui-common-tel-input.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-testing.mjs +13 -10
- package/fesm2022/theseam-ui-common-testing.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tiled-select.mjs +54 -50
- package/fesm2022/theseam-ui-common-tiled-select.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-edit.mjs +41 -37
- package/fesm2022/theseam-ui-common-toggle-edit.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-toggle-group.mjs +30 -31
- package/fesm2022/theseam-ui-common-toggle-group.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-tooltip.mjs +225 -66
- package/fesm2022/theseam-ui-common-tooltip.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs +14 -12
- package/fesm2022/theseam-ui-common-unsaved-changes-dialog.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-utils.mjs +113 -77
- package/fesm2022/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-validators.mjs +10 -9
- package/fesm2022/theseam-ui-common-validators.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs +39 -17
- package/fesm2022/theseam-ui-common-vertical-list-filter.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-viewers.mjs +79 -56
- package/fesm2022/theseam-ui-common-viewers.mjs.map +1 -1
- package/fesm2022/theseam-ui-common-widget.mjs +288 -314
- package/fesm2022/theseam-ui-common-widget.mjs.map +1 -1
- package/framework/base-layout/base-layout.component.scss +9 -4
- package/framework/base-layout/styles/_variables.scss +4 -9
- package/framework/dashboard/dashboard-widgets/dashboard-widgets.component.scss +6 -4
- package/framework/index.d.ts +6 -6
- package/framework/nav/nav-item/nav-item.component.scss +7 -6
- package/framework/nav/styles/_themes/light/_variables.scss +21 -5
- package/framework/nav/styles/_themes/primary/_variables.scss +21 -5
- package/framework/side-nav/side-nav-item/side-nav-item.component.scss +5 -2
- package/framework/side-nav/styles/_themes/light/_variables.scss +5 -1
- package/framework/side-nav/styles/_themes/primary/_variables.scss +25 -5
- package/graphql/index.d.ts +5 -5
- package/modal/README.md +5 -5
- package/modal/index.d.ts +1 -1
- package/models/index.d.ts +1 -1
- package/package.json +41 -41
- package/popover/index.d.ts +0 -2
- package/progress/progress-circle/styles/_variables.scss +15 -3
- package/story-helpers/index.d.ts +11 -1
- package/styles/bootstrap/_bootstrap.scss +34 -34
- package/styles/bootstrap/_bs-styles.scss +4 -8
- package/styles/bootstrap/_bs-utilities.scss +4 -4
- package/styles/bootstrap/_bs-variables.scss +65 -70
- package/styles/common/_forms.scss +9 -10
- package/styles/common/_global.scss +0 -1
- package/styles/common/_hacks.scss +1 -1
- package/styles/common/_table.scss +0 -1
- package/styles/common/_text.scss +3 -1
- package/styles/theme.scss +1 -1
- package/styles/vendor/ng-select/_ng-select-bs4.scss +292 -294
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +63 -32
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +37 -10
- package/styles/vendor/ngx-datatable/_themes/material/_variables.scss +3 -1
- package/styles/vendor/quill/_quill.scss +15 -9
- package/tel-input/README.md +27 -27
- package/utils/index.d.ts +3 -3
- package/viewers/index.d.ts +9 -2
- package/widget/_widget-theme.scss +1 -1
- package/widget/styles/_variables.scss +2 -2
- package/widget/widget/widget.component.scss +0 -2
- package/widget/widget-content-components/widget-tile/widget-tile.component.scss +1 -3
- package/widget/widget-footer/widget-footer.component.scss +0 -1
package/breadcrumbs/index.d.ts
CHANGED
|
@@ -11,8 +11,7 @@ declare class TheSeamBreadcrumbsComponent {
|
|
|
11
11
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamBreadcrumbsComponent, "seam-breadcrumbs", never, {}, {}, never, never, true, never>;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
|
|
15
|
-
}
|
|
14
|
+
type TheSeamBreadcrumbsResolver = Resolve<string>;
|
|
16
15
|
|
|
17
16
|
interface TheSeamBreadcrumb {
|
|
18
17
|
/** Value to display on breadcrumb. */
|
package/buttons/index.d.ts
CHANGED
|
@@ -28,8 +28,7 @@ declare class TheSeamBaseButtonComponentHarness extends ContentContainerComponen
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
/** A set of criteria that can be used to filter a list of `TheSeamBaseBadgeButtonComponentHarness` instances. */
|
|
31
|
-
|
|
32
|
-
}
|
|
31
|
+
type TheSeamBaseBadgeButtonComponentHarnessFilters = TheSeamBaseButtonComponentHarnessFilters;
|
|
33
32
|
declare class TheSeamBaseBadgeButtonComponentHarness extends TheSeamBaseButtonComponentHarness {
|
|
34
33
|
private readonly _badgeElement;
|
|
35
34
|
/** Gets the text of the button item. */
|
|
@@ -41,8 +40,7 @@ declare class TheSeamBaseBadgeButtonComponentHarness extends TheSeamBaseButtonCo
|
|
|
41
40
|
}
|
|
42
41
|
|
|
43
42
|
/** A set of criteria that can be used to filter a list of `TheSeamAnchorBadgeButtonComponentHarness` instances. */
|
|
44
|
-
|
|
45
|
-
}
|
|
43
|
+
type TheSeamAnchorBadgeButtonComponentHarnessFilters = TheSeamBaseBadgeButtonComponentHarnessFilters;
|
|
46
44
|
declare class TheSeamAnchorBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {
|
|
47
45
|
/** The selector for the host element of a `TheSeamAnchorBadgeButtonComponent` instance. */
|
|
48
46
|
static hostSelector: string;
|
|
@@ -56,8 +54,7 @@ declare class TheSeamAnchorBadgeButtonComponentHarness extends TheSeamBaseBadgeB
|
|
|
56
54
|
}
|
|
57
55
|
|
|
58
56
|
/** A set of criteria that can be used to filter a list of `TheSeamAnchorButtonComponentHarness` instances. */
|
|
59
|
-
|
|
60
|
-
}
|
|
57
|
+
type TheSeamAnchorButtonComponentHarnessFilters = TheSeamBaseButtonComponentHarnessFilters;
|
|
61
58
|
declare class TheSeamAnchorButtonComponentHarness extends TheSeamBaseButtonComponentHarness {
|
|
62
59
|
/** The selector for the host element of a `TheSeamAnchorButtonComponent` instance. */
|
|
63
60
|
static hostSelector: string;
|
|
@@ -71,8 +68,7 @@ declare class TheSeamAnchorButtonComponentHarness extends TheSeamBaseButtonCompo
|
|
|
71
68
|
}
|
|
72
69
|
|
|
73
70
|
/** A set of criteria that can be used to filter a list of `TheSeamBadgeButtonComponentHarness` instances. */
|
|
74
|
-
|
|
75
|
-
}
|
|
71
|
+
type TheSeamBadgeButtonComponentHarnessFilters = TheSeamBaseBadgeButtonComponentHarnessFilters;
|
|
76
72
|
declare class TheSeamBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonComponentHarness {
|
|
77
73
|
/** The selector for the host element of a `TheSeamBadgeButtonComponent` instance. */
|
|
78
74
|
static hostSelector: string;
|
|
@@ -85,8 +81,7 @@ declare class TheSeamBadgeButtonComponentHarness extends TheSeamBaseBadgeButtonC
|
|
|
85
81
|
}
|
|
86
82
|
|
|
87
83
|
/** A set of criteria that can be used to filter a list of `TheSeamButtonComponentHarness` instances. */
|
|
88
|
-
|
|
89
|
-
}
|
|
84
|
+
type TheSeamButtonComponentHarnessFilters = TheSeamBaseButtonComponentHarnessFilters;
|
|
90
85
|
declare class TheSeamButtonComponentHarness extends TheSeamBaseButtonComponentHarness {
|
|
91
86
|
/** The selector for the host element of a `TheSeamButtonComponent` instance. */
|
|
92
87
|
static hostSelector: string;
|
|
@@ -119,9 +114,9 @@ declare class TheSeamToggleButtonComponentHarness extends TheSeamBaseButtonCompo
|
|
|
119
114
|
}
|
|
120
115
|
|
|
121
116
|
declare class TheSeamButtonBase implements OnDestroy {
|
|
122
|
-
_elementRef: ElementRef;
|
|
123
|
-
_focusMonitor: FocusMonitor;
|
|
124
|
-
_renderer: Renderer2;
|
|
117
|
+
readonly _elementRef: ElementRef;
|
|
118
|
+
readonly _focusMonitor: FocusMonitor;
|
|
119
|
+
readonly _renderer: Renderer2;
|
|
125
120
|
constructor(_elementRef: ElementRef, _focusMonitor: FocusMonitor, _renderer: Renderer2);
|
|
126
121
|
ngOnDestroy(): void;
|
|
127
122
|
/** Focuses the button. */
|
|
@@ -132,6 +127,9 @@ declare class TheSeamButtonBase implements OnDestroy {
|
|
|
132
127
|
}
|
|
133
128
|
declare const _TheSeamButtonMixinBase: CanDisableCtor & CanThemeCtor & CanSizeCtor & typeof TheSeamButtonBase;
|
|
134
129
|
declare class TheSeamButtonComponent extends _TheSeamButtonMixinBase implements OnDestroy {
|
|
130
|
+
readonly _elementRef: ElementRef;
|
|
131
|
+
readonly _focusMonitor: FocusMonitor;
|
|
132
|
+
readonly _renderer: Renderer2;
|
|
135
133
|
/** ARIA type for the button. */
|
|
136
134
|
type: 'button' | 'submit' | 'reset';
|
|
137
135
|
constructor(_elementRef: ElementRef, _focusMonitor: FocusMonitor, _renderer: Renderer2);
|
|
@@ -140,6 +138,9 @@ declare class TheSeamButtonComponent extends _TheSeamButtonMixinBase implements
|
|
|
140
138
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamButtonComponent, "button[seamButton]", ["seamButton"], { "disabled": { "alias": "disabled"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "size": { "alias": "size"; "required": false; }; "type": { "alias": "type"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
141
139
|
}
|
|
142
140
|
declare class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase implements OnDestroy {
|
|
141
|
+
readonly _elementRef: ElementRef;
|
|
142
|
+
readonly _focusMonitor: FocusMonitor;
|
|
143
|
+
readonly _renderer: Renderer2;
|
|
143
144
|
/** Tabindex of the button. */
|
|
144
145
|
tabIndex: number | undefined | null;
|
|
145
146
|
constructor(_elementRef: ElementRef, _focusMonitor: FocusMonitor, _renderer: Renderer2);
|
|
@@ -150,6 +151,9 @@ declare class TheSeamAnchorButtonComponent extends _TheSeamButtonMixinBase imple
|
|
|
150
151
|
}
|
|
151
152
|
|
|
152
153
|
declare class TheSeamBadgeButtonComponent extends TheSeamButtonComponent implements OnDestroy {
|
|
154
|
+
readonly _elementRef: ElementRef;
|
|
155
|
+
readonly _focusMonitor: FocusMonitor;
|
|
156
|
+
readonly _renderer: Renderer2;
|
|
153
157
|
_textNoWrap: boolean;
|
|
154
158
|
badgeTheme: ThemeTypes;
|
|
155
159
|
badgeText: string;
|
|
@@ -159,6 +163,9 @@ declare class TheSeamBadgeButtonComponent extends TheSeamButtonComponent impleme
|
|
|
159
163
|
static ɵcmp: i0.ɵɵComponentDeclaration<TheSeamBadgeButtonComponent, "button[seamBadgeButton]", ["seamBadgeButton"], { "disabled": { "alias": "disabled"; "required": false; }; "theme": { "alias": "theme"; "required": false; }; "size": { "alias": "size"; "required": false; }; "badgeTheme": { "alias": "badgeTheme"; "required": false; }; "badgeText": { "alias": "badgeText"; "required": false; }; }, {}, never, ["*"], false, never>;
|
|
160
164
|
}
|
|
161
165
|
declare class TheSeamAnchorBadgeButtonComponent extends TheSeamAnchorButtonComponent implements OnDestroy {
|
|
166
|
+
readonly _elementRef: ElementRef;
|
|
167
|
+
readonly _focusMonitor: FocusMonitor;
|
|
168
|
+
readonly _renderer: Renderer2;
|
|
162
169
|
_textNoWrap: boolean;
|
|
163
170
|
badgeTheme: ThemeTypes;
|
|
164
171
|
badgeText: string;
|
package/datatable/index.d.ts
CHANGED
|
@@ -399,7 +399,7 @@ declare const ActionItemColumnPosition: readonly ["frozenLeft", "frozenRight", "
|
|
|
399
399
|
*
|
|
400
400
|
* If `staticRight`, action item column will be the last static column on the right side of the table.
|
|
401
401
|
*/
|
|
402
|
-
type ActionItemColumnPosition = typeof ActionItemColumnPosition[number];
|
|
402
|
+
type ActionItemColumnPosition = (typeof ActionItemColumnPosition)[number];
|
|
403
403
|
|
|
404
404
|
type InternalColumnsGetter = () => TableColumn[];
|
|
405
405
|
declare class ColumnsManagerService {
|
|
@@ -961,7 +961,7 @@ declare const THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_TYPES: readonly ["lt", "lt
|
|
|
961
961
|
declare const THESEAM_COLUMNS_DATA_FILTER_DATE_TEXT_SEARCH_TYPES: string[];
|
|
962
962
|
declare const THESEAM_COLUMNS_DATA_FILTER_DATE_RANGE_SEARCH_TYPES: string[];
|
|
963
963
|
declare const THESEAM_COLUMNS_DATA_FILTER_DATE_SELECT_SEARCH_TYPES: string[];
|
|
964
|
-
type TheSeamColumnsDataFilterDateSearchType = typeof THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_TYPES[number];
|
|
964
|
+
type TheSeamColumnsDataFilterDateSearchType = (typeof THESEAM_COLUMNS_DATA_FILTER_DATE_SEARCH_TYPES)[number];
|
|
965
965
|
type TheSeamColumnsDataFilterDateSearchForm = FormGroup<{
|
|
966
966
|
searchType: FormControl<TheSeamColumnsDataFilterDateSearchType | null>;
|
|
967
967
|
searchText: FormControl<string | null>;
|
|
@@ -993,32 +993,32 @@ declare const THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_TYPES: readonly ["gt",
|
|
|
993
993
|
declare const THESEAM_COLUMNS_DATA_FILTER_NUMERIC_TEXT_SEARCH_TYPES: string[];
|
|
994
994
|
declare const THESEAM_COLUMNS_DATA_FILTER_NUMERIC_RANGE_SEARCH_TYPES: string[];
|
|
995
995
|
declare const THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SELECT_SEARCH_TYPES: string[];
|
|
996
|
-
type TheSeamColumnsDataFilterNumericSearchType = typeof THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_TYPES[number];
|
|
996
|
+
type TheSeamColumnsDataFilterNumericSearchType = (typeof THESEAM_COLUMNS_DATA_FILTER_NUMERIC_SEARCH_TYPES)[number];
|
|
997
997
|
type TheSeamColumnsDataFilterNumericSearchForm = FormGroup<{
|
|
998
998
|
searchType: FormControl<TheSeamColumnsDataFilterNumericSearchType | null>;
|
|
999
999
|
searchText: FormControl<string | null>;
|
|
1000
1000
|
fromText: FormControl<string | null>;
|
|
1001
1001
|
toText: FormControl<string | null>;
|
|
1002
1002
|
}>;
|
|
1003
|
-
|
|
1003
|
+
interface TheSeamColumnsDataFilterNumericSearchFormState {
|
|
1004
1004
|
searchType: TheSeamColumnsDataFilterNumericSearchType | null;
|
|
1005
1005
|
searchText: string | null;
|
|
1006
1006
|
fromText: string | null;
|
|
1007
1007
|
toText: string | null;
|
|
1008
|
-
}
|
|
1008
|
+
}
|
|
1009
1009
|
declare const THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_NAME: "search-text";
|
|
1010
1010
|
declare const THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_TYPES: readonly ["contains", "ncontains", "eq", "neq", "blank", "not-blank"];
|
|
1011
1011
|
declare const THESEAM_COLUMNS_DATA_FILTER_TEXT_TEXT_SEARCH_TYPES: string[];
|
|
1012
1012
|
declare const THESEAM_COLUMNS_DATA_FILTER_TEXT_SELECT_SEARCH_TYPES: string[];
|
|
1013
|
-
type TheSeamColumnsDataFilterTextSearchType = typeof THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_TYPES[number];
|
|
1013
|
+
type TheSeamColumnsDataFilterTextSearchType = (typeof THESEAM_COLUMNS_DATA_FILTER_TEXT_SEARCH_TYPES)[number];
|
|
1014
1014
|
type TheSeamColumnsDataFilterTextSearchForm = FormGroup<{
|
|
1015
1015
|
searchType: FormControl<TheSeamColumnsDataFilterTextSearchType | null>;
|
|
1016
1016
|
searchText: FormControl<string | null>;
|
|
1017
1017
|
}>;
|
|
1018
|
-
|
|
1018
|
+
interface TheSeamColumnsDataFilterTextSearchFormState {
|
|
1019
1019
|
searchType: TheSeamColumnsDataFilterTextSearchType | null;
|
|
1020
1020
|
searchText: string | null;
|
|
1021
|
-
}
|
|
1021
|
+
}
|
|
1022
1022
|
|
|
1023
1023
|
declare class DatatableColumnFilterSearchDateComponent implements OnInit {
|
|
1024
1024
|
searchTypes: {
|
package/dynamic/index.d.ts
CHANGED
|
@@ -177,11 +177,11 @@ type ApiRequestMethodHeader = string | {
|
|
|
177
177
|
[name: string]: string | string[];
|
|
178
178
|
};
|
|
179
179
|
interface ApiRequestMethodHeaders {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
180
|
+
GET?: ApiRequestMethodHeader;
|
|
181
|
+
POST?: ApiRequestMethodHeader;
|
|
182
|
+
PUT?: ApiRequestMethodHeader;
|
|
183
|
+
PATCH?: ApiRequestMethodHeader;
|
|
184
|
+
DELETE?: ApiRequestMethodHeader;
|
|
185
185
|
}
|
|
186
186
|
declare const VALID_REQUEST_METHODS: (keyof ApiRequestMethodHeaders)[];
|
|
187
187
|
declare function isValidRequestMethod(method: string): method is keyof ApiRequestMethodHeaders;
|
|
@@ -48,30 +48,31 @@ class AssetReaderHelperService {
|
|
|
48
48
|
// }
|
|
49
49
|
return of(false);
|
|
50
50
|
}
|
|
51
|
-
const data$ = this._assetReader
|
|
52
|
-
.
|
|
51
|
+
const data$ = this._assetReader
|
|
52
|
+
.getAssetBlobFromUrl(url, detectMimeFromContent)
|
|
53
|
+
.pipe(switchMap((v) => {
|
|
53
54
|
const filename = v instanceof Blob ? undefined : v.filename;
|
|
54
55
|
const blob = v instanceof Blob ? v : v.blob;
|
|
55
|
-
return from(readFileAsync(blob))
|
|
56
|
-
.pipe(switchMap(_buf => _buf
|
|
56
|
+
return from(readFileAsync(blob)).pipe(switchMap((_buf) => _buf
|
|
57
57
|
? from(fileDataFromBuffer(_buf))
|
|
58
|
-
: throwError('Unable to read file.')), map(data => ({ ...data, blob, filename })));
|
|
58
|
+
: throwError('Unable to read file.')), map((data) => ({ ...data, blob, filename })));
|
|
59
59
|
}));
|
|
60
|
-
const open$ = data
|
|
61
|
-
.pipe(tap(data => {
|
|
60
|
+
const open$ = data$.pipe(tap((data) => {
|
|
62
61
|
if (!data || !data.blob) {
|
|
63
62
|
throw new Error('File unsuccessfully read.');
|
|
64
63
|
}
|
|
65
|
-
const filename = data.filename
|
|
64
|
+
const filename = data.filename
|
|
65
|
+
? data.filename
|
|
66
|
+
: `Untitled${data.ext ? `.${data.ext}` : ''}`;
|
|
66
67
|
if (download) {
|
|
67
68
|
FileSaver.saveAs(data.blob, filename);
|
|
68
69
|
}
|
|
69
70
|
else {
|
|
70
71
|
openBlob(data.blob, target, filename);
|
|
71
72
|
}
|
|
72
|
-
}), catchError(err => {
|
|
73
|
-
// eslint-disable-next-line no-console
|
|
73
|
+
}), catchError((err) => {
|
|
74
74
|
if (isDevMode()) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
75
76
|
console.error('err', err);
|
|
76
77
|
}
|
|
77
78
|
return of(false);
|
|
@@ -80,13 +81,13 @@ class AssetReaderHelperService {
|
|
|
80
81
|
}
|
|
81
82
|
return of(false);
|
|
82
83
|
}
|
|
83
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
84
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.
|
|
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' });
|
|
85
86
|
}
|
|
86
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
87
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: AssetReaderHelperService, decorators: [{
|
|
87
88
|
type: Injectable,
|
|
88
89
|
args: [{
|
|
89
|
-
providedIn: 'root'
|
|
90
|
+
providedIn: 'root',
|
|
90
91
|
}]
|
|
91
92
|
}], ctorParameters: () => [{ type: EncryptedAssetReader, decorators: [{
|
|
92
93
|
type: Optional
|
|
@@ -107,7 +108,9 @@ class EncryptedAssetLinkDirective {
|
|
|
107
108
|
seamDetectMimeFromContent = true;
|
|
108
109
|
seamDownloadAsset = false;
|
|
109
110
|
// TODO: Find out why I need this for buttons.
|
|
110
|
-
get _attrHref() {
|
|
111
|
+
get _attrHref() {
|
|
112
|
+
return this.seamEncryptedAssetLink;
|
|
113
|
+
}
|
|
111
114
|
_onClick(event) {
|
|
112
115
|
if (!this.seamEncryptedAssetLink) {
|
|
113
116
|
return;
|
|
@@ -134,8 +137,8 @@ class EncryptedAssetLinkDirective {
|
|
|
134
137
|
_getTarget() {
|
|
135
138
|
return this._elementRef.nativeElement.target;
|
|
136
139
|
}
|
|
137
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
138
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.
|
|
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 });
|
|
139
142
|
}
|
|
140
143
|
__decorate([
|
|
141
144
|
InputBoolean()
|
|
@@ -146,11 +149,11 @@ __decorate([
|
|
|
146
149
|
__decorate([
|
|
147
150
|
InputBoolean()
|
|
148
151
|
], EncryptedAssetLinkDirective.prototype, "seamDownloadAsset", void 0);
|
|
149
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
152
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: EncryptedAssetLinkDirective, decorators: [{
|
|
150
153
|
type: Directive,
|
|
151
154
|
args: [{
|
|
152
155
|
selector: '[seamEncryptedAssetLink]',
|
|
153
|
-
standalone: false
|
|
156
|
+
standalone: false,
|
|
154
157
|
}]
|
|
155
158
|
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: AssetReaderHelperService }, { type: i2.TheSeamLoadingOverlayService }], propDecorators: { seamEncryptedAssetLink: [{
|
|
156
159
|
type: Input
|
|
@@ -169,19 +172,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", ngImpor
|
|
|
169
172
|
}] } });
|
|
170
173
|
|
|
171
174
|
class TheSeamAssetReaderModule {
|
|
172
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.
|
|
173
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.
|
|
174
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.
|
|
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
178
|
}
|
|
176
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
179
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamAssetReaderModule, decorators: [{
|
|
177
180
|
type: NgModule,
|
|
178
181
|
args: [{
|
|
179
|
-
declarations: [
|
|
180
|
-
|
|
181
|
-
],
|
|
182
|
-
exports: [
|
|
183
|
-
EncryptedAssetLinkDirective
|
|
184
|
-
]
|
|
182
|
+
declarations: [EncryptedAssetLinkDirective],
|
|
183
|
+
exports: [EncryptedAssetLinkDirective],
|
|
185
184
|
}]
|
|
186
185
|
}] });
|
|
187
186
|
|
|
@@ -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\n abstract getAssetBlobFromUrl(url: string, detectMimeFromContent: boolean): Observable<Blob | { blob: Blob, filename?: string }>\n\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 { fileDataFromBuffer, openBlob, readFileAsync } from '@theseam/ui-common/utils'\n\nimport { EncryptedAssetReader } from './encrypted-asset-reader'\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetReaderHelperService {\n\n constructor(\n @Optional() private _assetReader?: EncryptedAssetReader\n ) {\n if (isDevMode() && !this._assetReader) {\n // eslint-disable-next-line no-console\n console.warn(`[EncryptedAssetLinkDirective] Unable to get encrypted files unless an EncryptedAssetReader is provided.`)\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.getAssetBlobFromUrl(url, detectMimeFromContent)\n .pipe(\n switchMap(v => {\n const filename: string | undefined = v instanceof Blob ? undefined : v.filename\n const blob: Blob = v instanceof Blob ? v : v.blob\n return from(readFileAsync(blob))\n .pipe(\n switchMap(_buf => _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$\n .pipe(\n tap(data => {\n if (!data || !data.blob) { throw new Error('File unsuccessfully read.') }\n const filename = data.filename ? data.filename : `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 // eslint-disable-next-line no-console\n if (isDevMode()) { console.error('err', err) }\n return of(false)\n }),\n mapTo(true)\n )\n\n return open$\n }\n\n return of(false)\n }\n\n}\n","import { BooleanInput } from '@angular/cdk/coercion'\nimport { Directive, ElementRef, HostBinding, HostListener, Input } 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() { return this.seamEncryptedAssetLink }\n\n @HostListener('click', [ '$event' ])\n _onClick(event: MouseEvent) {\n if (!this.seamEncryptedAssetLink) { return }\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}\n","import { NgModule } from '@angular/core'\n\nimport { EncryptedAssetLinkDirective } from './encrypted-asset-link.directive'\n\n@NgModule({\n declarations: [\n EncryptedAssetLinkDirective\n ],\n exports: [\n EncryptedAssetLinkDirective\n ]\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":";;;;;;;;;;AAEA;;;;;;;;;;;;;;;;AAgBG;MAEmB,oBAAoB,CAAA;AAIzC;;MCXY,wBAAwB,CAAA;AAGb,IAAA,YAAA;AADtB,IAAA,WAAA,CACsB,YAAmC,EAAA;QAAnC,IAAA,CAAA,YAAY,GAAZ,YAAY;QAEhC,IAAI,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;AAErC,YAAA,OAAO,CAAC,IAAI,CAAC,CAAA,uGAAA,CAAyG,CAAC;QACzH;IACF;IAEO,QAAQ,CACb,GAAW,EACX,qBAAA,GAAiC,IAAI,EACrC,QAAA,GAAoB,IAAI,EACxB,MAAe,EAAA;QAEf,IAAI,EAAE,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE;;gBAEtB,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;;;;;AAKpC,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;YAClB;YAEA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,EAAE,qBAAqB;AAC3E,iBAAA,IAAI,CACH,SAAS,CAAC,CAAC,IAAG;AACZ,gBAAA,MAAM,QAAQ,GAAuB,CAAC,YAAY,IAAI,GAAG,SAAS,GAAG,CAAC,CAAC,QAAQ;AAC/E,gBAAA,MAAM,IAAI,GAAS,CAAC,YAAY,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI;AACjD,gBAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;AAC5B,qBAAA,IAAI,CACH,SAAS,CAAC,IAAI,IAAI;AAChB,sBAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;sBAC7B,UAAU,CAAC,sBAAsB,CAAC,CACrC,EACD,GAAG,CAAC,IAAI,KAAK,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAC3C;YACL,CAAC,CAAC,CACH;YAEH,MAAM,KAAK,GAAG;AACX,iBAAA,IAAI,CACH,GAAG,CAAC,IAAI,IAAG;gBACT,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;gBAAC;AACxE,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAA,QAAA,EAAW,IAAI,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,GAAG,CAAA,CAAE,GAAG,EAAE,EAAE;gBAC5F,IAAI,QAAQ,EAAE;oBACZ,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;gBACvC;qBAAO;oBACL,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC;gBACvC;AACF,YAAA,CAAC,CAAC,EACF,UAAU,CAAC,GAAG,IAAG;;gBAEf,IAAI,SAAS,EAAE,EAAE;AAAE,oBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;gBAAC;AAC7C,gBAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAClB,YAAA,CAAC,CAAC,EACF,KAAK,CAAC,IAAI,CAAC,CACZ;AAEH,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;IAClB;uGAnEW,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,oBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cAFvB,MAAM,EAAA,CAAA;;2FAEP,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAHpC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAII;;;ACRL;AAEA;AACA;MAMa,2BAA2B,CAAA;AA8B5B,IAAA,WAAA;AACA,IAAA,kBAAA;AACA,IAAA,QAAA;IA/BV,OAAO,wCAAwC;IAC/C,OAAO,2CAA2C;IAClD,OAAO,mCAAmC;AAEjC,IAAA,sBAAsB;IACN,sBAAsB,GAAG,IAAI;IAC7B,yBAAyB,GAAG,IAAI;IAChC,iBAAiB,GAAG,KAAK;;IAGlD,IAA8B,SAAS,KAAK,OAAO,IAAI,CAAC,sBAAsB,CAAA,CAAC;AAG/E,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE;YAAE;QAAO;AAE3C,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAC1C,IAAI,CAAC,sBAAsB,EAC3B,IAAI,CAAC,yBAAyB,EAC9B,IAAI,CAAC,iBAAiB,EACtB,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,SAAS,CACtE;AACD,QAAA,IAAI,IAAI,CAAC,sBAAsB,EAAE;YAC/B,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QACpC;QACA,KAAK,CAAC,SAAS,EAAE;IACnB;AAEA,IAAA,WAAA,CACU,WAAuB,EACvB,kBAA4C,EAC5C,QAAsC,EAAA;QAFtC,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,kBAAkB,GAAlB,kBAAkB;QAClB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IACd;;IAGM,SAAS,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,GAAG;IACtE;IAEU,UAAU,GAAA;AAClB,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAkC;AAChE,QAAA,OAAO,EAAE,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC7D;IAEU,UAAU,GAAA;AAClB,QAAA,OAAQ,IAAI,CAAC,WAAW,CAAC,aAAmC,CAAC,MAAM;IACrE;uGA/CW,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,wBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,4BAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;2FAA3B,2BAA2B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,yBAAA,EAAA,2BAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,WAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;AAMb,UAAA,CAAA;AAAf,IAAA,YAAY;AAAgC,CAAA,EAAA,2BAAA,CAAA,SAAA,EAAA,wBAAA,EAAA,KAAA,CAAA,CAAA;AAC7B,UAAA,CAAA;AAAf,IAAA,YAAY;AAAmC,CAAA,EAAA,2BAAA,CAAA,SAAA,EAAA,2BAAA,EAAA,KAAA,CAAA,CAAA;AAChC,UAAA,CAAA;AAAf,IAAA,YAAY;AAA4B,CAAA,EAAA,2BAAA,CAAA,SAAA,EAAA,mBAAA,EAAA,KAAA,CAAA,CAAA;2FARvC,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBAJvC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,UAAU,EAAE;AACf,iBAAA;8JAMU,sBAAsB,EAAA,CAAA;sBAA9B;gBACwB,sBAAsB,EAAA,CAAA;sBAA9C;gBACwB,yBAAyB,EAAA,CAAA;sBAAjD;gBACwB,iBAAiB,EAAA,CAAA;sBAAzC;gBAG6B,SAAS,EAAA,CAAA;sBAAtC,WAAW;uBAAC,WAAW;gBAGxB,QAAQ,EAAA,CAAA;sBADP,YAAY;uBAAC,OAAO,EAAE,CAAE,QAAQ,CAAE;;;MClBxB,wBAAwB,CAAA;uGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAxB,wBAAwB,EAAA,YAAA,EAAA,CANjC,2BAA2B,CAAA,EAAA,OAAA,EAAA,CAG3B,2BAA2B,CAAA,EAAA,CAAA;wGAGlB,wBAAwB,EAAA,CAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBARpC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ;AACD,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP;AACD;AACF,iBAAA;;;ACXD;;AAEG;;;;"}
|
|
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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"}
|
|
@@ -10,30 +10,28 @@ import { leafChildRoute, notNullOrUndefined, willHaveDataProp, hasProperty, rout
|
|
|
10
10
|
class TheSeamBreadcrumbsService {
|
|
11
11
|
_router = inject(Router);
|
|
12
12
|
_activatedRoute = inject(ActivatedRoute);
|
|
13
|
-
dataProps = [
|
|
14
|
-
'breadcrumb',
|
|
15
|
-
'breadcrumbExtras',
|
|
16
|
-
];
|
|
13
|
+
dataProps = ['breadcrumb', 'breadcrumbExtras'];
|
|
17
14
|
crumbs$ = this._crumbsFromRoute();
|
|
18
15
|
_crumbsFromRoute() {
|
|
19
|
-
return this._router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this._activatedRoute), startWith(this._activatedRoute), switchMap(activatedRoute => this._crumbsFromActivatedRoute(activatedRoute)));
|
|
16
|
+
return this._router.events.pipe(filter((event) => event instanceof NavigationEnd), map(() => this._activatedRoute), startWith(this._activatedRoute), switchMap((activatedRoute) => this._crumbsFromActivatedRoute(activatedRoute)));
|
|
20
17
|
}
|
|
21
18
|
_crumbsFromActivatedRoute(activatedRoute) {
|
|
22
|
-
return this._breadcrumbDatasFromRoot(activatedRoute).pipe(map(bcDatas => this._breadcrumbsFromData(bcDatas)));
|
|
19
|
+
return this._breadcrumbDatasFromRoot(activatedRoute).pipe(map((bcDatas) => this._breadcrumbsFromData(bcDatas)));
|
|
23
20
|
}
|
|
24
21
|
_breadcrumbDatasFromRoot(activatedRoute) {
|
|
25
|
-
const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map(r => this._breadcrumbData(r));
|
|
26
|
-
return combineLatest(bcDataObs).pipe(map(v => v.filter(notNullOrUndefined)), switchMap(v => this._applyBreadcrumbExtras(v)));
|
|
22
|
+
const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map((r) => this._breadcrumbData(r));
|
|
23
|
+
return combineLatest(bcDataObs).pipe(map((v) => v.filter(notNullOrUndefined)), switchMap((v) => this._applyBreadcrumbExtras(v)));
|
|
27
24
|
}
|
|
28
25
|
_breadcrumbData(activatedRoute) {
|
|
29
|
-
return activatedRoute.data.pipe(map(data => {
|
|
26
|
+
return activatedRoute.data.pipe(map((data) => {
|
|
30
27
|
const bcData = {
|
|
31
28
|
activatedRoute,
|
|
32
29
|
extrasPropRefs: [],
|
|
33
30
|
};
|
|
34
31
|
let found = false;
|
|
35
32
|
for (const prop of this.dataProps) {
|
|
36
|
-
if (prop === 'breadcrumb' &&
|
|
33
|
+
if (prop === 'breadcrumb' &&
|
|
34
|
+
!willHaveDataProp(activatedRoute, prop)) {
|
|
37
35
|
// Need to skip if the 'breadcrumb' data prop is not in the config,
|
|
38
36
|
// because we will get duplicates if the data 'breadcrumb' prop is
|
|
39
37
|
// inheritted from a parent route.
|
|
@@ -69,21 +67,23 @@ class TheSeamBreadcrumbsService {
|
|
|
69
67
|
// add extras
|
|
70
68
|
newDatas[newDatas.length - 1].extrasPropRefs = this._filterExtrasPropRefs([
|
|
71
69
|
...newDatas[newDatas.length - 1].extrasPropRefs,
|
|
72
|
-
...pending
|
|
70
|
+
...pending
|
|
71
|
+
.map((p) => p.extrasPropRefs)
|
|
72
|
+
.reduce((prev, curr) => [...prev, ...curr], []),
|
|
73
73
|
]);
|
|
74
74
|
}
|
|
75
|
-
return combineLatest(newDatas.map(data => {
|
|
75
|
+
return combineLatest(newDatas.map((data) => {
|
|
76
76
|
if (data.extrasPropRefs.length === 0) {
|
|
77
77
|
return of(data);
|
|
78
78
|
}
|
|
79
|
-
return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(map(extrasStr => {
|
|
79
|
+
return this._observeExtrasPropRefs(data.extrasPropRefs).pipe(map((extrasStr) => {
|
|
80
80
|
data.breadcrumb = `${data.breadcrumb} ${extrasStr}`;
|
|
81
81
|
return data;
|
|
82
82
|
}));
|
|
83
83
|
}));
|
|
84
84
|
}
|
|
85
85
|
_observeExtrasPropRefs(propRefs) {
|
|
86
|
-
return combineLatest(propRefs.map(pf => pf.value)).pipe(map(values => values.map(v => `(${v})`).join(' ')));
|
|
86
|
+
return combineLatest(propRefs.map((pf) => pf.value)).pipe(map((values) => values.map((v) => `(${v})`).join(' ')));
|
|
87
87
|
}
|
|
88
88
|
_getBreadcrumbExtrasDataProps(data) {
|
|
89
89
|
if (!hasProperty(data, 'breadcrumbExtras')) {
|
|
@@ -92,14 +92,14 @@ class TheSeamBreadcrumbsService {
|
|
|
92
92
|
if (!hasProperty(data.breadcrumbExtras, 'dataProps')) {
|
|
93
93
|
return [];
|
|
94
94
|
}
|
|
95
|
-
const propRefs = data.breadcrumbExtras.dataProps.map(prop => {
|
|
95
|
+
const propRefs = data.breadcrumbExtras.dataProps.map((prop) => {
|
|
96
96
|
return { prop, value: this._getDataProp(data.activatedRoute, prop) };
|
|
97
97
|
});
|
|
98
98
|
return this._filterExtrasPropRefs(propRefs);
|
|
99
99
|
}
|
|
100
100
|
_filterExtrasPropRefs(propRefs) {
|
|
101
101
|
const seen = {};
|
|
102
|
-
return propRefs.filter(propRef => {
|
|
102
|
+
return propRefs.filter((propRef) => {
|
|
103
103
|
if (seen[propRef.prop]) {
|
|
104
104
|
return false;
|
|
105
105
|
}
|
|
@@ -110,13 +110,13 @@ class TheSeamBreadcrumbsService {
|
|
|
110
110
|
_getDataProp(activatedRoute, prop) {
|
|
111
111
|
if (activatedRoute.routeConfig !== null) {
|
|
112
112
|
if (willHaveDataProp(activatedRoute, prop)) {
|
|
113
|
-
return activatedRoute.data.pipe(map(d => d[prop]));
|
|
113
|
+
return activatedRoute.data.pipe(map((d) => d[prop]));
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
let r = activatedRoute.parent;
|
|
117
117
|
while (r !== null) {
|
|
118
118
|
if (willHaveDataProp(r, prop)) {
|
|
119
|
-
return r.data.pipe(map(d => d[prop]));
|
|
119
|
+
return r.data.pipe(map((d) => d[prop]));
|
|
120
120
|
}
|
|
121
121
|
r = r.parent;
|
|
122
122
|
}
|
|
@@ -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.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' });
|
|
141
141
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamBreadcrumbsService, decorators: [{
|
|
143
143
|
type: Injectable,
|
|
144
144
|
args: [{
|
|
145
145
|
providedIn: 'root',
|
|
@@ -149,18 +149,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.1", 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.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 });
|
|
154
154
|
}
|
|
155
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.
|
|
155
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.6", ngImport: i0, type: TheSeamBreadcrumbsComponent, decorators: [{
|
|
156
156
|
type: Component,
|
|
157
|
-
args: [{ selector: 'seam-breadcrumbs', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
158
|
-
RouterModule,
|
|
159
|
-
NgFor,
|
|
160
|
-
AsyncPipe,
|
|
161
|
-
NgClass,
|
|
162
|
-
NgIf,
|
|
163
|
-
], template: "<nav aria-label=\"breadcrumb\">\n <ol class=\"breadcrumb mb-0\">\n <li *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 <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{ crumb.value }}</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"] }]
|
|
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"] }]
|
|
164
158
|
}] });
|
|
165
159
|
|
|
166
160
|
/**
|
|
@@ -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\n private readonly _router = inject(Router)\n private readonly _activatedRoute = inject(ActivatedRoute)\n\n private readonly dataProps: (keyof Omit<BreadcrumbData, 'activatedRoute'>)[] = [\n 'breadcrumb',\n 'breadcrumbExtras',\n ]\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 => this._crumbsFromActivatedRoute(activatedRoute)),\n )\n }\n\n private _crumbsFromActivatedRoute(activatedRoute: ActivatedRoute): Observable<TheSeamBreadcrumb[]> {\n return this._breadcrumbDatasFromRoot(activatedRoute).pipe(\n map(bcDatas => this._breadcrumbsFromData(bcDatas))\n )\n }\n\n private _breadcrumbDatasFromRoot(activatedRoute: ActivatedRoute): Observable<BreadcrumbData[]> {\n const bcDataObs = leafChildRoute(activatedRoute).pathFromRoot.map(r => this._breadcrumbData(r))\n return combineLatest(bcDataObs).pipe(\n map(v => v.filter(notNullOrUndefined)),\n switchMap(v => this._applyBreadcrumbExtras(v)),\n )\n }\n\n private _breadcrumbData(activatedRoute: ActivatedRoute): 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 (prop === 'breadcrumb' && !willHaveDataProp(activatedRoute, prop)) {\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(datas: BreadcrumbData[]): 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 ...newDatas[newDatas.length - 1].extrasPropRefs,\n ...pending.map(p => p.extrasPropRefs).reduce((prev, curr) => [ ...prev, ...curr ], []),\n ])\n }\n\n return combineLatest(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 private _observeExtrasPropRefs(propRefs: ExtrasPropRef[]): 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(activatedRoute: ActivatedRoute, prop: string): 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 { ChangeDetectionStrategy, Component, inject, ViewEncapsulation } 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: [\n RouterModule,\n NgFor,\n AsyncPipe,\n NgClass,\n NgIf,\n ],\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 *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 <a *ngIf=\"!isLast; else notLink\" [routerLink]=\"crumb.path\">{{ crumb.value }}</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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"}
|