@processpuzzle/widgets 0.1.3 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/processpuzzle-widgets.mjs +209 -103
- package/fesm2022/processpuzzle-widgets.mjs.map +1 -1
- package/package.json +18 -17
- package/{index.d.ts → types/processpuzzle-widgets.d.ts} +37 -16
- package/fesm2022/processpuzzle-widgets-mat-cards-grid.mjs +0 -113
- package/fesm2022/processpuzzle-widgets-mat-cards-grid.mjs.map +0 -1
- package/mat-cards-grid/index.d.ts +0 -29
|
@@ -2,20 +2,25 @@ import { v4 } from 'uuid';
|
|
|
2
2
|
import { signalStore } from '@ngrx/signals';
|
|
3
3
|
import { BaseEntityFirestoreService, BaseEntityStore, BaseFormNavigatorStore, BaseEntityTabsStore, BaseEntityContainerStore } from '@processpuzzle/base-entity';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
|
-
import { inject, output, Component, computed, effect, Injectable, EnvironmentInjector, NgModule, isDevMode } from '@angular/core';
|
|
5
|
+
import { inject, output, Component, computed, effect, Input, Injectable, EnvironmentInjector, NgModule, isDevMode } from '@angular/core';
|
|
6
6
|
import { MatIcon } from '@angular/material/icon';
|
|
7
|
-
import
|
|
8
|
-
import {
|
|
9
|
-
import { RUNTIME_CONFIGURATION, Stack } from '@processpuzzle/util';
|
|
7
|
+
import * as i2 from '@angular/material/button';
|
|
8
|
+
import { MatIconButton, MatButtonModule } from '@angular/material/button';
|
|
9
|
+
import { RUNTIME_CONFIGURATION, LayoutService, Stack } from '@processpuzzle/util';
|
|
10
10
|
import { TranslocoService, TranslocoDirective, provideTranslocoScope, TranslocoModule, provideTransloco } from '@jsverse/transloco';
|
|
11
|
-
import { NgClass
|
|
11
|
+
import { NgClass } from '@angular/common';
|
|
12
12
|
import { MatListOption, MatSelectionList } from '@angular/material/list';
|
|
13
|
+
import { MatMenuTrigger, MatMenu } from '@angular/material/menu';
|
|
13
14
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
14
|
-
import
|
|
15
|
+
import * as i1 from '@angular/material/card';
|
|
16
|
+
import { MatCardModule } from '@angular/material/card';
|
|
17
|
+
import { RouterLink, Router, NavigationEnd } from '@angular/router';
|
|
18
|
+
import { BehaviorSubject } from 'rxjs';
|
|
19
|
+
import { CdkOverlayOrigin, CdkConnectedOverlay } from '@angular/cdk/overlay';
|
|
15
20
|
import { ShareButtons } from 'ngx-sharebuttons/buttons';
|
|
16
21
|
import { provideShareButtonsOptions } from 'ngx-sharebuttons';
|
|
17
22
|
import { shareIcons } from 'ngx-sharebuttons/icons';
|
|
18
|
-
import
|
|
23
|
+
import { HttpClient } from '@angular/common/http';
|
|
19
24
|
|
|
20
25
|
class ApplicationProperty {
|
|
21
26
|
id;
|
|
@@ -51,111 +56,106 @@ const ApplicationPropertyStore = signalStore({ providedIn: 'root' }, BaseEntityS
|
|
|
51
56
|
class LanguageSelectorListComponent {
|
|
52
57
|
translocoService = inject(TranslocoService);
|
|
53
58
|
runtimeConfiguration = inject(RUNTIME_CONFIGURATION);
|
|
54
|
-
languages = this.runtimeConfiguration.AVAILABLE_LANGUAGES;
|
|
59
|
+
languages = this.runtimeConfiguration.LANGUAGE_CONFIGURATION.AVAILABLE_LANGUAGES;
|
|
55
60
|
languageSelected = output();
|
|
56
|
-
|
|
61
|
+
_selectedLanguage;
|
|
62
|
+
constructor() {
|
|
63
|
+
this._selectedLanguage = this.translocoService.getActiveLang();
|
|
64
|
+
}
|
|
65
|
+
get selectedLanguage() {
|
|
66
|
+
return this._selectedLanguage ?? this.translocoService.getActiveLang();
|
|
67
|
+
}
|
|
57
68
|
// region event handling methods
|
|
58
69
|
onSelectionChange(event) {
|
|
59
70
|
const selectedOption = event.source;
|
|
60
71
|
const selectedValue = selectedOption.selectedOptions.selected[0]?.value;
|
|
61
72
|
if (this.selectedLanguage !== selectedValue) {
|
|
62
73
|
this.translocoService.setActiveLang(selectedValue);
|
|
63
|
-
this.
|
|
74
|
+
this._selectedLanguage = selectedValue;
|
|
64
75
|
this.languageSelected.emit();
|
|
65
76
|
}
|
|
66
77
|
}
|
|
67
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
68
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
78
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LanguageSelectorListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
79
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: LanguageSelectorListComponent, isStandalone: true, selector: "pp-language-selector-list", outputs: { languageSelected: "languageSelected" }, providers: [provideTranslocoScope({ scope: 'widgets' })], ngImport: i0, template: `
|
|
69
80
|
<ng-container *transloco="let t">
|
|
70
81
|
<div class="language-selector">
|
|
71
82
|
<mat-selection-list #selectionList (selectionChange)="onSelectionChange($event)" [multiple]="false">
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
@for (language of languages; track language.code) {
|
|
84
|
+
<mat-list-option
|
|
85
|
+
[value]="language.code"
|
|
86
|
+
[selected]="selectedLanguage === language.code"
|
|
87
|
+
tabindex="0"
|
|
88
|
+
role="option"
|
|
89
|
+
[attr.aria-selected]="selectedLanguage === language.code ? 'true' : 'false'"
|
|
90
|
+
>
|
|
91
|
+
<span [ngClass]="language.flag"> - </span>
|
|
92
|
+
<span class="language-label">{{ t('widgets.' + language.label) }}</span>
|
|
93
|
+
</mat-list-option>
|
|
94
|
+
}
|
|
83
95
|
</mat-selection-list>
|
|
84
96
|
</div>
|
|
85
97
|
</ng-container>
|
|
86
|
-
`, isInline: true, styles: [".flag-icon{width:24px;height:16px;border-radius:2px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type:
|
|
98
|
+
`, isInline: true, styles: [".flag-icon{width:24px;height:16px;border-radius:2px}.language-label{margin-left:10px}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "component", type: MatListOption, selector: "mat-list-option", inputs: ["togglePosition", "checkboxPosition", "color", "value", "selected"], outputs: ["selectedChange"], exportAs: ["matListOption"] }, { kind: "component", type: MatSelectionList, selector: "mat-selection-list", inputs: ["color", "compareWith", "multiple", "hideSingleSelectionIndicator", "disabled"], outputs: ["selectionChange"], exportAs: ["matSelectionList"] }] });
|
|
87
99
|
}
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
100
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LanguageSelectorListComponent, decorators: [{
|
|
89
101
|
type: Component,
|
|
90
102
|
args: [{ selector: 'pp-language-selector-list', template: `
|
|
91
103
|
<ng-container *transloco="let t">
|
|
92
104
|
<div class="language-selector">
|
|
93
105
|
<mat-selection-list #selectionList (selectionChange)="onSelectionChange($event)" [multiple]="false">
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
106
|
+
@for (language of languages; track language.code) {
|
|
107
|
+
<mat-list-option
|
|
108
|
+
[value]="language.code"
|
|
109
|
+
[selected]="selectedLanguage === language.code"
|
|
110
|
+
tabindex="0"
|
|
111
|
+
role="option"
|
|
112
|
+
[attr.aria-selected]="selectedLanguage === language.code ? 'true' : 'false'"
|
|
113
|
+
>
|
|
114
|
+
<span [ngClass]="language.flag"> - </span>
|
|
115
|
+
<span class="language-label">{{ t('widgets.' + language.label) }}</span>
|
|
116
|
+
</mat-list-option>
|
|
117
|
+
}
|
|
105
118
|
</mat-selection-list>
|
|
106
119
|
</div>
|
|
107
120
|
</ng-container>
|
|
108
|
-
`, imports: [NgClass,
|
|
109
|
-
}], propDecorators: { languageSelected: [{ type: i0.Output, args: ["languageSelected"] }] } });
|
|
121
|
+
`, imports: [NgClass, TranslocoDirective, MatListOption, MatSelectionList], providers: [provideTranslocoScope({ scope: 'widgets' })], styles: [".flag-icon{width:24px;height:16px;border-radius:2px}.language-label{margin-left:10px}\n"] }]
|
|
122
|
+
}], ctorParameters: () => [], propDecorators: { languageSelected: [{ type: i0.Output, args: ["languageSelected"] }] } });
|
|
110
123
|
|
|
111
124
|
class LanguageSelectorComponent {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
}
|
|
117
|
-
onSelectLanguage() {
|
|
118
|
-
this.toggleIsOpen();
|
|
119
|
-
}
|
|
120
|
-
// endregion
|
|
121
|
-
// region protected, private helper methods
|
|
122
|
-
toggleIsOpen() {
|
|
123
|
-
this.isOpen = !this.isOpen;
|
|
124
|
-
}
|
|
125
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: LanguageSelectorComponent, isStandalone: true, selector: "pp-language-selector", providers: [provideTranslocoScope({ scope: 'widgets' })], ngImport: i0, template: `
|
|
127
|
-
<div>
|
|
128
|
-
<button mat-icon-button (click)="onSelectLanguage()" cdkOverlayOrigin #trigger="cdkOverlayOrigin" aria-label="Select Language Button">
|
|
125
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LanguageSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
126
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LanguageSelectorComponent, isStandalone: true, selector: "pp-language-selector", providers: [provideTranslocoScope({ scope: 'widgets' })], ngImport: i0, template: `
|
|
127
|
+
<div class="language-selector-container">
|
|
128
|
+
<button mat-icon-button [matMenuTriggerFor]="langMenu" aria-label="Select Language Button">
|
|
129
129
|
<mat-icon>language</mat-icon>
|
|
130
130
|
</button>
|
|
131
|
+
<mat-menu #langMenu="matMenu">
|
|
132
|
+
<ng-container (click)="$event.stopPropagation()">
|
|
133
|
+
<pp-language-selector-list (languageSelected)="langMenu.closed.emit()" />
|
|
134
|
+
</ng-container>
|
|
135
|
+
</mat-menu>
|
|
131
136
|
</div>
|
|
132
|
-
|
|
133
|
-
<div class="language-selector-container">
|
|
134
|
-
<pp-language-selector-list (languageSelected)="onClose()" />
|
|
135
|
-
</div>
|
|
136
|
-
</ng-template>
|
|
137
|
-
`, isInline: true, styles: [".language-selector-container{display:flex;background:#eee}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: LanguageSelectorListComponent, selector: "pp-language-selector-list", outputs: ["languageSelected"] }] });
|
|
137
|
+
`, isInline: true, styles: [".language-dropdown{position:absolute;top:100%;right:0;z-index:1000;background:#fff;border-radius:8px;box-shadow:0 4px 16px #00000026;min-width:200px}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: LanguageSelectorListComponent, selector: "pp-language-selector-list", outputs: ["languageSelected"] }, { kind: "directive", type: MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "component", type: MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }] });
|
|
138
138
|
}
|
|
139
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
139
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LanguageSelectorComponent, decorators: [{
|
|
140
140
|
type: Component,
|
|
141
141
|
args: [{ selector: 'pp-language-selector', template: `
|
|
142
|
-
<div>
|
|
143
|
-
<button mat-icon-button
|
|
142
|
+
<div class="language-selector-container">
|
|
143
|
+
<button mat-icon-button [matMenuTriggerFor]="langMenu" aria-label="Select Language Button">
|
|
144
144
|
<mat-icon>language</mat-icon>
|
|
145
145
|
</button>
|
|
146
|
+
<mat-menu #langMenu="matMenu">
|
|
147
|
+
<ng-container (click)="$event.stopPropagation()">
|
|
148
|
+
<pp-language-selector-list (languageSelected)="langMenu.closed.emit()" />
|
|
149
|
+
</ng-container>
|
|
150
|
+
</mat-menu>
|
|
146
151
|
</div>
|
|
147
|
-
|
|
148
|
-
<div class="language-selector-container">
|
|
149
|
-
<pp-language-selector-list (languageSelected)="onClose()" />
|
|
150
|
-
</div>
|
|
151
|
-
</ng-template>
|
|
152
|
-
`, imports: [CdkOverlayOrigin, CdkConnectedOverlay, MatIcon, MatIconButton, LanguageSelectorListComponent], providers: [provideTranslocoScope({ scope: 'widgets' })], styles: [".language-selector-container{display:flex;background:#eee}\n"] }]
|
|
152
|
+
`, imports: [MatIcon, MatIconButton, LanguageSelectorListComponent, MatMenuTrigger, MatMenu], providers: [provideTranslocoScope({ scope: 'widgets' })], styles: [".language-dropdown{position:absolute;top:100%;right:0;z-index:1000;background:#fff;border-radius:8px;box-shadow:0 4px 16px #00000026;min-width:200px}\n"] }]
|
|
153
153
|
}] });
|
|
154
154
|
|
|
155
155
|
class LikeButtonComponent {
|
|
156
156
|
LIKES_PROPERTY = 'likes';
|
|
157
157
|
snackBar = inject(MatSnackBar);
|
|
158
|
-
likesCount = computed(() => this.store.entities().find((property) => property.name === this.LIKES_PROPERTY), ...(ngDevMode ? [{ debugName: "likesCount" }] : []));
|
|
158
|
+
likesCount = computed(() => this.store.entities().find((property) => property.name === this.LIKES_PROPERTY), ...(ngDevMode ? [{ debugName: "likesCount" }] : /* istanbul ignore next */ []));
|
|
159
159
|
store = inject(ApplicationPropertyStore);
|
|
160
160
|
constructor() {
|
|
161
161
|
this.configureEffects();
|
|
@@ -188,8 +188,8 @@ class LikeButtonComponent {
|
|
|
188
188
|
panelClass: ['error-snackbar'],
|
|
189
189
|
});
|
|
190
190
|
}
|
|
191
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
192
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
191
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LikeButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
192
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: LikeButtonComponent, isStandalone: true, selector: "pp-like-button", ngImport: i0, template: `
|
|
193
193
|
<div class="like-button">
|
|
194
194
|
<button mat-icon-button (click)="onLike()" aria-label="Like Button">
|
|
195
195
|
<mat-icon>favorite</mat-icon>
|
|
@@ -198,7 +198,7 @@ class LikeButtonComponent {
|
|
|
198
198
|
</div>
|
|
199
199
|
`, isInline: true, styles: [".like-button{position:relative;display:inline-block}.like-button span{position:absolute;bottom:0;right:5px;font-size:10px}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
|
|
200
200
|
}
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: LikeButtonComponent, decorators: [{
|
|
202
202
|
type: Component,
|
|
203
203
|
args: [{ selector: 'pp-like-button', template: `
|
|
204
204
|
<div class="like-button">
|
|
@@ -210,7 +210,116 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
210
210
|
`, imports: [MatIcon, MatIconButton], styles: [".like-button{position:relative;display:inline-block}.like-button span{position:absolute;bottom:0;right:5px;font-size:10px}\n"] }]
|
|
211
211
|
}], ctorParameters: () => [] });
|
|
212
212
|
|
|
213
|
+
class MatCardsGridComponent {
|
|
214
|
+
cards = [];
|
|
215
|
+
layoutService = inject(LayoutService);
|
|
216
|
+
hasValue(textValue) {
|
|
217
|
+
return textValue.length > 0;
|
|
218
|
+
}
|
|
219
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MatCardsGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
220
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: MatCardsGridComponent, isStandalone: true, selector: "mat-cards-grid", inputs: { cards: "cards" }, ngImport: i0, template: `
|
|
221
|
+
<div [ngClass]="layoutService.layoutClass()">
|
|
222
|
+
@for (card of cards; track $index) {
|
|
223
|
+
<ng-container *transloco="let t; prefix: card.translocoPrefix">
|
|
224
|
+
<mat-card class="default-mat-card">
|
|
225
|
+
<mat-card-header>
|
|
226
|
+
@if (hasValue(card.title)) {
|
|
227
|
+
<mat-card-title>{{ t(card.title) }}</mat-card-title>
|
|
228
|
+
}
|
|
229
|
+
@if (hasValue(card.subtitle)) {
|
|
230
|
+
<mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>
|
|
231
|
+
}
|
|
232
|
+
@if (card.icon) {
|
|
233
|
+
<span class="toolbar-spacer"></span>
|
|
234
|
+
<button mat-icon-button>
|
|
235
|
+
<mat-icon class="icon-large material-symbols-outlined">{{ card.icon }}</mat-icon>
|
|
236
|
+
</button>
|
|
237
|
+
}
|
|
238
|
+
</mat-card-header>
|
|
239
|
+
@if (hasValue(card.content)) {
|
|
240
|
+
<mat-card-content>
|
|
241
|
+
<div>
|
|
242
|
+
{{ t(card.content[0]) }}
|
|
243
|
+
@if (card.content.length > 1) {
|
|
244
|
+
<ul>
|
|
245
|
+
@for (item of card.content.slice(1); track $index) {
|
|
246
|
+
<li>{{ t(item) }}</li>
|
|
247
|
+
}
|
|
248
|
+
</ul>
|
|
249
|
+
}
|
|
250
|
+
</div>
|
|
251
|
+
</mat-card-content>
|
|
252
|
+
}
|
|
253
|
+
@if (card.actions && card.actions.length > 0) {
|
|
254
|
+
<mat-card-actions>
|
|
255
|
+
@for (action of card.actions; track $index) {
|
|
256
|
+
<ng-container>
|
|
257
|
+
<button [matButton]="action.buttonType ?? 'elevated'" [routerLink]="action.link">{{ t(action.caption) }}</button>
|
|
258
|
+
</ng-container>
|
|
259
|
+
}
|
|
260
|
+
</mat-card-actions>
|
|
261
|
+
}
|
|
262
|
+
</mat-card>
|
|
263
|
+
</ng-container>
|
|
264
|
+
}
|
|
265
|
+
</div>
|
|
266
|
+
`, isInline: true, styles: [".web-layout{display:grid;grid-template-columns:repeat(3,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.tablet-layout{display:grid;grid-template-columns:repeat(2,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.handset-layout{display:grid;grid-template-columns:repeat(1,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.default-mat-card{display:flex;flex-direction:column;background-color:#99d9eb}mat-card-title{font-family:Winky Sans,sans-serif}mat-card-content{flex-grow:1;overflow:auto;font-family:cursive;font-size:medium;text-align:left;padding-bottom:10px}.icon-large{font-size:36px;width:36px;height:36px;margin-top:-10px;margin-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
|
|
267
|
+
}
|
|
268
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: MatCardsGridComponent, decorators: [{
|
|
269
|
+
type: Component,
|
|
270
|
+
args: [{ selector: 'mat-cards-grid', standalone: true, imports: [MatCardModule, MatButtonModule, RouterLink, TranslocoDirective, NgClass, MatIcon], template: `
|
|
271
|
+
<div [ngClass]="layoutService.layoutClass()">
|
|
272
|
+
@for (card of cards; track $index) {
|
|
273
|
+
<ng-container *transloco="let t; prefix: card.translocoPrefix">
|
|
274
|
+
<mat-card class="default-mat-card">
|
|
275
|
+
<mat-card-header>
|
|
276
|
+
@if (hasValue(card.title)) {
|
|
277
|
+
<mat-card-title>{{ t(card.title) }}</mat-card-title>
|
|
278
|
+
}
|
|
279
|
+
@if (hasValue(card.subtitle)) {
|
|
280
|
+
<mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>
|
|
281
|
+
}
|
|
282
|
+
@if (card.icon) {
|
|
283
|
+
<span class="toolbar-spacer"></span>
|
|
284
|
+
<button mat-icon-button>
|
|
285
|
+
<mat-icon class="icon-large material-symbols-outlined">{{ card.icon }}</mat-icon>
|
|
286
|
+
</button>
|
|
287
|
+
}
|
|
288
|
+
</mat-card-header>
|
|
289
|
+
@if (hasValue(card.content)) {
|
|
290
|
+
<mat-card-content>
|
|
291
|
+
<div>
|
|
292
|
+
{{ t(card.content[0]) }}
|
|
293
|
+
@if (card.content.length > 1) {
|
|
294
|
+
<ul>
|
|
295
|
+
@for (item of card.content.slice(1); track $index) {
|
|
296
|
+
<li>{{ t(item) }}</li>
|
|
297
|
+
}
|
|
298
|
+
</ul>
|
|
299
|
+
}
|
|
300
|
+
</div>
|
|
301
|
+
</mat-card-content>
|
|
302
|
+
}
|
|
303
|
+
@if (card.actions && card.actions.length > 0) {
|
|
304
|
+
<mat-card-actions>
|
|
305
|
+
@for (action of card.actions; track $index) {
|
|
306
|
+
<ng-container>
|
|
307
|
+
<button [matButton]="action.buttonType ?? 'elevated'" [routerLink]="action.link">{{ t(action.caption) }}</button>
|
|
308
|
+
</ng-container>
|
|
309
|
+
}
|
|
310
|
+
</mat-card-actions>
|
|
311
|
+
}
|
|
312
|
+
</mat-card>
|
|
313
|
+
</ng-container>
|
|
314
|
+
}
|
|
315
|
+
</div>
|
|
316
|
+
`, styles: [".web-layout{display:grid;grid-template-columns:repeat(3,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.tablet-layout{display:grid;grid-template-columns:repeat(2,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.handset-layout{display:grid;grid-template-columns:repeat(1,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.default-mat-card{display:flex;flex-direction:column;background-color:#99d9eb}mat-card-title{font-family:Winky Sans,sans-serif}mat-card-content{flex-grow:1;overflow:auto;font-family:cursive;font-size:medium;text-align:left;padding-bottom:10px}.icon-large{font-size:36px;width:36px;height:36px;margin-top:-10px;margin-right:10px}\n"] }]
|
|
317
|
+
}], propDecorators: { cards: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}] } });
|
|
320
|
+
|
|
213
321
|
class NavigateBackService {
|
|
322
|
+
noRouteAvailable = new BehaviorSubject('');
|
|
214
323
|
routeHistory = new Stack();
|
|
215
324
|
router = inject(Router);
|
|
216
325
|
constructor() {
|
|
@@ -231,6 +340,7 @@ class NavigateBackService {
|
|
|
231
340
|
}
|
|
232
341
|
else {
|
|
233
342
|
console.log('No previous routes to navigate back to.');
|
|
343
|
+
this.noRouteAvailable.next('No previous routes to navigate back to.');
|
|
234
344
|
}
|
|
235
345
|
}
|
|
236
346
|
getRouteStack() {
|
|
@@ -246,10 +356,10 @@ class NavigateBackService {
|
|
|
246
356
|
this.routeHistory.push(route);
|
|
247
357
|
}
|
|
248
358
|
}
|
|
249
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
250
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
359
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NavigateBackService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
360
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NavigateBackService, providedIn: 'root' });
|
|
251
361
|
}
|
|
252
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
362
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NavigateBackService, decorators: [{
|
|
253
363
|
type: Injectable,
|
|
254
364
|
args: [{ providedIn: 'root' }]
|
|
255
365
|
}], ctorParameters: () => [] });
|
|
@@ -260,14 +370,14 @@ class NavigateBackComponent {
|
|
|
260
370
|
onNavigateBack() {
|
|
261
371
|
this.service.goBack(); // Call the service to handle navigation
|
|
262
372
|
}
|
|
263
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
264
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
373
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NavigateBackComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
374
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: NavigateBackComponent, isStandalone: true, selector: "pp-navigate-back", ngImport: i0, template: `
|
|
265
375
|
<button mat-icon-button aria-label="Go back" (click)="onNavigateBack()">
|
|
266
376
|
<mat-icon class="material-symbols-outlined fat-back-arrow">arrow_back</mat-icon>
|
|
267
377
|
</button>
|
|
268
378
|
`, isInline: true, styles: [".fat-back-arrow{font-size:24px;font-variation-settings:\"wght\" 1200;color:#000}\n"], dependencies: [{ kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }] });
|
|
269
379
|
}
|
|
270
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: NavigateBackComponent, decorators: [{
|
|
271
381
|
type: Component,
|
|
272
382
|
args: [{ selector: 'pp-navigate-back', imports: [MatIcon, MatIconButton], template: `
|
|
273
383
|
<button mat-icon-button aria-label="Go back" (click)="onNavigateBack()">
|
|
@@ -308,8 +418,8 @@ class ShareButtonComponent {
|
|
|
308
418
|
toggleIsOpen() {
|
|
309
419
|
this.isOpen = !this.isOpen;
|
|
310
420
|
}
|
|
311
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
312
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
421
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
422
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.2.4", type: ShareButtonComponent, isStandalone: true, selector: "pp-share-button", ngImport: i0, template: `
|
|
313
423
|
<div>
|
|
314
424
|
<button mat-icon-button (click)="onShare()" cdkOverlayOrigin #trigger="cdkOverlayOrigin" aria-label="Share Button">
|
|
315
425
|
<mat-icon>share</mat-icon>
|
|
@@ -320,9 +430,9 @@ class ShareButtonComponent {
|
|
|
320
430
|
<share-buttons />
|
|
321
431
|
</div>
|
|
322
432
|
</ng-template>
|
|
323
|
-
`, isInline: true, styles: [".share-buttons-container{display:flex;background:#eee}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: ShareButtons, selector: "share-buttons", inputs: ["show", "include", "exclude", "expanded", "theme", "url", "title", "description", "image", "tags", "redirectUrl", "showIcon", "showText", "disabled"], outputs: ["expandedChange", "opened"] }] });
|
|
433
|
+
`, isInline: true, styles: [".share-buttons-container{display:flex;background:#eee}\n"], dependencies: [{ kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "directive", type: CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: ShareButtons, selector: "share-buttons", inputs: ["show", "include", "exclude", "expanded", "theme", "url", "title", "description", "image", "tags", "redirectUrl", "showIcon", "showText", "disabled"], outputs: ["expandedChange", "opened"] }] });
|
|
324
434
|
}
|
|
325
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
435
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonComponent, decorators: [{
|
|
326
436
|
type: Component,
|
|
327
437
|
args: [{ selector: 'pp-share-button', template: `
|
|
328
438
|
<div>
|
|
@@ -339,11 +449,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
339
449
|
}] });
|
|
340
450
|
|
|
341
451
|
class ShareButtonModule {
|
|
342
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
343
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
344
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
452
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
453
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonModule });
|
|
454
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonModule, providers: [provideShareButtonsOptions(shareIcons())] });
|
|
345
455
|
}
|
|
346
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
456
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ShareButtonModule, decorators: [{
|
|
347
457
|
type: NgModule,
|
|
348
458
|
args: [{
|
|
349
459
|
imports: [],
|
|
@@ -353,28 +463,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
353
463
|
}] });
|
|
354
464
|
|
|
355
465
|
class TranslocoHttpLoader {
|
|
356
|
-
http;
|
|
357
|
-
// eslint-disable-next-line @angular-eslint/prefer-inject
|
|
358
|
-
constructor(http) {
|
|
359
|
-
this.http = http;
|
|
360
|
-
}
|
|
466
|
+
http = inject(HttpClient);
|
|
361
467
|
getTranslation(lang) {
|
|
362
468
|
const path = `/assets/i18n/${lang}.json`;
|
|
363
469
|
console.log(`Loading translations from: ${path}`);
|
|
364
470
|
return this.http.get(path);
|
|
365
471
|
}
|
|
366
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
367
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
472
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: TranslocoHttpLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
473
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: TranslocoHttpLoader, providedIn: 'root' });
|
|
368
474
|
}
|
|
369
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: TranslocoHttpLoader, decorators: [{
|
|
370
476
|
type: Injectable,
|
|
371
477
|
args: [{ providedIn: 'root' }]
|
|
372
|
-
}]
|
|
478
|
+
}] });
|
|
373
479
|
|
|
374
480
|
class WidgetsModule {
|
|
375
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
376
|
-
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
377
|
-
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
481
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: WidgetsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
482
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.2.4", ngImport: i0, type: WidgetsModule, imports: [TranslocoModule], exports: [TranslocoModule] });
|
|
483
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: WidgetsModule, providers: [
|
|
378
484
|
provideShareButtonsOptions(shareIcons()),
|
|
379
485
|
// provideI18Configuration(),
|
|
380
486
|
provideTransloco({
|
|
@@ -389,7 +495,7 @@ class WidgetsModule {
|
|
|
389
495
|
}),
|
|
390
496
|
], imports: [TranslocoModule, TranslocoModule] });
|
|
391
497
|
}
|
|
392
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
498
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: WidgetsModule, decorators: [{
|
|
393
499
|
type: NgModule,
|
|
394
500
|
args: [{
|
|
395
501
|
imports: [TranslocoModule],
|
|
@@ -411,7 +517,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
411
517
|
}]
|
|
412
518
|
}] });
|
|
413
519
|
|
|
414
|
-
const widgetsRoutes = [{ path: 'anything', component: LanguageSelectorComponent }];
|
|
520
|
+
const widgetsRoutes = [{ path: 'anything', component: LanguageSelectorComponent, providers: [provideTranslocoScope('widgets')] }];
|
|
415
521
|
|
|
416
522
|
/*
|
|
417
523
|
* Public API Surface of @processpuzzle/widgets
|
|
@@ -421,5 +527,5 @@ const widgetsRoutes = [{ path: 'anything', component: LanguageSelectorComponent
|
|
|
421
527
|
* Generated bundle index. Do not edit.
|
|
422
528
|
*/
|
|
423
529
|
|
|
424
|
-
export { ApplicationProperty, ApplicationPropertyStore, LanguageSelectorComponent, LikeButtonComponent, NavigateBackComponent, NavigateBackService, ShareButtonComponent, ShareButtonModule, TranslocoHttpLoader, WidgetsModule, provideAppPropertyStore, widgetsRoutes };
|
|
530
|
+
export { ApplicationProperty, ApplicationPropertyStore, LanguageSelectorComponent, LikeButtonComponent, MatCardsGridComponent, NavigateBackComponent, NavigateBackService, ShareButtonComponent, ShareButtonModule, TranslocoHttpLoader, WidgetsModule, provideAppPropertyStore, widgetsRoutes };
|
|
425
531
|
//# sourceMappingURL=processpuzzle-widgets.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"processpuzzle-widgets.mjs","sources":["../../../../libs/widgets/src/app-property/app-property.ts","../../../../libs/widgets/src/app-property/app-property.service.ts","../../../../libs/widgets/src/app-property/app-property.store.ts","../../../../libs/widgets/src/language-selector/language-selector-list.component.ts","../../../../libs/widgets/src/language-selector/language-selector.component.ts","../../../../libs/widgets/src/like-button/like-button.component.ts","../../../../libs/widgets/src/navigate-back/navigate-back.service.ts","../../../../libs/widgets/src/navigate-back/navigate-back.component.ts","../../../../libs/widgets/src/app-property/app-property.mapper.ts","../../../../libs/widgets/src/app-property/app-property-store.provider.ts","../../../../libs/widgets/src/share-button/share-button.component.ts","../../../../libs/widgets/src/share-button/share-button.module.ts","../../../../libs/widgets/src/language-selector/transloco.loader.ts","../../../../libs/widgets/src/widgets.module.ts","../../../../libs/widgets/src/widgets.routes.ts","../../../../libs/widgets/src/public-api.ts","../../../../libs/widgets/src/processpuzzle-widgets.ts"],"sourcesContent":["import { BaseEntity } from '@processpuzzle/base-entity';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class ApplicationProperty implements BaseEntity {\n readonly id: string;\n private readonly propertyName: string;\n private propertyValue: string;\n\n constructor(id?: string, name?: string, value?: string) {\n this.id = id ?? uuidv4();\n this.propertyName = name ?? '';\n this.propertyValue = value ?? '';\n }\n\n // region properties\n public get name() {\n return this.propertyName;\n }\n\n public get value() {\n return this.propertyValue;\n }\n\n public set value(newValue: string) {\n this.propertyValue = newValue;\n }\n\n // endregion\n}\n","import { ApplicationProperty } from './app-property';\nimport { BaseEntityFirestoreService } from '@processpuzzle/base-entity';\nimport { ApplicationPropertyMapper } from './app-property.mapper';\n\nexport class ApplicationPropertyService extends BaseEntityFirestoreService<ApplicationProperty> {\n constructor(protected override entityMapper: ApplicationPropertyMapper) {\n super(entityMapper, 'application-properties');\n }\n}\n","import { signalStore } from '@ngrx/signals';\nimport { BaseEntityContainerStore, BaseEntityStore, BaseEntityTabsStore, BaseFormNavigatorStore } from '@processpuzzle/base-entity';\nimport { ApplicationProperty } from './app-property';\nimport { ApplicationPropertyService } from './app-property.service';\n\nexport const ApplicationPropertyStore = signalStore(\n { providedIn: 'root' },\n BaseEntityStore<ApplicationProperty>(ApplicationProperty, ApplicationPropertyService),\n BaseFormNavigatorStore('ApplicationProperty'),\n BaseEntityTabsStore(),\n BaseEntityContainerStore(),\n);\n","import { Component, inject, output } from '@angular/core';\nimport { RUNTIME_CONFIGURATION } from '@processpuzzle/util';\nimport { LanguageConfig } from './language-config';\nimport { provideTranslocoScope, TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { NgClass, NgForOf } from '@angular/common';\nimport { MatListOption, MatSelectionList, MatSelectionListChange } from '@angular/material/list';\n\n@Component({\n selector: 'pp-language-selector-list',\n template: `\n <ng-container *transloco=\"let t\">\n <div class=\"language-selector\">\n <mat-selection-list #selectionList (selectionChange)=\"onSelectionChange($event)\" [multiple]=\"false\">\n <mat-list-option\n *ngFor=\"let language of languages\"\n [value]=\"language.code\"\n [selected]=\"selectedLanguage === language.code\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"selectedLanguage === language.code ? 'true' : 'false'\"\n >\n <span [ngClass]=\"language.flag\"> - </span>\n <span>{{ t('widgets.' + language.label) }}</span>\n </mat-list-option>\n </mat-selection-list>\n </div>\n </ng-container>\n `,\n styleUrls: ['language-selector-list.component.css'],\n imports: [NgClass, NgForOf, TranslocoDirective, MatListOption, MatSelectionList],\n providers: [provideTranslocoScope('widgets')],\n})\nexport class LanguageSelectorListComponent {\n private readonly translocoService = inject(TranslocoService);\n private readonly runtimeConfiguration: LanguageConfig = inject(RUNTIME_CONFIGURATION);\n readonly languages = this.runtimeConfiguration.AVAILABLE_LANGUAGES;\n languageSelected = output<void>();\n selectedLanguage = this.translocoService.getActiveLang();\n\n // region event handling methods\n onSelectionChange(event: MatSelectionListChange) {\n const selectedOption = event.source;\n const selectedValue = selectedOption.selectedOptions.selected[0]?.value;\n\n if (this.selectedLanguage !== selectedValue) {\n this.translocoService.setActiveLang(selectedValue);\n this.selectedLanguage = selectedValue;\n this.languageSelected.emit();\n }\n }\n\n // endregion\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { LanguageSelectorListComponent } from './language-selector-list.component';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\n@Component({\n selector: 'pp-language-selector',\n template: `\n <div>\n <button mat-icon-button (click)=\"onSelectLanguage()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" aria-label=\"Select Language Button\">\n <mat-icon>language</mat-icon>\n </button>\n </div>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"isOpen\" [cdkConnectedOverlayHasBackdrop]=\"true\" (backdropClick)=\"onClose()\">\n <div class=\"language-selector-container\">\n <pp-language-selector-list (languageSelected)=\"onClose()\" />\n </div>\n </ng-template>\n `,\n styleUrls: ['./language-selector.component.css'],\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MatIcon, MatIconButton, LanguageSelectorListComponent],\n providers: [provideTranslocoScope({ scope: 'widgets' })],\n})\nexport class LanguageSelectorComponent {\n isOpen = false;\n\n // region Event handler methods\n onClose(): void {\n this.isOpen = false;\n }\n\n onSelectLanguage(): void {\n this.toggleIsOpen();\n }\n\n // endregion\n\n // region protected, private helper methods\n private toggleIsOpen(): void {\n this.isOpen = !this.isOpen;\n }\n\n // endregion\n}\n","import { Component, computed, effect, inject } from '@angular/core';\nimport { ApplicationPropertyStore } from '../app-property/app-property.store';\nimport { ApplicationProperty } from '../app-property/app-property';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'pp-like-button',\n template: `\n <div class=\"like-button\">\n <button mat-icon-button (click)=\"onLike()\" aria-label=\"Like Button\">\n <mat-icon>favorite</mat-icon>\n </button>\n <span>{{ likesCount()?.value }}</span>\n </div>\n `,\n styleUrls: ['./like-button.component.css'],\n imports: [MatIcon, MatIconButton],\n})\nexport class LikeButtonComponent {\n private readonly LIKES_PROPERTY = 'likes';\n private readonly snackBar = inject<MatSnackBar>(MatSnackBar);\n likesCount = computed(() => this.store.entities().find((property) => property.name === this.LIKES_PROPERTY));\n readonly store = inject(ApplicationPropertyStore);\n\n constructor() {\n this.configureEffects();\n }\n\n // region event handling methods\n onLike(): void {\n const count = this.likesCount();\n if (count) {\n count.value = (parseInt(count.value, 10) + 1).toString();\n this.store.update(count);\n } else {\n this.store.add(new ApplicationProperty(undefined, this.LIKES_PROPERTY, '1'));\n }\n }\n\n // endregion\n\n // region protected, private helper methods\n private configureEffects() {\n effect(() => {\n const currentError = this.store.error();\n\n if (currentError) {\n this.showErrorMessage(currentError);\n this.store.resetErrorState();\n }\n });\n }\n\n private showErrorMessage(error: string): void {\n this.snackBar.open(error, 'Close', {\n duration: 5000,\n panelClass: ['error-snackbar'],\n });\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Stack } from '@processpuzzle/util';\nimport { NavigationEnd, Router } from '@angular/router';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigateBackService {\n private readonly routeHistory = new Stack<string>();\n private readonly router = inject<Router>(Router);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.addRouteToStack(event.urlAfterRedirects); // Add the current route to the stack\n }\n });\n }\n\n // region public accessor methods\n public goBack(): void {\n if (this.routeHistory.size() > 1) {\n this.routeHistory.pop(); // Remove current route\n const previousRoute = this.routeHistory.pop(); // Get the previous route\n if (previousRoute) {\n this.router.navigateByUrl(previousRoute); // Navigate to the previous route\n }\n } else {\n console.log('No previous routes to navigate back to.');\n }\n }\n\n public getRouteStack(): Stack<string> {\n return this.routeHistory;\n }\n\n public clearHistory(): void {\n this.routeHistory.clear();\n }\n\n // endregion\n\n // protected, private helper methods\n private addRouteToStack(route: string): void {\n if (this.routeHistory.size() === 0 || this.routeHistory.peek() !== route) {\n this.routeHistory.push(route);\n }\n }\n\n // endregion\n}\n","import { Component, inject } from '@angular/core';\nimport { NavigateBackService } from './navigate-back.service';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\n\n@Component({\n selector: 'pp-navigate-back',\n imports: [MatIcon, MatIconButton],\n template: `\n <button mat-icon-button aria-label=\"Go back\" (click)=\"onNavigateBack()\">\n <mat-icon class=\"material-symbols-outlined fat-back-arrow\">arrow_back</mat-icon>\n </button>\n `,\n styles: [\n `\n .fat-back-arrow {\n font-size: 24px; /* Größerer und fetterer Pfeil */\n font-variation-settings: 'wght' 1200; /* Fettigkeitsgrad (700 = fett) */\n color: #000; /* Schwarz als Farbe */\n }\n `,\n ],\n})\nexport class NavigateBackComponent {\n readonly service = inject(NavigateBackService);\n\n // region event handling methods\n onNavigateBack(): void {\n this.service.goBack(); // Call the service to handle navigation\n }\n\n // endregion\n}\n","import { ApplicationProperty } from './app-property';\nimport { BaseEntityMapper } from '@processpuzzle/base-entity';\n\nexport class ApplicationPropertyMapper implements BaseEntityMapper<ApplicationProperty> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fromDto(dto: any): ApplicationProperty {\n return new ApplicationProperty(dto.id, dto.name, dto.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toDto(entity: ApplicationProperty): any {\n return { id: entity.id, name: entity.name, value: entity.value };\n }\n}\n","import { ApplicationPropertyStore } from './app-property.store';\nimport { EnvironmentInjector, Provider } from '@angular/core';\nimport { ApplicationPropertyService } from './app-property.service';\nimport { ApplicationPropertyMapper } from './app-property.mapper';\n\nexport function provideAppPropertyStore(): Provider[] {\n return [\n { provide: ApplicationPropertyService, useFactory: () => new ApplicationPropertyService(new ApplicationPropertyMapper()), deps: [EnvironmentInjector] },\n { provide: ApplicationPropertyStore, useFactory: () => new ApplicationPropertyStore(), deps: [ApplicationPropertyService] },\n ];\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ShareButtons } from 'ngx-sharebuttons/buttons';\n\n@Component({\n selector: 'pp-share-button',\n template: `\n <div>\n <button mat-icon-button (click)=\"onShare()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" aria-label=\"Share Button\">\n <mat-icon>share</mat-icon>\n </button>\n </div>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"isOpen\" [cdkConnectedOverlayHasBackdrop]=\"true\" (backdropClick)=\"onClose()\">\n <div class=\"share-buttons-container\">\n <share-buttons />\n </div>\n </ng-template>\n `,\n styleUrls: ['./share-button.component.css'],\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MatIcon, MatIconButton, ShareButtons],\n})\nexport class ShareButtonComponent {\n isOpen = false;\n\n // region Event handler methods\n onClose(): void {\n this.isOpen = false;\n }\n\n onShare(): void {\n this.toggleIsOpen();\n }\n\n // endregion\n\n // region protected, private helper methods\n private toggleIsOpen(): void {\n this.isOpen = !this.isOpen;\n }\n\n // endregion\n}\n","import { NgModule } from '@angular/core';\nimport { provideShareButtonsOptions } from 'ngx-sharebuttons';\nimport { shareIcons } from 'ngx-sharebuttons/icons';\n\n@NgModule({\n imports: [],\n declarations: [],\n providers: [provideShareButtonsOptions(shareIcons())],\n})\nexport class ShareButtonModule {}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Translation, TranslocoLoader } from '@jsverse/transloco';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoHttpLoader implements TranslocoLoader {\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(private readonly http: HttpClient) {}\n\n getTranslation(lang: string): Observable<Translation> {\n const path = `/assets/i18n/${lang}.json`;\n console.log(`Loading translations from: ${path}`);\n return this.http.get<Translation>(path);\n }\n}\n","import { provideTransloco, TranslocoModule } from '@jsverse/transloco';\nimport { isDevMode, NgModule } from '@angular/core';\nimport { provideShareButtonsOptions } from 'ngx-sharebuttons';\nimport { shareIcons } from 'ngx-sharebuttons/icons';\nimport { TranslocoHttpLoader } from './language-selector/transloco.loader';\n\n@NgModule({\n imports: [TranslocoModule],\n exports: [TranslocoModule],\n providers: [\n provideShareButtonsOptions(shareIcons()),\n // provideI18Configuration(),\n provideTransloco({\n config: {\n availableLangs: ['de', 'en', 'es', 'fr', 'hu'],\n defaultLang: 'en',\n fallbackLang: ['en'],\n reRenderOnLangChange: true,\n prodMode: !isDevMode(),\n },\n loader: TranslocoHttpLoader,\n }),\n ],\n})\nexport class WidgetsModule {}\n","import { Routes } from '@angular/router';\nimport { LanguageSelectorComponent } from './language-selector/language-selector.component';\n\nexport const widgetsRoutes: Routes = [{ path: 'anything', component: LanguageSelectorComponent }];\n","/*\n * Public API Surface of @processpuzzle/widgets\n */\n\nexport { ApplicationProperty } from './app-property/app-property';\nexport { ApplicationPropertyStore } from './app-property/app-property.store';\nexport { LanguageConfig, LanguageDefinition } from './language-selector/language-config';\nexport { LanguageSelectorComponent } from './language-selector/language-selector.component';\nexport { LikeButtonComponent } from './like-button/like-button.component';\nexport { NavigateBackComponent } from './navigate-back/navigate-back.component';\nexport { NavigateBackService } from './navigate-back/navigate-back.service';\nexport { provideAppPropertyStore } from './app-property/app-property-store.provider';\nexport { ShareButtonComponent } from './share-button/share-button.component';\nexport { ShareButtonModule } from './share-button/share-button.module';\nexport { TranslocoHttpLoader } from './language-selector/transloco.loader';\nexport { WidgetsModule } from './widgets.module';\nexport { widgetsRoutes } from './widgets.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"processpuzzle-widgets.mjs","sources":["../../../../libs/widgets/src/app-property/app-property.ts","../../../../libs/widgets/src/app-property/app-property.service.ts","../../../../libs/widgets/src/app-property/app-property.store.ts","../../../../libs/widgets/src/language-selector/language-selector-list.component.ts","../../../../libs/widgets/src/language-selector/language-selector.component.ts","../../../../libs/widgets/src/like-button/like-button.component.ts","../../../../libs/widgets/src/mat-cards-grid/mat-cards-grid.component.ts","../../../../libs/widgets/src/navigate-back/navigate-back.service.ts","../../../../libs/widgets/src/navigate-back/navigate-back.component.ts","../../../../libs/widgets/src/app-property/app-property.mapper.ts","../../../../libs/widgets/src/app-property/app-property-store.provider.ts","../../../../libs/widgets/src/share-button/share-button.component.ts","../../../../libs/widgets/src/share-button/share-button.module.ts","../../../../libs/widgets/src/language-selector/transloco.loader.ts","../../../../libs/widgets/src/widgets.module.ts","../../../../libs/widgets/src/widgets.routes.ts","../../../../libs/widgets/src/public-api.ts","../../../../libs/widgets/src/processpuzzle-widgets.ts"],"sourcesContent":["import { BaseEntity } from '@processpuzzle/base-entity';\nimport { v4 as uuidv4 } from 'uuid';\n\nexport class ApplicationProperty implements BaseEntity {\n readonly id: string;\n private readonly propertyName: string;\n private propertyValue: string;\n\n constructor(id?: string, name?: string, value?: string) {\n this.id = id ?? uuidv4();\n this.propertyName = name ?? '';\n this.propertyValue = value ?? '';\n }\n\n // region properties\n public get name() {\n return this.propertyName;\n }\n\n public get value() {\n return this.propertyValue;\n }\n\n public set value(newValue: string) {\n this.propertyValue = newValue;\n }\n\n // endregion\n}\n","import { ApplicationProperty } from './app-property';\nimport { BaseEntityFirestoreService } from '@processpuzzle/base-entity';\nimport { ApplicationPropertyMapper } from './app-property.mapper';\n\nexport class ApplicationPropertyService extends BaseEntityFirestoreService<ApplicationProperty> {\n constructor(protected override entityMapper: ApplicationPropertyMapper) {\n super(entityMapper, 'application-properties');\n }\n}\n","import { signalStore } from '@ngrx/signals';\nimport { BaseEntityContainerStore, BaseEntityStore, BaseEntityTabsStore, BaseFormNavigatorStore } from '@processpuzzle/base-entity';\nimport { ApplicationProperty } from './app-property';\nimport { ApplicationPropertyService } from './app-property.service';\n\nexport const ApplicationPropertyStore = signalStore(\n { providedIn: 'root' },\n BaseEntityStore<ApplicationProperty>(ApplicationProperty, ApplicationPropertyService),\n BaseFormNavigatorStore('ApplicationProperty'),\n BaseEntityTabsStore(),\n BaseEntityContainerStore(),\n);\n","import { Component, inject, output } from '@angular/core';\nimport { RUNTIME_CONFIGURATION } from '@processpuzzle/util';\nimport { provideTranslocoScope, TranslocoDirective, TranslocoService } from '@jsverse/transloco';\nimport { NgClass } from '@angular/common';\nimport { MatListOption, MatSelectionList, MatSelectionListChange } from '@angular/material/list';\nimport { LanguageConfig } from './language-config';\n\n@Component({\n selector: 'pp-language-selector-list',\n template: `\n <ng-container *transloco=\"let t\">\n <div class=\"language-selector\">\n <mat-selection-list #selectionList (selectionChange)=\"onSelectionChange($event)\" [multiple]=\"false\">\n @for (language of languages; track language.code) {\n <mat-list-option\n [value]=\"language.code\"\n [selected]=\"selectedLanguage === language.code\"\n tabindex=\"0\"\n role=\"option\"\n [attr.aria-selected]=\"selectedLanguage === language.code ? 'true' : 'false'\"\n >\n <span [ngClass]=\"language.flag\"> - </span>\n <span class=\"language-label\">{{ t('widgets.' + language.label) }}</span>\n </mat-list-option>\n }\n </mat-selection-list>\n </div>\n </ng-container>\n `,\n styleUrls: ['language-selector-list.component.css'],\n imports: [NgClass, TranslocoDirective, MatListOption, MatSelectionList],\n providers: [provideTranslocoScope({ scope: 'widgets' })],\n})\nexport class LanguageSelectorListComponent {\n private readonly translocoService = inject(TranslocoService);\n private readonly runtimeConfiguration = inject(RUNTIME_CONFIGURATION) as { LANGUAGE_CONFIGURATION: LanguageConfig };\n readonly languages = this.runtimeConfiguration.LANGUAGE_CONFIGURATION.AVAILABLE_LANGUAGES;\n languageSelected = output<void>();\n private _selectedLanguage?: string;\n\n constructor() {\n this._selectedLanguage = this.translocoService.getActiveLang();\n }\n\n get selectedLanguage(): string {\n return this._selectedLanguage ?? this.translocoService.getActiveLang();\n }\n\n // region event handling methods\n onSelectionChange(event: MatSelectionListChange) {\n const selectedOption = event.source;\n const selectedValue = selectedOption.selectedOptions.selected[0]?.value;\n\n if (this.selectedLanguage !== selectedValue) {\n this.translocoService.setActiveLang(selectedValue);\n this._selectedLanguage = selectedValue;\n this.languageSelected.emit();\n }\n }\n\n // endregion\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { LanguageSelectorListComponent } from './language-selector-list.component';\nimport { provideTranslocoScope } from '@jsverse/transloco';\nimport { MatMenu, MatMenuTrigger } from '@angular/material/menu';\n\n@Component({\n selector: 'pp-language-selector',\n template: `\n <div class=\"language-selector-container\">\n <button mat-icon-button [matMenuTriggerFor]=\"langMenu\" aria-label=\"Select Language Button\">\n <mat-icon>language</mat-icon>\n </button>\n <mat-menu #langMenu=\"matMenu\">\n <ng-container (click)=\"$event.stopPropagation()\">\n <pp-language-selector-list (languageSelected)=\"langMenu.closed.emit()\" />\n </ng-container>\n </mat-menu>\n </div>\n `,\n styleUrls: ['./language-selector.component.css'],\n imports: [MatIcon, MatIconButton, LanguageSelectorListComponent, MatMenuTrigger, MatMenu],\n providers: [provideTranslocoScope({ scope: 'widgets' })],\n})\nexport class LanguageSelectorComponent {\n // region Event handler methods\n // endregion\n // region protected, private helper methods\n // endregion\n}\n","import { Component, computed, effect, inject } from '@angular/core';\nimport { ApplicationPropertyStore } from '../app-property/app-property.store';\nimport { ApplicationProperty } from '../app-property/app-property';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\n@Component({\n selector: 'pp-like-button',\n template: `\n <div class=\"like-button\">\n <button mat-icon-button (click)=\"onLike()\" aria-label=\"Like Button\">\n <mat-icon>favorite</mat-icon>\n </button>\n <span>{{ likesCount()?.value }}</span>\n </div>\n `,\n styleUrls: ['./like-button.component.css'],\n imports: [MatIcon, MatIconButton],\n})\nexport class LikeButtonComponent {\n private readonly LIKES_PROPERTY = 'likes';\n private readonly snackBar = inject<MatSnackBar>(MatSnackBar);\n likesCount = computed(() => this.store.entities().find((property) => property.name === this.LIKES_PROPERTY));\n readonly store = inject(ApplicationPropertyStore);\n\n constructor() {\n this.configureEffects();\n }\n\n // region event handling methods\n onLike(): void {\n const count = this.likesCount();\n if (count) {\n count.value = (parseInt(count.value, 10) + 1).toString();\n this.store.update(count);\n } else {\n this.store.add(new ApplicationProperty(undefined, this.LIKES_PROPERTY, '1'));\n }\n }\n\n // endregion\n\n // region protected, private helper methods\n private configureEffects() {\n effect(() => {\n const currentError = this.store.error();\n\n if (currentError) {\n this.showErrorMessage(currentError);\n this.store.resetErrorState();\n }\n });\n }\n\n private showErrorMessage(error: string): void {\n this.snackBar.open(error, 'Close', {\n duration: 5000,\n panelClass: ['error-snackbar'],\n });\n }\n}\n","import { Component, inject, Input } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgClass } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { CardsGridSpec } from './cards-spec';\nimport { LayoutService } from '@processpuzzle/util';\nimport { MatIcon } from '@angular/material/icon';\n\n@Component({\n selector: 'mat-cards-grid',\n standalone: true,\n imports: [MatCardModule, MatButtonModule, RouterLink, TranslocoDirective, NgClass, MatIcon],\n template: `\n <div [ngClass]=\"layoutService.layoutClass()\">\n @for (card of cards; track $index) {\n <ng-container *transloco=\"let t; prefix: card.translocoPrefix\">\n <mat-card class=\"default-mat-card\">\n <mat-card-header>\n @if (hasValue(card.title)) {\n <mat-card-title>{{ t(card.title) }}</mat-card-title>\n }\n @if (hasValue(card.subtitle)) {\n <mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>\n }\n @if (card.icon) {\n <span class=\"toolbar-spacer\"></span>\n <button mat-icon-button>\n <mat-icon class=\"icon-large material-symbols-outlined\">{{ card.icon }}</mat-icon>\n </button>\n }\n </mat-card-header>\n @if (hasValue(card.content)) {\n <mat-card-content>\n <div>\n {{ t(card.content[0]) }}\n @if (card.content.length > 1) {\n <ul>\n @for (item of card.content.slice(1); track $index) {\n <li>{{ t(item) }}</li>\n }\n </ul>\n }\n </div>\n </mat-card-content>\n }\n @if (card.actions && card.actions.length > 0) {\n <mat-card-actions>\n @for (action of card.actions; track $index) {\n <ng-container>\n <button [matButton]=\"action.buttonType ?? 'elevated'\" [routerLink]=\"action.link\">{{ t(action.caption) }}</button>\n </ng-container>\n }\n </mat-card-actions>\n }\n </mat-card>\n </ng-container>\n }\n </div>\n `,\n styleUrls: ['./mat-cards-grid.component.css'],\n})\nexport class MatCardsGridComponent {\n @Input() cards: CardsGridSpec[] = [];\n readonly layoutService = inject(LayoutService);\n\n hasValue(textValue: string | Array<string>) {\n return textValue.length > 0;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Stack } from '@processpuzzle/util';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { BehaviorSubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class NavigateBackService {\n public noRouteAvailable = new BehaviorSubject<string>('');\n private readonly routeHistory = new Stack<string>();\n private readonly router = inject<Router>(Router);\n\n constructor() {\n this.router.events.subscribe((event) => {\n if (event instanceof NavigationEnd) {\n this.addRouteToStack(event.urlAfterRedirects); // Add the current route to the stack\n }\n });\n }\n\n // region public accessor methods\n public goBack(): void {\n if (this.routeHistory.size() > 1) {\n this.routeHistory.pop(); // Remove current route\n const previousRoute = this.routeHistory.pop(); // Get the previous route\n if (previousRoute) {\n this.router.navigateByUrl(previousRoute); // Navigate to the previous route\n }\n } else {\n console.log('No previous routes to navigate back to.');\n this.noRouteAvailable.next('No previous routes to navigate back to.');\n }\n }\n\n public getRouteStack(): Stack<string> {\n return this.routeHistory;\n }\n\n public clearHistory(): void {\n this.routeHistory.clear();\n }\n\n // endregion\n\n // protected, private helper methods\n private addRouteToStack(route: string): void {\n if (this.routeHistory.size() === 0 || this.routeHistory.peek() !== route) {\n this.routeHistory.push(route);\n }\n }\n\n // endregion\n}\n","import { Component, inject } from '@angular/core';\nimport { NavigateBackService } from './navigate-back.service';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\n\n@Component({\n selector: 'pp-navigate-back',\n imports: [MatIcon, MatIconButton],\n template: `\n <button mat-icon-button aria-label=\"Go back\" (click)=\"onNavigateBack()\">\n <mat-icon class=\"material-symbols-outlined fat-back-arrow\">arrow_back</mat-icon>\n </button>\n `,\n styles: [\n `\n .fat-back-arrow {\n font-size: 24px; /* Größerer und fetterer Pfeil */\n font-variation-settings: 'wght' 1200; /* Fettigkeitsgrad (700 = fett) */\n color: #000; /* Schwarz als Farbe */\n }\n `,\n ],\n})\nexport class NavigateBackComponent {\n readonly service = inject(NavigateBackService);\n\n // region event handling methods\n onNavigateBack(): void {\n this.service.goBack(); // Call the service to handle navigation\n }\n\n // endregion\n}\n","import { ApplicationProperty } from './app-property';\nimport { BaseEntityMapper } from '@processpuzzle/base-entity';\n\nexport class ApplicationPropertyMapper implements BaseEntityMapper<ApplicationProperty> {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n fromDto(dto: any): ApplicationProperty {\n return new ApplicationProperty(dto.id, dto.name, dto.value);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n toDto(entity: ApplicationProperty): any {\n return { id: entity.id, name: entity.name, value: entity.value };\n }\n}\n","import { ApplicationPropertyStore } from './app-property.store';\nimport { EnvironmentInjector, Provider } from '@angular/core';\nimport { ApplicationPropertyService } from './app-property.service';\nimport { ApplicationPropertyMapper } from './app-property.mapper';\n\nexport function provideAppPropertyStore(): Provider[] {\n return [\n { provide: ApplicationPropertyService, useFactory: () => new ApplicationPropertyService(new ApplicationPropertyMapper()), deps: [EnvironmentInjector] },\n { provide: ApplicationPropertyStore, useFactory: () => new ApplicationPropertyStore(), deps: [ApplicationPropertyService] },\n ];\n}\n","import { Component } from '@angular/core';\nimport { MatIcon } from '@angular/material/icon';\nimport { MatIconButton } from '@angular/material/button';\nimport { CdkConnectedOverlay, CdkOverlayOrigin } from '@angular/cdk/overlay';\nimport { ShareButtons } from 'ngx-sharebuttons/buttons';\n\n@Component({\n selector: 'pp-share-button',\n template: `\n <div>\n <button mat-icon-button (click)=\"onShare()\" cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\" aria-label=\"Share Button\">\n <mat-icon>share</mat-icon>\n </button>\n </div>\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\" [cdkConnectedOverlayOpen]=\"isOpen\" [cdkConnectedOverlayHasBackdrop]=\"true\" (backdropClick)=\"onClose()\">\n <div class=\"share-buttons-container\">\n <share-buttons />\n </div>\n </ng-template>\n `,\n styleUrls: ['./share-button.component.css'],\n imports: [CdkOverlayOrigin, CdkConnectedOverlay, MatIcon, MatIconButton, ShareButtons],\n})\nexport class ShareButtonComponent {\n isOpen = false;\n\n // region Event handler methods\n onClose(): void {\n this.isOpen = false;\n }\n\n onShare(): void {\n this.toggleIsOpen();\n }\n\n // endregion\n\n // region protected, private helper methods\n private toggleIsOpen(): void {\n this.isOpen = !this.isOpen;\n }\n\n // endregion\n}\n","import { NgModule } from '@angular/core';\nimport { provideShareButtonsOptions } from 'ngx-sharebuttons';\nimport { shareIcons } from 'ngx-sharebuttons/icons';\n\n@NgModule({\n imports: [],\n declarations: [],\n providers: [provideShareButtonsOptions(shareIcons())],\n})\nexport class ShareButtonModule {}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Translation, TranslocoLoader } from '@jsverse/transloco';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoHttpLoader implements TranslocoLoader {\n private readonly http: HttpClient = inject(HttpClient);\n\n getTranslation(lang: string): Observable<Translation> {\n const path = `/assets/i18n/${lang}.json`;\n console.log(`Loading translations from: ${path}`);\n return this.http.get<Translation>(path);\n }\n}\n","import { provideTransloco, TranslocoModule } from '@jsverse/transloco';\nimport { isDevMode, NgModule } from '@angular/core';\nimport { provideShareButtonsOptions } from 'ngx-sharebuttons';\nimport { shareIcons } from 'ngx-sharebuttons/icons';\nimport { TranslocoHttpLoader } from './language-selector/transloco.loader';\n\n@NgModule({\n imports: [TranslocoModule],\n exports: [TranslocoModule],\n providers: [\n provideShareButtonsOptions(shareIcons()),\n // provideI18Configuration(),\n provideTransloco({\n config: {\n availableLangs: ['de', 'en', 'es', 'fr', 'hu'],\n defaultLang: 'en',\n fallbackLang: ['en'],\n reRenderOnLangChange: true,\n prodMode: !isDevMode(),\n },\n loader: TranslocoHttpLoader,\n }),\n ],\n})\nexport class WidgetsModule {}\n","import { Routes } from '@angular/router';\nimport { LanguageSelectorComponent } from './language-selector/language-selector.component';\nimport { provideTranslocoScope } from '@jsverse/transloco';\n\nexport const widgetsRoutes: Routes = [{ path: 'anything', component: LanguageSelectorComponent, providers: [provideTranslocoScope('widgets')] }];\n","/*\n * Public API Surface of @processpuzzle/widgets\n */\n\nexport { ApplicationProperty } from './app-property/app-property';\nexport { ApplicationPropertyStore } from './app-property/app-property.store';\nexport { CardsGridSpec } from './mat-cards-grid/cards-spec';\nexport type { LanguageConfig, LanguageDefinition } from './language-selector/language-config';\nexport { LanguageSelectorComponent } from './language-selector/language-selector.component';\nexport { LikeButtonComponent } from './like-button/like-button.component';\nexport { MatCardsGridComponent } from './mat-cards-grid/mat-cards-grid.component';\nexport { NavigateBackComponent } from './navigate-back/navigate-back.component';\nexport { NavigateBackService } from './navigate-back/navigate-back.service';\nexport { provideAppPropertyStore } from './app-property/app-property-store.provider';\nexport { ShareButtonComponent } from './share-button/share-button.component';\nexport { ShareButtonModule } from './share-button/share-button.module';\nexport { TranslocoHttpLoader } from './language-selector/transloco.loader';\nexport { WidgetsModule } from './widgets.module';\nexport { widgetsRoutes } from './widgets.routes';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuidv4"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@processpuzzle/widgets",
|
|
3
|
-
"version": "0.1
|
|
4
|
-
"author": {
|
|
5
|
-
"name": "Zsolt Zsuffa",
|
|
6
|
-
"email": "zsolt.zsuffa@gmail.com"
|
|
7
|
-
},
|
|
3
|
+
"version": "0.2.1",
|
|
8
4
|
"publishConfig": {
|
|
9
5
|
"access": "public"
|
|
10
6
|
},
|
|
@@ -15,13 +11,22 @@
|
|
|
15
11
|
},
|
|
16
12
|
"homepage": "https://github.com/ZsZs/processpuzzle#readme",
|
|
17
13
|
"peerDependencies": {
|
|
18
|
-
"@angular/cdk": "^
|
|
19
|
-
"@angular/common": "~
|
|
20
|
-
"@angular/core": "~
|
|
21
|
-
"@angular/material": "^
|
|
22
|
-
"@angular/router": "~
|
|
23
|
-
"@
|
|
14
|
+
"@angular/cdk": "^21.2.2",
|
|
15
|
+
"@angular/common": "~21.2.4",
|
|
16
|
+
"@angular/core": "~21.2.4",
|
|
17
|
+
"@angular/material": "^21.2.2",
|
|
18
|
+
"@angular/router": "~21.2.4",
|
|
19
|
+
"@fortawesome/angular-fontawesome": "^4.0.0",
|
|
20
|
+
"@fortawesome/fontawesome-svg-core": "^7.2.0",
|
|
21
|
+
"@fortawesome/free-brands-svg-icons": "^7.2.0",
|
|
22
|
+
"@fortawesome/free-solid-svg-icons": "^7.2.0",
|
|
23
|
+
"@jsverse/transloco": "8.2.1",
|
|
24
|
+
"@ngrx/component-store": "^21.0.1",
|
|
25
|
+
"@ngrx/operators": "^21.0.1",
|
|
26
|
+
"@ngrx/signals": "^21.0.1",
|
|
24
27
|
"@processpuzzle/util": "^0.2.5",
|
|
28
|
+
"ngx-logger": "^5.0.12",
|
|
29
|
+
"ngx-markdown": "^21.1.0",
|
|
25
30
|
"ngx-sharebuttons": "^17.0.0",
|
|
26
31
|
"rxjs": "~7.8.2"
|
|
27
32
|
},
|
|
@@ -30,18 +35,14 @@
|
|
|
30
35
|
},
|
|
31
36
|
"sideEffects": false,
|
|
32
37
|
"module": "fesm2022/processpuzzle-widgets.mjs",
|
|
33
|
-
"typings": "
|
|
38
|
+
"typings": "types/processpuzzle-widgets.d.ts",
|
|
34
39
|
"exports": {
|
|
35
40
|
"./package.json": {
|
|
36
41
|
"default": "./package.json"
|
|
37
42
|
},
|
|
38
43
|
".": {
|
|
39
|
-
"types": "./
|
|
44
|
+
"types": "./types/processpuzzle-widgets.d.ts",
|
|
40
45
|
"default": "./fesm2022/processpuzzle-widgets.mjs"
|
|
41
|
-
},
|
|
42
|
-
"./mat-cards-grid": {
|
|
43
|
-
"types": "./mat-cards-grid/index.d.ts",
|
|
44
|
-
"default": "./fesm2022/processpuzzle-widgets-mat-cards-grid.mjs"
|
|
45
46
|
}
|
|
46
47
|
}
|
|
47
48
|
}
|
|
@@ -3,14 +3,15 @@ import { BaseEntity } from '@processpuzzle/base-entity';
|
|
|
3
3
|
import * as _ngrx_signals from '@ngrx/signals';
|
|
4
4
|
import * as _ngrx_signals_rxjs_interop from '@ngrx/signals/rxjs-interop';
|
|
5
5
|
import * as _angular_material_table from '@angular/material/table';
|
|
6
|
-
import * as
|
|
6
|
+
import * as _angular_material_paginator from '@angular/material/paginator';
|
|
7
7
|
import * as _angular_core from '@angular/core';
|
|
8
8
|
import { Provider } from '@angular/core';
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
9
|
+
import { MatButtonAppearance } from '@angular/material/button';
|
|
10
|
+
import * as dist_libs_base_entity_types_processpuzzle_base_entity from 'dist/libs/base-entity/types/processpuzzle-base-entity';
|
|
11
|
+
import { LayoutService, Stack } from '@processpuzzle/util';
|
|
12
|
+
import { BehaviorSubject, Observable } from 'rxjs';
|
|
11
13
|
import * as i1 from '@jsverse/transloco';
|
|
12
14
|
import { TranslocoLoader, Translation } from '@jsverse/transloco';
|
|
13
|
-
import { Observable } from 'rxjs';
|
|
14
15
|
import { Routes } from '@angular/router';
|
|
15
16
|
|
|
16
17
|
declare class ApplicationProperty implements BaseEntity {
|
|
@@ -42,7 +43,7 @@ declare const ApplicationPropertyStore: _angular_core.Type<{
|
|
|
42
43
|
currentTab: _angular_core.Signal<string | undefined>;
|
|
43
44
|
filterKey: _angular_core.Signal<string | undefined>;
|
|
44
45
|
countOfEntities: _angular_core.Signal<number>;
|
|
45
|
-
matTableDataSource: _angular_core.Signal<_angular_material_table.MatTableDataSource<ApplicationProperty,
|
|
46
|
+
matTableDataSource: _angular_core.Signal<_angular_material_table.MatTableDataSource<ApplicationProperty, _angular_material_paginator.MatPaginator>>;
|
|
46
47
|
clearCurrentEntity: () => void;
|
|
47
48
|
createEntity: () => ApplicationProperty;
|
|
48
49
|
add: _ngrx_signals_rxjs_interop.RxMethod<ApplicationProperty>;
|
|
@@ -87,6 +88,22 @@ declare const ApplicationPropertyStore: _angular_core.Type<{
|
|
|
87
88
|
filterKey: string | undefined;
|
|
88
89
|
}>>;
|
|
89
90
|
|
|
91
|
+
interface ActionSpec {
|
|
92
|
+
link: string;
|
|
93
|
+
caption: string;
|
|
94
|
+
colour?: string;
|
|
95
|
+
buttonType?: MatButtonAppearance;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
interface CardsGridSpec {
|
|
99
|
+
icon?: string;
|
|
100
|
+
title: string;
|
|
101
|
+
subtitle: string;
|
|
102
|
+
content: Array<string>;
|
|
103
|
+
actions: Array<ActionSpec>;
|
|
104
|
+
translocoPrefix: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
90
107
|
interface LanguageDefinition {
|
|
91
108
|
code: string;
|
|
92
109
|
label: string;
|
|
@@ -98,10 +115,6 @@ interface LanguageConfig {
|
|
|
98
115
|
}
|
|
99
116
|
|
|
100
117
|
declare class LanguageSelectorComponent {
|
|
101
|
-
isOpen: boolean;
|
|
102
|
-
onClose(): void;
|
|
103
|
-
onSelectLanguage(): void;
|
|
104
|
-
private toggleIsOpen;
|
|
105
118
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<LanguageSelectorComponent, never>;
|
|
106
119
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LanguageSelectorComponent, "pp-language-selector", never, {}, {}, never, never, true, never>;
|
|
107
120
|
}
|
|
@@ -120,7 +133,7 @@ declare class LikeButtonComponent {
|
|
|
120
133
|
isLoading: _angular_core.Signal<boolean>;
|
|
121
134
|
error: _angular_core.Signal<string | undefined>;
|
|
122
135
|
selectedEntities: _angular_core.Signal<ApplicationProperty[]>;
|
|
123
|
-
activeRouteSegment: _angular_core.Signal<
|
|
136
|
+
activeRouteSegment: _angular_core.Signal<dist_libs_base_entity_types_processpuzzle_base_entity.RouteSegments>;
|
|
124
137
|
entityName: _angular_core.Signal<string>;
|
|
125
138
|
navigationError?: _angular_core.Signal<string | undefined> | undefined;
|
|
126
139
|
navigateTo: _angular_core.Signal<string>;
|
|
@@ -129,7 +142,7 @@ declare class LikeButtonComponent {
|
|
|
129
142
|
currentTab: _angular_core.Signal<string | undefined>;
|
|
130
143
|
filterKey: _angular_core.Signal<string | undefined>;
|
|
131
144
|
countOfEntities: _angular_core.Signal<number>;
|
|
132
|
-
matTableDataSource: _angular_core.Signal<_angular_material_table.MatTableDataSource<ApplicationProperty,
|
|
145
|
+
matTableDataSource: _angular_core.Signal<_angular_material_table.MatTableDataSource<ApplicationProperty, _angular_material_paginator.MatPaginator>>;
|
|
133
146
|
clearCurrentEntity: () => void;
|
|
134
147
|
createEntity: () => ApplicationProperty;
|
|
135
148
|
add: _ngrx_signals_rxjs_interop.RxMethod<ApplicationProperty>;
|
|
@@ -137,7 +150,7 @@ declare class LikeButtonComponent {
|
|
|
137
150
|
deleteAll: _ngrx_signals_rxjs_interop.RxMethod<void>;
|
|
138
151
|
deselectAll: () => void;
|
|
139
152
|
deselectEntity: (id: string) => void;
|
|
140
|
-
load: _ngrx_signals_rxjs_interop.RxMethod<
|
|
153
|
+
load: _ngrx_signals_rxjs_interop.RxMethod<dist_libs_base_entity_types_processpuzzle_base_entity.BaseEntityQueryCondition>;
|
|
141
154
|
loadById: (id: string) => ApplicationProperty | undefined;
|
|
142
155
|
resetErrorState: () => void;
|
|
143
156
|
selectEntity: (id: string) => void;
|
|
@@ -164,7 +177,7 @@ declare class LikeButtonComponent {
|
|
|
164
177
|
isLoading: boolean;
|
|
165
178
|
error: string | undefined;
|
|
166
179
|
selectedEntities: ApplicationProperty[];
|
|
167
|
-
activeRouteSegment:
|
|
180
|
+
activeRouteSegment: dist_libs_base_entity_types_processpuzzle_base_entity.RouteSegments;
|
|
168
181
|
entityName: string;
|
|
169
182
|
navigationError?: string | undefined | undefined;
|
|
170
183
|
navigateTo: string;
|
|
@@ -181,7 +194,16 @@ declare class LikeButtonComponent {
|
|
|
181
194
|
static ɵcmp: _angular_core.ɵɵComponentDeclaration<LikeButtonComponent, "pp-like-button", never, {}, {}, never, never, true, never>;
|
|
182
195
|
}
|
|
183
196
|
|
|
197
|
+
declare class MatCardsGridComponent {
|
|
198
|
+
cards: CardsGridSpec[];
|
|
199
|
+
readonly layoutService: LayoutService;
|
|
200
|
+
hasValue(textValue: string | Array<string>): boolean;
|
|
201
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MatCardsGridComponent, never>;
|
|
202
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MatCardsGridComponent, "mat-cards-grid", never, { "cards": { "alias": "cards"; "required": false; }; }, {}, never, never, true, never>;
|
|
203
|
+
}
|
|
204
|
+
|
|
184
205
|
declare class NavigateBackService {
|
|
206
|
+
noRouteAvailable: BehaviorSubject<string>;
|
|
185
207
|
private readonly routeHistory;
|
|
186
208
|
private readonly router;
|
|
187
209
|
constructor();
|
|
@@ -219,7 +241,6 @@ declare class ShareButtonModule {
|
|
|
219
241
|
|
|
220
242
|
declare class TranslocoHttpLoader implements TranslocoLoader {
|
|
221
243
|
private readonly http;
|
|
222
|
-
constructor(http: HttpClient);
|
|
223
244
|
getTranslation(lang: string): Observable<Translation>;
|
|
224
245
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<TranslocoHttpLoader, never>;
|
|
225
246
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<TranslocoHttpLoader>;
|
|
@@ -233,5 +254,5 @@ declare class WidgetsModule {
|
|
|
233
254
|
|
|
234
255
|
declare const widgetsRoutes: Routes;
|
|
235
256
|
|
|
236
|
-
export { ApplicationProperty, ApplicationPropertyStore, LanguageSelectorComponent, LikeButtonComponent, NavigateBackComponent, NavigateBackService, ShareButtonComponent, ShareButtonModule, TranslocoHttpLoader, WidgetsModule, provideAppPropertyStore, widgetsRoutes };
|
|
237
|
-
export type { LanguageConfig, LanguageDefinition };
|
|
257
|
+
export { ApplicationProperty, ApplicationPropertyStore, LanguageSelectorComponent, LikeButtonComponent, MatCardsGridComponent, NavigateBackComponent, NavigateBackService, ShareButtonComponent, ShareButtonModule, TranslocoHttpLoader, WidgetsModule, provideAppPropertyStore, widgetsRoutes };
|
|
258
|
+
export type { CardsGridSpec, LanguageConfig, LanguageDefinition };
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { inject, Input, Component } from '@angular/core';
|
|
3
|
-
import * as i1 from '@angular/material/card';
|
|
4
|
-
import { MatCardModule } from '@angular/material/card';
|
|
5
|
-
import * as i2 from '@angular/material/button';
|
|
6
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
7
|
-
import { NgClass } from '@angular/common';
|
|
8
|
-
import { RouterLink } from '@angular/router';
|
|
9
|
-
import { TranslocoDirective } from '@jsverse/transloco';
|
|
10
|
-
import { LayoutService } from '@processpuzzle/util';
|
|
11
|
-
|
|
12
|
-
class MatCardsGridComponent {
|
|
13
|
-
cards = [];
|
|
14
|
-
layoutService = inject(LayoutService);
|
|
15
|
-
hasValue(textValue) {
|
|
16
|
-
return textValue.length > 0;
|
|
17
|
-
}
|
|
18
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MatCardsGridComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.9", type: MatCardsGridComponent, isStandalone: true, selector: "mat-cards-grid", inputs: { cards: "cards" }, ngImport: i0, template: `
|
|
20
|
-
<div [ngClass]="layoutService.layoutClass()">
|
|
21
|
-
@for (card of cards; track $index) {
|
|
22
|
-
<ng-container *transloco="let t; prefix: card.translocoPrefix">
|
|
23
|
-
<mat-card class="default-mat-card">
|
|
24
|
-
<mat-card-header>
|
|
25
|
-
@if (hasValue(card.title)) {
|
|
26
|
-
<mat-card-title>{{ t(card.title) }}</mat-card-title>
|
|
27
|
-
}
|
|
28
|
-
@if (hasValue(card.subtitle)) {
|
|
29
|
-
<mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>
|
|
30
|
-
}
|
|
31
|
-
</mat-card-header>
|
|
32
|
-
@if (hasValue(card.content)) {
|
|
33
|
-
<mat-card-content>
|
|
34
|
-
<div>
|
|
35
|
-
{{ t(card.content[0]) }}
|
|
36
|
-
@if (card.content.length > 1) {
|
|
37
|
-
<ul>
|
|
38
|
-
@for (item of card.content.slice(1); track $index) {
|
|
39
|
-
<li>{{ t(item) }}</li>
|
|
40
|
-
}
|
|
41
|
-
</ul>
|
|
42
|
-
}
|
|
43
|
-
</div>
|
|
44
|
-
</mat-card-content>
|
|
45
|
-
}
|
|
46
|
-
@if (card.actions && card.actions.length > 0) {
|
|
47
|
-
<mat-card-actions>
|
|
48
|
-
@for (action of card.actions; track $index) {
|
|
49
|
-
<ng-container>
|
|
50
|
-
<button [matButton]="action.buttonType ?? 'elevated'" [routerLink]="action.link">{{ t(action.caption) }}</button>
|
|
51
|
-
</ng-container>
|
|
52
|
-
}
|
|
53
|
-
</mat-card-actions>
|
|
54
|
-
}
|
|
55
|
-
</mat-card>
|
|
56
|
-
</ng-container>
|
|
57
|
-
}
|
|
58
|
-
</div>
|
|
59
|
-
`, isInline: true, styles: [".web-layout{display:grid;grid-template-columns:repeat(3,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.tablet-layout{display:grid;grid-template-columns:repeat(2,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.handset-layout{display:grid;grid-template-columns:repeat(1,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.default-mat-card{display:flex;flex-direction:column;background-color:#99d9eb}mat-card-title{font-family:Winky Sans,sans-serif}mat-card-content{flex-grow:1;overflow:auto;font-family:cursive;font-size:medium;text-align:left;padding-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i1.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i1.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i1.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i1.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i1.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i1.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[matButton], a[matButton], button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button], a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button] ", inputs: ["matButton"], exportAs: ["matButton", "matAnchor"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: TranslocoDirective, selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
60
|
-
}
|
|
61
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: MatCardsGridComponent, decorators: [{
|
|
62
|
-
type: Component,
|
|
63
|
-
args: [{ selector: 'mat-cards-grid', standalone: true, imports: [MatCardModule, MatButtonModule, RouterLink, TranslocoDirective, NgClass], template: `
|
|
64
|
-
<div [ngClass]="layoutService.layoutClass()">
|
|
65
|
-
@for (card of cards; track $index) {
|
|
66
|
-
<ng-container *transloco="let t; prefix: card.translocoPrefix">
|
|
67
|
-
<mat-card class="default-mat-card">
|
|
68
|
-
<mat-card-header>
|
|
69
|
-
@if (hasValue(card.title)) {
|
|
70
|
-
<mat-card-title>{{ t(card.title) }}</mat-card-title>
|
|
71
|
-
}
|
|
72
|
-
@if (hasValue(card.subtitle)) {
|
|
73
|
-
<mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>
|
|
74
|
-
}
|
|
75
|
-
</mat-card-header>
|
|
76
|
-
@if (hasValue(card.content)) {
|
|
77
|
-
<mat-card-content>
|
|
78
|
-
<div>
|
|
79
|
-
{{ t(card.content[0]) }}
|
|
80
|
-
@if (card.content.length > 1) {
|
|
81
|
-
<ul>
|
|
82
|
-
@for (item of card.content.slice(1); track $index) {
|
|
83
|
-
<li>{{ t(item) }}</li>
|
|
84
|
-
}
|
|
85
|
-
</ul>
|
|
86
|
-
}
|
|
87
|
-
</div>
|
|
88
|
-
</mat-card-content>
|
|
89
|
-
}
|
|
90
|
-
@if (card.actions && card.actions.length > 0) {
|
|
91
|
-
<mat-card-actions>
|
|
92
|
-
@for (action of card.actions; track $index) {
|
|
93
|
-
<ng-container>
|
|
94
|
-
<button [matButton]="action.buttonType ?? 'elevated'" [routerLink]="action.link">{{ t(action.caption) }}</button>
|
|
95
|
-
</ng-container>
|
|
96
|
-
}
|
|
97
|
-
</mat-card-actions>
|
|
98
|
-
}
|
|
99
|
-
</mat-card>
|
|
100
|
-
</ng-container>
|
|
101
|
-
}
|
|
102
|
-
</div>
|
|
103
|
-
`, styles: [".web-layout{display:grid;grid-template-columns:repeat(3,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.tablet-layout{display:grid;grid-template-columns:repeat(2,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.handset-layout{display:grid;grid-template-columns:repeat(1,minmax(min(200px,100%),1fr));column-gap:10px;row-gap:10px}.default-mat-card{display:flex;flex-direction:column;background-color:#99d9eb}mat-card-title{font-family:Winky Sans,sans-serif}mat-card-content{flex-grow:1;overflow:auto;font-family:cursive;font-size:medium;text-align:left;padding-bottom:10px}\n"] }]
|
|
104
|
-
}], propDecorators: { cards: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}] } });
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Generated bundle index. Do not edit.
|
|
110
|
-
*/
|
|
111
|
-
|
|
112
|
-
export { MatCardsGridComponent };
|
|
113
|
-
//# sourceMappingURL=processpuzzle-widgets-mat-cards-grid.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"processpuzzle-widgets-mat-cards-grid.mjs","sources":["../../../../libs/widgets/mat-cards-grid/src/mat-cards-grid.component.ts","../../../../libs/widgets/mat-cards-grid/processpuzzle-widgets-mat-cards-grid.ts"],"sourcesContent":["import { Component, inject, Input } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatButtonModule } from '@angular/material/button';\nimport { NgClass } from '@angular/common';\nimport { RouterLink } from '@angular/router';\nimport { TranslocoDirective } from '@jsverse/transloco';\nimport { CardsGridSpec } from './cards-spec';\nimport { LayoutService } from '@processpuzzle/util';\n\n@Component({\n selector: 'mat-cards-grid',\n standalone: true,\n imports: [MatCardModule, MatButtonModule, RouterLink, TranslocoDirective, NgClass],\n template: `\n <div [ngClass]=\"layoutService.layoutClass()\">\n @for (card of cards; track $index) {\n <ng-container *transloco=\"let t; prefix: card.translocoPrefix\">\n <mat-card class=\"default-mat-card\">\n <mat-card-header>\n @if (hasValue(card.title)) {\n <mat-card-title>{{ t(card.title) }}</mat-card-title>\n }\n @if (hasValue(card.subtitle)) {\n <mat-card-subtitle>{{ t(card.subtitle) }}</mat-card-subtitle>\n }\n </mat-card-header>\n @if (hasValue(card.content)) {\n <mat-card-content>\n <div>\n {{ t(card.content[0]) }}\n @if (card.content.length > 1) {\n <ul>\n @for (item of card.content.slice(1); track $index) {\n <li>{{ t(item) }}</li>\n }\n </ul>\n }\n </div>\n </mat-card-content>\n }\n @if (card.actions && card.actions.length > 0) {\n <mat-card-actions>\n @for (action of card.actions; track $index) {\n <ng-container>\n <button [matButton]=\"action.buttonType ?? 'elevated'\" [routerLink]=\"action.link\">{{ t(action.caption) }}</button>\n </ng-container>\n }\n </mat-card-actions>\n }\n </mat-card>\n </ng-container>\n }\n </div>\n `,\n styleUrls: ['./mat-cards-grid.component.css'],\n})\nexport class MatCardsGridComponent {\n @Input() cards: CardsGridSpec[] = [];\n readonly layoutService = inject(LayoutService);\n\n hasValue(textValue: string | Array<string>) {\n return textValue.length > 0;\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;MAwDa,qBAAqB,CAAA;IACvB,KAAK,GAAoB,EAAE;AAC3B,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE9C,IAAA,QAAQ,CAAC,SAAiC,EAAA;AACxC,QAAA,OAAO,SAAS,CAAC,MAAM,GAAG,CAAC;IAC7B;uGANW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EA3CtB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,olBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAzCS,aAAa,yoBAAE,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,iOAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,UAAU,EAAA,QAAA,EAAA,cAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,aAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,YAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,YAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,kBAAkB,gMAAE,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FA4CtE,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBA/CjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAAA,UAAA,EACd,IAAI,EAAA,OAAA,EACP,CAAC,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAA,QAAA,EACxE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,olBAAA,CAAA,EAAA;;sBAIA;;;ACzDH;;AAEG;;;;"}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { MatButtonAppearance } from '@angular/material/button';
|
|
2
|
-
import { LayoutService } from '@processpuzzle/util';
|
|
3
|
-
import * as i0 from '@angular/core';
|
|
4
|
-
|
|
5
|
-
interface ActionSpec {
|
|
6
|
-
link: string;
|
|
7
|
-
caption: string;
|
|
8
|
-
colour?: string;
|
|
9
|
-
buttonType?: MatButtonAppearance;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface CardsGridSpec {
|
|
13
|
-
title: string;
|
|
14
|
-
subtitle: string;
|
|
15
|
-
content: Array<string>;
|
|
16
|
-
actions: Array<ActionSpec>;
|
|
17
|
-
translocoPrefix: string;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
declare class MatCardsGridComponent {
|
|
21
|
-
cards: CardsGridSpec[];
|
|
22
|
-
readonly layoutService: LayoutService;
|
|
23
|
-
hasValue(textValue: string | Array<string>): boolean;
|
|
24
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<MatCardsGridComponent, never>;
|
|
25
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MatCardsGridComponent, "mat-cards-grid", never, { "cards": { "alias": "cards"; "required": false; }; }, {}, never, never, true, never>;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export { MatCardsGridComponent };
|
|
29
|
-
export type { ActionSpec, CardsGridSpec };
|