@lucca-front/ng 22.0.5 → 22.1.0-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/fesm2022/lucca-front-ng-activity-feed.mjs +12 -9
  2. package/fesm2022/lucca-front-ng-activity-feed.mjs.map +1 -1
  3. package/fesm2022/lucca-front-ng-approbation-inbox.mjs +1 -1
  4. package/fesm2022/lucca-front-ng-approbation-inbox.mjs.map +1 -1
  5. package/fesm2022/lucca-front-ng-callout.mjs +1 -1
  6. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  7. package/fesm2022/lucca-front-ng-core-select.mjs +236 -8
  8. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  9. package/fesm2022/lucca-front-ng-core.mjs +5 -1
  10. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  11. package/fesm2022/lucca-front-ng-data-table.mjs +2 -2
  12. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  13. package/fesm2022/lucca-front-ng-date2.mjs +217 -159
  14. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  15. package/fesm2022/lucca-front-ng-dialog.mjs +2 -2
  16. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  17. package/fesm2022/lucca-front-ng-fancy-box.mjs +47 -24
  18. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  19. package/fesm2022/lucca-front-ng-file-upload.mjs +1 -1
  20. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  21. package/fesm2022/lucca-front-ng-filter-pills-core.mjs +55 -0
  22. package/fesm2022/lucca-front-ng-filter-pills-core.mjs.map +1 -0
  23. package/fesm2022/lucca-front-ng-filter-pills.mjs +74 -69
  24. package/fesm2022/lucca-front-ng-filter-pills.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-form-field.mjs +37 -5
  26. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-form-label.mjs +1 -1
  28. package/fesm2022/lucca-front-ng-form-label.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-form.mjs +42 -5
  30. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +3 -3
  32. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-forms.mjs +12 -6
  34. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-highlight-data.mjs +6 -7
  36. package/fesm2022/lucca-front-ng-highlight-data.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-impersonation.mjs +19 -4
  38. package/fesm2022/lucca-front-ng-impersonation.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-link.mjs +8 -3
  40. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-markdown.mjs +51 -0
  42. package/fesm2022/lucca-front-ng-markdown.mjs.map +1 -0
  43. package/fesm2022/lucca-front-ng-multi-select.mjs +147 -43
  44. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  45. package/fesm2022/lucca-front-ng-popover2.mjs +11 -5
  46. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  47. package/fesm2022/lucca-front-ng-priority-levels.mjs +128 -0
  48. package/fesm2022/lucca-front-ng-priority-levels.mjs.map +1 -0
  49. package/fesm2022/lucca-front-ng-safe-content.mjs +5 -2
  50. package/fesm2022/lucca-front-ng-safe-content.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-simple-select.mjs +63 -12
  52. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  53. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs +1 -1
  54. package/fesm2022/lucca-front-ng-software-icon-wrapper.mjs.map +1 -1
  55. package/fesm2022/lucca-front-ng-user-popover.mjs +3 -2
  56. package/fesm2022/lucca-front-ng-user-popover.mjs.map +1 -1
  57. package/package.json +17 -4
  58. package/src/components/cdk/_overlay.scss +3 -1
  59. package/types/lucca-front-ng-activity-feed.d.ts +3 -1
  60. package/types/lucca-front-ng-core-select.d.ts +90 -7
  61. package/types/lucca-front-ng-core.d.ts +3 -1
  62. package/types/lucca-front-ng-date2.d.ts +31 -5
  63. package/types/lucca-front-ng-fancy-box.d.ts +29 -12
  64. package/types/lucca-front-ng-filter-pills-core.d.ts +69 -0
  65. package/types/lucca-front-ng-filter-pills.d.ts +28 -55
  66. package/types/lucca-front-ng-form-field.d.ts +12 -4
  67. package/types/lucca-front-ng-form.d.ts +7 -1
  68. package/types/lucca-front-ng-forms.d.ts +7 -2
  69. package/types/lucca-front-ng-highlight-data.d.ts +1 -2
  70. package/types/lucca-front-ng-impersonation.d.ts +14 -1
  71. package/types/lucca-front-ng-link.d.ts +5 -1
  72. package/types/lucca-front-ng-markdown.d.ts +24 -0
  73. package/types/lucca-front-ng-multi-select.d.ts +10 -1
  74. package/types/lucca-front-ng-popover2.d.ts +7 -1
  75. package/types/lucca-front-ng-priority-levels.d.ts +44 -0
  76. package/types/lucca-front-ng-simple-select.d.ts +4 -0
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-user-popover.mjs","sources":["../../../packages/ng/user-popover/translations.ts","../../../packages/ng/user-popover/popup-employee.translate.ts","../../../packages/ng/user-popover/service/user-popover.store.ts","../../../packages/ng/user-popover/user-popover.providers.ts","../../../packages/ng/user-popover/card/pipe/is-future.pipe.ts","../../../packages/ng/user-popover/card/pipe/leave-ends-display.pipe.ts","../../../packages/ng/user-popover/card/trigger/user-popover.component.ts","../../../packages/ng/user-popover/card/trigger/user-popover.component.html","../../../packages/ng/user-popover/card/trigger/lu-user-popover.directive.ts","../../../packages/ng/user-popover/lucca-front-ng-user-popover.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrival expected on {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Absent',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Morning',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Present',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Left',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Today',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'This morning',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Until tomorrow',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Until tomorrow morning',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Until {{date}} inclusive',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Until {{date}} morning',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Location',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tde: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Geplanter Dienstantritt am {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Abwesend',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Vormittag',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Anwesend',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Ausgeschieden',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Heute',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Heute Morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Bis morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Bis morgen Vormittag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Bis einschließlich {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Bis {{date}} morgens',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Standort',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tfr: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrivée prévue le {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Absent',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Matin',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Présent(e)',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Parti(e)',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: \"Aujourd'hui\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Ce matin',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: \"Jusqu'à demain\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Jusqu’à demain matin',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: \"Jusqu'au {{date}} inclus\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: \"Jusqu'au {{date}} matin\",\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Emplacement',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tit: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrivo previsto il{{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Assente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Mattina',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Ex',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Oggi',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Questa mattina',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Fino a domani',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Fino a domani mattina',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Fino al {{date}} incluso',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Fino al mattino del {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Posizione',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tnl: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Verwachte aankomst op {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Afwezig',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Ochtend',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Aanwezig',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Vertrokken',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Vandaag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Vanochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Tot morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Tot morgenochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Tot en met {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Tot {{date}} ochtend',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Locatie',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\t'nl-BE': {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Verwachte aankomst op {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Afwezig',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Ochtend',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Aanwezig',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Vertrokken',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Vandaag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Vanochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Tot morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Tot morgenochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Tot en met {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Tot {{date}} ochtend',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Locatie',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tes: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Llegada prevista el {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Ausente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Se ha marchado',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Hoy',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Esta mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Hasta mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Hasta mañana por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Hasta el {{date}} incluido',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Hasta el {{date}} por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Ubicación',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tpt: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Chegada prevista para {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Ausente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Manhã',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Papel',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Até hoje',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Esta manhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Até amanhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Até amanhã de manhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Até {{date}} incluído',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Até {{date}} de manhã',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Localização',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_POPUP_EMPLOYEE_TRANSLATIONS = new InjectionToken('LuPopupEmployeeTranslations', {\n\tfactory: () => luPopupEmployeeTranslations,\n});\n\nexport interface LuPopupEmployeeTranslations {\n\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: string;\n\tEMPLOYEE_CARD_PANEL_PLANNING: string;\n}\n\nexport const luPopupEmployeeTranslations: LuTranslation<LuPopupEmployeeTranslations> = Translations;\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nimport { ILuUserPopoverStore } from './user-popover-service.model';\nimport { LuUserPopover } from '../user-popover.model';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class LuUserPopoverStore implements ILuUserPopoverStore {\n\t#http = inject(HttpClient);\n\t#cache = new Map<number, Observable<LuUserPopover>>();\n\tprotected _api = '/work-locations/api/employee-profile-card';\n\n\tpublic get(id: number): Observable<LuUserPopover> {\n\t\tif (this.#cache.has(id)) {\n\t\t\treturn this.#cache.get(id)!;\n\t\t}\n\t\tconst userPopoverObservable = this.#http.get<LuUserPopover>(`${this._api}/${id}`).pipe(\n\t\t\tcacheImage((c) => c.pictureHref),\n\t\t\tshareReplay(1),\n\t\t);\n\n\t\tthis.#cache.set(id, userPopoverObservable);\n\t\treturn userPopoverObservable;\n\t}\n\n\tpublic clearCache(userId?: number) {\n\t\tif (userId) {\n\t\t\tthis.#cache.delete(userId);\n\t\t} else {\n\t\t\tthis.#cache.clear();\n\t\t}\n\t}\n}\n\nexport function cacheImage<T>(accessor: (value: T) => string | undefined): OperatorFunction<T, T> {\n\treturn (source: Observable<T>): Observable<T> =>\n\t\tnew Observable((subscriber) => {\n\t\t\tsource.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tconst imagePath = accessor(value);\n\t\t\t\t\tif (!imagePath) {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t}\n\t\t\t\t\tconst img = new Image();\n\t\t\t\t\timg.src = imagePath!;\n\t\t\t\t\timg.onload = () => {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t};\n\t\t\t\t\timg.onerror = () => {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\terror(err: Error) {\n\t\t\t\t\tsubscriber.error(err);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n}\n","import { Observable, of } from 'rxjs';\nimport { InjectionToken, makeEnvironmentProviders, Signal } from '@angular/core';\nimport { ILuUser } from '@lucca-front/ng/user';\n\nexport const LU_USER_POPOVER_USER = new InjectionToken<Signal<ILuUser>>('user-popover-user');\n\n/**\n * @deprecated no longer needed as popover is always activated\n */\nexport const USER_POPOVER_IS_ACTIVATED = new InjectionToken<Observable<boolean>>('user-popover-is-activated', {\n\tfactory: () => of(true),\n});\n\n/**\n * @deprecated no longer needed as user popover uses `luPopover2`\n */\nexport function provideLuUserPopover() {\n\treturn makeEnvironmentProviders([]);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isFuture, isToday } from 'date-fns';\n\n@Pipe({\n\tname: 'isFuture',\n})\nexport class IsFuturePipe implements PipeTransform {\n\tpublic transform(value: Date | undefined): boolean {\n\t\treturn !!value && isFuture(value);\n\t}\n}\n\n@Pipe({\n\tname: 'isFutureOrToday',\n})\nexport class IsFutureOrTodayPipe implements PipeTransform {\n\tpublic transform(value: Date | undefined): boolean {\n\t\treturn !value || isFuture(value) || isToday(value);\n\t}\n}\n","import { formatDate } from '@angular/common';\nimport { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { isToday, isTomorrow } from 'date-fns';\nimport { LU_POPUP_EMPLOYEE_TRANSLATIONS } from '../../popup-employee.translate';\n\n@Pipe({\n\tname: 'leaveEndsDisplay',\n})\nexport class LeaveEndsDisplayPipe implements PipeTransform {\n\treadonly intl = getIntl(LU_POPUP_EMPLOYEE_TRANSLATIONS);\n\treadonly locale = inject(LOCALE_ID);\n\tpublic transform(leaveEndsOn: Date, leaveEndIsFirstHalfDay: boolean): string {\n\t\tif (isToday(leaveEndsOn)) {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING;\n\t\t\t} else {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL;\n\t\t\t}\n\t\t} else if (isTomorrow(leaveEndsOn)) {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL;\n\t\t\t}\n\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL;\n\t\t} else {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL.replace('{{date}}', formatDate(leaveEndsOn, 'longDate', this.locale));\n\t\t\t}\n\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL.replace('{{date}}', formatDate(leaveEndsOn, 'longDate', this.locale));\n\t\t}\n\t}\n}\n","import { AsyncPipe, DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { intlInputOptions, IntlParamsPipe } from '@lucca-front/ng/core';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { POPOVER_CONFIG } from '@lucca-front/ng/popover2';\nimport { SkeletonUserPopoverComponent } from '@lucca-front/ng/skeleton';\nimport { ILuUser } from '@lucca-front/ng/user';\nimport { BehaviorSubject, catchError, combineLatest, Observable, of, switchMap, tap } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { LU_POPUP_EMPLOYEE_TRANSLATIONS } from '../../popup-employee.translate';\nimport { LuUserPopoverStore } from '../../service/user-popover.store';\nimport { LuUserPopover } from '../../user-popover.model';\nimport { LU_USER_POPOVER_USER } from '../../user-popover.providers';\nimport { IsFutureOrTodayPipe, IsFuturePipe } from '../pipe/is-future.pipe';\nimport { LeaveEndsDisplayPipe } from '../pipe/leave-ends-display.pipe';\n\n@Component({\n\tselector: 'lu-user-popover-content',\n\ttemplateUrl: './user-popover.component.html',\n\tstyleUrl: './user-popover.component.scss',\n\timports: [AsyncPipe, NgTemplateOutlet, DatePipe, IntlParamsPipe, IsFuturePipe, IsFutureOrTodayPipe, LeaveEndsDisplayPipe, IconComponent, SkeletonUserPopoverComponent],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserPopoverComponent {\n\tluUser = inject<Signal<ILuUser>>(LU_USER_POPOVER_USER);\n\n\t#popoverRef = inject(POPOVER_CONFIG).ref;\n\n\t#service = inject(LuUserPopoverStore);\n\n\treadonly intl = input(...intlInputOptions(LU_POPUP_EMPLOYEE_TRANSLATIONS));\n\n\treadonly #errorImage$ = new BehaviorSubject<boolean>(false);\n\n\tskeletonWidths = [this.getRandomPercent(), this.getRandomPercent(), this.getRandomPercent(), this.getRandomPercent()];\n\n\tpublic readonly employee$: Observable<LuUserPopover> = toObservable(this.luUser).pipe(\n\t\tswitchMap((user) =>\n\t\t\tthis.#service.get(user.id).pipe(\n\t\t\t\tcatchError(() =>\n\t\t\t\t\tof({\n\t\t\t\t\t\tid: user.id,\n\t\t\t\t\t\tfirstName: user.firstName,\n\t\t\t\t\t\tlastName: user.lastName,\n\t\t\t\t\t\tleaveEndIsFirstHalfDay: false,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\ttap(() => this.#popoverRef.updatePosition()),\n\t\tshareReplay(1),\n\t);\n\n\tpublic readonly userPictureDisplay$ = combineLatest([this.employee$, this.#errorImage$]).pipe(\n\t\tmap(([employee, isError]) => {\n\t\t\tif (employee.pictureHref && !isError) {\n\t\t\t\treturn 'img';\n\t\t\t} else {\n\t\t\t\treturn 'initials';\n\t\t\t}\n\t\t}),\n\t);\n\n\tpublic readonly userPictureHref$ = this.employee$.pipe(map((employee) => employee.pictureHref));\n\n\tpublic readonly userInitials$ = this.employee$.pipe(\n\t\tmap((employee) => {\n\t\t\tconst initials = `${employee.firstName[0]}${employee.lastName[0]}`;\n\n\t\t\treturn {\n\t\t\t\tinitials,\n\t\t\t\tcolor: `${employee.firstName} ${employee.lastName}`.split('').reduce((sum, a) => sum + a.charCodeAt(0), 0) % 360,\n\t\t\t};\n\t\t}),\n\t);\n\n\tpictureError() {\n\t\tthis.#errorImage$.next(true);\n\t}\n\n\tgetRandomPercent(min: number = 33, max: number = 66): string {\n\t\treturn `${Math.floor(Math.random() * (max - min) + min).toString()}%`;\n\t}\n}\n","@if (employee$ | async; as employee) {\n\t<div class=\"userPopover pr-u-animatedFadeIn\">\n\t\t<section class=\"userPopover-details\">\n\t\t\t<div class=\"userPopover-details-avatar avatar\">\n\t\t\t\t@switch (userPictureDisplay$ | async) {\n\t\t\t\t\t@case (\"img\") {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tclass=\"avatar-picture\"\n\t\t\t\t\t\t\t[src]=\"userPictureHref$ | async\"\n\t\t\t\t\t\t\t[alt]=\"(userInitials$ | async)?.initials\"\n\t\t\t\t\t\t\t(error)=\"pictureError()\"\n\t\t\t\t\t\t\ttranslate=\"no\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\t@case (\"initials\") {\n\t\t\t\t\t\t@if (userInitials$ | async; as initials) {\n\t\t\t\t\t\t\t<div class=\"avatar-picture\" style.background-color=\"hsl({{ initials.color }}, 60%, 60%)\">\n\t\t\t\t\t\t\t\t<span class=\"avatar-picture-initials\" translate=\"no\">{{ initials.initials }}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"userPopover-details-info\">\n\t\t\t\t<h1 class=\"userPopover-details-info-name pr-u-ellipsis\">\n\t\t\t\t\t@if (!employee._links?.hrCard?.href) {\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"fullNameDisplay\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<a class=\"userPopover-details-info-name-linkOptional\" [href]=\"employee._links?.hrCard?.href\">\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"fullNameDisplay\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t</h1>\n\t\t\t\t<ng-template #fullNameDisplay\n\t\t\t\t\t><span translate=\"no\">{{ employee.firstName }} {{ employee.lastName }}</span></ng-template\n\t\t\t\t>\n\t\t\t\t@if (employee.jobTitle) {\n\t\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-ellipsis\">{{ employee.jobTitle }}</p>\n\t\t\t\t}\n\t\t\t\t@if (employee.userDepartment?.name) {\n\t\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-ellipsis\">{{ employee.userDepartment?.name }}</p>\n\t\t\t\t}\n\n\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-marginTopXS\">\n\t\t\t\t\t<!-- HORS CONTRAT-->\n\t\t\t\t\t@if (employee.dtContractStart | isFuture) {\n\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace\">\n\t\t\t\t\t\t\t<lu-icon icon=\"calendarPlanning\" size=\"S\" />\n\t\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-link-state\">\n\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\tintl().EMPLOYEE_CARD_PANEL_COMING_ON_LABEL | intlParams: { date: (employee.dtContractStart | date: \"shortDate\") ?? \"\" }\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t\t<!-- Contrat terminé -->\n\t\t\t\t\t@if (!(employee.dtContractStart | isFuture) && !(employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace\">\n\t\t\t\t\t\t\t<lu-icon icon=\"calendarStrikethrough\" size=\"S\" />\n\t\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-link-state\"> {{ intl().EMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL }} </span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\n\t\t\t\t\t<!-- EN CONTRAT-->\n\t\t\t\t\t@if (employee._links?.schedule && !(employee.dtContractStart | isFuture) && (employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t<a class=\"userPopover-details-info-detail-workplace\" [href]=\"employee._links?.schedule?.href\">\n\t\t\t\t\t\t\t@if (employee.isWorkingNow && employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t<lu-icon icon=\"mapPin\" size=\"S\" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!employee.isWorkingNow || !employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t<lu-icon icon=\"calendarPlanning\" size=\"S\" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace-state\">\n\t\t\t\t\t\t\t\t@if (employee.isWorkingNow) {\n\t\t\t\t\t\t\t\t\t@if (employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t\t\t{{ employee.currentWorkLocation.name }}\n\t\t\t\t\t\t\t\t\t\t@if (employee.currentWorkLocation.area) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-colorTextSubtle\"> – {{ employee.currentWorkLocation.area.name }}</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t\t\t{{ intl().EMPLOYEE_CARD_PANEL_PRESENT_LABEL }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@if (!(employee.dtContractStart | isFuture) && (employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t\t\t\t\t{{ intl().EMPLOYEE_CARD_PANEL_ABSENCE_LABEL }}\n\t\t\t\t\t\t\t\t\t\t@if (employee.leaveEndsOn) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-colorTextSubtle\"\n\t\t\t\t\t\t\t\t\t\t\t\t> – {{ employee.leaveEndsOn | leaveEndsDisplay: employee.leaveEndIsFirstHalfDay }}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n} @else {\n\t<lu-skeleton-user-popover />\n}\n","import { Directive, input, linkedSignal } from '@angular/core';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { ILuUser } from '@lucca-front/ng/user';\nimport { LU_USER_POPOVER_USER } from '../../user-popover.providers';\nimport { LuUserPopoverComponent } from './user-popover.component';\n\n@Directive({\n\tselector: '[luUserPopover]',\n\thost: {\n\t\t'[attr.aria-expanded]': 'opened()',\n\t},\n\texportAs: 'LuUserPopoverDirective',\n})\nexport class LuUserPopoverDirective extends PopoverDirective {\n\treadonly luUserPopover = input.required<ILuUser>();\n\n\treadonly luUserPopoverDisabled = input<boolean>(false);\n\n\toverride readonly luPopoverDisabled = linkedSignal(() => this.luUserPopoverDisabled());\n\n\toverride readonly additionalProviders = [{ provide: LU_USER_POPOVER_USER, useValue: this.luUserPopover }];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.customPositions.set([\n\t\t\t{ overlayX: 'start', overlayY: 'bottom', originX: 'start', originY: 'top' },\n\t\t\t{ overlayX: 'start', overlayY: 'top', originX: 'start', originY: 'bottom' },\n\t\t]);\n\t\tthis.luPopoverTrigger.set('hover+focus');\n\t\tthis.luPopoverNoCloseButton.set(true);\n\t\tthis.content.set(LuUserPopoverComponent);\n\t}\n}\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-user-popover.mjs","sources":["../../../packages/ng/user-popover/translations.ts","../../../packages/ng/user-popover/popup-employee.translate.ts","../../../packages/ng/user-popover/service/user-popover.store.ts","../../../packages/ng/user-popover/user-popover.providers.ts","../../../packages/ng/user-popover/card/pipe/is-future.pipe.ts","../../../packages/ng/user-popover/card/pipe/leave-ends-display.pipe.ts","../../../packages/ng/user-popover/card/trigger/user-popover.component.ts","../../../packages/ng/user-popover/card/trigger/user-popover.component.html","../../../packages/ng/user-popover/card/trigger/lu-user-popover.directive.ts","../../../packages/ng/user-popover/lucca-front-ng-user-popover.ts"],"sourcesContent":["export const Translations = {\n\ten: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrival expected on {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Absent',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Morning',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Present',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Left',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Today',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'This morning',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Until tomorrow',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Until tomorrow morning',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Until {{date}} inclusive',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Until {{date}} morning',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Location',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tde: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Geplanter Dienstantritt am {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Abwesend',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Vormittag',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Anwesend',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Ausgeschieden',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Heute',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Heute Morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Bis morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Bis morgen Vormittag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Bis einschließlich {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Bis {{date}} morgens',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Standort',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tfr: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrivée prévue le {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Absent',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Matin',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Présent(e)',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Parti(e)',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: \"Aujourd'hui\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Ce matin',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: \"Jusqu'à demain\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Jusqu’à demain matin',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: \"Jusqu'au {{date}} inclus\",\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: \"Jusqu'au {{date}} matin\",\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Emplacement',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tit: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Arrivo previsto il{{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Assente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Mattina',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Ex',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Oggi',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Questa mattina',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Fino a domani',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Fino a domani mattina',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Fino al {{date}} incluso',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Fino al mattino del {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Posizione',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tnl: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Verwachte aankomst op {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Afwezig',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Ochtend',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Aanwezig',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Vertrokken',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Vandaag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Vanochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Tot morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Tot morgenochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Tot en met {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Tot {{date}} ochtend',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Locatie',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\t'nl-BE': {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Verwachte aankomst op {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Afwezig',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Ochtend',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Aanwezig',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Vertrokken',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Vandaag',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Vanochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Tot morgen',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Tot morgenochtend',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Tot en met {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Tot {{date}} ochtend',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Locatie',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tes: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Llegada prevista el {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Ausente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Se ha marchado',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Hoy',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Esta mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Hasta mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Hasta mañana por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Hasta el {{date}} incluido',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Hasta el {{date}} por la mañana',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Ubicación',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n\tpt: {\n\t\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: 'Chegada prevista para {{date}}',\n\t\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: 'Ausente',\n\t\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: 'Manhã',\n\t\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: 'Presente',\n\t\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: 'Papel',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: 'Até hoje',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: 'Esta manhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: 'Até amanhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: 'Até amanhã de manhã',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: 'Até {{date}} incluído',\n\t\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: 'Até {{date}} de manhã',\n\t\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: 'Localização',\n\t\tEMPLOYEE_CARD_PANEL_PLANNING: 'Planning',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_POPUP_EMPLOYEE_TRANSLATIONS = new InjectionToken('LuPopupEmployeeTranslations', {\n\tfactory: () => luPopupEmployeeTranslations,\n});\n\nexport interface LuPopupEmployeeTranslations {\n\tEMPLOYEE_CARD_PANEL_COMING_ON_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_ABSENCE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_MORNING_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_PRESENT_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL: string;\n\tEMPLOYEE_CARD_PANEL_WORKING_LOCATION: string;\n\tEMPLOYEE_CARD_PANEL_PLANNING: string;\n}\n\nexport const luPopupEmployeeTranslations: LuTranslation<LuPopupEmployeeTranslations> = Translations;\n","import { HttpClient } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { Observable, OperatorFunction } from 'rxjs';\nimport { shareReplay } from 'rxjs/operators';\n\nimport { ILuUserPopoverStore } from './user-popover-service.model';\nimport { LuUserPopover } from '../user-popover.model';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class LuUserPopoverStore implements ILuUserPopoverStore {\n\t#http = inject(HttpClient);\n\t#cache = new Map<number, Observable<LuUserPopover>>();\n\tprotected _api = '/work-locations/api/employee-profile-card';\n\n\tpublic get(id: number): Observable<LuUserPopover> {\n\t\tif (this.#cache.has(id)) {\n\t\t\treturn this.#cache.get(id)!;\n\t\t}\n\t\tconst userPopoverObservable = this.#http.get<LuUserPopover>(`${this._api}/${id}`).pipe(\n\t\t\tcacheImage((c) => c.pictureHref),\n\t\t\tshareReplay(1),\n\t\t);\n\n\t\tthis.#cache.set(id, userPopoverObservable);\n\t\treturn userPopoverObservable;\n\t}\n\n\tpublic clearCache(userId?: number) {\n\t\tif (userId) {\n\t\t\tthis.#cache.delete(userId);\n\t\t} else {\n\t\t\tthis.#cache.clear();\n\t\t}\n\t}\n}\n\nexport function cacheImage<T>(accessor: (value: T) => string | undefined): OperatorFunction<T, T> {\n\treturn (source: Observable<T>): Observable<T> =>\n\t\tnew Observable((subscriber) => {\n\t\t\tsource.subscribe({\n\t\t\t\tnext(value) {\n\t\t\t\t\tconst imagePath = accessor(value);\n\t\t\t\t\tif (!imagePath) {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t}\n\t\t\t\t\tconst img = new Image();\n\t\t\t\t\timg.src = imagePath!;\n\t\t\t\t\timg.onload = () => {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t};\n\t\t\t\t\timg.onerror = () => {\n\t\t\t\t\t\tsubscriber.next(value);\n\t\t\t\t\t};\n\t\t\t\t},\n\t\t\t\terror(err: Error) {\n\t\t\t\t\tsubscriber.error(err);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n}\n","import { Observable, of } from 'rxjs';\nimport { InjectionToken, makeEnvironmentProviders, Signal } from '@angular/core';\nimport { ILuUser } from '@lucca-front/ng/user';\n\nexport const LU_USER_POPOVER_USER = new InjectionToken<Signal<ILuUser>>('user-popover-user');\n\n/**\n * @deprecated no longer needed as popover is always activated\n */\nexport const USER_POPOVER_IS_ACTIVATED = new InjectionToken<Observable<boolean>>('user-popover-is-activated', {\n\tfactory: () => of(true),\n});\n\n/**\n * @deprecated no longer needed as user popover uses `luPopover2`\n */\nexport function provideLuUserPopover() {\n\treturn makeEnvironmentProviders([]);\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { isFuture, isToday } from 'date-fns';\n\n@Pipe({\n\tname: 'isFuture',\n})\nexport class IsFuturePipe implements PipeTransform {\n\tpublic transform(value: Date | undefined): boolean {\n\t\treturn !!value && isFuture(value);\n\t}\n}\n\n@Pipe({\n\tname: 'isFutureOrToday',\n})\nexport class IsFutureOrTodayPipe implements PipeTransform {\n\tpublic transform(value: Date | undefined): boolean {\n\t\treturn !value || isFuture(value) || isToday(value);\n\t}\n}\n","import { formatDate } from '@angular/common';\nimport { inject, LOCALE_ID, Pipe, PipeTransform } from '@angular/core';\nimport { getIntl } from '@lucca-front/ng/core';\nimport { isToday, isTomorrow } from 'date-fns';\nimport { LU_POPUP_EMPLOYEE_TRANSLATIONS } from '../../popup-employee.translate';\n\n@Pipe({\n\tname: 'leaveEndsDisplay',\n})\nexport class LeaveEndsDisplayPipe implements PipeTransform {\n\treadonly intl = getIntl(LU_POPUP_EMPLOYEE_TRANSLATIONS);\n\treadonly locale = inject(LOCALE_ID);\n\tpublic transform(leaveEndsOn: Date, leaveEndIsFirstHalfDay: boolean): string {\n\t\tif (isToday(leaveEndsOn)) {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL_MORNING;\n\t\t\t} else {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TODAY_LABEL;\n\t\t\t}\n\t\t} else if (isTomorrow(leaveEndsOn)) {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_MORNING_LABEL;\n\t\t\t}\n\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_TOMORROW_LABEL;\n\t\t} else {\n\t\t\tif (leaveEndIsFirstHalfDay) {\n\t\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_MORNING_DATE_LABEL.replace('{{date}}', formatDate(leaveEndsOn, 'longDate', this.locale));\n\t\t\t}\n\t\t\treturn this.intl.EMPLOYEE_CARD_PANEL_UNTIL_DATE_LABEL.replace('{{date}}', formatDate(leaveEndsOn, 'longDate', this.locale));\n\t\t}\n\t}\n}\n","import { AsyncPipe, DatePipe, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input, Signal } from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { intlInputOptions, IntlParamsPipe } from '@lucca-front/ng/core';\nimport { IconComponent } from '@lucca-front/ng/icon';\nimport { LinkComponent } from '@lucca-front/ng/link';\nimport { POPOVER_CONFIG } from '@lucca-front/ng/popover2';\nimport { SkeletonUserPopoverComponent } from '@lucca-front/ng/skeleton';\nimport { ILuUser } from '@lucca-front/ng/user';\nimport { BehaviorSubject, catchError, combineLatest, Observable, of, switchMap, tap } from 'rxjs';\nimport { map, shareReplay } from 'rxjs/operators';\nimport { LU_POPUP_EMPLOYEE_TRANSLATIONS } from '../../popup-employee.translate';\nimport { LuUserPopoverStore } from '../../service/user-popover.store';\nimport { LuUserPopover } from '../../user-popover.model';\nimport { LU_USER_POPOVER_USER } from '../../user-popover.providers';\nimport { IsFutureOrTodayPipe, IsFuturePipe } from '../pipe/is-future.pipe';\nimport { LeaveEndsDisplayPipe } from '../pipe/leave-ends-display.pipe';\n\n@Component({\n\tselector: 'lu-user-popover-content',\n\ttemplateUrl: './user-popover.component.html',\n\tstyleUrl: './user-popover.component.scss',\n\timports: [AsyncPipe, NgTemplateOutlet, DatePipe, IntlParamsPipe, IsFuturePipe, IsFutureOrTodayPipe, LeaveEndsDisplayPipe, IconComponent, LinkComponent, SkeletonUserPopoverComponent],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuUserPopoverComponent {\n\tluUser = inject<Signal<ILuUser>>(LU_USER_POPOVER_USER);\n\n\t#popoverRef = inject(POPOVER_CONFIG).ref;\n\n\t#service = inject(LuUserPopoverStore);\n\n\treadonly intl = input(...intlInputOptions(LU_POPUP_EMPLOYEE_TRANSLATIONS));\n\n\treadonly #errorImage$ = new BehaviorSubject<boolean>(false);\n\n\tskeletonWidths = [this.getRandomPercent(), this.getRandomPercent(), this.getRandomPercent(), this.getRandomPercent()];\n\n\tpublic readonly employee$: Observable<LuUserPopover> = toObservable(this.luUser).pipe(\n\t\tswitchMap((user) =>\n\t\t\tthis.#service.get(user.id).pipe(\n\t\t\t\tcatchError(() =>\n\t\t\t\t\tof({\n\t\t\t\t\t\tid: user.id,\n\t\t\t\t\t\tfirstName: user.firstName,\n\t\t\t\t\t\tlastName: user.lastName,\n\t\t\t\t\t\tleaveEndIsFirstHalfDay: false,\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\ttap(() => this.#popoverRef.updatePosition()),\n\t\tshareReplay(1),\n\t);\n\n\tpublic readonly userPictureDisplay$ = combineLatest([this.employee$, this.#errorImage$]).pipe(\n\t\tmap(([employee, isError]) => {\n\t\t\tif (employee.pictureHref && !isError) {\n\t\t\t\treturn 'img';\n\t\t\t} else {\n\t\t\t\treturn 'initials';\n\t\t\t}\n\t\t}),\n\t);\n\n\tpublic readonly userPictureHref$ = this.employee$.pipe(map((employee) => employee.pictureHref));\n\n\tpublic readonly userInitials$ = this.employee$.pipe(\n\t\tmap((employee) => {\n\t\t\tconst initials = `${employee.firstName[0]}${employee.lastName[0]}`;\n\n\t\t\treturn {\n\t\t\t\tinitials,\n\t\t\t\tcolor: `${employee.firstName} ${employee.lastName}`.split('').reduce((sum, a) => sum + a.charCodeAt(0), 0) % 360,\n\t\t\t};\n\t\t}),\n\t);\n\n\tpictureError() {\n\t\tthis.#errorImage$.next(true);\n\t}\n\n\tgetRandomPercent(min: number = 33, max: number = 66): string {\n\t\treturn `${Math.floor(Math.random() * (max - min) + min).toString()}%`;\n\t}\n}\n","@if (employee$ | async; as employee) {\n\t<div class=\"userPopover pr-u-animatedFadeIn\">\n\t\t<section class=\"userPopover-details\">\n\t\t\t<div class=\"userPopover-details-avatar avatar\">\n\t\t\t\t@switch (userPictureDisplay$ | async) {\n\t\t\t\t\t@case (\"img\") {\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tclass=\"avatar-picture\"\n\t\t\t\t\t\t\t[src]=\"userPictureHref$ | async\"\n\t\t\t\t\t\t\t[alt]=\"(userInitials$ | async)?.initials\"\n\t\t\t\t\t\t\t(error)=\"pictureError()\"\n\t\t\t\t\t\t\ttranslate=\"no\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t}\n\t\t\t\t\t@case (\"initials\") {\n\t\t\t\t\t\t@if (userInitials$ | async; as initials) {\n\t\t\t\t\t\t\t<div class=\"avatar-picture\" style.background-color=\"hsl({{ initials.color }}, 60%, 60%)\">\n\t\t\t\t\t\t\t\t<span class=\"avatar-picture-initials\" translate=\"no\">{{ initials.initials }}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<div class=\"userPopover-details-info\">\n\t\t\t\t<h1 class=\"userPopover-details-info-name pr-u-ellipsis\">\n\t\t\t\t\t@if (!employee._links?.hrCard?.href) {\n\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"fullNameDisplay\" />\n\t\t\t\t\t} @else {\n\t\t\t\t\t\t<a luLink class=\"userPopover-details-info-name-linkOptional\" [href]=\"employee._links?.hrCard?.href\" external hiddenIcon>\n\t\t\t\t\t\t\t<ng-container *ngTemplateOutlet=\"fullNameDisplay\" />\n\t\t\t\t\t\t</a>\n\t\t\t\t\t}\n\t\t\t\t</h1>\n\t\t\t\t<ng-template #fullNameDisplay\n\t\t\t\t\t><span translate=\"no\">{{ employee.firstName }} {{ employee.lastName }}</span></ng-template\n\t\t\t\t>\n\t\t\t\t@if (employee.jobTitle) {\n\t\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-ellipsis\">{{ employee.jobTitle }}</p>\n\t\t\t\t}\n\t\t\t\t@if (employee.userDepartment?.name) {\n\t\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-ellipsis\">{{ employee.userDepartment?.name }}</p>\n\t\t\t\t}\n\n\t\t\t\t<p class=\"userPopover-details-info-detail pr-u-marginTopXS\">\n\t\t\t\t\t<!-- HORS CONTRAT-->\n\t\t\t\t\t@if (employee.dtContractStart | isFuture) {\n\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace\">\n\t\t\t\t\t\t\t<lu-icon icon=\"calendarPlanning\" size=\"S\" />\n\t\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-link-state\">\n\t\t\t\t\t\t\t\t{{\n\t\t\t\t\t\t\t\t\tintl().EMPLOYEE_CARD_PANEL_COMING_ON_LABEL | intlParams: { date: (employee.dtContractStart | date: \"shortDate\") ?? \"\" }\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t\t<!-- Contrat terminé -->\n\t\t\t\t\t@if (!(employee.dtContractStart | isFuture) && !(employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace\">\n\t\t\t\t\t\t\t<lu-icon icon=\"calendarStrikethrough\" size=\"S\" />\n\t\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-link-state\"> {{ intl().EMPLOYEE_CARD_PANEL_EMPLOYEE_HAS_LEAVED_LABEL }} </span>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\n\t\t\t\t\t<!-- EN CONTRAT-->\n\t\t\t\t\t@if (employee._links?.schedule && !(employee.dtContractStart | isFuture) && (employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t<span class=\"userPopover-details-info-detail-workplace\">\n\t\t\t\t\t\t\t@if (employee.isWorkingNow && employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t<lu-icon icon=\"mapPin\" size=\"S\" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t@if (!employee.isWorkingNow || !employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t<lu-icon icon=\"calendarPlanning\" size=\"S\" />\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\tluLink\n\t\t\t\t\t\t\t\tclass=\"userPopover-details-info-detail-workplace-state\"\n\t\t\t\t\t\t\t\t[href]=\"employee._links?.schedule?.href\"\n\t\t\t\t\t\t\t\texternal\n\t\t\t\t\t\t\t\thiddenIcon\n\t\t\t\t\t\t\t\tdecorationHover\n\t\t\t\t\t\t\t\tneutral\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t@if (employee.isWorkingNow) {\n\t\t\t\t\t\t\t\t\t@if (employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t\t\t{{ employee.currentWorkLocation.name }}\n\t\t\t\t\t\t\t\t\t\t@if (employee.currentWorkLocation.area) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-colorTextSubtle\"> – {{ employee.currentWorkLocation.area.name }}</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t@if (!employee.currentWorkLocation) {\n\t\t\t\t\t\t\t\t\t\t{{ intl().EMPLOYEE_CARD_PANEL_PRESENT_LABEL }}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} @else {\n\t\t\t\t\t\t\t\t\t@if (!(employee.dtContractStart | isFuture) && (employee.dtContractEnd | isFutureOrToday)) {\n\t\t\t\t\t\t\t\t\t\t{{ intl().EMPLOYEE_CARD_PANEL_ABSENCE_LABEL }}\n\t\t\t\t\t\t\t\t\t\t@if (employee.leaveEndsOn) {\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"pr-u-colorTextSubtle\"\n\t\t\t\t\t\t\t\t\t\t\t\t> – {{ employee.leaveEndsOn | leaveEndsDisplay: employee.leaveEndIsFirstHalfDay }}\n\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</section>\n\t</div>\n} @else {\n\t<lu-skeleton-user-popover />\n}\n","import { Directive, input, linkedSignal } from '@angular/core';\nimport { PopoverDirective } from '@lucca-front/ng/popover2';\nimport { ILuUser } from '@lucca-front/ng/user';\nimport { LU_USER_POPOVER_USER } from '../../user-popover.providers';\nimport { LuUserPopoverComponent } from './user-popover.component';\n\n@Directive({\n\tselector: '[luUserPopover]',\n\thost: {\n\t\t'[attr.aria-expanded]': 'opened()',\n\t},\n\texportAs: 'LuUserPopoverDirective',\n})\nexport class LuUserPopoverDirective extends PopoverDirective {\n\treadonly luUserPopover = input.required<ILuUser>();\n\n\treadonly luUserPopoverDisabled = input<boolean>(false);\n\n\toverride readonly luPopoverDisabled = linkedSignal(() => this.luUserPopoverDisabled());\n\n\toverride readonly additionalProviders = [{ provide: LU_USER_POPOVER_USER, useValue: this.luUserPopover }];\n\n\tconstructor() {\n\t\tsuper();\n\t\tthis.customPositions.set([\n\t\t\t{ overlayX: 'start', overlayY: 'bottom', originX: 'start', originY: 'top' },\n\t\t\t{ overlayX: 'start', overlayY: 'top', originX: 'start', originY: 'bottom' },\n\t\t]);\n\t\tthis.luPopoverTrigger.set('hover+focus');\n\t\tthis.luPopoverNoCloseButton.set(true);\n\t\tthis.content.set(LuUserPopoverComponent);\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucca-front/ng",
3
- "version": "22.0.5",
3
+ "version": "22.1.0-rc.2",
4
4
  "description": "A library of icons made by the team @Lucca",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,11 +28,12 @@
28
28
  "@angular/core": "^22.0.0",
29
29
  "@angular/cdk": "^22.0.0",
30
30
  "@angular/animations": "^22.0.0",
31
- "@lucca-front/icons": "22.0.5",
32
- "@lucca-front/scss": "22.0.5",
33
- "@lucca/prisme": "22.0.5",
31
+ "@lucca-front/icons": "22.1.0-rc.2",
32
+ "@lucca-front/scss": "22.1.0-rc.2",
33
+ "@lucca/prisme": "22.1.0-rc.2",
34
34
  "@types/dompurify": "^3.0.0",
35
35
  "isomorphic-dompurify": "^2.17.0",
36
+ "marked": "^14.1.0",
36
37
  "date-fns": "^3.6.0",
37
38
  "ngx-mask": "^20.0.3",
38
39
  "rxjs": "^7.8.0",
@@ -257,6 +258,10 @@
257
258
  "types": "./types/lucca-front-ng-filter-pills.d.ts",
258
259
  "default": "./fesm2022/lucca-front-ng-filter-pills.mjs"
259
260
  },
261
+ "./filter-pills/core": {
262
+ "types": "./types/lucca-front-ng-filter-pills-core.d.ts",
263
+ "default": "./fesm2022/lucca-front-ng-filter-pills-core.mjs"
264
+ },
260
265
  "./footer": {
261
266
  "types": "./types/lucca-front-ng-footer.d.ts",
262
267
  "default": "./fesm2022/lucca-front-ng-footer.mjs"
@@ -369,6 +374,10 @@
369
374
  "types": "./types/lucca-front-ng-main-layout.d.ts",
370
375
  "default": "./fesm2022/lucca-front-ng-main-layout.mjs"
371
376
  },
377
+ "./markdown": {
378
+ "types": "./types/lucca-front-ng-markdown.d.ts",
379
+ "default": "./fesm2022/lucca-front-ng-markdown.mjs"
380
+ },
372
381
  "./mobile-push": {
373
382
  "types": "./types/lucca-front-ng-mobile-push.d.ts",
374
383
  "default": "./fesm2022/lucca-front-ng-mobile-push.mjs"
@@ -429,6 +438,10 @@
429
438
  "types": "./types/lucca-front-ng-popup.d.ts",
430
439
  "default": "./fesm2022/lucca-front-ng-popup.mjs"
431
440
  },
441
+ "./priority-levels": {
442
+ "types": "./types/lucca-front-ng-priority-levels.d.ts",
443
+ "default": "./fesm2022/lucca-front-ng-priority-levels.mjs"
444
+ },
432
445
  "./progress-bar": {
433
446
  "types": "./types/lucca-front-ng-progress-bar.d.ts",
434
447
  "default": "./fesm2022/lucca-front-ng-progress-bar.mjs"
@@ -41,7 +41,9 @@
41
41
  max-inline-size: 30rem;
42
42
  }
43
43
 
44
- &:has(> lu-select-panel) {
44
+ // Caps the panel anchored to the field only: below the `S` breakpoint the panel is rendered by the
45
+ // dialog as a sheet, which spans the whole viewport and sizes itself.
46
+ &:not(.dialog):has(> lu-select-panel) {
45
47
  max-inline-size: 35rem !important;
46
48
  }
47
49
  }
@@ -2,6 +2,7 @@ import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken } from '@angular/core';
3
3
  import * as _lucca_front_ng_activity_feed from '@lucca-front/ng/activity-feed';
4
4
  import { PortalContent, LuTranslation } from '@lucca-front/ng/core';
5
+ import { LuccaIcon } from '@lucca-front/ng/icon';
5
6
  import { ILuUser } from '@lucca-front/ng/user';
6
7
 
7
8
  /**
@@ -16,6 +17,7 @@ declare class ActivityFeedStepComponent {
16
17
  readonly label: _angular_core.InputSignal<PortalContent>;
17
18
  readonly user: _angular_core.InputSignal<ILuUser>;
18
19
  readonly status: _angular_core.InputSignal<"success" | "critical" | "pending">;
20
+ readonly icon: _angular_core.InputSignal<LuccaIcon>;
19
21
  readonly date: _angular_core.InputSignal<string | Date>;
20
22
  protected readonly preparedDate: _angular_core.Signal<Date>;
21
23
  /**
@@ -26,7 +28,7 @@ declare class ActivityFeedStepComponent {
26
28
  readonly datePipeFormat: _angular_core.InputSignal<string>;
27
29
  protected readonly dateDisplay: _angular_core.Signal<string>;
28
30
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ActivityFeedStepComponent, never>;
29
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActivityFeedStepComponent, "lu-activity-feed-step", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "datePipeFormat": { "alias": "datePipeFormat"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
31
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ActivityFeedStepComponent, "lu-activity-feed-step", never, { "intl": { "alias": "intl"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "user": { "alias": "user"; "required": false; "isSignal": true; }; "status": { "alias": "status"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "date": { "alias": "date"; "required": false; "isSignal": true; }; "datePipeFormat": { "alias": "datePipeFormat"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
30
32
  }
31
33
 
32
34
  declare class ActivityFeedUpdateItemComponent {
@@ -2,14 +2,16 @@ import * as _angular_core from '@angular/core';
2
2
  import { InjectionToken, OnDestroy, ElementRef, Signal, EventEmitter, TemplateRef, Injector, WritableSignal, OnInit, ChangeDetectorRef, Type, Provider, PipeTransform } from '@angular/core';
3
3
  import * as rxjs from 'rxjs';
4
4
  import { Observable, Subject, BehaviorSubject, ReplaySubject } from 'rxjs';
5
- import * as _lucca_front_ng_filter_pills from '@lucca-front/ng/filter-pills';
6
- import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills';
7
- import { OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
5
+ import * as _lucca_front_ng_filter_pills_core from '@lucca-front/ng/filter-pills/core';
6
+ import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';
7
+ import { ComponentType, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
8
8
  import { ControlValueAccessor } from '@angular/forms';
9
9
  import { PortalContent, LuTranslation } from '@lucca-front/ng/core';
10
+ import { FormFieldComponent } from '@lucca-front/ng/form-field';
10
11
  import * as _lucca_front_ng_core_select from '@lucca-front/ng/core-select';
11
12
  import { Treeitem } from '@lucca-front/ng/listbox';
12
13
  import { Highlightable } from '@angular/cdk/a11y';
14
+ import { LuDialogService, LuDialogRef } from '@lucca-front/ng/dialog';
13
15
 
14
16
  interface SelectDataSourceParams {
15
17
  clue: string;
@@ -166,6 +168,30 @@ declare abstract class LuSelectPanelRef<TOption, TValue> {
166
168
  close(): void;
167
169
  }
168
170
 
171
+ /**
172
+ * Opens a select panel as a bottom sheet.
173
+ *
174
+ * Below the `S` breakpoint the panel stops being a popover anchored to the field and becomes a modal
175
+ * surface pinned to the bottom of the viewport. That surface already exists as the dialog's `sheet`
176
+ * mode — backdrop, blocked page scroll, focus trap, focus restoration and close button all come with
177
+ * it — so the panel is opened as a dialog instead of as a bespoke overlay.
178
+ *
179
+ * The opening animation is disabled (`mod-select`, styled by the select packages themselves — see their
180
+ * `sheet` mixin) and the search input is focused by hand instead of through CDK's `autoFocus`. iOS
181
+ * Safari only raises the virtual keyboard for a `focus()` call made synchronously inside the tap that
182
+ * triggered it; CDK's own autofocus defers the actual `focus()` through `afterNextRender`, which always
183
+ * lands after that window has closed, so the keyboard silently never opens. Forcing a render with
184
+ * `ApplicationRef.tick()` right here — still inside the same synchronous call stack as the tap — makes
185
+ * the search input exist in the DOM in time to focus it for real, and skipping the animation keeps the
186
+ * sheet from visibly jumping once the keyboard's own viewport resize kicks in immediately after.
187
+ *
188
+ * @param dialogService the dialog service provided alongside the select input
189
+ * @param panel the panel component to render inside the sheet
190
+ * @param injector the injector carrying the panel ref and the select input for the panel
191
+ * @param ariaLabel names the sheet, so it stays named even before its header has rendered
192
+ */
193
+ declare function openSelectPanelSheet<TPanel>(dialogService: LuDialogService, panel: ComponentType<TPanel>, injector: Injector, ariaLabel: string): LuDialogRef<TPanel, never>;
194
+
169
195
  /**
170
196
  * Scrolls an element into view once its layout has settled.
171
197
  *
@@ -185,6 +211,34 @@ type GroupTemplateLocation = 'group-header' | 'option' | 'none';
185
211
  * the options are being (re)fetched, then flip to the final location on the next options emission.
186
212
  */
187
213
  declare function getGroupTemplateLocation(hasGrouping: Signal<boolean>, clue: Signal<string>, options: Signal<readonly unknown[]>, searchable?: boolean): Signal<GroupTemplateLocation>;
214
+ /**
215
+ * Requests the next page for as long as the panel's scroll viewport can't scroll.
216
+ *
217
+ * Pagination is driven by the scroll event: reaching the bottom of the viewport asks the consumer
218
+ * for the next page. A page that doesn't overflow the viewport therefore never asks for anything —
219
+ * there is nothing to scroll. The popover panel caps its content at 20rem, which a page of options
220
+ * always overflows, so this never came up; the bottom sheet is only as tall as its content instead,
221
+ * so a first page of a few options leaves it short of a scrollbar and pagination stops right there.
222
+ *
223
+ * So the viewport is measured again after every render and, while it still can't scroll, the next
224
+ * page is requested. The option count is what guards against an endless loop: a page that brought
225
+ * no new option — the data source is exhausted — is never requested twice. A new search landing on
226
+ * exactly the same count as the last requested page is the one case left unfilled, which the next
227
+ * scroll — or the next keystroke — resolves on its own.
228
+ *
229
+ * The request itself is deferred by a microtask: the panel's first render happens inside the sheet's
230
+ * own `ApplicationRef.tick()`, which `openPanel` runs *before* subscribing the select input to the
231
+ * panel ref, so a page requested straight from that render would be emitted into the void. A
232
+ * microtask lands once `openPanel` has returned, still well ahead of anything the user could do.
233
+ *
234
+ * Must be called from an injection context.
235
+ */
236
+ declare function fillScrollViewport({ viewport, optionCount, loading, nextPage, }: {
237
+ viewport: Signal<HTMLElement | undefined>;
238
+ optionCount: Signal<number>;
239
+ loading: Signal<boolean>;
240
+ nextPage: () => void;
241
+ }): void;
188
242
 
189
243
  interface CoreSelectPanelInstance<T = unknown> {
190
244
  options: WritableSignal<CoreSelectPanelElement<T>[]>;
@@ -236,12 +290,19 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
236
290
  protected overlayContainerRef: HTMLElement;
237
291
  protected labelElement: HTMLElement | undefined;
238
292
  protected labelId: string;
293
+ protected formField: FormFieldComponent;
239
294
  protected abstract intl: Signal<LuCoreSelectLabel>;
240
- protected filterPillHost: _lucca_front_ng_filter_pills.FilterPillComponent;
295
+ protected filterPillHost: _lucca_front_ng_filter_pills_core.FilterPillHostComponent;
241
296
  protected afterCloseFn?: () => void;
242
297
  protected updatePositionFn?: () => void;
243
- filterPillMode: boolean;
298
+ get filterPillMode(): boolean;
299
+ set filterPillMode(filterPillMode: boolean);
244
300
  readonly ignorePresentation: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
301
+ /**
302
+ * Width of the select itself, using the same scale as the form field width
303
+ */
304
+ readonly width: _angular_core.InputSignalWithTransform<10 | 20 | 30 | 40 | 50 | 60, 10 | 20 | 30 | 40 | 50 | 60 | "null" | "10" | "20" | "30" | "40" | "50" | "60">;
305
+ protected readonly widthClass: Signal<string>;
245
306
  selectParent$?: Subject<void>;
246
307
  selectChildren$?: Subject<void>;
247
308
  readonly panelClosed: _angular_core.OutputEmitterRef<void>;
@@ -265,6 +326,25 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
265
326
  get isPanelOpen(): boolean;
266
327
  readonly isPanelOpen$: BehaviorSubject<boolean>;
267
328
  readonly panelOpenSignal: Signal<boolean>;
329
+ private readonly belowSmallBreakpoint;
330
+ /**
331
+ * Below the `S` breakpoint (800px) the panel opens as a dialog in `sheet` mode that embeds its own
332
+ * search input, instead of a popover anchored to the field — mirroring how filter pills move the input
333
+ * inside their overlay. Filter pills already provide their own overlay, so they keep their behavior.
334
+ */
335
+ readonly bottomSheetMode: Signal<boolean>;
336
+ /**
337
+ * Whether the currently open panel is a sheet, snapshotted when it opens rather than tracking
338
+ * `bottomSheetMode()` live: the panel's own ref (`SelectPanelSheetRef` vs `SelectPanelRef`) is
339
+ * chosen once at open time too, so resizing across the breakpoint while the panel stays open must
340
+ * not flip which surface its template renders — that surface was never actually attached as a
341
+ * dialog, so switching to it crashes with a missing `LuDialogRef` provider.
342
+ */
343
+ readonly panelBottomSheetMode: _angular_core.WritableSignal<boolean>;
344
+ /** Field label echoed as the bottom sheet's title, snapshotted when the sheet opens. */
345
+ readonly panelTitle: _angular_core.WritableSignal<string>;
346
+ /** Whether that field label carries the required marker, so the sheet's title can echo it too. */
347
+ readonly panelTitleRequired: Signal<boolean>;
268
348
  readonly activeDescendant$: BehaviorSubject<string>;
269
349
  protected manualOptions$: ReplaySubject<readonly TOption[]>;
270
350
  get ariaControls(): string;
@@ -324,6 +404,7 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
324
404
  protected _panelRef?: LuSelectPanelRef<TOption, TValue>;
325
405
  protected readonly destroyed$: Subject<void>;
326
406
  private readonly injector;
407
+ private readonly hostElementRef;
327
408
  constructor();
328
409
  onClickOpenPanel($event: Event): void;
329
410
  onKeyDownNavigation(event: Event): void;
@@ -338,6 +419,8 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
338
419
  protected abstract buildPanelRef(): this['panelRef'];
339
420
  protected bindInputToPanelRefEvents(): void;
340
421
  focusInput(): void;
422
+ private resolvePanelTitle;
423
+ private getLabelText;
341
424
  protected emptyClue(): void;
342
425
  closePanel(): void;
343
426
  writeValue(value: TValue | null): void;
@@ -349,7 +432,7 @@ declare abstract class ALuSelectInputComponent<TOption, TValue> implements OnDes
349
432
  onFilterPillOpened(): void;
350
433
  onFilterPillClosed(): void;
351
434
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ALuSelectInputComponent<any, any>, never>;
352
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ALuSelectInputComponent<any, any>, never, never, { "ignorePresentation": { "alias": "ignorePresentation"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearableInput": { "alias": "clearable"; "required": false; "isSignal": true; }; "addOptionLabelInput": { "alias": "addOptionLabel"; "required": false; "isSignal": true; }; "addOptionStrategy": { "alias": "addOptionStrategy"; "required": false; "isSignal": true; }; "overlayConfig": { "alias": "overlayConfig"; "required": false; "isSignal": true; }; "loadingInput": { "alias": "loading"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "optionComparerInput": { "alias": "optionComparer"; "required": false; "isSignal": true; }; "optionKeyInput": { "alias": "optionKey"; "required": false; "isSignal": true; }; "noClueIcon": { "alias": "noClueIcon"; "required": false; "isSignal": true; }; "inputTabindex": { "alias": "inputTabindex"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "colorPicker": { "alias": "colorPicker"; "required": false; "isSignal": true; }; "optionTpl": { "alias": "optionTpl"; "required": false; "isSignal": true; }; "valueTpl": { "alias": "valueTpl"; "required": false; "isSignal": true; }; "panelHeaderTpl": { "alias": "panelHeaderTpl"; "required": false; "isSignal": true; }; "panelFooterTpl": { "alias": "panelFooterTpl"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; }, { "panelClosed": "panelClosed"; "panelOpened": "panelOpened"; "highlightedOption": "highlightedOption"; "optionTpl": "optionTplChange"; "valueTpl": "valueTplChange"; "panelHeaderTpl": "panelHeaderTplChange"; "panelFooterTpl": "panelFooterTplChange"; "clueChange": "clueChange"; "nextPage": "nextPage"; "addOption": "addOption"; "dataSource": "dataSourceChange"; }, never, never, true, never>;
435
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<ALuSelectInputComponent<any, any>, never, never, { "ignorePresentation": { "alias": "ignorePresentation"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; "prefix": { "alias": "prefix"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearableInput": { "alias": "clearable"; "required": false; "isSignal": true; }; "addOptionLabelInput": { "alias": "addOptionLabel"; "required": false; "isSignal": true; }; "addOptionStrategy": { "alias": "addOptionStrategy"; "required": false; "isSignal": true; }; "overlayConfig": { "alias": "overlayConfig"; "required": false; "isSignal": true; }; "loadingInput": { "alias": "loading"; "required": false; "isSignal": true; }; "optionsInput": { "alias": "options"; "required": false; "isSignal": true; }; "optionComparerInput": { "alias": "optionComparer"; "required": false; "isSignal": true; }; "optionKeyInput": { "alias": "optionKey"; "required": false; "isSignal": true; }; "noClueIcon": { "alias": "noClueIcon"; "required": false; "isSignal": true; }; "inputTabindex": { "alias": "inputTabindex"; "required": false; "isSignal": true; }; "compact": { "alias": "compact"; "required": false; "isSignal": true; }; "colorPicker": { "alias": "colorPicker"; "required": false; "isSignal": true; }; "optionTpl": { "alias": "optionTpl"; "required": false; "isSignal": true; }; "valueTpl": { "alias": "valueTpl"; "required": false; "isSignal": true; }; "panelHeaderTpl": { "alias": "panelHeaderTpl"; "required": false; "isSignal": true; }; "panelFooterTpl": { "alias": "panelFooterTpl"; "required": false; "isSignal": true; }; "dataSource": { "alias": "dataSource"; "required": false; "isSignal": true; }; }, { "panelClosed": "panelClosed"; "panelOpened": "panelOpened"; "highlightedOption": "highlightedOption"; "optionTpl": "optionTplChange"; "valueTpl": "valueTplChange"; "panelHeaderTpl": "panelHeaderTplChange"; "panelFooterTpl": "panelFooterTplChange"; "clueChange": "clueChange"; "nextPage": "nextPage"; "addOption": "addOption"; "dataSource": "dataSourceChange"; }, never, never, true, never>;
353
436
  }
354
437
 
355
438
  declare function provideLuSelectLabelsAndIds(): Provider[];
@@ -506,5 +589,5 @@ declare class LuIsOptionSelectedPipe<T> implements PipeTransform {
506
589
  static ɵpipe: _angular_core.ɵɵPipeDeclaration<LuIsOptionSelectedPipe<any>, "luIsOptionSelected", true>;
507
590
  }
508
591
 
509
- export { ALuSelectInputComponent, CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectKeyManager, LU_CORE_SELECT_TRANSLATIONS, LU_OPTION_CONTEXT, LuCoreSelectNoClueDirective, LuCoreSelectPanelHeaderDirective, LuCoreSelectTotalCountDirective, LuDisabledOptionDirective, LuDisplayerDirective, LuIsOptionSelectedPipe, LuOptionDirective, LuOptionGroupDirective, LuSelectPanelLayoutComponent, LuSelectPanelRef, LuSimpleSelectDefaultOptionComponent, SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID, SELECT_PANEL_INSTANCE, TreeDisplayPipe, addAttributesOnCdkContainer, applySearchDelimiter, coreSelectDefaultOptionComparer, coreSelectDefaultOptionKey, luCoreSelectTranslations, provideLuSelectLabelsAndIds, provideOptionContext, CoreSelectPanelElement as ɵCoreSelectPanelElement, ɵIsSelectedStrategy, LuOptionComponent as ɵLuOptionComponent, LuOptionGroupPipe as ɵLuOptionGroupPipe, LuOptionOutletDirective as ɵLuOptionOutletDirective, generateGroups as ɵgenerateGroups, getGroupTemplateLocation as ɵgetGroupTemplateLocation, injectPointerNavigation as ɵinjectPointerNavigation, scrollIntoViewOnceReady as ɵscrollIntoViewOnceReady };
592
+ export { ALuSelectInputComponent, CORE_SELECT_API_TOTAL_COUNT_PROVIDER, CoreSelectKeyManager, LU_CORE_SELECT_TRANSLATIONS, LU_OPTION_CONTEXT, LuCoreSelectNoClueDirective, LuCoreSelectPanelHeaderDirective, LuCoreSelectTotalCountDirective, LuDisabledOptionDirective, LuDisplayerDirective, LuIsOptionSelectedPipe, LuOptionDirective, LuOptionGroupDirective, LuSelectPanelLayoutComponent, LuSelectPanelRef, LuSimpleSelectDefaultOptionComponent, SELECT_ID, SELECT_LABEL, SELECT_LABEL_ID, SELECT_PANEL_INSTANCE, TreeDisplayPipe, addAttributesOnCdkContainer, applySearchDelimiter, coreSelectDefaultOptionComparer, coreSelectDefaultOptionKey, luCoreSelectTranslations, provideLuSelectLabelsAndIds, provideOptionContext, CoreSelectPanelElement as ɵCoreSelectPanelElement, ɵIsSelectedStrategy, LuOptionComponent as ɵLuOptionComponent, LuOptionGroupPipe as ɵLuOptionGroupPipe, LuOptionOutletDirective as ɵLuOptionOutletDirective, fillScrollViewport as ɵfillScrollViewport, generateGroups as ɵgenerateGroups, getGroupTemplateLocation as ɵgetGroupTemplateLocation, injectPointerNavigation as ɵinjectPointerNavigation, openSelectPanelSheet as ɵopenSelectPanelSheet, scrollIntoViewOnceReady as ɵscrollIntoViewOnceReady };
510
593
  export type { CoreSelectAddOptionStrategy, CoreSelectApiTotalCountProvider, CoreSelectPanelInstance, ILuOptionContext, LuCoreSelectLabel, LuOptionComparer, LuOptionContext, LuOptionGroup, LuOptionGroupByContext, LuOptionGrouping, SelectDataSource, SelectDataSourceParams, TreeGenerator, TreeGroupingFn, TreeNode };
@@ -262,6 +262,8 @@ declare function ɵeffectWithDeps<const T extends EffectWithDepsInput>(dependenc
262
262
  */
263
263
  declare function syncInputSignal<T>(signal: ReturnType<typeof input<T>>, setter: (value: T) => void): void;
264
264
 
265
+ declare function capitalize<T extends string>(str: T): Capitalize<T>;
266
+
265
267
  /**
266
268
  * Transforms a boolean or a string representation of a boolean into a boolean.
267
269
  * @template T The specific boolean literal type to narrow to.
@@ -389,5 +391,5 @@ interface ILuTree<T> {
389
391
  disabled?: boolean;
390
392
  }
391
393
 
392
- export { ALuDateAdapter, ALuOnCloseSubscriber, ALuOnOpenSubscriber, ALuOnScrollBottomSubscriber, ELuDateGranularity, IntlParamsPipe, IntlPluralLabelPipe, LOCALE_PLURAL_RULES, LU_NATIVE_DATE_ADAPTER_OPTIONS, LuNativeDateAdapter, LuStringDateAdapter, LuTypeGuardPipe, PORTAL_CONTEXT, PortalDirective, assertNotNil, defaultBreakpoints, generateId, getIntl, getIntlPluralLabel, getPushPanelInlineSize, getPushPanelViewportMargin, injectMediaMinBreakpoint, intlInputOptions, isNil, isNilOrEmptyString, isNotNil, isNotNilOrEmptyString, isRouterLinkParam, luBooleanAttribute, luDefaultNativeDateAdapterOptions, luNullableBooleanAttribute, luNullableNumberAttribute, luNumberAttribute, luOptionalBooleanAttribute, luOptionalNullableBooleanAttribute, luOptionalNullableNumberAttribute, luOptionalNumberAttribute, syncInputSignal, ɵeffectWithDeps };
394
+ export { ALuDateAdapter, ALuOnCloseSubscriber, ALuOnOpenSubscriber, ALuOnScrollBottomSubscriber, ELuDateGranularity, IntlParamsPipe, IntlPluralLabelPipe, LOCALE_PLURAL_RULES, LU_NATIVE_DATE_ADAPTER_OPTIONS, LuNativeDateAdapter, LuStringDateAdapter, LuTypeGuardPipe, PORTAL_CONTEXT, PortalDirective, assertNotNil, capitalize, defaultBreakpoints, generateId, getIntl, getIntlPluralLabel, getPushPanelInlineSize, getPushPanelViewportMargin, injectMediaMinBreakpoint, intlInputOptions, isNil, isNilOrEmptyString, isNotNil, isNotNilOrEmptyString, isRouterLinkParam, luBooleanAttribute, luDefaultNativeDateAdapterOptions, luNullableBooleanAttribute, luNullableNumberAttribute, luNumberAttribute, luOptionalBooleanAttribute, luOptionalNullableBooleanAttribute, luOptionalNullableNumberAttribute, luOptionalNumberAttribute, syncInputSignal, ɵeffectWithDeps };
393
395
  export type { At, Breakpoint, EffectWithDepsInput, EnumValue, ILuDateAdapter, ILuGroup, ILuNativeDateAdapterOptions, ILuOnCloseSubscriber, ILuOnOpenSubscriber, ILuOnScrollBottomSubscriber, ILuTranslation, ILuTree, LuDateGranularity, LuPluralForms, LuTranslation, PortalContent, ResponsiveConfig, ResponsiveProperty, RouterLinkParam };
@@ -5,7 +5,7 @@ import { Palette, PortalContent, LuTranslation } from '@lucca-front/ng/core';
5
5
  import { ConnectionPositionPair } from '@angular/cdk/overlay';
6
6
  import { ControlValueAccessor, Validator, NgControl, AbstractControl, ValidationErrors } from '@angular/forms';
7
7
  import { LuccaIcon } from '@lucca-front/icons';
8
- import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills';
8
+ import { FilterPillInputComponent } from '@lucca-front/ng/filter-pills/core';
9
9
  import { PopoverDirective } from '@lucca-front/ng/popover2';
10
10
  import { WeekOptions, FirstWeekContainsDateOptions } from 'date-fns';
11
11
 
@@ -21,18 +21,32 @@ interface CellStatus {
21
21
 
22
22
  interface DateRangeInput {
23
23
  class?: `palette-${Palette}` | string;
24
- start: Date | string;
24
+ /**
25
+ * Start bound of the range. Optional: a range can be open on its start, for instance when
26
+ * a filter only expresses an "until" date.
27
+ */
28
+ start?: Date | string | null;
29
+ /**
30
+ * End bound of the range. Optional: a range can be open on its end, for instance when
31
+ * a filter only expresses a "from" date.
32
+ */
25
33
  end?: Date | string | null;
26
34
  label?: string;
27
35
  scope?: CalendarMode;
28
36
  }
29
37
  interface DateRange extends DateRangeInput {
30
- start: Date;
38
+ start?: Date | null;
31
39
  end?: Date | null;
32
40
  }
33
41
 
34
42
  interface RangeInfo {
35
43
  range?: DateRange;
44
+ /**
45
+ * Bound the range is anchored on: its start when it has one, its end otherwise.
46
+ * A range without start date is rendered from its end, the same way an incomplete
47
+ * range is rendered from its start.
48
+ */
49
+ anchor: Date;
36
50
  isStart: boolean;
37
51
  isEnd: boolean;
38
52
  label?: string;
@@ -136,6 +150,7 @@ declare class Calendar2Component implements OnInit {
136
150
  getWeekDayCellClasses(day: CalendarCellInfo, isLastDay: boolean): Record<string, boolean>;
137
151
  getRangeInfo(date: Date, scope: CalendarMode | null, isOverflow?: boolean): {
138
152
  range: DateRange;
153
+ anchor: Date;
139
154
  isStart: boolean;
140
155
  isEnd: boolean;
141
156
  label: string;
@@ -148,6 +163,7 @@ declare class Calendar2Component implements OnInit {
148
163
  declare function getDateFormat(locale: string, mode?: CalendarMode): string;
149
164
  declare function getSeparator(locale: string): string;
150
165
  declare function getLocalizedDateFormat(locale: string, period?: CalendarMode, weekPrefix?: string): string;
166
+ declare function humanizeDate(locale: string, date: Date, mode?: CalendarMode, reference?: Date): string | null;
151
167
 
152
168
  /**
153
169
  * Available DateComponent Types
@@ -223,14 +239,17 @@ declare class DateInputComponent extends AbstractDateComponent implements OnInit
223
239
  readonly disableOverflow: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
224
240
  readonly hideOverflow: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
225
241
  readonly widthAuto: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
242
+ readonly humanized: _angular_core.InputSignalWithTransform<boolean, boolean | "" | "false" | "true">;
226
243
  readonly filterPillDisabled: _angular_core.WritableSignal<boolean>;
227
244
  popoverPositions: ConnectionPositionPair[];
228
245
  readonly inputFocused: _angular_core.WritableSignal<boolean>;
246
+ readonly panelOpen: _angular_core.WritableSignal<boolean>;
229
247
  readonly selectedDate: _angular_core.WritableSignal<Date>;
230
248
  readonly initialValue: _angular_core.WritableSignal<Date>;
231
249
  readonly dateFromWriteValue: _angular_core.WritableSignal<Date>;
232
250
  readonly calendar: _angular_core.Signal<Calendar2Component>;
233
251
  readonly inputRef: _angular_core.Signal<ElementRef<HTMLInputElement>>;
252
+ readonly formattedValue: _angular_core.Signal<string>;
234
253
  readonly displayValue: _angular_core.Signal<string>;
235
254
  readonly userTextInput: _angular_core.WritableSignal<string>;
236
255
  combinedGetCellInfo: (date: Date, mode: CalendarMode) => CellStatus;
@@ -262,7 +281,7 @@ declare class DateInputComponent extends AbstractDateComponent implements OnInit
262
281
  dateClicked(date: Date, popoverRef: PopoverDirective): void;
263
282
  inputBlurred(): void;
264
283
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<DateInputComponent, never>;
265
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "lu-date-input", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disableOverflow": { "alias": "disableOverflow"; "required": false; "isSignal": true; }; "hideOverflow": { "alias": "hideOverflow"; "required": false; "isSignal": true; }; "widthAuto": { "alias": "widthAuto"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
284
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<DateInputComponent, "lu-date-input", never, { "autocomplete": { "alias": "autocomplete"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "disableOverflow": { "alias": "disableOverflow"; "required": false; "isSignal": true; }; "hideOverflow": { "alias": "hideOverflow"; "required": false; "isSignal": true; }; "widthAuto": { "alias": "widthAuto"; "required": false; "isSignal": true; }; "humanized": { "alias": "humanized"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
266
285
  }
267
286
 
268
287
  interface CalendarShortcut {
@@ -307,6 +326,11 @@ declare class DateRangeInputComponent extends AbstractDateComponent implements O
307
326
  isFilterPill: boolean;
308
327
  get isWidthAuto(): boolean;
309
328
  readonly isFilterPillEmpty: Signal<boolean>;
329
+ /**
330
+ * The field of the missing bound when a single date is selected, null otherwise.
331
+ * In filter pill mode, the popover initially focuses it, so the next picked date completes the range instead of replacing the selected one
332
+ */
333
+ protected readonly missingBoundField: Signal<0 | 1>;
310
334
  readonly isFilterPillClearable: Signal<boolean>;
311
335
  filterPillPopoverCloseFn?: () => void;
312
336
  readonly filterPillDisabled: _angular_core.WritableSignal<boolean>;
@@ -342,6 +366,8 @@ declare const LU_DATE2_TRANSLATIONS: InjectionToken<LuTranslation<Date2Translate
342
366
  interface Date2Translate {
343
367
  from: string;
344
368
  to: string;
369
+ fromDate: string;
370
+ untilDate: string;
345
371
  directionKeysTip: string;
346
372
  pickDate: string;
347
373
  previous: string;
@@ -352,5 +378,5 @@ interface Date2Translate {
352
378
  }
353
379
  declare const luDate2Translations: LuTranslation<Date2Translate>;
354
380
 
355
- export { CALENDAR_MODE, Calendar2Component, DATE2_CLEAR_BEHAVIOR, DATE_FORMAT, DATE_FORMAT_CONST, DATE_ISO_FORMAT, DateInputComponent, DateRangeInputComponent, LU_DATE2_TRANSLATIONS, PremadeShortcuts, getDateFormat, getLocalizedDateFormat, getSeparator, luDate2Translations };
381
+ export { CALENDAR_MODE, Calendar2Component, DATE2_CLEAR_BEHAVIOR, DATE_FORMAT, DATE_FORMAT_CONST, DATE_ISO_FORMAT, DateInputComponent, DateRangeInputComponent, LU_DATE2_TRANSLATIONS, PremadeShortcuts, getDateFormat, getLocalizedDateFormat, getSeparator, humanizeDate, luDate2Translations };
356
382
  export type { CalendarMode, CalendarShortcut, CellStatus, Date2ClearBehavior, Date2Translate, DateFormat, DateInputValidatorErrorType, DateRange, DateRangeInput };