@lucca-front/ng 10.0.7 → 10.0.8-rc.3

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.
@@ -1,7 +1,7 @@
1
1
  import { Inject, Injectable } from '@angular/core';
2
2
  import { ActivationEnd } from '@angular/router';
3
- import { BehaviorSubject } from 'rxjs';
4
- import { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';
3
+ import { BehaviorSubject, combineLatest, of } from 'rxjs';
4
+ import { distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';
5
5
  import { LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';
6
6
  import * as i0 from "@angular/core";
7
7
  import * as i1 from "@angular/router";
@@ -14,7 +14,7 @@ export class LuTitleService {
14
14
  this.translateService = translateService;
15
15
  this.titlePartsSubject = new BehaviorSubject(['Lucca']);
16
16
  this.titleParts$ = this.titlePartsSubject.asObservable();
17
- this.title$ = this.titleParts$.pipe(map((titleParts) => titleParts.join(TitleSeparator)));
17
+ this.title$ = this.titleParts$.pipe(switchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))), map((parts) => parts.join(TitleSeparator)));
18
18
  }
19
19
  init(applicationNameTranslationKey) {
20
20
  this.router.events
@@ -42,11 +42,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
42
42
  function getPageTitleParts(snapshot) {
43
43
  const pageTitle = {
44
44
  title: (snapshot.data?.['title'] || ''),
45
- params: snapshot.params,
45
+ params: { ...snapshot.params, ...snapshot.data },
46
46
  };
47
47
  return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
48
48
  }
49
49
  function uniqTitle(titleParts) {
50
50
  return titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nL3RpdGxlL3NyYy9saWIvdGl0bGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTBCLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEUsT0FBTyxFQUE0QiwwQkFBMEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7O0FBR2pHLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxLQUFLLENBQUM7QUFHcEMsTUFBTSxPQUFPLGNBQWM7SUFLMUIsWUFBb0IsTUFBYyxFQUFVLEtBQVksRUFBOEMsZ0JBQTBDO1FBQTVILFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFPO1FBQThDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBMEI7UUFKeEksc0JBQWlCLEdBQUcsSUFBSSxlQUFlLENBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLGdCQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELFdBQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxVQUF5QixFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUrQyxDQUFDO0lBRXBKLElBQUksQ0FBQyw2QkFBcUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO2FBQ2hCLElBQUksQ0FDSixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNoQixPQUFPLEtBQUssWUFBWSxhQUFhLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFvQixFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsRUFDaEUsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsRUFDMUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQzlJLEdBQUcsQ0FBQyxDQUFDLFVBQXlCLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxVQUFVLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNuSixvQkFBb0IsRUFBRSxFQUN0QixHQUFHLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FDNUQ7YUFDQSxTQUFTLEVBQUUsQ0FBQztRQUVkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQzFFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQWE7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRixDQUFDOzsyR0EvQlcsY0FBYyw2REFLd0MsMEJBQTBCOytHQUxoRixjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQU1pRCxNQUFNOzJCQUFDLDBCQUEwQjs7QUE2QjdGLFNBQVMsaUJBQWlCLENBQUMsUUFBZ0M7SUFDMUQsTUFBTSxTQUFTLEdBQWM7UUFDNUIsS0FBSyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBVztRQUNqRCxNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07S0FDdkIsQ0FBQztJQUNGLE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzRixDQUFDO0FBRUQsU0FBUyxTQUFTLENBQUMsVUFBNEI7SUFDOUMsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7QUFDMUgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBBY3RpdmF0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElMdVRpdGxlVHJhbnNsYXRlU2VydmljZSwgTFVfVElUTEVfVFJBTlNMQVRFX1NFUlZJQ0UgfSBmcm9tICcuL3RpdGxlLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIFBhZ2VUaXRsZSA9IHsgdGl0bGU6IHN0cmluZzsgcGFyYW1zOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0gfTtcclxuZXhwb3J0IGNvbnN0IFRpdGxlU2VwYXJhdG9yID0gJyDigJMgJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEx1VGl0bGVTZXJ2aWNlIHtcclxuXHRwcml2YXRlIHRpdGxlUGFydHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oWydMdWNjYSddKTtcclxuXHR0aXRsZVBhcnRzJCA9IHRoaXMudGl0bGVQYXJ0c1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblx0dGl0bGUkID0gdGhpcy50aXRsZVBhcnRzJC5waXBlKG1hcCgodGl0bGVQYXJ0czogQXJyYXk8c3RyaW5nPikgPT4gdGl0bGVQYXJ0cy5qb2luKFRpdGxlU2VwYXJhdG9yKSkpO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcihwcml2YXRlIHJvdXRlcjogUm91dGVyLCBwcml2YXRlIHRpdGxlOiBUaXRsZSwgQEluamVjdChMVV9USVRMRV9UUkFOU0xBVEVfU0VSVklDRSkgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBJTHVUaXRsZVRyYW5zbGF0ZVNlcnZpY2UpIHt9XHJcblxyXG5cdGluaXQoYXBwbGljYXRpb25OYW1lVHJhbnNsYXRpb25LZXk6IHN0cmluZykge1xyXG5cdFx0dGhpcy5yb3V0ZXIuZXZlbnRzXHJcblx0XHRcdC5waXBlKFxyXG5cdFx0XHRcdGZpbHRlcigoZXZlbnQpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiBldmVudCBpbnN0YW5jZW9mIEFjdGl2YXRpb25FbmQgJiYgZXZlbnQuc25hcHNob3QuY2hpbGRyZW4ubGVuZ3RoID09PSAwO1xyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdG1hcCgoZXZlbnQ6IEFjdGl2YXRpb25FbmQpID0+IGdldFBhZ2VUaXRsZVBhcnRzKGV2ZW50LnNuYXBzaG90KSksXHJcblx0XHRcdFx0bWFwKCh0aXRsZVBhcnRzKSA9PiB1bmlxVGl0bGUodGl0bGVQYXJ0cykpLFxyXG5cdFx0XHRcdG1hcCgodGl0bGVQYXJ0cykgPT4gdGl0bGVQYXJ0cy5maWx0ZXIoKHsgdGl0bGUgfSkgPT4gdGl0bGUgIT09ICcnKS5tYXAoKHsgdGl0bGUsIHBhcmFtcyB9KSA9PiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudHJhbnNsYXRlKHRpdGxlLCBwYXJhbXMpKSksXHJcblx0XHRcdFx0bWFwKCh0aXRsZVBhcnRzOiBBcnJheTxzdHJpbmc+KSA9PiBbLi4udGl0bGVQYXJ0cywgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZShhcHBsaWNhdGlvbk5hbWVUcmFuc2xhdGlvbktleSwge30pLCAnTHVjY2EnXS5maWx0ZXIoKHgpID0+ICEheCkpLFxyXG5cdFx0XHRcdGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcblx0XHRcdFx0dGFwKCh0aXRsZVBhcnRzKSA9PiB0aGlzLnRpdGxlUGFydHNTdWJqZWN0Lm5leHQodGl0bGVQYXJ0cykpLFxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoKTtcclxuXHJcblx0XHR0aGlzLnRpdGxlJC5waXBlKHRhcCgodGl0bGUpID0+IHRoaXMudGl0bGUuc2V0VGl0bGUodGl0bGUpKSkuc3Vic2NyaWJlKCk7XHJcblx0fVxyXG5cclxuXHRwcmVwZW5kVGl0bGUodGl0bGU6IHN0cmluZykge1xyXG5cdFx0dGhpcy50aXRsZVBhcnRzU3ViamVjdC5uZXh0KFt0aXRsZSwgLi4udGhpcy50aXRsZVBhcnRzU3ViamVjdC52YWx1ZV0pO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGVGaXJzdFRpdGxlUGFydCh0aXRsZTogc3RyaW5nKSB7XHJcblx0XHR0aGlzLnRpdGxlUGFydHNTdWJqZWN0Lm5leHQoW3RpdGxlLCAuLi50aGlzLnRpdGxlUGFydHNTdWJqZWN0LnZhbHVlLnNsaWNlKDEpXSk7XHJcblx0fVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRQYWdlVGl0bGVQYXJ0cyhzbmFwc2hvdDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCk6IEFycmF5PFBhZ2VUaXRsZT4ge1xyXG5cdGNvbnN0IHBhZ2VUaXRsZTogUGFnZVRpdGxlID0ge1xyXG5cdFx0dGl0bGU6IChzbmFwc2hvdC5kYXRhPy5bJ3RpdGxlJ10gfHwgJycpIGFzIHN0cmluZyxcclxuXHRcdHBhcmFtczogc25hcHNob3QucGFyYW1zLFxyXG5cdH07XHJcblx0cmV0dXJuIHNuYXBzaG90LnBhcmVudCA/IFtwYWdlVGl0bGUsIC4uLmdldFBhZ2VUaXRsZVBhcnRzKHNuYXBzaG90LnBhcmVudCldIDogW3BhZ2VUaXRsZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuaXFUaXRsZSh0aXRsZVBhcnRzOiBBcnJheTxQYWdlVGl0bGU+KTogQXJyYXk8UGFnZVRpdGxlPiB7XHJcblx0cmV0dXJuIHRpdGxlUGFydHMuZmlsdGVyKCh7IHRpdGxlIH0sIGluZGV4KSA9PiB0aXRsZVBhcnRzLmZpbmRJbmRleCgocGFnZVRpdGxlKSA9PiBwYWdlVGl0bGUudGl0bGUgPT09IHRpdGxlKSA9PT0gaW5kZXgpO1xyXG59XHJcbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGl0bGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL25nL3RpdGxlL3NyYy9saWIvdGl0bGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQTBCLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFtQixFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25GLE9BQU8sRUFBNEIsMEJBQTBCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7OztBQUdqRyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsS0FBSyxDQUFDO0FBR3BDLE1BQU0sT0FBTyxjQUFjO0lBUTFCLFlBQW9CLE1BQWMsRUFBVSxLQUFZLEVBQThDLGdCQUEwQztRQUE1SCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUE4QyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTBCO1FBUHhJLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUEwQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDcEcsZ0JBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDcEQsV0FBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUM3QixTQUFTLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEs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QUFFO0tBQ2hELENBQUM7SUFDRixPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDM0YsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLFVBQTRCO0lBQzlDLE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO0FBQzFILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCwgQWN0aXZhdGlvbkVuZCwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlSW5wdXQsIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IElMdVRpdGxlVHJhbnNsYXRlU2VydmljZSwgTFVfVElUTEVfVFJBTlNMQVRFX1NFUlZJQ0UgfSBmcm9tICcuL3RpdGxlLXRyYW5zbGF0ZS5zZXJ2aWNlJztcclxuXHJcbmV4cG9ydCB0eXBlIFBhZ2VUaXRsZSA9IHsgdGl0bGU6IHN0cmluZzsgcGFyYW1zOiB7IFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIH0gfTtcclxuZXhwb3J0IGNvbnN0IFRpdGxlU2VwYXJhdG9yID0gJyDigJMgJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEx1VGl0bGVTZXJ2aWNlIHtcclxuXHRwcml2YXRlIHRpdGxlUGFydHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxzdHJpbmcgfCBPYnNlcnZhYmxlSW5wdXQ8c3RyaW5nPj4+KFsnTHVjY2EnXSk7XHJcblx0dGl0bGVQYXJ0cyQgPSB0aGlzLnRpdGxlUGFydHNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cdHRpdGxlJCA9IHRoaXMudGl0bGVQYXJ0cyQucGlwZShcclxuXHRcdHN3aXRjaE1hcCgodGl0bGVQYXJ0cykgPT4gY29tYmluZUxhdGVzdCh0aXRsZVBhcnRzLm1hcCgocGFydCkgPT4gKHR5cGVvZiBwYXJ0ID09PSAnc3RyaW5nJyA/IG9mKHBhcnQpIDogcGFydCkpKSksXHJcblx0XHRtYXAoKHBhcnRzKSA9PiBwYXJ0cy5qb2luKFRpdGxlU2VwYXJhdG9yKSksXHJcblx0KTtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlciwgcHJpdmF0ZSB0aXRsZTogVGl0bGUsIEBJbmplY3QoTFVfVElUTEVfVFJBTlNMQVRFX1NFUlZJQ0UpIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogSUx1VGl0bGVUcmFuc2xhdGVTZXJ2aWNlKSB7fVxyXG5cclxuXHRpbml0KGFwcGxpY2F0aW9uTmFtZVRyYW5zbGF0aW9uS2V5OiBzdHJpbmcpIHtcclxuXHRcdHRoaXMucm91dGVyLmV2ZW50c1xyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRmaWx0ZXIoKGV2ZW50KSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kICYmIGV2ZW50LnNuYXBzaG90LmNoaWxkcmVuLmxlbmd0aCA9PT0gMDtcclxuXHRcdFx0XHR9KSxcclxuXHRcdFx0XHRtYXAoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiBnZXRQYWdlVGl0bGVQYXJ0cyhldmVudC5zbmFwc2hvdCkpLFxyXG5cdFx0XHRcdG1hcCgodGl0bGVQYXJ0cykgPT4gdW5pcVRpdGxlKHRpdGxlUGFydHMpKSxcclxuXHRcdFx0XHRtYXAoKHRpdGxlUGFydHMpID0+IHRpdGxlUGFydHMuZmlsdGVyKCh7IHRpdGxlIH0pID0+IHRpdGxlICE9PSAnJykubWFwKCh7IHRpdGxlLCBwYXJhbXMgfSkgPT4gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnRyYW5zbGF0ZSh0aXRsZSwgcGFyYW1zKSkpLFxyXG5cdFx0XHRcdG1hcCgodGl0bGVQYXJ0czogQXJyYXk8c3RyaW5nPikgPT4gWy4uLnRpdGxlUGFydHMsIHRoaXMudHJhbnNsYXRlU2VydmljZS50cmFuc2xhdGUoYXBwbGljYXRpb25OYW1lVHJhbnNsYXRpb25LZXksIHt9KSwgJ0x1Y2NhJ10uZmlsdGVyKCh4KSA9PiAhIXgpKSxcclxuXHRcdFx0XHRkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG5cdFx0XHRcdHRhcCgodGl0bGVQYXJ0cykgPT4gdGhpcy50aXRsZVBhcnRzU3ViamVjdC5uZXh0KHRpdGxlUGFydHMpKSxcclxuXHRcdFx0KVxyXG5cdFx0XHQuc3Vic2NyaWJlKCk7XHJcblxyXG5cdFx0dGhpcy50aXRsZSQucGlwZSh0YXAoKHRpdGxlKSA9PiB0aGlzLnRpdGxlLnNldFRpdGxlKHRpdGxlKSkpLnN1YnNjcmliZSgpO1xyXG5cdH1cclxuXHJcblx0cHJlcGVuZFRpdGxlKHRpdGxlOiBzdHJpbmcgfCBPYnNlcnZhYmxlSW5wdXQ8c3RyaW5nPikge1xyXG5cdFx0dGhpcy50aXRsZVBhcnRzU3ViamVjdC5uZXh0KFt0aXRsZSwgLi4udGhpcy50aXRsZVBhcnRzU3ViamVjdC52YWx1ZV0pO1xyXG5cdH1cclxuXHJcblx0b3ZlcnJpZGVGaXJzdFRpdGxlUGFydCh0aXRsZTogc3RyaW5nIHwgT2JzZXJ2YWJsZUlucHV0PHN0cmluZz4pIHtcclxuXHRcdHRoaXMudGl0bGVQYXJ0c1N1YmplY3QubmV4dChbdGl0bGUsIC4uLnRoaXMudGl0bGVQYXJ0c1N1YmplY3QudmFsdWUuc2xpY2UoMSldKTtcclxuXHR9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFBhZ2VUaXRsZVBhcnRzKHNuYXBzaG90OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KTogQXJyYXk8UGFnZVRpdGxlPiB7XHJcblx0Y29uc3QgcGFnZVRpdGxlOiBQYWdlVGl0bGUgPSB7XHJcblx0XHR0aXRsZTogKHNuYXBzaG90LmRhdGE/LlsndGl0bGUnXSB8fCAnJykgYXMgc3RyaW5nLFxyXG5cdFx0cGFyYW1zOiB7IC4uLnNuYXBzaG90LnBhcmFtcywgLi4uc25hcHNob3QuZGF0YSB9LFxyXG5cdH07XHJcblx0cmV0dXJuIHNuYXBzaG90LnBhcmVudCA/IFtwYWdlVGl0bGUsIC4uLmdldFBhZ2VUaXRsZVBhcnRzKHNuYXBzaG90LnBhcmVudCldIDogW3BhZ2VUaXRsZV07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHVuaXFUaXRsZSh0aXRsZVBhcnRzOiBBcnJheTxQYWdlVGl0bGU+KTogQXJyYXk8UGFnZVRpdGxlPiB7XHJcblx0cmV0dXJuIHRpdGxlUGFydHMuZmlsdGVyKCh7IHRpdGxlIH0sIGluZGV4KSA9PiB0aXRsZVBhcnRzLmZpbmRJbmRleCgocGFnZVRpdGxlKSA9PiBwYWdlVGl0bGUudGl0bGUgPT09IHRpdGxlKSA9PT0gaW5kZXgpO1xyXG59XHJcbiJdfQ==
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/router';
4
4
  import { ActivationEnd, RouterModule } from '@angular/router';
5
- import { BehaviorSubject } from 'rxjs';
6
- import { map, filter, distinctUntilChanged, tap } from 'rxjs/operators';
5
+ import { BehaviorSubject, combineLatest, of } from 'rxjs';
6
+ import { switchMap, map, filter, distinctUntilChanged, tap } from 'rxjs/operators';
7
7
  import * as i2 from '@angular/platform-browser';
8
8
 
9
9
  const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken('LU_TITLE_TRANSLATE_SERVICE');
@@ -16,7 +16,7 @@ class LuTitleService {
16
16
  this.translateService = translateService;
17
17
  this.titlePartsSubject = new BehaviorSubject(['Lucca']);
18
18
  this.titleParts$ = this.titlePartsSubject.asObservable();
19
- this.title$ = this.titleParts$.pipe(map((titleParts) => titleParts.join(TitleSeparator)));
19
+ this.title$ = this.titleParts$.pipe(switchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))), map((parts) => parts.join(TitleSeparator)));
20
20
  }
21
21
  init(applicationNameTranslationKey) {
22
22
  this.router.events
@@ -47,7 +47,7 @@ function getPageTitleParts(snapshot) {
47
47
  var _a;
48
48
  const pageTitle = {
49
49
  title: (((_a = snapshot.data) === null || _a === void 0 ? void 0 : _a['title']) || ''),
50
- params: snapshot.params,
50
+ params: Object.assign(Object.assign({}, snapshot.params), snapshot.data),
51
51
  };
52
52
  return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
53
53
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titlePartsSubject = new BehaviorSubject<string[]>(['Lucca']);\r\n\ttitleParts$ = this.titlePartsSubject.asObservable();\r\n\ttitle$ = this.titleParts$.pipe(map((titleParts: Array<string>) => titleParts.join(TitleSeparator)));\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\r\n\t}\r\n\r\n\toverrideFirstTitlePart(title: string) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: snapshot.params,\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject, combineLatest, ObservableInput, of } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>(['Lucca']);\r\n\ttitleParts$ = this.titlePartsSubject.asObservable();\r\n\ttitle$ = this.titleParts$.pipe(\r\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\r\n\t\tmap((parts) => parts.join(TitleSeparator)),\r\n\t);\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string | ObservableInput<string>) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\r\n\t}\r\n\r\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: { ...snapshot.params, ...snapshot.data },\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -2,8 +2,8 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Injectable, Inject, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/router';
4
4
  import { ActivationEnd, RouterModule } from '@angular/router';
5
- import { BehaviorSubject } from 'rxjs';
6
- import { map, filter, distinctUntilChanged, tap } from 'rxjs/operators';
5
+ import { BehaviorSubject, combineLatest, of } from 'rxjs';
6
+ import { switchMap, map, filter, distinctUntilChanged, tap } from 'rxjs/operators';
7
7
  import * as i2 from '@angular/platform-browser';
8
8
 
9
9
  const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken('LU_TITLE_TRANSLATE_SERVICE');
@@ -16,7 +16,7 @@ class LuTitleService {
16
16
  this.translateService = translateService;
17
17
  this.titlePartsSubject = new BehaviorSubject(['Lucca']);
18
18
  this.titleParts$ = this.titlePartsSubject.asObservable();
19
- this.title$ = this.titleParts$.pipe(map((titleParts) => titleParts.join(TitleSeparator)));
19
+ this.title$ = this.titleParts$.pipe(switchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))), map((parts) => parts.join(TitleSeparator)));
20
20
  }
21
21
  init(applicationNameTranslationKey) {
22
22
  this.router.events
@@ -44,7 +44,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.5", ngImpor
44
44
  function getPageTitleParts(snapshot) {
45
45
  const pageTitle = {
46
46
  title: (snapshot.data?.['title'] || ''),
47
- params: snapshot.params,
47
+ params: { ...snapshot.params, ...snapshot.data },
48
48
  };
49
49
  return snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];
50
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titlePartsSubject = new BehaviorSubject<string[]>(['Lucca']);\r\n\ttitleParts$ = this.titlePartsSubject.asObservable();\r\n\ttitle$ = this.titleParts$.pipe(map((titleParts: Array<string>) => titleParts.join(TitleSeparator)));\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\r\n\t}\r\n\r\n\toverrideFirstTitlePart(title: string) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: snapshot.params,\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-title.mjs","sources":["../../../packages/ng/title/src/lib/title-translate.service.ts","../../../packages/ng/title/src/lib/title.service.ts","../../../packages/ng/title/src/lib/title.module.ts","../../../packages/ng/title/src/lucca-front-ng-title.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\r\n\r\nexport const LU_TITLE_TRANSLATE_SERVICE = new InjectionToken<ILuTitleTranslateService>('LU_TITLE_TRANSLATE_SERVICE');\r\n\r\nexport interface ILuTitleTranslateService {\r\n\ttranslate(key: string, args?: Record<string, unknown>): string;\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Title } from '@angular/platform-browser';\r\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\r\nimport { BehaviorSubject, combineLatest, ObservableInput, of } from 'rxjs';\r\nimport { distinctUntilChanged, filter, map, switchMap, tap } from 'rxjs/operators';\r\nimport { ILuTitleTranslateService, LU_TITLE_TRANSLATE_SERVICE } from './title-translate.service';\r\n\r\nexport type PageTitle = { title: string; params: { [param: string]: string } };\r\nexport const TitleSeparator = ' – ';\r\n\r\n@Injectable()\r\nexport class LuTitleService {\r\n\tprivate titlePartsSubject = new BehaviorSubject<Array<string | ObservableInput<string>>>(['Lucca']);\r\n\ttitleParts$ = this.titlePartsSubject.asObservable();\r\n\ttitle$ = this.titleParts$.pipe(\r\n\t\tswitchMap((titleParts) => combineLatest(titleParts.map((part) => (typeof part === 'string' ? of(part) : part)))),\r\n\t\tmap((parts) => parts.join(TitleSeparator)),\r\n\t);\r\n\r\n\tconstructor(private router: Router, private title: Title, @Inject(LU_TITLE_TRANSLATE_SERVICE) private translateService: ILuTitleTranslateService) {}\r\n\r\n\tinit(applicationNameTranslationKey: string) {\r\n\t\tthis.router.events\r\n\t\t\t.pipe(\r\n\t\t\t\tfilter((event) => {\r\n\t\t\t\t\treturn event instanceof ActivationEnd && event.snapshot.children.length === 0;\r\n\t\t\t\t}),\r\n\t\t\t\tmap((event: ActivationEnd) => getPageTitleParts(event.snapshot)),\r\n\t\t\t\tmap((titleParts) => uniqTitle(titleParts)),\r\n\t\t\t\tmap((titleParts) => titleParts.filter(({ title }) => title !== '').map(({ title, params }) => this.translateService.translate(title, params))),\r\n\t\t\t\tmap((titleParts: Array<string>) => [...titleParts, this.translateService.translate(applicationNameTranslationKey, {}), 'Lucca'].filter((x) => !!x)),\r\n\t\t\t\tdistinctUntilChanged(),\r\n\t\t\t\ttap((titleParts) => this.titlePartsSubject.next(titleParts)),\r\n\t\t\t)\r\n\t\t\t.subscribe();\r\n\r\n\t\tthis.title$.pipe(tap((title) => this.title.setTitle(title))).subscribe();\r\n\t}\r\n\r\n\tprependTitle(title: string | ObservableInput<string>) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value]);\r\n\t}\r\n\r\n\toverrideFirstTitlePart(title: string | ObservableInput<string>) {\r\n\t\tthis.titlePartsSubject.next([title, ...this.titlePartsSubject.value.slice(1)]);\r\n\t}\r\n}\r\n\r\nfunction getPageTitleParts(snapshot: ActivatedRouteSnapshot): Array<PageTitle> {\r\n\tconst pageTitle: PageTitle = {\r\n\t\ttitle: (snapshot.data?.['title'] || '') as string,\r\n\t\tparams: { ...snapshot.params, ...snapshot.data },\r\n\t};\r\n\treturn snapshot.parent ? [pageTitle, ...getPageTitleParts(snapshot.parent)] : [pageTitle];\r\n}\r\n\r\nfunction uniqTitle(titleParts: Array<PageTitle>): Array<PageTitle> {\r\n\treturn titleParts.filter(({ title }, index) => titleParts.findIndex((pageTitle) => pageTitle.title === title) === index);\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { LuTitleService } from './title.service';\r\n\r\n@NgModule({\r\n\timports: [RouterModule],\r\n\tproviders: [LuTitleService],\r\n})\r\nexport class LuTitleModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ formly-form,
2
+ formly-group,
3
+ formly-field {
4
+ display: inherit;
5
+ flex-wrap: inherit;
6
+ flex-direction: inherit;
7
+ width: 100%;
8
+ }
9
+ formly-form .checkboxesfield:not(fieldset),
10
+ formly-form .radiosfield:not(fieldset) {
11
+ margin-top: 0 !important;
12
+ padding: var(--components-field-framed-side-padding) var(--components-field-framed-side-padding) var(--components-field-framed-bottom-padding) !important;
13
+ }
@@ -0,0 +1,2 @@
1
+ @import 'theming';
2
+ @import 'components';
@@ -0,0 +1,11 @@
1
+ @import
2
+ 'components/mixins',
3
+ 'components/buttons',
4
+ 'components/datepicker',
5
+ 'components/dialog',
6
+ 'components/input',
7
+ 'components/select',
8
+ 'components/autocomplete',
9
+ 'components/menu',
10
+ 'components/options',
11
+ 'components/tooltip';
@@ -0,0 +1,13 @@
1
+ .mat-autocomplete-panel {
2
+ @extend .textfield-options;
3
+
4
+ background: white;
5
+ position: relative;
6
+ top: auto;
7
+
8
+ &.mat-autocomplete-visible {
9
+ opacity: 1;
10
+ overflow-x: hidden;
11
+ transform: scaleY(1);
12
+ }
13
+ }
@@ -0,0 +1,3 @@
1
+ .mat-button-focus-overlay {
2
+ display: none;
3
+ }
@@ -0,0 +1,122 @@
1
+ @use '@lucca-front/icons/src/commons/utils/icon';
2
+ @use '@lucca-front/scss/src/commons/utils/form';
3
+
4
+ .mat-datepicker-content {
5
+ @include box-shadow-override();
6
+ @extend .card;
7
+ display: block;
8
+ margin-top: 2px;
9
+ }
10
+
11
+ .mat-datepicker-toggle {
12
+ @extend .textfield-suffix;
13
+ pointer-events: auto;
14
+
15
+ button {
16
+ background: none !important;
17
+ border-radius: 0;
18
+ height: auto;
19
+ line-height: 1;
20
+ width: auto;
21
+
22
+ &::after {
23
+ @include icon.generate('calendar');
24
+ }
25
+
26
+ mat-icon {
27
+ display: none;
28
+ }
29
+ }
30
+ }
31
+
32
+ // CALENDAR
33
+ .mat-calendar {
34
+ width: 296px;
35
+
36
+ .mat-button {
37
+ @extend .button, .mod-text;
38
+ font-size: 1em;
39
+ text-decoration: none;
40
+ }
41
+
42
+ .mat-calendar-arrow {
43
+ display: none;
44
+ }
45
+
46
+ .mat-calendar-arrow {
47
+ display: none;
48
+ }
49
+
50
+ .mat-icon-button {
51
+ @extend .button, .mod-text;
52
+ border-radius: 3px;
53
+ }
54
+
55
+ .mat-calendar-content {
56
+ padding: 0 0.5em 0.5em 0.5em;
57
+ }
58
+ }
59
+
60
+ // CALENDAR HEADER
61
+ .mat-calendar-controls {
62
+ margin-top: 0 !important;
63
+ .mat-icon-button[disabled] {
64
+ opacity: 0.4;
65
+ }
66
+ .mat-calendar-period-button {
67
+ flex: 1;
68
+ order: 1;
69
+ }
70
+
71
+ .mat-calendar-next-button {
72
+ order: 2;
73
+ }
74
+
75
+ .mat-calendar-spacer {
76
+ display: none;
77
+ }
78
+ }
79
+
80
+ // TABLE
81
+ .mat-calendar-body-cell {
82
+ .mat-calendar-body-cell-content {
83
+ box-shadow: form.fakeborderoverlay(var(--commons-divider-color));
84
+ border: none;
85
+ border-radius: 0;
86
+ color: var(--palettes-grey-600);
87
+ height: 100%;
88
+ left: 0;
89
+ top: 0;
90
+ width: 100%;
91
+
92
+ &:hover,
93
+ &.mat-calendar-body-selected {
94
+ background-color: var(--palette-primary-700);
95
+ color: var(--palette-primary-text);
96
+ }
97
+ }
98
+
99
+ &.mat-calendar-body-disabled {
100
+ opacity: 0.5;
101
+ pointer-events: none;
102
+ }
103
+ }
104
+
105
+ // SPECIFIC MONTH-VIEW
106
+ md-month-view,
107
+ mat-month-view {
108
+ .mat-calendar-table-header th {
109
+ color: var(--palettes-grey-600);
110
+ font-size: 0.9em;
111
+ padding-bottom: 0.4em;
112
+ }
113
+
114
+ .mat-calendar-body-label {
115
+ overflow: hidden;
116
+ text-indent: -999px;
117
+
118
+ &[colspan='7'] {
119
+ display: none; // REMOVE MONTH LABEL ABOVE NUMBERS IF FULL WIDTH
120
+ }
121
+ }
122
+ }
@@ -0,0 +1,32 @@
1
+ @use '@lucca-front/scss/src/commons/utils/media';
2
+ @use '@lucca-front/icons/src/commons/utils/icon';
3
+
4
+ .mat-dialog-container {
5
+ @extend .card;
6
+
7
+ background: white;
8
+ max-width: 80vw; // MIGHT BE CHANGED INTO A THEME VARIABLE
9
+ overflow: visible !important;
10
+ padding: 0 !important;
11
+ }
12
+
13
+ .cdk-overlay-pane {
14
+ &.mod-sidePanel {
15
+ position: fixed !important;
16
+ top: var(--commons-banner-height);
17
+ right: 0;
18
+ bottom: 0;
19
+ width: 60%;
20
+ max-width: 800px;
21
+ @include media.smallerThan('s') {
22
+ width: 80%;
23
+ }
24
+ @include media.smallerThan('xs') {
25
+ width: 100%;
26
+ }
27
+
28
+ .mat-dialog-container {
29
+ max-width: 100%;
30
+ }
31
+ }
32
+ }
@@ -0,0 +1,3 @@
1
+ input.mat-input-element {
2
+ margin-top: 0 !important;
3
+ }
@@ -0,0 +1,21 @@
1
+ .mat-menu-item {
2
+ @extend .textfield-options-entry;
3
+ background-color: transparent;
4
+ &.mat-selected,
5
+ &.mat-active {
6
+ @extend .is-focus;
7
+ }
8
+ }
9
+
10
+ .mat-menu-panel {
11
+ @extend .textfield-options;
12
+ position: relative;
13
+ top: auto;
14
+ opacity: 1;
15
+ transform: none;
16
+ }
17
+
18
+ .mat-menu-content {
19
+ padding-top: 0 !important;
20
+ padding-bottom: 0 !important;
21
+ }
@@ -0,0 +1,8 @@
1
+ @mixin box-shadow-override($hasHover: false) {
2
+ box-shadow: var(--commons-elevations-elevation-1) !important;
3
+ @if $hasHover {
4
+ &:hover {
5
+ box-shadow: var(--commons-elevations-elevation-3) !important;
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,24 @@
1
+ .mat-option {
2
+ @extend .textfield-options-entry;
3
+
4
+ display: block;
5
+ line-height: unset !important;
6
+ outline: none;
7
+ &.mat-selected,
8
+ &.mat-active {
9
+ @extend .textfield-options-entry, .is-focus;
10
+ }
11
+
12
+ .mat-option-ripple {
13
+ bottom: 0;
14
+ left: 0;
15
+ pointer-events: none;
16
+ position: absolute;
17
+ right: 0;
18
+ top: 0;
19
+ }
20
+
21
+ .mat-ripple {
22
+ overflow: hidden;
23
+ }
24
+ }
@@ -0,0 +1,42 @@
1
+ mat-select {
2
+ @extend .textfield;
3
+ }
4
+
5
+ .textfield.mod-framed mat-select {
6
+ padding: 0 !important;
7
+ .mat-select-trigger {
8
+ font-size: 1rem;
9
+ margin: 2.2rem 1rem 0.7rem;
10
+ &::after {
11
+ bottom: -0.7rem;
12
+ content: '';
13
+ display: block;
14
+ left: -1rem;
15
+ position: absolute;
16
+ right: -1rem;
17
+ top: -2.2rem;
18
+ }
19
+ }
20
+ }
21
+
22
+ .textfield:not(.mod-compact) mat-select {
23
+ padding-top: 0 !important;
24
+ }
25
+
26
+ .mat-select-trigger {
27
+ height: 1.1rem !important;
28
+ min-width: 0 !important;
29
+ text-overflow: ellipsis;
30
+ }
31
+
32
+ .mat-select-placeholder {
33
+ width: auto !important;
34
+ }
35
+ .mat-select-panel {
36
+ @extend .textfield-options;
37
+
38
+ position: relative;
39
+ top: auto;
40
+ transform: none;
41
+ opacity: 1;
42
+ }
@@ -0,0 +1,9 @@
1
+ .mat-tooltip {
2
+ border-radius: var(--commons-border-radius);
3
+ background: var(--components-tooltip-background-color);
4
+ color: var(--components-tooltip-color);
5
+ font-size: var(--sizes-smaller-line-height) !important;
6
+ margin: 0.5em !important;
7
+ padding: .25rem .5rem !important;
8
+ line-height: 1rem;
9
+ }
@@ -0,0 +1,10 @@
1
+ @use '@angular/material' as mat;
2
+
3
+ @import 'components';
4
+
5
+ // CHANGE DEFAULT FONTS TO LUCCA-FRONT FONTS
6
+ $lucca-front-mat-typography: mat.define-typography-config(
7
+ $font-family: var(--commons-font-family),
8
+ );
9
+
10
+ @include mat.all-component-typographies($lucca-front-mat-typography);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucca-front/ng",
3
- "version": "10.0.7",
3
+ "version": "10.0.8-rc.3",
4
4
  "description": "A library of icons made by the team @Lucca",
5
5
  "repository": {
6
6
  "type": "git",
@@ -29,8 +29,8 @@
29
29
  "@angular/common": "^14.0.0",
30
30
  "@angular/core": "^14.0.0",
31
31
  "@angular/cdk": "^14.0.0",
32
- "@lucca-front/icons": "v10.0.7",
33
- "@lucca-front/scss": "v10.0.7",
32
+ "@lucca-front/icons": "v10.0.8-rc.3",
33
+ "@lucca-front/scss": "v10.0.8-rc.3",
34
34
  "@types/dompurify": "^2.3.0",
35
35
  "dompurify": "^2.3.0",
36
36
  "rxjs": "^6.0.0 || ^7.0.0"
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.wrapWithCalcFunctionNode = exports.commentNode = exports.removeImportNode = exports.addForwardRule = exports.addImport = exports.addMixinImport = exports.removeContainerIfEmpty = void 0;
3
+ exports.wrapWithCalcFunctionNode = exports.commentNode = exports.removeImportNode = exports.updateDeprecatedVariable = exports.addForwardRule = exports.addImport = exports.addMixinImport = exports.removeContainerIfEmpty = void 0;
4
4
  const scss_value_ast_js_1 = require("./scss-value-ast.js");
5
5
  function removeContainerIfEmpty(node) {
6
6
  if (!node) {
@@ -68,6 +68,20 @@ function addForwardRule(root, name, postCss, afterNode) {
68
68
  return addImport(root, new postCss.AtRule({ name: 'forward', params: `'${name}'` }), afterNode);
69
69
  }
70
70
  exports.addForwardRule = addForwardRule;
71
+ function updateDeprecatedVariable(root, mappingOldToNew, postcssValueParser) {
72
+ root.walkDecls((decl) => {
73
+ const valueNode = new scss_value_ast_js_1.ScssValueAst(decl.value, postcssValueParser);
74
+ valueNode.walkFunction('var', (funcNode) => {
75
+ const varName = funcNode.nodes[0]?.value ?? '';
76
+ const newVarName = varName && mappingOldToNew[varName];
77
+ if (newVarName) {
78
+ funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(newVarName, postcssValueParser).nodes;
79
+ }
80
+ });
81
+ decl.value = valueNode.toString();
82
+ });
83
+ }
84
+ exports.updateDeprecatedVariable = updateDeprecatedVariable;
71
85
  /**
72
86
  * @returns {boolean} returns true if whole node is deleted
73
87
  */
@@ -14,6 +14,7 @@ const main_import_js_1 = require("./updaters/main-import.js");
14
14
  const mixins_js_1 = require("./updaters/mixins.js");
15
15
  const remove_scss_placeholder_js_1 = require("./updaters/remove-scss-placeholder.js");
16
16
  const theme_js_1 = require("./updaters/theme.js");
17
+ const warning_js_1 = require("./updaters/warning.js");
17
18
  function migrateScssFile(content, postCss, postCssScss, postcssValueParser) {
18
19
  const root = postCssScss.parse(content);
19
20
  root.walkAtRules('import', (rule) => {
@@ -50,6 +51,12 @@ function migrateScssFile(content, postCss, postCssScss, postcssValueParser) {
50
51
  (0, scss_ast_js_1.commentNode)(rule, 'Import non géré par la migration auto.', postCss);
51
52
  }
52
53
  });
54
+ (0, warning_js_1.addWarnings)(root);
55
+ (0, scss_ast_js_1.updateDeprecatedVariable)(root, {
56
+ '--commons-background-dark': '--commons-background-base',
57
+ '--commons-background-darker': '--commons-background-base',
58
+ '--commons-background-darkest': '--commons-background-base',
59
+ }, postcssValueParser);
53
60
  return root.toResult({ syntax: { stringify: postCssScss.stringify } }).css;
54
61
  }
55
62
  exports.migrateScssFile = migrateScssFile;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.commentSassFuncWithVar = exports.updateColorMixin = void 0;
3
+ exports.commentSassFuncWithVar = exports.updateColorMixin = exports.getPaletteNodes = void 0;
4
4
  const scss_ast_js_1 = require("../../../lib/scss-ast.js");
5
5
  const scss_value_ast_js_1 = require("../../../lib/scss-value-ast.js");
6
+ const theme_js_1 = require("./theme.js");
6
7
  const legacyLevelToLevel = {
7
8
  'see-through': '50',
8
9
  darker: '900',
@@ -19,24 +20,32 @@ const textLevelToLevel = {
19
20
  light: '600',
20
21
  placeholder: '400',
21
22
  };
23
+ function getPaletteNodes(firstArg, secondArg, postcssValueParser) {
24
+ const [color, legacyLevel] = firstArg.split('.');
25
+ if (color === 'white') {
26
+ return new scss_value_ast_js_1.ScssValueAst(`--colors-${color}-color`, postcssValueParser).nodes;
27
+ }
28
+ if (color === 'text') {
29
+ if (legacyLevel && !textLevelToLevel[legacyLevel]) {
30
+ const parts = ['colors', (0, theme_js_1.getVariableFromThemeArg)(firstArg), (0, theme_js_1.getVariableFromThemeArg)(secondArg)].filter(Boolean).join('-');
31
+ return new scss_value_ast_js_1.ScssValueAst(`--${parts}`, postcssValueParser).nodes;
32
+ }
33
+ else {
34
+ const level = textLevelToLevel[legacyLevel] ?? textLevelToLevel['default'];
35
+ return new scss_value_ast_js_1.ScssValueAst(`--palettes-grey-${level}`, postcssValueParser).nodes;
36
+ }
37
+ }
38
+ let level = legacyLevel ?? secondArg ?? '700';
39
+ level = legacyLevelToLevel[level] ?? level;
40
+ return new scss_value_ast_js_1.ScssValueAst(`--palettes-${color}-${level}`, postcssValueParser).nodes;
41
+ }
42
+ exports.getPaletteNodes = getPaletteNodes;
22
43
  function updateColorMixin(root, postcssValueParser) {
23
44
  root.walkDecls((decl) => {
24
45
  const valueNode = new scss_value_ast_js_1.ScssValueAst(decl.value, postcssValueParser);
25
46
  valueNode.walkFunction('_color', (funcNode) => {
26
- const [color, legacyLevel] = funcNode.nodes[0].value.split('.');
27
47
  funcNode.value = 'var';
28
- if (color === 'white') {
29
- funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(`--colors-${color}-color`, postcssValueParser).nodes;
30
- }
31
- else if (color === 'text') {
32
- const level = textLevelToLevel[legacyLevel] ?? textLevelToLevel['default'];
33
- funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(`--palettes-grey-${level}`, postcssValueParser).nodes;
34
- }
35
- else {
36
- let level = legacyLevel ?? funcNode.nodes[2]?.value ?? '700';
37
- level = legacyLevelToLevel[level] ?? level;
38
- funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(`--palettes-${color}-${level}`, postcssValueParser).nodes;
39
- }
48
+ funcNode.nodes = getPaletteNodes(funcNode.nodes[0].value, funcNode.nodes[2]?.value, postcssValueParser);
40
49
  });
41
50
  decl.value = valueNode.toString();
42
51
  });
@@ -1,18 +1,24 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateThemeMixin = void 0;
3
+ exports.getVariableFromThemeArg = exports.updateThemeMixin = void 0;
4
4
  const scss_ast_js_1 = require("../../../lib/scss-ast.js");
5
5
  const scss_value_ast_js_1 = require("../../../lib/scss-value-ast.js");
6
+ const color_js_1 = require("./color.js");
6
7
  function updateThemeMixin(root, postCss, postcssValueParser) {
7
8
  root.walkDecls((decl) => {
8
9
  const valueNode = new scss_value_ast_js_1.ScssValueAst(decl.value, postcssValueParser);
9
10
  // _theme("spacings.smallest") => var(--spacings-smallest)
10
11
  valueNode.walkFunction('_theme', (funcNode) => updateThemeNode(funcNode, decl, (themeVar) => {
11
12
  funcNode.value = 'var';
12
- funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(`--${themeVar}`, postcssValueParser).nodes;
13
- const siblings = valueNode.getSiblings(funcNode);
14
- if (siblings.some((s) => s.type === 'word' && s.value === '*')) {
15
- (0, scss_ast_js_1.wrapWithCalcFunctionNode)(valueNode, funcNode, postcssValueParser);
13
+ if (funcNode.nodes[0]?.value.startsWith('palette.')) {
14
+ funcNode.nodes = (0, color_js_1.getPaletteNodes)(funcNode.nodes[0].value.replace('palette.', ''), undefined, postcssValueParser);
15
+ }
16
+ else {
17
+ funcNode.nodes = new scss_value_ast_js_1.ScssValueAst(`--${themeVar}`, postcssValueParser).nodes;
18
+ const siblings = valueNode.getSiblings(funcNode);
19
+ if (siblings.some((s) => s.type === 'word' && s.value === '*')) {
20
+ (0, scss_ast_js_1.wrapWithCalcFunctionNode)(valueNode, funcNode, postcssValueParser);
21
+ }
16
22
  }
17
23
  }, postCss));
18
24
  // _component("navSide.width") => var(--components-navSide-width)
@@ -44,7 +50,10 @@ function updateThemeNode(funcNode, declaration, updater, postCss) {
44
50
  (0, scss_ast_js_1.commentNode)(declaration, `Utilisation de ${funcNode.value} non gérée par la migration automatique`, postCss);
45
51
  return false;
46
52
  }
47
- const themeVar = funcNode.nodes[0].value.replace(/\./g, '-');
48
- updater(themeVar);
53
+ updater(getVariableFromThemeArg(funcNode.nodes[0].value));
49
54
  return undefined;
50
55
  }
56
+ function getVariableFromThemeArg(arg) {
57
+ return arg?.replace?.(/\./g, '-') || '';
58
+ }
59
+ exports.getVariableFromThemeArg = getVariableFromThemeArg;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addWarnings = void 0;
4
+ function addWarnings(root) {
5
+ root.walkAtRules('each', (rule) => {
6
+ rule.raws.before = (rule.raws.before || '') + '// [LF NEXT] Vérifier le contenu de la boucle.\n';
7
+ });
8
+ }
9
+ exports.addWarnings = addWarnings;
package/title/README.md CHANGED
@@ -35,6 +35,20 @@ const userName: string = this.userService.getCurrentUser();
35
35
  this.luTitleService.prependTitle(userName);
36
36
  ```
37
37
 
38
+ You can also replace the first fragment using:
39
+
40
+ ```typescript
41
+ const userName: string = this.userService.getOtherUser();
42
+ this.luTitleService.overrideFirstTitlePart(userName);
43
+ ```
44
+
45
+ Both `prependTitle` and `overrideFirstTitlePart` can also be called using `Observable<string>` :
46
+
47
+ ```typescript
48
+ const selectedUser$ = this.userStore.selected$;
49
+ this.luTitleService.prependTitle(selectedUser$);
50
+ ```
51
+
38
52
  ## Quickstart
39
53
 
40
54
  You will need to:
@@ -1,5 +1,6 @@
1
1
  import { Title } from '@angular/platform-browser';
2
2
  import { Router } from '@angular/router';
3
+ import { ObservableInput } from 'rxjs';
3
4
  import { ILuTitleTranslateService } from './title-translate.service';
4
5
  import * as i0 from "@angular/core";
5
6
  export declare type PageTitle = {
@@ -14,12 +15,12 @@ export declare class LuTitleService {
14
15
  private title;
15
16
  private translateService;
16
17
  private titlePartsSubject;
17
- titleParts$: import("rxjs").Observable<string[]>;
18
+ titleParts$: import("rxjs").Observable<(string | ObservableInput<string>)[]>;
18
19
  title$: import("rxjs").Observable<string>;
19
20
  constructor(router: Router, title: Title, translateService: ILuTitleTranslateService);
20
21
  init(applicationNameTranslationKey: string): void;
21
- prependTitle(title: string): void;
22
- overrideFirstTitlePart(title: string): void;
22
+ prependTitle(title: string | ObservableInput<string>): void;
23
+ overrideFirstTitlePart(title: string | ObservableInput<string>): void;
23
24
  static ɵfac: i0.ɵɵFactoryDeclaration<LuTitleService, never>;
24
25
  static ɵprov: i0.ɵɵInjectableDeclaration<LuTitleService>;
25
26
  }