@yuuvis/client-shell 0.6.5
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/README.md +94 -0
- package/esm2022/index.mjs +6 -0
- package/esm2022/lib/actions/manage-flavors/manage-flavors.action.mjs +39 -0
- package/esm2022/lib/actions/manage-flavors/manage-flavors.component.mjs +69 -0
- package/esm2022/lib/client-shell.component.mjs +191 -0
- package/esm2022/lib/components/app-logo/app-logo.component.mjs +18 -0
- package/esm2022/lib/directives/inert.directive.mjs +26 -0
- package/esm2022/lib/lib.routes.mjs +15 -0
- package/esm2022/lib/pages/dashboard/dashboard.component.mjs +11 -0
- package/esm2022/lib/pages/notifications/notifications.component.mjs +82 -0
- package/esm2022/lib/pages/settings/settings.component.mjs +71 -0
- package/esm2022/lib/pages/web-share-target/web-share-target.component.mjs +18 -0
- package/esm2022/widget-dashboard/index.mjs +3 -0
- package/esm2022/widget-dashboard/lib/widget-dashboard.component.mjs +46 -0
- package/esm2022/widget-dashboard/lib/widget-dashboard.config.mjs +3 -0
- package/esm2022/widget-dashboard/lib/widget-dashboard.module.mjs +49 -0
- package/esm2022/widget-dashboard/yuuvis-client-shell-widget-dashboard.mjs +5 -0
- package/esm2022/yuuvis-client-shell.mjs +5 -0
- package/fesm2022/yuuvis-client-shell-widget-dashboard.mjs +98 -0
- package/fesm2022/yuuvis-client-shell-widget-dashboard.mjs.map +1 -0
- package/fesm2022/yuuvis-client-shell.mjs +496 -0
- package/fesm2022/yuuvis-client-shell.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/actions/manage-flavors/manage-flavors.action.d.ts +17 -0
- package/lib/actions/manage-flavors/manage-flavors.component.d.ts +17 -0
- package/lib/assets/i18n/de.json +30 -0
- package/lib/assets/i18n/en.json +30 -0
- package/lib/client-shell.component.d.ts +42 -0
- package/lib/components/app-logo/app-logo.component.d.ts +7 -0
- package/lib/directives/inert.directive.d.ts +8 -0
- package/lib/lib.routes.d.ts +2 -0
- package/lib/pages/dashboard/dashboard.component.d.ts +5 -0
- package/lib/pages/notifications/notifications.component.d.ts +29 -0
- package/lib/pages/settings/settings.component.d.ts +28 -0
- package/lib/pages/web-share-target/web-share-target.component.d.ts +6 -0
- package/package.json +40 -0
- package/widget-dashboard/README.md +19 -0
- package/widget-dashboard/index.d.ts +2 -0
- package/widget-dashboard/lib/widget-dashboard.component.d.ts +16 -0
- package/widget-dashboard/lib/widget-dashboard.config.d.ts +7 -0
- package/widget-dashboard/lib/widget-dashboard.module.d.ts +13 -0
package/README.md
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# @yuuvis/client-shell
|
|
2
|
+
|
|
3
|
+
The client shell project provides the frame for a yuuvis® MOMENTUM client application.
|
|
4
|
+
This frame is then able to host multiple dedicated apps built for the shell environment.
|
|
5
|
+
For the hosted apps `@yuuvis/client-shell` provides a set of services and components to interact with with a yuuvis® MOMENTUM backend.
|
|
6
|
+
|
|
7
|
+
## User settings
|
|
8
|
+
|
|
9
|
+
Settings are handled by the shell. It provides a page where users can configure their application(s). As authentication is covered by the shell, settings will be managed as well. In general this includes e.g. the users preferred language, but also settings of each individual in-shell-app.
|
|
10
|
+
|
|
11
|
+
## Interfaces
|
|
12
|
+
|
|
13
|
+
Client shell provides a couple of APIs apps can utilize.
|
|
14
|
+
|
|
15
|
+
### Actions
|
|
16
|
+
|
|
17
|
+
Using the `actions.service` apps are able to register actions to the whole shell and its applications. Let's say we have an app dedicated to deal with eMails you can create an actions that will open any email (regardless of the app showing it) in your eMail app. To do so you first of all write the action (checkout `open-in-app.action.ts` for the code).
|
|
18
|
+
|
|
19
|
+
In your apps extension package you can now register that action:
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
@Injectable()
|
|
23
|
+
export class ExtensionsService {
|
|
24
|
+
init(): Promise<any> {
|
|
25
|
+
this.#actionsService.register([{ id: ACTION_ID, action: MailArchiveOpenInAppAction }]);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Now this action is made available to all apps.
|
|
31
|
+
|
|
32
|
+
### Renderers
|
|
33
|
+
|
|
34
|
+
The objects apps are dealing with will have a variety of property types. The basic ones are defined by the schema definition. Here we have:
|
|
35
|
+
|
|
36
|
+
- string
|
|
37
|
+
- date
|
|
38
|
+
- integer
|
|
39
|
+
- decimal
|
|
40
|
+
- ...
|
|
41
|
+
|
|
42
|
+
Renderers are used to define how the values for those properties are rendered. Dates for example are formatted based on the users locale.
|
|
43
|
+
|
|
44
|
+
There may be special properties that need a different treatment. The `system:contentStreamLength` property of objects define there size in bytes. This would be hard to read for users so we can create a renderer for this particular property (checkout `filesize.renderer.component.ts` for the code).
|
|
45
|
+
|
|
46
|
+
In your apps extension package you can now register that renderer:
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
@Injectable()
|
|
50
|
+
export class ExtensionsService {
|
|
51
|
+
init(): Promise<any> {
|
|
52
|
+
this.#rendererService.registerRenderer(FileSizeRendererComponent, `system:contentStreamLength`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Now this renderer is made available to all apps. You can limit the renderer to specific types by adding a third parameter to the registerRenderer function.
|
|
58
|
+
|
|
59
|
+
### Object types
|
|
60
|
+
|
|
61
|
+
Types/Flavors are collections of properties that can be added to an object. Let's say you have a document that is an invoice. First of all any file is just a document. By adding a type of `invoice` its metadata will be extended by the properties defined by the aspect.
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
@Injectable()
|
|
65
|
+
export class ExtensionsService {
|
|
66
|
+
#shell = inject(ShellService);
|
|
67
|
+
|
|
68
|
+
init(): Promise<any> {
|
|
69
|
+
this.#shell.exposeObjectFlavors(APP_FLAVORS);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Flavors are simple objects defining a type:
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
const flavor = {
|
|
78
|
+
// unique id
|
|
79
|
+
id: 'io.yuuvis.app.ai.flavor.invoice',
|
|
80
|
+
// key to fetch translated description
|
|
81
|
+
descriptionKey: 'io.yuuvis.app.ai.flavor.invoice.description',
|
|
82
|
+
// an icon
|
|
83
|
+
icon: '<svg/>...</svg>',
|
|
84
|
+
// the base object type ID for the type
|
|
85
|
+
objectTypeID: SystemType.DOCUMENT,
|
|
86
|
+
// ID of the secondary object type defining the properties of the type
|
|
87
|
+
sot: `${APP_PREFIX}invoice`,
|
|
88
|
+
// restrict on which kind of files this type could be applied
|
|
89
|
+
applicableTo: {
|
|
90
|
+
// match against mime type incl. wildcards
|
|
91
|
+
mimeTypes: ['*/*']
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
```
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './lib/directives/inert.directive';
|
|
2
|
+
export * from './lib/client-shell.component';
|
|
3
|
+
export * from './lib/components/app-logo/app-logo.component';
|
|
4
|
+
export * from './lib/lib.routes';
|
|
5
|
+
export * from './lib/actions/manage-flavors/manage-flavors.action';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtc2hlbGwvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxvREFBb0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvaW5lcnQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2NsaWVudC1zaGVsbC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9hcHAtbG9nby9hcHAtbG9nby5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbGliLnJvdXRlcyc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9hY3Rpb25zL21hbmFnZS1mbGF2b3JzL21hbmFnZS1mbGF2b3JzLmFjdGlvbic7XG5cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { TranslateService } from '@yuuvis/client-core';
|
|
3
|
+
import { AbstractContextAction, ACTION_ICON, SelectionRange } from '@yuuvis/client-framework/actions';
|
|
4
|
+
import { ShellService } from '@yuuvis/client-shell-core';
|
|
5
|
+
import { YvcOverlayService } from '@yuuvis/components/overlay';
|
|
6
|
+
import { of } from 'rxjs';
|
|
7
|
+
import { ManageFlavorsComponent } from './manage-flavors.component';
|
|
8
|
+
export class ManageFlavorsAction extends AbstractContextAction {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.#shell = inject(ShellService);
|
|
12
|
+
this.#overlay = inject(YvcOverlayService);
|
|
13
|
+
this.translate = inject(TranslateService);
|
|
14
|
+
this.id = 'yuv.base.manage-flavor';
|
|
15
|
+
this.label = this.translate.instant('yuv.shell.action.manage-flavor.label');
|
|
16
|
+
this.description = this.translate.instant('yuv.shell.action.manage-flavor.description');
|
|
17
|
+
this.priority = 8;
|
|
18
|
+
this.icon = ACTION_ICON.manageFlavor;
|
|
19
|
+
this.group = 'common';
|
|
20
|
+
this.range = SelectionRange.SINGLE_SELECT;
|
|
21
|
+
this.supports = {
|
|
22
|
+
pattern: '*'
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
#shell;
|
|
26
|
+
#overlay;
|
|
27
|
+
isExecutable(items) {
|
|
28
|
+
const item = items[0];
|
|
29
|
+
return of(item && !!item.permissions?.writeIndexData && !!item.content && this.#shell.getApplicableObjectFlavors(item.content.mimeType).length > 0);
|
|
30
|
+
}
|
|
31
|
+
run(items) {
|
|
32
|
+
this.#overlay.open(ManageFlavorsComponent, items[0], {
|
|
33
|
+
width: '400px',
|
|
34
|
+
maxWidth: '90vw',
|
|
35
|
+
});
|
|
36
|
+
return of(true);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWZsYXZvcnMuYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsL3NyYy9saWIvYWN0aW9ucy9tYW5hZ2UtZmxhdm9ycy9tYW5hZ2UtZmxhdm9ycy5hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQWEsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQVUsV0FBVyxFQUE4QixjQUFjLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxSSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVwRSxNQUFNLE9BQU8sbUJBQW9CLFNBQVEscUJBQXFCO0lBQTlEOztRQUNFLFdBQU0sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDOUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdCLGNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUU3QyxPQUFFLEdBQUcsd0JBQXdCLENBQUM7UUFDOUIsVUFBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7UUFDdkUsZ0JBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQ25GLGFBQVEsR0FBRyxDQUFDLENBQUM7UUFDYixTQUFJLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNoQyxVQUFLLEdBQUcsUUFBUSxDQUFDO1FBQ2pCLFVBQUssR0FBRyxjQUFjLENBQUMsYUFBYSxDQUFDO1FBQ3JDLGFBQVEsR0FBa0I7WUFDeEIsT0FBTyxFQUFFLEdBQUc7U0FDYixDQUFDO0lBY0osQ0FBQztJQTNCQyxNQUFNLENBQXdCO0lBQzlCLFFBQVEsQ0FBNkI7SUFjckMsWUFBWSxDQUFDLEtBQWtCO1FBQzdCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixPQUFPLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdEosQ0FBQztJQUVELEdBQUcsQ0FBQyxLQUFrQjtRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDbkQsS0FBSyxFQUFFLE9BQU87WUFDZCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERtc09iamVjdCwgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250ZXh0QWN0aW9uLCBBY3Rpb24sIEFDVElPTl9JQ09OLCBBY3Rpb25TdXBwb3J0LCBCQVNFX0FDVElPTiwgU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvYWN0aW9ucyc7XG5pbXBvcnQgeyBTaGVsbFNlcnZpY2UgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1zaGVsbC1jb3JlJztcbmltcG9ydCB7IFl2Y092ZXJsYXlTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1hbmFnZUZsYXZvcnNDb21wb25lbnQgfSBmcm9tICcuL21hbmFnZS1mbGF2b3JzLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VGbGF2b3JzQWN0aW9uIGV4dGVuZHMgQWJzdHJhY3RDb250ZXh0QWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgI3NoZWxsID0gaW5qZWN0KFNoZWxsU2VydmljZSk7XG4gICNvdmVybGF5ID0gaW5qZWN0KFl2Y092ZXJsYXlTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgaWQgPSAneXV2LmJhc2UubWFuYWdlLWZsYXZvcic7XG4gIGxhYmVsID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LnNoZWxsLmFjdGlvbi5tYW5hZ2UtZmxhdm9yLmxhYmVsJyk7XG4gIGRlc2NyaXB0aW9uID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LnNoZWxsLmFjdGlvbi5tYW5hZ2UtZmxhdm9yLmRlc2NyaXB0aW9uJyk7XG4gIHByaW9yaXR5ID0gODtcbiAgaWNvbiA9IEFDVElPTl9JQ09OLm1hbmFnZUZsYXZvcjtcbiAgZ3JvdXAgPSAnY29tbW9uJztcbiAgcmFuZ2UgPSBTZWxlY3Rpb25SYW5nZS5TSU5HTEVfU0VMRUNUO1xuICBzdXBwb3J0czogQWN0aW9uU3VwcG9ydCA9IHtcbiAgICBwYXR0ZXJuOiAnKidcbiAgfTtcblxuICBpc0V4ZWN1dGFibGUoaXRlbXM6IERtc09iamVjdFtdKSB7XG4gICAgY29uc3QgaXRlbSA9IGl0ZW1zWzBdO1xuICAgIHJldHVybiBvZihpdGVtICYmICEhaXRlbS5wZXJtaXNzaW9ucz8ud3JpdGVJbmRleERhdGEgJiYgISFpdGVtLmNvbnRlbnQgJiYgdGhpcy4jc2hlbGwuZ2V0QXBwbGljYWJsZU9iamVjdEZsYXZvcnMoaXRlbS5jb250ZW50Lm1pbWVUeXBlKS5sZW5ndGggPiAwKTtcbiAgfVxuXG4gIHJ1bihpdGVtczogRG1zT2JqZWN0W10pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICB0aGlzLiNvdmVybGF5Lm9wZW4oTWFuYWdlRmxhdm9yc0NvbXBvbmVudCwgaXRlbXNbMF0sIHtcbiAgICAgIHdpZHRoOiAnNDAwcHgnLFxuICAgICAgbWF4V2lkdGg6ICc5MHZ3JyxcbiAgICB9KTtcbiAgICByZXR1cm4gb2YodHJ1ZSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Component, inject, signal } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { YvcOverlayRef } from '@yuuvis/components/overlay';
|
|
4
|
+
import { DmsService, TranslateModule } from '@yuuvis/client-core';
|
|
5
|
+
import { ShellService } from '@yuuvis/client-shell-core';
|
|
6
|
+
import { FlavorChipComponent } from '@yuuvis/client-framework/object-flavor';
|
|
7
|
+
import { ListComponent, ListItemDirective } from '@yuuvis/client-framework/list';
|
|
8
|
+
import { BusyOverlayDirective } from '@yuuvis/client-framework/common';
|
|
9
|
+
import { tap } from 'rxjs';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@yuuvis/client-core";
|
|
12
|
+
export class ManageFlavorsComponent {
|
|
13
|
+
constructor() {
|
|
14
|
+
this.#overlayRef = inject(YvcOverlayRef);
|
|
15
|
+
this.#shell = inject(ShellService);
|
|
16
|
+
this.#dmsService = inject(DmsService);
|
|
17
|
+
this.item = this.#overlayRef.data;
|
|
18
|
+
this.busy = signal(false);
|
|
19
|
+
this.appliedFlavors = [];
|
|
20
|
+
this.applicableFlavors = [];
|
|
21
|
+
}
|
|
22
|
+
#overlayRef;
|
|
23
|
+
#shell;
|
|
24
|
+
#dmsService;
|
|
25
|
+
applyFlavor(flavor) {
|
|
26
|
+
this.busy.set(true);
|
|
27
|
+
this.#shell.triggerApplyObjectFlavor(this.item, flavor).subscribe(() => {
|
|
28
|
+
this.#overlayRef.close();
|
|
29
|
+
this.busy.set(false);
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
removeFlavor(flavor) {
|
|
33
|
+
this.busy.set(true);
|
|
34
|
+
this.#shell.removeObjectFlavor(this.item, flavor).subscribe(() => {
|
|
35
|
+
this.#overlayRef.close();
|
|
36
|
+
this.busy.set(false);
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
#refreshDmsObject() {
|
|
40
|
+
this.busy.set(true);
|
|
41
|
+
this.#dmsService
|
|
42
|
+
.getDmsObject(this.item.id)
|
|
43
|
+
.pipe(tap((dmsObject) => {
|
|
44
|
+
this.item = dmsObject;
|
|
45
|
+
this.#getAppliedFlavors(this.item);
|
|
46
|
+
}))
|
|
47
|
+
.subscribe()
|
|
48
|
+
.add(() => this.busy.set(false));
|
|
49
|
+
}
|
|
50
|
+
#getAppliedFlavors(dmsObject) {
|
|
51
|
+
const res = this.#shell.getAppliedObjectFlavors(dmsObject);
|
|
52
|
+
this.appliedFlavors = res.applied;
|
|
53
|
+
this.applicableFlavors = res.applicable;
|
|
54
|
+
}
|
|
55
|
+
cancel() {
|
|
56
|
+
if (this.#overlayRef)
|
|
57
|
+
this.#overlayRef.close();
|
|
58
|
+
}
|
|
59
|
+
ngOnInit() {
|
|
60
|
+
this.#refreshDmsObject();
|
|
61
|
+
}
|
|
62
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ManageFlavorsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
63
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ManageFlavorsComponent, isStandalone: true, selector: "yuv-manage-flavors", ngImport: i0, template: "<header>\n <h2>{{ 'yuv.shell.action.manage-flavors.title' | translate }}</h2>\n <p>{{ 'yuv.shell.action.manage-flavors.text' | translate }}</p>\n</header>\n<main [yuvBusyOverlay]=\"busy()\">\n @if (appliedFlavors.length) {\n <h3>{{ 'yuv.shell.action.manage-flavors.applied.headline' | translate }}</h3>\n <ul>\n @for (f of appliedFlavors; track $index) {\n <li>\n <yuv-flavor-chip [flavor]=\"f\" yuvListItem></yuv-flavor-chip>\n <button class=\"secondary\" (click)=\"removeFlavor(f)\">{{ 'yuv.shell.action.manage-flavors.applicable.button.remove' | translate }}</button>\n </li>\n }\n </ul>\n }\n @if (applicableFlavors.length) {\n <h3>{{ 'yuv.shell.action.manage-flavors.applicable.headline' | translate }}</h3>\n <ul>\n @for (f of applicableFlavors; track $index) {\n <li>\n <yuv-flavor-chip [flavor]=\"f\" yuvListItem></yuv-flavor-chip>\n <button class=\"secondary\" (click)=\"applyFlavor(f)\">{{ 'yuv.shell.action.manage-flavors.applied.button.apply' | translate }}</button>\n </li>\n }\n </ul>\n }\n</main>\n<footer>\n <button class=\"secondary\" (click)=\"cancel()\">{{ 'yuv.shell.action.manage-flavors.button.cancel' | translate }}</button>\n</footer>\n", styles: [":host{display:flex;flex-flow:column;padding:var(--app-pane-padding)}:host header{flex:0 0 auto}:host header h2{padding:0;font-weight:400;font-size:var(--font-headline);margin:0 0 var(--app-pane-padding) 0}:host header p{max-width:42ch;line-height:1.3em}:host main{flex:1;overflow-y:auto}:host main yuv-flavor-chip{border-color:transparent;flex:1}:host main ul{padding:0;margin:0;list-style-type:none}:host main li{display:flex;gap:calc(var(--app-pane-padding) / 2);align-items:center;border:1px solid var(--panel-divider-color);margin-block-end:2px;padding:calc(var(--app-pane-padding) / 4)}:host main li button{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host footer{flex:0 0 auto;margin-block-start:var(--app-pane-padding)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: BusyOverlayDirective, selector: "[yuvBusyOverlay]", inputs: ["yuvBusyOverlay"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "component", type: FlavorChipComponent, selector: "yuv-flavor-chip", inputs: ["flavor", "enableRemove", "enableDescription"], outputs: ["flavorRemove"] }] }); }
|
|
64
|
+
}
|
|
65
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ManageFlavorsComponent, decorators: [{
|
|
66
|
+
type: Component,
|
|
67
|
+
args: [{ selector: 'yuv-manage-flavors', standalone: true, imports: [CommonModule, ListComponent, BusyOverlayDirective, TranslateModule, ListItemDirective, FlavorChipComponent], template: "<header>\n <h2>{{ 'yuv.shell.action.manage-flavors.title' | translate }}</h2>\n <p>{{ 'yuv.shell.action.manage-flavors.text' | translate }}</p>\n</header>\n<main [yuvBusyOverlay]=\"busy()\">\n @if (appliedFlavors.length) {\n <h3>{{ 'yuv.shell.action.manage-flavors.applied.headline' | translate }}</h3>\n <ul>\n @for (f of appliedFlavors; track $index) {\n <li>\n <yuv-flavor-chip [flavor]=\"f\" yuvListItem></yuv-flavor-chip>\n <button class=\"secondary\" (click)=\"removeFlavor(f)\">{{ 'yuv.shell.action.manage-flavors.applicable.button.remove' | translate }}</button>\n </li>\n }\n </ul>\n }\n @if (applicableFlavors.length) {\n <h3>{{ 'yuv.shell.action.manage-flavors.applicable.headline' | translate }}</h3>\n <ul>\n @for (f of applicableFlavors; track $index) {\n <li>\n <yuv-flavor-chip [flavor]=\"f\" yuvListItem></yuv-flavor-chip>\n <button class=\"secondary\" (click)=\"applyFlavor(f)\">{{ 'yuv.shell.action.manage-flavors.applied.button.apply' | translate }}</button>\n </li>\n }\n </ul>\n }\n</main>\n<footer>\n <button class=\"secondary\" (click)=\"cancel()\">{{ 'yuv.shell.action.manage-flavors.button.cancel' | translate }}</button>\n</footer>\n", styles: [":host{display:flex;flex-flow:column;padding:var(--app-pane-padding)}:host header{flex:0 0 auto}:host header h2{padding:0;font-weight:400;font-size:var(--font-headline);margin:0 0 var(--app-pane-padding) 0}:host header p{max-width:42ch;line-height:1.3em}:host main{flex:1;overflow-y:auto}:host main yuv-flavor-chip{border-color:transparent;flex:1}:host main ul{padding:0;margin:0;list-style-type:none}:host main li{display:flex;gap:calc(var(--app-pane-padding) / 2);align-items:center;border:1px solid var(--panel-divider-color);margin-block-end:2px;padding:calc(var(--app-pane-padding) / 4)}:host main li button{padding:calc(var(--app-pane-padding) / 4) calc(var(--app-pane-padding) / 2)}:host footer{flex:0 0 auto;margin-block-start:var(--app-pane-padding)}\n"] }]
|
|
68
|
+
}] });
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWZsYXZvcnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsL3NyYy9saWIvYWN0aW9ucy9tYW5hZ2UtZmxhdm9ycy9tYW5hZ2UtZmxhdm9ycy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtc2hlbGwvc3JjL2xpYi9hY3Rpb25zL21hbmFnZS1mbGF2b3JzL21hbmFnZS1mbGF2b3JzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzNELE9BQU8sRUFBYSxVQUFVLEVBQUUsZUFBZSxFQUFvQixNQUFNLHFCQUFxQixDQUFDO0FBQy9GLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQVN2QyxNQUFNLE9BQU8sc0JBQXNCO0lBUG5DO1FBUUUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5QixnQkFBVyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxTQUFJLEdBQWMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFFeEMsU0FBSSxHQUFHLE1BQU0sQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUU5QixtQkFBYyxHQUFtQixFQUFFLENBQUM7UUFDcEMsc0JBQWlCLEdBQW1CLEVBQUUsQ0FBQztLQTZDeEM7SUFyREMsV0FBVyxDQUF5QjtJQUNwQyxNQUFNLENBQXdCO0lBQzlCLFdBQVcsQ0FBc0I7SUFRakMsV0FBVyxDQUFDLE1BQW9CO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQW9CO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQy9ELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEIsSUFBSSxDQUFDLFdBQVc7YUFDYixZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7YUFDMUIsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUU7YUFDWCxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBb0I7UUFDckMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzNCLENBQUM7K0dBckRVLHNCQUFzQjttR0FBdEIsc0JBQXNCLDhFQ2pCbkMsdXZDQStCQSxpekJEbEJZLFlBQVksK0JBQWlCLG9CQUFvQix3RkFBRSxlQUFlLDRGQUFFLGlCQUFpQixzR0FBRSxtQkFBbUI7OzRGQUl6RyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0Usb0JBQW9CLGNBQ2xCLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgWXZjT3ZlcmxheVJlZiB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IERtc09iamVjdCwgRG1zU2VydmljZSwgVHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBPYmplY3RGbGF2b3IsIFNoZWxsU2VydmljZSB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUnO1xuaW1wb3J0IHsgRmxhdm9yQ2hpcENvbXBvbmVudCB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9vYmplY3QtZmxhdm9yJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQsIExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2xpc3QnO1xuaW1wb3J0IHsgQnVzeU92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtbWFuYWdlLWZsYXZvcnMnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBMaXN0Q29tcG9uZW50LCBCdXN5T3ZlcmxheURpcmVjdGl2ZSwgVHJhbnNsYXRlTW9kdWxlLCBMaXN0SXRlbURpcmVjdGl2ZSwgRmxhdm9yQ2hpcENvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9tYW5hZ2UtZmxhdm9ycy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9tYW5hZ2UtZmxhdm9ycy5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgTWFuYWdlRmxhdm9yc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICNvdmVybGF5UmVmID0gaW5qZWN0KFl2Y092ZXJsYXlSZWYpO1xuICAjc2hlbGwgPSBpbmplY3QoU2hlbGxTZXJ2aWNlKTtcbiAgI2Rtc1NlcnZpY2UgPSBpbmplY3QoRG1zU2VydmljZSk7XG4gIGl0ZW06IERtc09iamVjdCA9IHRoaXMuI292ZXJsYXlSZWYuZGF0YTtcblxuICBidXN5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBhcHBsaWVkRmxhdm9yczogT2JqZWN0Rmxhdm9yW10gPSBbXTtcbiAgYXBwbGljYWJsZUZsYXZvcnM6IE9iamVjdEZsYXZvcltdID0gW107XG5cbiAgYXBwbHlGbGF2b3IoZmxhdm9yOiBPYmplY3RGbGF2b3IpIHtcbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xuICAgIHRoaXMuI3NoZWxsLnRyaWdnZXJBcHBseU9iamVjdEZsYXZvcih0aGlzLml0ZW0sIGZsYXZvcikuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuI292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVtb3ZlRmxhdm9yKGZsYXZvcjogT2JqZWN0Rmxhdm9yKSB7XG4gICAgdGhpcy5idXN5LnNldCh0cnVlKTtcbiAgICB0aGlzLiNzaGVsbC5yZW1vdmVPYmplY3RGbGF2b3IodGhpcy5pdGVtLCBmbGF2b3IpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLiNvdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcbiAgICB9KTtcbiAgfVxuXG4gICNyZWZyZXNoRG1zT2JqZWN0KCkge1xuICAgIHRoaXMuYnVzeS5zZXQodHJ1ZSk7XG4gICAgdGhpcy4jZG1zU2VydmljZVxuICAgICAgLmdldERtc09iamVjdCh0aGlzLml0ZW0uaWQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKChkbXNPYmplY3QpID0+IHtcbiAgICAgICAgICB0aGlzLml0ZW0gPSBkbXNPYmplY3Q7XG4gICAgICAgICAgdGhpcy4jZ2V0QXBwbGllZEZsYXZvcnModGhpcy5pdGVtKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKVxuICAgICAgLmFkZCgoKSA9PiB0aGlzLmJ1c3kuc2V0KGZhbHNlKSk7XG4gIH1cblxuICAjZ2V0QXBwbGllZEZsYXZvcnMoZG1zT2JqZWN0OiBEbXNPYmplY3QpIHtcbiAgICBjb25zdCByZXMgPSB0aGlzLiNzaGVsbC5nZXRBcHBsaWVkT2JqZWN0Rmxhdm9ycyhkbXNPYmplY3QpO1xuICAgIHRoaXMuYXBwbGllZEZsYXZvcnMgPSByZXMuYXBwbGllZDtcbiAgICB0aGlzLmFwcGxpY2FibGVGbGF2b3JzID0gcmVzLmFwcGxpY2FibGU7XG4gIH1cblxuICBjYW5jZWwoKSB7XG4gICAgaWYgKHRoaXMuI292ZXJsYXlSZWYpIHRoaXMuI292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuI3JlZnJlc2hEbXNPYmplY3QoKTtcbiAgfVxufVxuIiwiPGhlYWRlcj5cbiAgPGgyPnt7ICd5dXYuc2hlbGwuYWN0aW9uLm1hbmFnZS1mbGF2b3JzLnRpdGxlJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG4gIDxwPnt7ICd5dXYuc2hlbGwuYWN0aW9uLm1hbmFnZS1mbGF2b3JzLnRleHQnIHwgdHJhbnNsYXRlIH19PC9wPlxuPC9oZWFkZXI+XG48bWFpbiBbeXV2QnVzeU92ZXJsYXldPVwiYnVzeSgpXCI+XG4gIEBpZiAoYXBwbGllZEZsYXZvcnMubGVuZ3RoKSB7XG4gICAgPGgzPnt7ICd5dXYuc2hlbGwuYWN0aW9uLm1hbmFnZS1mbGF2b3JzLmFwcGxpZWQuaGVhZGxpbmUnIHwgdHJhbnNsYXRlIH19PC9oMz5cbiAgICA8dWw+XG4gICAgICBAZm9yIChmIG9mIGFwcGxpZWRGbGF2b3JzOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGxpPlxuICAgICAgICAgIDx5dXYtZmxhdm9yLWNoaXAgW2ZsYXZvcl09XCJmXCIgeXV2TGlzdEl0ZW0+PC95dXYtZmxhdm9yLWNoaXA+XG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNlY29uZGFyeVwiIChjbGljayk9XCJyZW1vdmVGbGF2b3IoZilcIj57eyAneXV2LnNoZWxsLmFjdGlvbi5tYW5hZ2UtZmxhdm9ycy5hcHBsaWNhYmxlLmJ1dHRvbi5yZW1vdmUnIHwgdHJhbnNsYXRlIH19PC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICB9XG4gICAgPC91bD5cbiAgfVxuICBAaWYgKGFwcGxpY2FibGVGbGF2b3JzLmxlbmd0aCkge1xuICAgIDxoMz57eyAneXV2LnNoZWxsLmFjdGlvbi5tYW5hZ2UtZmxhdm9ycy5hcHBsaWNhYmxlLmhlYWRsaW5lJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG4gICAgPHVsPlxuICAgICAgQGZvciAoZiBvZiBhcHBsaWNhYmxlRmxhdm9yczsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxsaT5cbiAgICAgICAgICA8eXV2LWZsYXZvci1jaGlwIFtmbGF2b3JdPVwiZlwiIHl1dkxpc3RJdGVtPjwveXV2LWZsYXZvci1jaGlwPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnlcIiAoY2xpY2spPVwiYXBwbHlGbGF2b3IoZilcIj57eyAneXV2LnNoZWxsLmFjdGlvbi5tYW5hZ2UtZmxhdm9ycy5hcHBsaWVkLmJ1dHRvbi5hcHBseScgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgIH1cbiAgICA8L3VsPlxuICB9XG48L21haW4+XG48Zm9vdGVyPlxuICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5XCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+e3sgJ3l1di5zaGVsbC5hY3Rpb24ubWFuYWdlLWZsYXZvcnMuYnV0dG9uLmNhbmNlbCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbjwvZm9vdGVyPlxuIl19
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { AsyncPipe, NgIf } from '@angular/common';
|
|
2
|
+
import { Component, HostListener, effect, inject, input, signal } from '@angular/core';
|
|
3
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
4
|
+
import { NavigationEnd, Router, RouterModule } from '@angular/router';
|
|
5
|
+
import { SwPush } from '@angular/service-worker';
|
|
6
|
+
import { AuthService, DeviceService, TranslateModule, TranslateService, UserRoles, UserService, Utils } from '@yuuvis/client-core';
|
|
7
|
+
import { MetadataDefaultTemplatesComponent } from '@yuuvis/client-framework/metadata-form';
|
|
8
|
+
import { CommandPaletteService, ShellNotificationsService, ShellService } from '@yuuvis/client-shell-core';
|
|
9
|
+
import { YvcIconModule } from '@yuuvis/components/icon';
|
|
10
|
+
import { of } from 'rxjs';
|
|
11
|
+
import { catchError, filter, map, switchMap, tap } from 'rxjs/operators';
|
|
12
|
+
import { clientShellRoutes } from './lib.routes';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@yuuvis/client-core";
|
|
15
|
+
import * as i2 from "@angular/router";
|
|
16
|
+
import * as i3 from "@yuuvis/components/icon";
|
|
17
|
+
export class ClientShellComponent {
|
|
18
|
+
#shell;
|
|
19
|
+
#device;
|
|
20
|
+
#swPush;
|
|
21
|
+
onFocusChange(event) {
|
|
22
|
+
// console.log('focused: ', document.activeElement);
|
|
23
|
+
}
|
|
24
|
+
onDragOver(event) {
|
|
25
|
+
event.stopPropagation();
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
this.showUploadOverlay = !!this._dragContainsFiles(event);
|
|
28
|
+
}
|
|
29
|
+
#appsEffect;
|
|
30
|
+
#shellConfigEffect;
|
|
31
|
+
constructor() {
|
|
32
|
+
this.router = inject(Router);
|
|
33
|
+
this.auth = inject(AuthService);
|
|
34
|
+
this.userService = inject(UserService);
|
|
35
|
+
this.#shell = inject(ShellService);
|
|
36
|
+
this.shellNotifications = inject(ShellNotificationsService);
|
|
37
|
+
this.translate = inject(TranslateService);
|
|
38
|
+
this.commandPalette = inject(CommandPaletteService);
|
|
39
|
+
this.#device = inject(DeviceService);
|
|
40
|
+
this.#swPush = inject(SwPush);
|
|
41
|
+
this.APP_LOGOUT_EVENT_KEY = 'yuv.app.event.logout';
|
|
42
|
+
this._levels = {
|
|
43
|
+
info: 0,
|
|
44
|
+
success: 1,
|
|
45
|
+
warning: 2,
|
|
46
|
+
alert: 3
|
|
47
|
+
};
|
|
48
|
+
this.showUploadOverlay = false;
|
|
49
|
+
this.busy$ = this.#shell.isBusy$;
|
|
50
|
+
this.showNotifications = signal(false);
|
|
51
|
+
this.newNotifications = toSignal(this.shellNotifications.shellNotifications$.pipe(tap((n) => this.showNotifications.set(n.length > 0)), map((notifications) => {
|
|
52
|
+
let maxLevel = 'info';
|
|
53
|
+
const count = notifications.filter((n) => !n.seen).length;
|
|
54
|
+
notifications.forEach((n) => (maxLevel = n.level && this._levels[n.level] > this._levels[maxLevel] ? n.level : maxLevel));
|
|
55
|
+
return count > 0 ? { maxLevel, count } : undefined;
|
|
56
|
+
})));
|
|
57
|
+
this.apps = input.required();
|
|
58
|
+
this.#appsEffect = effect(() => this.#shell.setAppBaseRoutes(this.apps()));
|
|
59
|
+
this.checkedForInitialRoute = false;
|
|
60
|
+
this.enableTenantSwitch = false;
|
|
61
|
+
this.config = input();
|
|
62
|
+
this.#shellConfigEffect = effect(() => {
|
|
63
|
+
const cfg = this.config();
|
|
64
|
+
if (cfg) {
|
|
65
|
+
this.#shell.setShellConfig(cfg);
|
|
66
|
+
}
|
|
67
|
+
}, {
|
|
68
|
+
allowSignalWrites: true
|
|
69
|
+
});
|
|
70
|
+
this.shellConfig = this.#shell.shellConfig;
|
|
71
|
+
this.translate.onLangChange.subscribe(() => this._setCommands(true));
|
|
72
|
+
// this.router.events.pipe(
|
|
73
|
+
// // filter(e => e instanceof NavigationStart)
|
|
74
|
+
// ).subscribe((e) => {
|
|
75
|
+
// console.log(e);
|
|
76
|
+
// });
|
|
77
|
+
this.router.events
|
|
78
|
+
.pipe(filter((e) => e instanceof NavigationEnd), map((e) => e))
|
|
79
|
+
.subscribe((e) => this._processRouterNavigationEnd(e));
|
|
80
|
+
this.#device.init();
|
|
81
|
+
this.userService.user$.subscribe((user) => {
|
|
82
|
+
if (user) {
|
|
83
|
+
this.checkedForInitialRoute = !(!this.user || this.user.id !== user.id);
|
|
84
|
+
this.enableTenantSwitch = user.authorities.includes(UserRoles.MULTI_TENANT);
|
|
85
|
+
}
|
|
86
|
+
this.user = user;
|
|
87
|
+
});
|
|
88
|
+
window.addEventListener('storage', (evt) => {
|
|
89
|
+
if (evt.key === this.APP_LOGOUT_EVENT_KEY) {
|
|
90
|
+
this.appLogout(true);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
openNotifications() {
|
|
95
|
+
this.router.navigate([{}]);
|
|
96
|
+
}
|
|
97
|
+
// getNotifications(id: string) {
|
|
98
|
+
// return this.shellNotifications.getNotifications(id);
|
|
99
|
+
// }
|
|
100
|
+
_dragContainsFiles(event) {
|
|
101
|
+
// do not allow to drop files/images from iframes
|
|
102
|
+
if (event.relatedTarget?.tagName.toLowerCase() === 'iframe')
|
|
103
|
+
return 0;
|
|
104
|
+
return event.dataTransfer ? Array.from(event.dataTransfer.items || []).filter((i) => i.kind === 'file' && i.type).length : 0;
|
|
105
|
+
}
|
|
106
|
+
_setCommands(update) {
|
|
107
|
+
const commands = this.apps().map((a, i) => ({
|
|
108
|
+
id: `nav.app.${i}`,
|
|
109
|
+
label: this.translate.instant('yuv.shell.cmd.app.open', { title: a.title }),
|
|
110
|
+
callback: () => this.router.navigate([a.path])
|
|
111
|
+
}));
|
|
112
|
+
commands.push({
|
|
113
|
+
id: `nav.shell.settings`,
|
|
114
|
+
label: this.translate.instant('yuv.shell.cmd.open.settings'),
|
|
115
|
+
callback: () => this.router.navigate(['settings'])
|
|
116
|
+
});
|
|
117
|
+
commands.push({
|
|
118
|
+
id: `nav.shell.logout`,
|
|
119
|
+
label: this.translate.instant('yuv.shell.cmd.logout'),
|
|
120
|
+
callback: () => this.appLogout()
|
|
121
|
+
});
|
|
122
|
+
if (update)
|
|
123
|
+
this.commandPalette.updateCommands(commands);
|
|
124
|
+
else
|
|
125
|
+
this.commandPalette.registerCommands(commands);
|
|
126
|
+
}
|
|
127
|
+
requestSubscription() {
|
|
128
|
+
if (!this.#swPush.isEnabled) {
|
|
129
|
+
console.log('Notification is not enabled.');
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
this.#swPush.messages
|
|
133
|
+
.pipe(tap((msg) => console.log({ msg })), catchError((error) => {
|
|
134
|
+
console.log({ error });
|
|
135
|
+
return of(null);
|
|
136
|
+
}))
|
|
137
|
+
.subscribe();
|
|
138
|
+
}
|
|
139
|
+
appLogout(triggeredFromOtherTab) {
|
|
140
|
+
if (!triggeredFromOtherTab) {
|
|
141
|
+
// send storage event to logout all other open tabs
|
|
142
|
+
window.localStorage.setItem(this.APP_LOGOUT_EVENT_KEY, `${Date.now()}`);
|
|
143
|
+
}
|
|
144
|
+
this.userService.logout('');
|
|
145
|
+
}
|
|
146
|
+
_processRouterNavigationEnd(e) {
|
|
147
|
+
if (!this.checkedForInitialRoute) {
|
|
148
|
+
this.checkedForInitialRoute = true;
|
|
149
|
+
// redirect to the page the user logged out from the last time
|
|
150
|
+
// but only if current route is not a deep link
|
|
151
|
+
const ignoreRoutes = ['', 'dashboard', 'index.html'].map((s) => `${Utils.getBaseHref()}${s}`.replace('//', '/'));
|
|
152
|
+
const currentRoute = this.routeWithBaseHref(this.router.routerState.snapshot.url);
|
|
153
|
+
if (this.userService.getCurrentUser() && !ignoreRoutes.includes(currentRoute)) {
|
|
154
|
+
// get persisted routes to decide where to redirect the logged in user to
|
|
155
|
+
this.auth
|
|
156
|
+
.getInitialRequestUri()
|
|
157
|
+
.pipe(switchMap((res) => this.auth.resetInitialRequestUri().pipe(map((_) => res))))
|
|
158
|
+
.subscribe((res) => {
|
|
159
|
+
const loginRes = res && !ignoreRoutes.includes(res.uri) ? res : null;
|
|
160
|
+
if (loginRes)
|
|
161
|
+
this.router.navigateByUrl(loginRes.uri);
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
routeWithBaseHref(r) {
|
|
167
|
+
return `${Utils.getBaseHref()}${r}`.replace('//', '/');
|
|
168
|
+
}
|
|
169
|
+
ngOnInit() {
|
|
170
|
+
this.#shell._init();
|
|
171
|
+
clientShellRoutes.forEach((route) => {
|
|
172
|
+
this.router.config.push(route);
|
|
173
|
+
});
|
|
174
|
+
this.router.resetConfig(this.router.config);
|
|
175
|
+
this._setCommands();
|
|
176
|
+
this.requestSubscription();
|
|
177
|
+
}
|
|
178
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClientShellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: ClientShellComponent, isStandalone: true, selector: "yuv-client-shell", inputs: { apps: { classPropertyName: "apps", publicName: "apps", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "document:focusin": "onFocusChange($event)", "dragover": "onDragOver($event)" } }, ngImport: i0, template: "<yuv-metadata-default-templates></yuv-metadata-default-templates>\n<!-- <yuv-focus-indicator /> -->\n\n<!-- gloabl busy indicator -->\n@if (busy$ | async) {\n <div class=\"yuv-loader-linear\"></div>\n}\n<nav class=\"apps\" [inert]=\"asideOutlet.isActivated\" [attr.aria-label]=\"'yuv.shell.naviagtion.aria.label' | translate\">\n <div class=\"app-icon\">\n <button routerLink=\"/\" routerLinkActive=\"active\" [attr.aria-label]=\"'yuv.shell.logo.aria.label' | translate\">\n <yvc-icon [svg]=\"shellConfig().icons!.appIcon!\"></yvc-icon>\n </button>\n </div>\n <ul class=\"apps\">\n @for (a of apps(); track a.path) {\n <li>\n <button routerLinkActive=\"active\" [routerLink]=\"a.path\" title=\"{{ a.title }}\">\n <yvc-icon [svg]=\"a.icon\" title=\"{{ a.title }}\" *ngIf=\"a.icon\"></yvc-icon>\n <!-- @if (getNotifications(a.id)) {\n <div [ngClass]=\"'badge ' + getNotifications(a.id).maxLevel\">{{ getNotifications(a.id).count }}</div>\n } -->\n </button>\n </li>\n }\n </ul>\n\n <section class=\"actions\">\n @if (showNotifications()) {\n <button [routerLink]=\"[{ outlets: { aside: 'notifications' } }]\" routerLinkActive=\"active\" title=\"{{ 'yuv.shell.notifications.title' | translate }}\">\n <yvc-icon [svg]=\"shellConfig().icons!.notifications!\"></yvc-icon>\n @if (newNotifications(); as note) {\n <div class=\"badge {{ note.maxLevel }}\">{{ note.count }}</div>\n }\n </button>\n }\n <button [routerLink]=\"['/settings']\" routerLinkActive=\"active\" title=\"{{ 'yuv.shell.settings.title' | translate }}\">\n <yvc-icon [svg]=\"shellConfig().icons!.settings!\"></yvc-icon>\n </button>\n <button (click)=\"appLogout()\" title=\"{{ 'yuv.shell.cmd.logout' | translate }}\"><yvc-icon [svg]=\"shellConfig().icons!.logout!\"></yvc-icon></button>\n </section>\n</nav>\n<main id=\"main-shell_content\" aria-label=\"main shell content\" [inert]=\"asideOutlet.isActivated\">\n <router-outlet></router-outlet>\n</main>\n\n<!-- outlet for aside modals like notifications -->\n<div class=\"asideOutlet\" [hidden]=\"!asideOutlet.isActivated\">\n <router-outlet name=\"aside\" #asideOutlet=\"outlet\"></router-outlet>\n</div>\n\n<div id=\"fi\" inert></div>\n", styles: [":host{--client-shell-background-color: var(--main-background);--client-shell-bar-background-color: var(--panel-background);--client-shell-bar-icon-size: 24px;--client-shell-bar-button-padding: calc(var(--app-pane-padding) * .75);--client-shell-bar-width: calc(var(--client-shell-bar-icon-size) + var(--client-shell-bar-button-padding) * 2 + 1px);position:absolute;inset:0;overflow:hidden;display:flex;background-color:var(--client-shell-background-color)}:host .yuv-loader-linear{position:absolute}:host nav{background-color:var(--client-shell-bar-background-color);height:100%;overflow-y:auto;border-inline-end:1px solid var(--panel-divider-color);flex:0 0 auto;display:var(--nav-display, grid);grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:\"appIcon\" \"apps\" \"actions\"}:host nav button{padding:var(--client-shell-bar-button-padding);border-radius:0;border:0}:host nav button yvc-icon{--icon-size: var(--client-shell-bar-icon-size)}:host nav button.active{color:var(--color-accent)}:host nav .app-icon{grid-area:appIcon}:host nav ul.apps{grid-area:apps;list-style:none;margin:0;padding:0;overflow-y:auto}:host nav ul.apps button{position:relative}:host nav ul.apps button .badge{--badge-color: var(--color-accent);--badge-color-tone: var(--color-accent-tone);position:absolute;background-color:var(--badge-color);color:var(--badge-color-tone);font-size:10px;display:block;padding:1px 2px;border-radius:.25em;line-height:1em;top:calc(var(--app-pane-padding) / 4);right:calc(var(--app-pane-padding) / 4)}:host nav ul.apps button .badge.success{--badge-color: var(--color-success);--badge-color-tone: #fff}:host nav ul.apps button .badge.warning{--badge-color: var(--color-warning);--badge-color-tone: #fff}:host nav ul.apps button .badge.alert{--badge-color: var(--color-error);--badge-color-tone: #fff}:host nav ul.apps li a{display:block;padding:var(--app-pane-padding)}:host nav section.actions{grid-area:actions}:host nav section.actions button{position:relative}:host nav section.actions button .badge{--badge-color: var(--color-accent);--badge-color-tone: var(--color-accent-tone);position:absolute;background-color:var(--badge-color);color:var(--badge-color-tone);font-size:10px;display:block;padding:1px 2px;border-radius:.25em;line-height:1em;top:calc(var(--app-pane-padding) / 4);right:calc(var(--app-pane-padding) / 4)}:host nav section.actions button .badge.success{--badge-color: var(--color-success);--badge-color-tone: #fff}:host nav section.actions button .badge.warning{--badge-color: var(--color-warning);--badge-color-tone: #fff}:host nav section.actions button .badge.alert{--badge-color: var(--color-error);--badge-color-tone: #fff}:host main{flex:1;color:var(--text-color-body)}:host .asideOutlet{position:absolute;inset:0;padding-inline-start:var(--client-shell-bar-width)}:host-context([data-screen-size=s][data-screen-orientation=portrait]){flex-flow:column-reverse}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav{height:auto;grid-template-rows:1fr;grid-template-columns:auto 1fr auto;grid-template-areas:\"appIcon apps actions\";border:0;border-block-start:1px solid var(--panel-divider-color)}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav .app-icon{display:none}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav ul.apps,:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav section.actions{display:flex}:host-context([data-screen-size=s][data-screen-orientation=portrait]) main{overflow:hidden}:host-context([data-screen-size=s][data-screen-orientation=portrait]) .asideOutlet{padding-inline-start:0}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: i2.RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }, { kind: "directive", type: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i3.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }, { kind: "component", type: MetadataDefaultTemplatesComponent, selector: "yuv-metadata-default-templates" }] }); }
|
|
180
|
+
}
|
|
181
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ClientShellComponent, decorators: [{
|
|
182
|
+
type: Component,
|
|
183
|
+
args: [{ selector: 'yuv-client-shell', standalone: true, imports: [NgIf, AsyncPipe, TranslateModule, RouterModule, YvcIconModule, MetadataDefaultTemplatesComponent], template: "<yuv-metadata-default-templates></yuv-metadata-default-templates>\n<!-- <yuv-focus-indicator /> -->\n\n<!-- gloabl busy indicator -->\n@if (busy$ | async) {\n <div class=\"yuv-loader-linear\"></div>\n}\n<nav class=\"apps\" [inert]=\"asideOutlet.isActivated\" [attr.aria-label]=\"'yuv.shell.naviagtion.aria.label' | translate\">\n <div class=\"app-icon\">\n <button routerLink=\"/\" routerLinkActive=\"active\" [attr.aria-label]=\"'yuv.shell.logo.aria.label' | translate\">\n <yvc-icon [svg]=\"shellConfig().icons!.appIcon!\"></yvc-icon>\n </button>\n </div>\n <ul class=\"apps\">\n @for (a of apps(); track a.path) {\n <li>\n <button routerLinkActive=\"active\" [routerLink]=\"a.path\" title=\"{{ a.title }}\">\n <yvc-icon [svg]=\"a.icon\" title=\"{{ a.title }}\" *ngIf=\"a.icon\"></yvc-icon>\n <!-- @if (getNotifications(a.id)) {\n <div [ngClass]=\"'badge ' + getNotifications(a.id).maxLevel\">{{ getNotifications(a.id).count }}</div>\n } -->\n </button>\n </li>\n }\n </ul>\n\n <section class=\"actions\">\n @if (showNotifications()) {\n <button [routerLink]=\"[{ outlets: { aside: 'notifications' } }]\" routerLinkActive=\"active\" title=\"{{ 'yuv.shell.notifications.title' | translate }}\">\n <yvc-icon [svg]=\"shellConfig().icons!.notifications!\"></yvc-icon>\n @if (newNotifications(); as note) {\n <div class=\"badge {{ note.maxLevel }}\">{{ note.count }}</div>\n }\n </button>\n }\n <button [routerLink]=\"['/settings']\" routerLinkActive=\"active\" title=\"{{ 'yuv.shell.settings.title' | translate }}\">\n <yvc-icon [svg]=\"shellConfig().icons!.settings!\"></yvc-icon>\n </button>\n <button (click)=\"appLogout()\" title=\"{{ 'yuv.shell.cmd.logout' | translate }}\"><yvc-icon [svg]=\"shellConfig().icons!.logout!\"></yvc-icon></button>\n </section>\n</nav>\n<main id=\"main-shell_content\" aria-label=\"main shell content\" [inert]=\"asideOutlet.isActivated\">\n <router-outlet></router-outlet>\n</main>\n\n<!-- outlet for aside modals like notifications -->\n<div class=\"asideOutlet\" [hidden]=\"!asideOutlet.isActivated\">\n <router-outlet name=\"aside\" #asideOutlet=\"outlet\"></router-outlet>\n</div>\n\n<div id=\"fi\" inert></div>\n", styles: [":host{--client-shell-background-color: var(--main-background);--client-shell-bar-background-color: var(--panel-background);--client-shell-bar-icon-size: 24px;--client-shell-bar-button-padding: calc(var(--app-pane-padding) * .75);--client-shell-bar-width: calc(var(--client-shell-bar-icon-size) + var(--client-shell-bar-button-padding) * 2 + 1px);position:absolute;inset:0;overflow:hidden;display:flex;background-color:var(--client-shell-background-color)}:host .yuv-loader-linear{position:absolute}:host nav{background-color:var(--client-shell-bar-background-color);height:100%;overflow-y:auto;border-inline-end:1px solid var(--panel-divider-color);flex:0 0 auto;display:var(--nav-display, grid);grid-template-rows:auto 1fr auto;grid-template-columns:1fr;grid-template-areas:\"appIcon\" \"apps\" \"actions\"}:host nav button{padding:var(--client-shell-bar-button-padding);border-radius:0;border:0}:host nav button yvc-icon{--icon-size: var(--client-shell-bar-icon-size)}:host nav button.active{color:var(--color-accent)}:host nav .app-icon{grid-area:appIcon}:host nav ul.apps{grid-area:apps;list-style:none;margin:0;padding:0;overflow-y:auto}:host nav ul.apps button{position:relative}:host nav ul.apps button .badge{--badge-color: var(--color-accent);--badge-color-tone: var(--color-accent-tone);position:absolute;background-color:var(--badge-color);color:var(--badge-color-tone);font-size:10px;display:block;padding:1px 2px;border-radius:.25em;line-height:1em;top:calc(var(--app-pane-padding) / 4);right:calc(var(--app-pane-padding) / 4)}:host nav ul.apps button .badge.success{--badge-color: var(--color-success);--badge-color-tone: #fff}:host nav ul.apps button .badge.warning{--badge-color: var(--color-warning);--badge-color-tone: #fff}:host nav ul.apps button .badge.alert{--badge-color: var(--color-error);--badge-color-tone: #fff}:host nav ul.apps li a{display:block;padding:var(--app-pane-padding)}:host nav section.actions{grid-area:actions}:host nav section.actions button{position:relative}:host nav section.actions button .badge{--badge-color: var(--color-accent);--badge-color-tone: var(--color-accent-tone);position:absolute;background-color:var(--badge-color);color:var(--badge-color-tone);font-size:10px;display:block;padding:1px 2px;border-radius:.25em;line-height:1em;top:calc(var(--app-pane-padding) / 4);right:calc(var(--app-pane-padding) / 4)}:host nav section.actions button .badge.success{--badge-color: var(--color-success);--badge-color-tone: #fff}:host nav section.actions button .badge.warning{--badge-color: var(--color-warning);--badge-color-tone: #fff}:host nav section.actions button .badge.alert{--badge-color: var(--color-error);--badge-color-tone: #fff}:host main{flex:1;color:var(--text-color-body)}:host .asideOutlet{position:absolute;inset:0;padding-inline-start:var(--client-shell-bar-width)}:host-context([data-screen-size=s][data-screen-orientation=portrait]){flex-flow:column-reverse}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav{height:auto;grid-template-rows:1fr;grid-template-columns:auto 1fr auto;grid-template-areas:\"appIcon apps actions\";border:0;border-block-start:1px solid var(--panel-divider-color)}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav .app-icon{display:none}:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav ul.apps,:host-context([data-screen-size=s][data-screen-orientation=portrait]) nav section.actions{display:flex}:host-context([data-screen-size=s][data-screen-orientation=portrait]) main{overflow:hidden}:host-context([data-screen-size=s][data-screen-orientation=portrait]) .asideOutlet{padding-inline-start:0}\n"] }]
|
|
184
|
+
}], ctorParameters: () => [], propDecorators: { onFocusChange: [{
|
|
185
|
+
type: HostListener,
|
|
186
|
+
args: ['document:focusin', ['$event']]
|
|
187
|
+
}], onDragOver: [{
|
|
188
|
+
type: HostListener,
|
|
189
|
+
args: ['dragover', ['$event']]
|
|
190
|
+
}] } });
|
|
191
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LXNoZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC9zcmMvbGliL2NsaWVudC1zaGVsbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtc2hlbGwvc3JjL2xpYi9jbGllbnQtc2hlbGwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBa0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZHLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFTLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDNUksT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0YsT0FBTyxFQUlMLHFCQUFxQixFQUVyQix5QkFBeUIsRUFDekIsWUFBWSxFQUNiLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFF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QUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVksRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7K0dBek1VLG9CQUFvQjttR0FBcEIsb0JBQW9CLCthQzVCakMsNHZFQW1EQSx5b0hEM0JZLElBQUksd0ZBQUUsU0FBUyw2Q0FBRSxlQUFlLDJGQUFFLFlBQVksMHBCQUFFLGFBQWEsK0hBQUUsaUNBQWlDOzs0RkFJL0Ysb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNFLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLGlDQUFpQyxDQUFDO3dEQWdEM0csYUFBYTtzQkFEWixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU01QyxVQUFVO3NCQURULFlBQVk7dUJBQUMsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgSG9zdExpc3RlbmVyLCBPbkluaXQsIFNpZ25hbCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkVuZCwgUm91dGUsIFJvdXRlciwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN3UHVzaCB9IGZyb20gJ0Bhbmd1bGFyL3NlcnZpY2Utd29ya2VyJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlLCBEZXZpY2VTZXJ2aWNlLCBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UsIFVzZXJSb2xlcywgVXNlclNlcnZpY2UsIFV0aWxzLCBZdXZVc2VyIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBNZXRhZGF0YURlZmF1bHRUZW1wbGF0ZXNDb21wb25lbnQgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvbWV0YWRhdGEtZm9ybSc7XG5pbXBvcnQge1xuICBBcHAsXG4gIENsaWVudFNoZWxsQ29uZmlnLFxuICBDb21tYW5kUGFsZXR0ZUNvbW1hbmQsXG4gIENvbW1hbmRQYWxldHRlU2VydmljZSxcbiAgU2hlbGxOb3RpZmljYXRpb25MZXZlbCxcbiAgU2hlbGxOb3RpZmljYXRpb25zU2VydmljZSxcbiAgU2hlbGxTZXJ2aWNlXG59IGZyb20gJ0B5dXV2aXMvY2xpZW50LXNoZWxsLWNvcmUnO1xuaW1wb3J0IHsgWXZjSWNvbk1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBjbGllbnRTaGVsbFJvdXRlcyB9IGZyb20gJy4vbGliLnJvdXRlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1di1jbGllbnQtc2hlbGwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdJZiwgQXN5bmNQaXBlLCBUcmFuc2xhdGVNb2R1bGUsIFJvdXRlck1vZHVsZSwgWXZjSWNvbk1vZHVsZSwgTWV0YWRhdGFEZWZhdWx0VGVtcGxhdGVzQ29tcG9uZW50XSxcbiAgdGVtcGxhdGVVcmw6ICcuL2NsaWVudC1zaGVsbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NsaWVudC1zaGVsbC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIENsaWVudFNoZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB1c2VyU2VydmljZSA9IGluamVjdChVc2VyU2VydmljZSk7XG4gICNzaGVsbCA9IGluamVjdChTaGVsbFNlcnZpY2UpO1xuICBwcml2YXRlIHNoZWxsTm90aWZpY2F0aW9ucyA9IGluamVjdChTaGVsbE5vdGlmaWNhdGlvbnNTZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gIHByaXZhdGUgY29tbWFuZFBhbGV0dGUgPSBpbmplY3QoQ29tbWFuZFBhbGV0dGVTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI2RldmljZSA9IGluamVjdChEZXZpY2VTZXJ2aWNlKTtcbiAgcmVhZG9ubHkgI3N3UHVzaCA9IGluamVjdChTd1B1c2gpO1xuXG4gIHByaXZhdGUgQVBQX0xPR09VVF9FVkVOVF9LRVkgPSAneXV2LmFwcC5ldmVudC5sb2dvdXQnO1xuXG4gIHByaXZhdGUgX2xldmVsczogUmVjb3JkPFNoZWxsTm90aWZpY2F0aW9uTGV2ZWwsIG51bWJlcj4gPSB7XG4gICAgaW5mbzogMCxcbiAgICBzdWNjZXNzOiAxLFxuICAgIHdhcm5pbmc6IDIsXG4gICAgYWxlcnQ6IDNcbiAgfTtcblxuICBzaG93VXBsb2FkT3ZlcmxheSA9IGZhbHNlO1xuICBidXN5JCA9IHRoaXMuI3NoZWxsLmlzQnVzeSQ7XG4gIGNvbnRleHQ/OiBzdHJpbmc7XG5cbiAgc2hvd05vdGlmaWNhdGlvbnMgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuICBuZXdOb3RpZmljYXRpb25zOiBTaWduYWw8XG4gICAgfCB7XG4gICAgICAgIGNvdW50OiBudW1iZXI7XG4gICAgICAgIG1heExldmVsOiBTaGVsbE5vdGlmaWNhdGlvbkxldmVsO1xuICAgICAgfVxuICAgIHwgdW5kZWZpbmVkXG4gID4gPSB0b1NpZ25hbChcbiAgICB0aGlzLnNoZWxsTm90aWZpY2F0aW9ucy5zaGVsbE5vdGlmaWNhdGlvbnMkLnBpcGUoXG4gICAgICB0YXAoKG4pID0+IHRoaXMuc2hvd05vdGlmaWNhdGlvbnMuc2V0KG4ubGVuZ3RoID4gMCkpLFxuICAgICAgbWFwKChub3RpZmljYXRpb25zKSA9PiB7XG4gICAgICAgIGxldCBtYXhMZXZlbDogU2hlbGxOb3RpZmljYXRpb25MZXZlbCA9ICdpbmZvJztcbiAgICAgICAgY29uc3QgY291bnQgPSBub3RpZmljYXRpb25zLmZpbHRlcigobikgPT4gIW4uc2VlbikubGVuZ3RoO1xuICAgICAgICBub3RpZmljYXRpb25zLmZvckVhY2goKG4pID0+IChtYXhMZXZlbCA9IG4ubGV2ZWwgJiYgdGhpcy5fbGV2ZWxzW24ubGV2ZWxdID4gdGhpcy5fbGV2ZWxzW21heExldmVsXSA/IG4ubGV2ZWwgOiBtYXhMZXZlbCkpO1xuICAgICAgICByZXR1cm4gY291bnQgPiAwID8geyBtYXhMZXZlbCwgY291bnQgfSA6IHVuZGVmaW5lZDtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmZvY3VzaW4nLCBbJyRldmVudCddKVxuICBvbkZvY3VzQ2hhbmdlKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2ZvY3VzZWQ6ICcsIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZHJhZ292ZXInLCBbJyRldmVudCddKVxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy5zaG93VXBsb2FkT3ZlcmxheSA9ICEhdGhpcy5fZHJhZ0NvbnRhaW5zRmlsZXMoZXZlbnQpO1xuICB9XG5cbiAgYXBwcyA9IGlucHV0LnJlcXVpcmVkPEFwcFtdPigpO1xuICAjYXBwc0VmZmVjdCA9IGVmZmVjdCgoKSA9PiB0aGlzLiNzaGVsbC5zZXRBcHBCYXNlUm91dGVzKHRoaXMuYXBwcygpKSk7XG4gIHVzZXI/OiBZdXZVc2VyO1xuICBjaGVja2VkRm9ySW5pdGlhbFJvdXRlID0gZmFsc2U7XG4gIGVuYWJsZVRlbmFudFN3aXRjaCA9IGZhbHNlO1xuXG4gIGNvbmZpZyA9IGlucHV0PENsaWVudFNoZWxsQ29uZmlnPigpO1xuICAjc2hlbGxDb25maWdFZmZlY3QgPSBlZmZlY3QoXG4gICAgKCkgPT4ge1xuICAgICAgY29uc3QgY2ZnID0gdGhpcy5jb25maWcoKTtcbiAgICAgIGlmIChjZmcpIHtcbiAgICAgICAgdGhpcy4jc2hlbGwuc2V0U2hlbGxDb25maWcoY2ZnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlXG4gICAgfVxuICApO1xuICBzaGVsbENvbmZpZyA9IHRoaXMuI3NoZWxsLnNoZWxsQ29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2V0Q29tbWFuZHModHJ1ZSkpO1xuICAgIC8vIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKFxuICAgIC8vICAgLy8gZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydClcbiAgICAvLyApLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgIC8vICAgY29uc29sZS5sb2coZSk7XG4gICAgLy8gfSk7XG5cbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKGUpID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSxcbiAgICAgICAgbWFwKChlKSA9PiBlIGFzIE5hdmlnYXRpb25FbmQpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChlOiBOYXZpZ2F0aW9uRW5kKSA9PiB0aGlzLl9wcm9jZXNzUm91dGVyTmF2aWdhdGlvbkVuZChlKSk7XG5cbiAgICB0aGlzLiNkZXZpY2UuaW5pdCgpO1xuXG4gICAgdGhpcy51c2VyU2VydmljZS51c2VyJC5zdWJzY3JpYmUoKHVzZXI6IFl1dlVzZXIgfCB1bmRlZmluZWQpID0+IHtcbiAgICAgIGlmICh1c2VyKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZEZvckluaXRpYWxSb3V0ZSA9ICEoIXRoaXMudXNlciB8fCB0aGlzLnVzZXIuaWQgIT09IHVzZXIuaWQpO1xuICAgICAgICB0aGlzLmVuYWJsZVRlbmFudFN3aXRjaCA9IHVzZXIuYXV0aG9yaXRpZXMuaW5jbHVkZXMoVXNlclJvbGVzLk1VTFRJX1RFTkFOVCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXIgPSB1c2VyO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3N0b3JhZ2UnLCAoZXZ0KSA9PiB7XG4gICAgICBpZiAoZXZ0LmtleSA9PT0gdGhpcy5BUFBfTE9HT1VUX0VWRU5UX0tFWSkge1xuICAgICAgICB0aGlzLmFwcExvZ291dCh0cnVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9wZW5Ob3RpZmljYXRpb25zKCkge1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7fV0pO1xuICB9XG5cbiAgLy8gZ2V0Tm90aWZpY2F0aW9ucyhpZDogc3RyaW5nKSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuc2hlbGxOb3RpZmljYXRpb25zLmdldE5vdGlmaWNhdGlvbnMoaWQpO1xuICAvLyB9XG5cbiAgcHJpdmF0ZSBfZHJhZ0NvbnRhaW5zRmlsZXMoZXZlbnQ6IERyYWdFdmVudCk6IG51bWJlciB7XG4gICAgLy8gZG8gbm90IGFsbG93IHRvIGRyb3AgZmlsZXMvaW1hZ2VzIGZyb20gaWZyYW1lc1xuICAgIGlmICgoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBFbGVtZW50KT8udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaWZyYW1lJykgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGV2ZW50LmRhdGFUcmFuc2ZlciA/IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyLml0ZW1zIHx8IFtdKS5maWx0ZXIoKGkpID0+IGkua2luZCA9PT0gJ2ZpbGUnICYmIGkudHlwZSkubGVuZ3RoIDogMDtcbiAgfVxuXG4gIHByaXZhdGUgX3NldENvbW1hbmRzKHVwZGF0ZT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjb21tYW5kczogQ29tbWFuZFBhbGV0dGVDb21tYW5kW10gPSB0aGlzLmFwcHMoKS5tYXAoKGE6IEFwcCwgaTogbnVtYmVyKSA9PiAoe1xuICAgICAgaWQ6IGBuYXYuYXBwLiR7aX1gLFxuICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ3l1di5zaGVsbC5jbWQuYXBwLm9wZW4nLCB7IHRpdGxlOiBhLnRpdGxlIGFzIHN0cmluZyB9KSxcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYS5wYXRoXSlcbiAgICB9KSk7XG4gICAgY29tbWFuZHMucHVzaCh7XG4gICAgICBpZDogYG5hdi5zaGVsbC5zZXR0aW5nc2AsXG4gICAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgneXV2LnNoZWxsLmNtZC5vcGVuLnNldHRpbmdzJyksXG4gICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydzZXR0aW5ncyddKVxuICAgIH0pO1xuICAgIGNvbW1hbmRzLnB1c2goe1xuICAgICAgaWQ6IGBuYXYuc2hlbGwubG9nb3V0YCxcbiAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCd5dXYuc2hlbGwuY21kLmxvZ291dCcpLFxuICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuYXBwTG9nb3V0KClcbiAgICB9KTtcblxuICAgIGlmICh1cGRhdGUpIHRoaXMuY29tbWFuZFBhbGV0dGUudXBkYXRlQ29tbWFuZHMoY29tbWFuZHMpO1xuICAgIGVsc2UgdGhpcy5jb21tYW5kUGFsZXR0ZS5yZWdpc3RlckNvbW1hbmRzKGNvbW1hbmRzKTtcbiAgfVxuXG4gIHJlcXVlc3RTdWJzY3JpcHRpb24oKSB7XG4gICAgaWYgKCF0aGlzLiNzd1B1c2guaXNFbmFibGVkKSB7XG4gICAgICBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9uIGlzIG5vdCBlbmFibGVkLicpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI3N3UHVzaC5tZXNzYWdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgobXNnKSA9PiBjb25zb2xlLmxvZyh7IG1zZyB9KSksXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coeyBlcnJvciB9KTtcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBhcHBMb2dvdXQodHJpZ2dlcmVkRnJvbU90aGVyVGFiPzogYm9vbGVhbikge1xuICAgIGlmICghdHJpZ2dlcmVkRnJvbU90aGVyVGFiKSB7XG4gICAgICAvLyBzZW5kIHN0b3JhZ2UgZXZlbnQgdG8gbG9nb3V0IGFsbCBvdGhlciBvcGVuIHRhYnNcbiAgICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLkFQUF9MT0dPVVRfRVZFTlRfS0VZLCBgJHtEYXRlLm5vdygpfWApO1xuICAgIH1cbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmxvZ291dCgnJyk7XG4gIH1cblxuICBwcml2YXRlIF9wcm9jZXNzUm91dGVyTmF2aWdhdGlvbkVuZChlOiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrZWRGb3JJbml0aWFsUm91dGUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZEZvckluaXRpYWxSb3V0ZSA9IHRydWU7XG4gICAgICAvLyByZWRpcmVjdCB0byB0aGUgcGFnZSB0aGUgdXNlciBsb2dnZWQgb3V0IGZyb20gdGhlIGxhc3QgdGltZVxuICAgICAgLy8gYnV0IG9ubHkgaWYgY3VycmVudCByb3V0ZSBpcyBub3QgYSBkZWVwIGxpbmtcbiAgICAgIGNvbnN0IGlnbm9yZVJvdXRlcyA9IFsnJywgJ2Rhc2hib2FyZCcsICdpbmRleC5odG1sJ10ubWFwKChzKSA9PiBgJHtVdGlscy5nZXRCYXNlSHJlZigpfSR7c31gLnJlcGxhY2UoJy8vJywgJy8nKSk7XG4gICAgICBjb25zdCBjdXJyZW50Um91dGUgPSB0aGlzLnJvdXRlV2l0aEJhc2VIcmVmKHRoaXMucm91dGVyLnJvdXRlclN0YXRlLnNuYXBzaG90LnVybCk7XG5cbiAgICAgIGlmICh0aGlzLnVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkgJiYgIWlnbm9yZVJvdXRlcy5pbmNsdWRlcyhjdXJyZW50Um91dGUpKSB7XG4gICAgICAgIC8vIGdldCBwZXJzaXN0ZWQgcm91dGVzIHRvIGRlY2lkZSB3aGVyZSB0byByZWRpcmVjdCB0aGUgbG9nZ2VkIGluIHVzZXIgdG9cbiAgICAgICAgdGhpcy5hdXRoXG4gICAgICAgICAgLmdldEluaXRpYWxSZXF1ZXN0VXJpKClcbiAgICAgICAgICAucGlwZShzd2l0Y2hNYXAoKHJlcykgPT4gdGhpcy5hdXRoLnJlc2V0SW5pdGlhbFJlcXVlc3RVcmkoKS5waXBlKG1hcCgoXykgPT4gcmVzKSkpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlczogeyB1cmk6IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG9naW5SZXMgPSByZXMgJiYgIWlnbm9yZVJvdXRlcy5pbmNsdWRlcyhyZXMudXJpKSA/IHJlcyA6IG51bGw7XG4gICAgICAgICAgICBpZiAobG9naW5SZXMpIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwobG9naW5SZXMudXJpKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHJvdXRlV2l0aEJhc2VIcmVmKHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke1V0aWxzLmdldEJhc2VIcmVmKCl9JHtyfWAucmVwbGFjZSgnLy8nLCAnLycpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy4jc2hlbGwuX2luaXQoKTtcbiAgICBjbGllbnRTaGVsbFJvdXRlcy5mb3JFYWNoKChyb3V0ZTogUm91dGUpID0+IHtcbiAgICAgIHRoaXMucm91dGVyLmNvbmZpZy5wdXNoKHJvdXRlKTtcbiAgICB9KTtcbiAgICB0aGlzLnJvdXRlci5yZXNldENvbmZpZyh0aGlzLnJvdXRlci5jb25maWcpO1xuICAgIHRoaXMuX3NldENvbW1hbmRzKCk7XG4gICAgdGhpcy5yZXF1ZXN0U3Vic2NyaXB0aW9uKCk7XG4gIH1cbn1cbiIsIjx5dXYtbWV0YWRhdGEtZGVmYXVsdC10ZW1wbGF0ZXM+PC95dXYtbWV0YWRhdGEtZGVmYXVsdC10ZW1wbGF0ZXM+XG48IS0tIDx5dXYtZm9jdXMtaW5kaWNhdG9yIC8+IC0tPlxuXG48IS0tIGdsb2FibCBidXN5IGluZGljYXRvciAtLT5cbkBpZiAoYnVzeSQgfCBhc3luYykge1xuICA8ZGl2IGNsYXNzPVwieXV2LWxvYWRlci1saW5lYXJcIj48L2Rpdj5cbn1cbjxuYXYgY2xhc3M9XCJhcHBzXCIgW2luZXJ0XT1cImFzaWRlT3V0bGV0LmlzQWN0aXZhdGVkXCIgW2F0dHIuYXJpYS1sYWJlbF09XCIneXV2LnNoZWxsLm5hdmlhZ3Rpb24uYXJpYS5sYWJlbCcgfCB0cmFuc2xhdGVcIj5cbiAgPGRpdiBjbGFzcz1cImFwcC1pY29uXCI+XG4gICAgPGJ1dHRvbiByb3V0ZXJMaW5rPVwiL1wiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIid5dXYuc2hlbGwubG9nby5hcmlhLmxhYmVsJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgPHl2Yy1pY29uIFtzdmddPVwic2hlbGxDb25maWcoKS5pY29ucyEuYXBwSWNvbiFcIj48L3l2Yy1pY29uPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPHVsIGNsYXNzPVwiYXBwc1wiPlxuICAgIEBmb3IgKGEgb2YgYXBwcygpOyB0cmFjayBhLnBhdGgpIHtcbiAgICAgIDxsaT5cbiAgICAgICAgPGJ1dHRvbiByb3V0ZXJMaW5rQWN0aXZlPVwiYWN0aXZlXCIgW3JvdXRlckxpbmtdPVwiYS5wYXRoXCIgdGl0bGU9XCJ7eyBhLnRpdGxlIH19XCI+XG4gICAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwiYS5pY29uXCIgdGl0bGU9XCJ7eyBhLnRpdGxlIH19XCIgKm5nSWY9XCJhLmljb25cIj48L3l2Yy1pY29uPlxuICAgICAgICAgIDwhLS0gQGlmIChnZXROb3RpZmljYXRpb25zKGEuaWQpKSB7XG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIidiYWRnZSAnICsgZ2V0Tm90aWZpY2F0aW9ucyhhLmlkKS5tYXhMZXZlbFwiPnt7IGdldE5vdGlmaWNhdGlvbnMoYS5pZCkuY291bnQgfX08L2Rpdj5cbiAgICAgICAgICB9IC0tPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgfVxuICA8L3VsPlxuXG4gIDxzZWN0aW9uIGNsYXNzPVwiYWN0aW9uc1wiPlxuICAgIEBpZiAoc2hvd05vdGlmaWNhdGlvbnMoKSkge1xuICAgICAgPGJ1dHRvbiBbcm91dGVyTGlua109XCJbeyBvdXRsZXRzOiB7IGFzaWRlOiAnbm90aWZpY2F0aW9ucycgfSB9XVwiIHJvdXRlckxpbmtBY3RpdmU9XCJhY3RpdmVcIiB0aXRsZT1cInt7ICd5dXYuc2hlbGwubm90aWZpY2F0aW9ucy50aXRsZScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgPHl2Yy1pY29uIFtzdmddPVwic2hlbGxDb25maWcoKS5pY29ucyEubm90aWZpY2F0aW9ucyFcIj48L3l2Yy1pY29uPlxuICAgICAgICBAaWYgKG5ld05vdGlmaWNhdGlvbnMoKTsgYXMgbm90ZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZSB7eyBub3RlLm1heExldmVsIH19XCI+e3sgbm90ZS5jb3VudCB9fTwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2J1dHRvbj5cbiAgICB9XG4gICAgPGJ1dHRvbiBbcm91dGVyTGlua109XCJbJy9zZXR0aW5ncyddXCIgcm91dGVyTGlua0FjdGl2ZT1cImFjdGl2ZVwiIHRpdGxlPVwie3sgJ3l1di5zaGVsbC5zZXR0aW5ncy50aXRsZScgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgIDx5dmMtaWNvbiBbc3ZnXT1cInNoZWxsQ29uZmlnKCkuaWNvbnMhLnNldHRpbmdzIVwiPjwveXZjLWljb24+XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiAoY2xpY2spPVwiYXBwTG9nb3V0KClcIiB0aXRsZT1cInt7ICd5dXYuc2hlbGwuY21kLmxvZ291dCcgfCB0cmFuc2xhdGUgfX1cIj48eXZjLWljb24gW3N2Z109XCJzaGVsbENvbmZpZygpLmljb25zIS5sb2dvdXQhXCI+PC95dmMtaWNvbj48L2J1dHRvbj5cbiAgPC9zZWN0aW9uPlxuPC9uYXY+XG48bWFpbiBpZD1cIm1haW4tc2hlbGxfY29udGVudFwiIGFyaWEtbGFiZWw9XCJtYWluIHNoZWxsIGNvbnRlbnRcIiBbaW5lcnRdPVwiYXNpZGVPdXRsZXQuaXNBY3RpdmF0ZWRcIj5cbiAgPHJvdXRlci1vdXRsZXQ+PC9yb3V0ZXItb3V0bGV0PlxuPC9tYWluPlxuXG48IS0tIG91dGxldCBmb3IgYXNpZGUgbW9kYWxzIGxpa2Ugbm90aWZpY2F0aW9ucyAtLT5cbjxkaXYgY2xhc3M9XCJhc2lkZU91dGxldFwiIFtoaWRkZW5dPVwiIWFzaWRlT3V0bGV0LmlzQWN0aXZhdGVkXCI+XG4gIDxyb3V0ZXItb3V0bGV0IG5hbWU9XCJhc2lkZVwiICNhc2lkZU91dGxldD1cIm91dGxldFwiPjwvcm91dGVyLW91dGxldD5cbjwvZGl2PlxuXG48ZGl2IGlkPVwiZmlcIiBpbmVydD48L2Rpdj5cbiJdfQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Component, input } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { YvcIconModule } from '@yuuvis/components/icon';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@yuuvis/components/icon";
|
|
6
|
+
export class AppLogoComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.icon = input();
|
|
9
|
+
this.label = input.required();
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppLogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppLogoComponent, isStandalone: true, selector: "yuv-app-logo", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@let ico = icon();\n@if(ico){\n<yvc-icon [svg]=\"ico\"></yvc-icon>\n}<span class=\"label\">{{label()}}</span>", styles: [":host{--band-color: var(--text-color-body);--band-height: var(--client-shell-bar-icon-size);--band-icon-size: 32px;--text-color: var(--main-background);--icon-color: var(--text-color);--icon-background-color: transparent;display:flex;align-items:center;padding:0 calc(var(--app-pane-padding) / 1) 0 calc(var(--app-pane-padding) / 2);height:calc(var(--client-shell-bar-icon-size));font-size:var(--font-caption);line-height:1em;cursor:pointer;background-color:var(--band-color);color:var(--text-color)}:host yvc-icon{--icon-size: var(--band-icon-size);grid-column:2;grid-row:1;border-radius:4px;margin-inline-end:calc(var(--app-pane-padding) / 2);opacity:.5;color:var(--icon-color);background-color:var(--icon-background-color)}:host .label{line-height:1em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: YvcIconModule }, { kind: "component", type: i1.Icon, selector: "yvc-icon", inputs: ["label", "svg", "svgSrc"] }] }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppLogoComponent, decorators: [{
|
|
15
|
+
type: Component,
|
|
16
|
+
args: [{ selector: 'yuv-app-logo', standalone: true, imports: [CommonModule, YvcIconModule], template: "@let ico = icon();\n@if(ico){\n<yvc-icon [svg]=\"ico\"></yvc-icon>\n}<span class=\"label\">{{label()}}</span>", styles: [":host{--band-color: var(--text-color-body);--band-height: var(--client-shell-bar-icon-size);--band-icon-size: 32px;--text-color: var(--main-background);--icon-color: var(--text-color);--icon-background-color: transparent;display:flex;align-items:center;padding:0 calc(var(--app-pane-padding) / 1) 0 calc(var(--app-pane-padding) / 2);height:calc(var(--client-shell-bar-icon-size));font-size:var(--font-caption);line-height:1em;cursor:pointer;background-color:var(--band-color);color:var(--text-color)}:host yvc-icon{--icon-size: var(--band-icon-size);grid-column:2;grid-row:1;border-radius:4px;margin-inline-end:calc(var(--app-pane-padding) / 2);opacity:.5;color:var(--icon-color);background-color:var(--icon-background-color)}:host .label{line-height:1em}\n"] }]
|
|
17
|
+
}] });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLWxvZ28uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsL3NyYy9saWIvY29tcG9uZW50cy9hcHAtbG9nby9hcHAtbG9nby5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtc2hlbGwvc3JjL2xpYi9jb21wb25lbnRzL2FwcC1sb2dvL2FwcC1sb2dvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQVN4RCxNQUFNLE9BQU8sZ0JBQWdCO0lBUDdCO1FBUUUsU0FBSSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3ZCLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFVLENBQUM7S0FDbEM7K0dBSFksZ0JBQWdCO21HQUFoQixnQkFBZ0IsZ1VDWDdCLCtHQUd1Qyw4eUJESTNCLFlBQVksOEJBQUUsYUFBYTs7NEZBSTFCLGdCQUFnQjtrQkFQNUIsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd5dXYtYXBwLWxvZ28nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBZdmNJY29uTW9kdWxlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL2FwcC1sb2dvLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2FwcC1sb2dvLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBBcHBMb2dvQ29tcG9uZW50IHtcbiAgaWNvbiA9IGlucHV0PHN0cmluZz4oKTtcbiAgbGFiZWwgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG59XG4iLCJAbGV0IGljbyA9IGljb24oKTtcbkBpZihpY28pe1xuPHl2Yy1pY29uIFtzdmddPVwiaWNvXCI+PC95dmMtaWNvbj5cbn08c3BhbiBjbGFzcz1cImxhYmVsXCI+e3tsYWJlbCgpfX08L3NwYW4+Il19
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Directive, ElementRef, effect, inject, input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class InertDirective {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.elRef = inject(ElementRef);
|
|
6
|
+
this.inert = input(false);
|
|
7
|
+
effect(() => {
|
|
8
|
+
const el = this.elRef.nativeElement;
|
|
9
|
+
if (this.inert())
|
|
10
|
+
el.setAttribute('inert', 'true');
|
|
11
|
+
else
|
|
12
|
+
el.removeAttribute('inert');
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InertDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
16
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.13", type: InertDirective, isStandalone: true, selector: "[inert]", inputs: { inert: { classPropertyName: "inert", publicName: "inert", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
|
|
17
|
+
}
|
|
18
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InertDirective, decorators: [{
|
|
19
|
+
type: Directive,
|
|
20
|
+
args: [{
|
|
21
|
+
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
22
|
+
selector: '[inert]',
|
|
23
|
+
standalone: true
|
|
24
|
+
}]
|
|
25
|
+
}], ctorParameters: () => [] });
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5lcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsL3NyYy9saWIvZGlyZWN0aXZlcy9pbmVydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTzdFLE1BQU0sT0FBTyxjQUFjO0lBS3pCO1FBSlEsVUFBSyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVuQyxVQUFLLEdBQUcsS0FBSyxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBRzVCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDVixNQUFNLEVBQUUsR0FBZ0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUE0QixDQUFDO1lBQ2hFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQzs7Z0JBQzlDLEVBQUUsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQVhVLGNBQWM7bUdBQWQsY0FBYzs7NEZBQWQsY0FBYztrQkFMMUIsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxTQUFTO29CQUNuQixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIGVmZmVjdCwgaW5qZWN0LCBpbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9kaXJlY3RpdmUtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdbaW5lcnRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJbmVydERpcmVjdGl2ZSB7XG4gIHByaXZhdGUgZWxSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgaW5lcnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGlmICh0aGlzLmluZXJ0KCkpIGVsLnNldEF0dHJpYnV0ZSgnaW5lcnQnLCAndHJ1ZScpO1xuICAgICAgZWxzZSBlbC5yZW1vdmVBdHRyaWJ1dGUoJ2luZXJ0Jyk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DashboardPageComponent } from './pages/dashboard/dashboard.component';
|
|
2
|
+
import { SettingsPageComponent } from './pages/settings/settings.component';
|
|
3
|
+
import { NotificationsPageComponent } from './pages/notifications/notifications.component';
|
|
4
|
+
import { WebShareTargetPageComponent } from './pages/web-share-target/web-share-target.component';
|
|
5
|
+
export const clientShellRoutes = [
|
|
6
|
+
{ path: 'dashboard', component: DashboardPageComponent },
|
|
7
|
+
{ path: 'notifications', component: NotificationsPageComponent, outlet: 'aside' },
|
|
8
|
+
{ path: 'settings', component: SettingsPageComponent },
|
|
9
|
+
{ path: 'web-share-target', component: WebShareTargetPageComponent },
|
|
10
|
+
// default route
|
|
11
|
+
{ path: '', redirectTo: '/dashboard', pathMatch: 'full' },
|
|
12
|
+
// redirecting route
|
|
13
|
+
{ path: '**', redirectTo: '/' }
|
|
14
|
+
];
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLnJvdXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC9zcmMvbGliL2xpYi5yb3V0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDNUUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDM0YsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFFbEcsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQVk7SUFDeEMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRTtJQUN4RCxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7SUFDakYsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxxQkFBcUIsRUFBRTtJQUN0RCxFQUFFLElBQUksRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsMkJBQTJCLEVBQUU7SUFDcEUsZ0JBQWdCO0lBQ2hCLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUU7SUFDekQsb0JBQW9CO0lBQ3BCLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFO0NBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEYXNoYm9hcmRQYWdlQ29tcG9uZW50IH0gZnJvbSAnLi9wYWdlcy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZXR0aW5nc1BhZ2VDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25zUGFnZUNvbXBvbmVudCB9IGZyb20gJy4vcGFnZXMvbm90aWZpY2F0aW9ucy9ub3RpZmljYXRpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBXZWJTaGFyZVRhcmdldFBhZ2VDb21wb25lbnQgfSBmcm9tICcuL3BhZ2VzL3dlYi1zaGFyZS10YXJnZXQvd2ViLXNoYXJlLXRhcmdldC5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgY2xpZW50U2hlbGxSb3V0ZXM6IFJvdXRlW10gPSBbXG4gIHsgcGF0aDogJ2Rhc2hib2FyZCcsIGNvbXBvbmVudDogRGFzaGJvYXJkUGFnZUNvbXBvbmVudCB9LFxuICB7IHBhdGg6ICdub3RpZmljYXRpb25zJywgY29tcG9uZW50OiBOb3RpZmljYXRpb25zUGFnZUNvbXBvbmVudCwgb3V0bGV0OiAnYXNpZGUnIH0sXG4gIHsgcGF0aDogJ3NldHRpbmdzJywgY29tcG9uZW50OiBTZXR0aW5nc1BhZ2VDb21wb25lbnQgfSxcbiAgeyBwYXRoOiAnd2ViLXNoYXJlLXRhcmdldCcsIGNvbXBvbmVudDogV2ViU2hhcmVUYXJnZXRQYWdlQ29tcG9uZW50IH0sXG4gIC8vIGRlZmF1bHQgcm91dGVcbiAgeyBwYXRoOiAnJywgcmVkaXJlY3RUbzogJy9kYXNoYm9hcmQnLCBwYXRoTWF0Y2g6ICdmdWxsJyB9LFxuICAvLyByZWRpcmVjdGluZyByb3V0ZVxuICB7IHBhdGg6ICcqKicsIHJlZGlyZWN0VG86ICcvJyB9XG5dO1xuIl19
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Component } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class DashboardPageComponent {
|
|
4
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
5
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DashboardPageComponent, selector: "yuv-dashboard", ngImport: i0, template: "yuuvis Momentum\n", styles: [":host{display:grid;align-items:center;justify-content:center;height:100%;overflow:hidden;color:var(--text-color-hint);font-size:var(--font-display)}\n"] }); }
|
|
6
|
+
}
|
|
7
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DashboardPageComponent, decorators: [{
|
|
8
|
+
type: Component,
|
|
9
|
+
args: [{ selector: 'yuv-dashboard', template: "yuuvis Momentum\n", styles: [":host{display:grid;align-items:center;justify-content:center;height:100%;overflow:hidden;color:var(--text-color-hint);font-size:var(--font-display)}\n"] }]
|
|
10
|
+
}] });
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1zaGVsbC9zcmMvbGliL3BhZ2VzL2Rhc2hib2FyZC9kYXNoYm9hcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LXNoZWxsL3NyYy9saWIvcGFnZXMvZGFzaGJvYXJkL2Rhc2hib2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU8xQyxNQUFNLE9BQU8sc0JBQXNCOytHQUF0QixzQkFBc0I7bUdBQXRCLHNCQUFzQixxRENQbkMsbUJBQ0E7OzRGRE1hLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3l1di1kYXNoYm9hcmQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGFzaGJvYXJkLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkUGFnZUNvbXBvbmVudCB7fVxuIiwieXV1dmlzIE1vbWVudHVtXG4iXX0=
|