@lucca-front/ng 21.0.0-rc.1 → 21.0.0-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.
Files changed (130) hide show
  1. package/app-layout/index.d.ts +1 -1
  2. package/box/index.d.ts +3 -3
  3. package/breadcrumbs/index.d.ts +3 -3
  4. package/button/index.d.ts +26 -21
  5. package/callout/index.d.ts +90 -86
  6. package/chip/index.d.ts +12 -3
  7. package/clear/index.d.ts +5 -2
  8. package/code/index.d.ts +5 -5
  9. package/comment/index.d.ts +11 -14
  10. package/core/index.d.ts +5 -5
  11. package/core-select/index.d.ts +6 -4
  12. package/core-select/user/index.d.ts +3 -2
  13. package/data-table/index.d.ts +3 -2
  14. package/dialog/index.d.ts +3 -3
  15. package/empty-state/index.d.ts +23 -26
  16. package/fancy-box/index.d.ts +11 -10
  17. package/fesm2022/lucca-front-ng-api.mjs +1 -1
  18. package/fesm2022/lucca-front-ng-app-layout.mjs.map +1 -1
  19. package/fesm2022/lucca-front-ng-box.mjs.map +1 -1
  20. package/fesm2022/lucca-front-ng-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/lucca-front-ng-button.mjs +59 -90
  22. package/fesm2022/lucca-front-ng-button.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-callout.mjs +151 -212
  24. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-chip.mjs +31 -5
  26. package/fesm2022/lucca-front-ng-chip.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-clear.mjs +22 -10
  28. package/fesm2022/lucca-front-ng-clear.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-code.mjs +5 -5
  30. package/fesm2022/lucca-front-ng-code.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-comment.mjs +15 -35
  32. package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-core-select-api.mjs +3 -3
  34. package/fesm2022/lucca-front-ng-core-select-api.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-core-select-user.mjs +14 -11
  36. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-core-select.mjs +14 -20
  38. package/fesm2022/lucca-front-ng-core-select.mjs.map +1 -1
  39. package/fesm2022/lucca-front-ng-core.mjs +3 -3
  40. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  41. package/fesm2022/lucca-front-ng-data-table.mjs +9 -4
  42. package/fesm2022/lucca-front-ng-data-table.mjs.map +1 -1
  43. package/fesm2022/lucca-front-ng-date.mjs +1 -1
  44. package/fesm2022/lucca-front-ng-date2.mjs +6 -6
  45. package/fesm2022/lucca-front-ng-date2.mjs.map +1 -1
  46. package/fesm2022/lucca-front-ng-department.mjs +1 -1
  47. package/fesm2022/lucca-front-ng-dialog.mjs +22 -25
  48. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  49. package/fesm2022/lucca-front-ng-empty-state.mjs +27 -68
  50. package/fesm2022/lucca-front-ng-empty-state.mjs.map +1 -1
  51. package/fesm2022/lucca-front-ng-establishment.mjs +1 -1
  52. package/fesm2022/lucca-front-ng-fancy-box.mjs +14 -28
  53. package/fesm2022/lucca-front-ng-fancy-box.mjs.map +1 -1
  54. package/fesm2022/lucca-front-ng-file-upload.mjs +1 -1
  55. package/fesm2022/lucca-front-ng-file-upload.mjs.map +1 -1
  56. package/fesm2022/lucca-front-ng-filter-pills.mjs +2 -2
  57. package/fesm2022/lucca-front-ng-form-field.mjs +2 -2
  58. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  59. package/fesm2022/lucca-front-ng-form.mjs +2 -2
  60. package/fesm2022/lucca-front-ng-form.mjs.map +1 -1
  61. package/fesm2022/lucca-front-ng-formly.mjs +1 -1
  62. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs +15 -17
  63. package/fesm2022/lucca-front-ng-forms-phone-number-input.mjs.map +1 -1
  64. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs +6 -6
  65. package/fesm2022/lucca-front-ng-forms-rich-text-input.mjs.map +1 -1
  66. package/fesm2022/lucca-front-ng-forms.mjs +101 -188
  67. package/fesm2022/lucca-front-ng-forms.mjs.map +1 -1
  68. package/fesm2022/lucca-front-ng-grid.mjs +20 -5
  69. package/fesm2022/lucca-front-ng-grid.mjs.map +1 -1
  70. package/fesm2022/lucca-front-ng-icon.mjs +14 -19
  71. package/fesm2022/lucca-front-ng-icon.mjs.map +1 -1
  72. package/fesm2022/lucca-front-ng-inline-message.mjs +15 -22
  73. package/fesm2022/lucca-front-ng-inline-message.mjs.map +1 -1
  74. package/fesm2022/lucca-front-ng-link.mjs +20 -28
  75. package/fesm2022/lucca-front-ng-link.mjs.map +1 -1
  76. package/fesm2022/lucca-front-ng-mobile-push.mjs +4 -8
  77. package/fesm2022/lucca-front-ng-mobile-push.mjs.map +1 -1
  78. package/fesm2022/lucca-front-ng-modal.mjs +1 -1
  79. package/fesm2022/lucca-front-ng-modal.mjs.map +1 -1
  80. package/fesm2022/lucca-front-ng-multi-select.mjs +6 -6
  81. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  82. package/fesm2022/lucca-front-ng-new-badge.mjs +7 -11
  83. package/fesm2022/lucca-front-ng-new-badge.mjs.map +1 -1
  84. package/fesm2022/lucca-front-ng-numeric-badge.mjs +40 -39
  85. package/fesm2022/lucca-front-ng-numeric-badge.mjs.map +1 -1
  86. package/fesm2022/lucca-front-ng-plg-push.mjs +8 -17
  87. package/fesm2022/lucca-front-ng-plg-push.mjs.map +1 -1
  88. package/fesm2022/lucca-front-ng-popover2.mjs +2 -2
  89. package/fesm2022/lucca-front-ng-popover2.mjs.map +1 -1
  90. package/fesm2022/lucca-front-ng-read-more.mjs +16 -12
  91. package/fesm2022/lucca-front-ng-read-more.mjs.map +1 -1
  92. package/fesm2022/lucca-front-ng-scroll.mjs +19 -29
  93. package/fesm2022/lucca-front-ng-scroll.mjs.map +1 -1
  94. package/fesm2022/lucca-front-ng-simple-select.mjs +3 -3
  95. package/fesm2022/lucca-front-ng-simple-select.mjs.map +1 -1
  96. package/fesm2022/lucca-front-ng-skeleton.mjs +34 -44
  97. package/fesm2022/lucca-front-ng-skeleton.mjs.map +1 -1
  98. package/fesm2022/lucca-front-ng-sortable-list.mjs +1 -1
  99. package/fesm2022/lucca-front-ng-tag.mjs +31 -42
  100. package/fesm2022/lucca-front-ng-tag.mjs.map +1 -1
  101. package/fesm2022/lucca-front-ng-time.mjs +8 -18
  102. package/fesm2022/lucca-front-ng-time.mjs.map +1 -1
  103. package/fesm2022/lucca-front-ng-toast.mjs +55 -60
  104. package/fesm2022/lucca-front-ng-toast.mjs.map +1 -1
  105. package/fesm2022/lucca-front-ng-tooltip.mjs +80 -107
  106. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  107. package/fesm2022/lucca-front-ng-user.mjs +45 -85
  108. package/fesm2022/lucca-front-ng-user.mjs.map +1 -1
  109. package/fesm2022/lucca-front-ng-vertical-navigation.mjs +6 -6
  110. package/fesm2022/lucca-front-ng-vertical-navigation.mjs.map +1 -1
  111. package/forms/index.d.ts +55 -62
  112. package/forms/phone-number-input/index.d.ts +13 -13
  113. package/grid/index.d.ts +9 -5
  114. package/icon/index.d.ts +10 -10
  115. package/inline-message/index.d.ts +9 -11
  116. package/link/index.d.ts +11 -13
  117. package/mobile-push/index.d.ts +5 -6
  118. package/new-badge/index.d.ts +2 -3
  119. package/numeric-badge/index.d.ts +14 -11
  120. package/package.json +27 -27
  121. package/plg-push/index.d.ts +6 -8
  122. package/read-more/index.d.ts +3 -1
  123. package/scroll/index.d.ts +20 -22
  124. package/skeleton/index.d.ts +27 -32
  125. package/tag/index.d.ts +17 -15
  126. package/time/index.d.ts +5 -5
  127. package/toast/index.d.ts +23 -25
  128. package/tooltip/index.d.ts +33 -41
  129. package/user/index.d.ts +17 -28
  130. package/vertical-navigation/index.d.ts +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-toast.mjs","sources":["../../../packages/ng/toast/translations.ts","../../../packages/ng/toast/toasts.translate.ts","../../../packages/ng/toast/toasts.model.ts","../../../packages/ng/toast/toasts.service.ts","../../../packages/ng/toast/toasts.component.ts","../../../packages/ng/toast/toasts.component.html","../../../packages/ng/toast/toasts.module.ts","../../../packages/ng/toast/public-api.ts","../../../packages/ng/toast/lucca-front-ng-toast.ts"],"sourcesContent":["export const Translations = {\n\tpt: {\n\t\tclose: 'Fechar',\n\t},\n\t'nl-BE': {\n\t\tclose: 'Sluiten',\n\t},\n\tnl: {\n\t\tclose: 'Sluiten',\n\t},\n\tit: {\n\t\tclose: 'Chiudere',\n\t},\n\tde: {\n\t\tclose: 'Schließen',\n\t},\n\tfr: {\n\t\tclose: 'Fermer',\n\t},\n\tes: {\n\t\tclose: 'Cerrar',\n\t},\n\ten: {\n\t\tclose: 'Close',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_TOAST_TRANSLATIONS = new InjectionToken('LuToastTranslations', {\n\tfactory: () => luToastTranslations,\n});\n\nexport interface ILuToastLabel {\n\tclose: string;\n}\n\nexport const luToastTranslations: LuTranslation<ILuToastLabel> = Translations;\n","import { PortalContent } from '@lucca-front/ng/core';\n\nexport type LuToastType = 'Info' | 'Error' | 'Success' | 'Warning';\n\nexport const defaultToastDuration = 5000;\n\nexport interface LuToastInput {\n\t/**\n\t * InnerHTML supported.\n\t */\n\tmessage: PortalContent;\n\t/**\n\t * Bold title.\n\t * InnerHTML not supported.\n\t */\n\ttitle?: string;\n\ttype?: LuToastType;\n\t/**\n\t * Auto kill default duration is 5000ms.\n\t * Null means manual dismiss only.\n\t */\n\tduration?: number | null;\n}\n\nexport interface LuToast extends LuToastInput {\n\tid: string;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { defaultToastDuration, LuToast, LuToastInput } from './toasts.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LuToastsService {\n\tpublic toasts$ = new BehaviorSubject<LuToast[]>([]);\n\n\tpublic addToast(toastInput: LuToastInput): LuToast {\n\t\tconst toast = this.getToast(toastInput);\n\n\t\tthis.toasts$.next([...this.toasts$.value, toast]);\n\n\t\treturn toast;\n\t}\n\n\tpublic removeToast(toast: LuToast): void {\n\t\tconst updatedToasts = this.toasts$.value.filter(({ id }) => id !== toast.id);\n\t\tthis.toasts$.next(updatedToasts);\n\t}\n\n\tpublic isOnlyDismissibleManually({ duration }: LuToastInput): boolean {\n\t\treturn duration === null;\n\t}\n\n\tprivate getToast(toastInput: LuToastInput): LuToast {\n\t\tconst id = this.generateId();\n\t\tconst duration = this.isOnlyDismissibleManually(toastInput) ? toastInput.duration : (toastInput.duration ?? defaultToastDuration);\n\n\t\treturn { ...toastInput, id, duration };\n\t}\n\n\tprivate generateId(): string {\n\t\tconst randomString = Math.random().toString(36).substring(2, 9);\n\t\treturn `_${randomString}`;\n\t}\n}\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, OnDestroy } from '@angular/core';\nimport { getIntl, PortalContent, PortalDirective } from '@lucca-front/ng/core';\nimport { merge, Observable, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { LuToast, LuToastInput, LuToastType } from './toasts.model';\nimport { LuToastsService } from './toasts.service';\nimport { LU_TOAST_TRANSLATIONS } from './toasts.translate';\n\n@Component({\n\tselector: 'lu-toasts',\n\ttemplateUrl: './toasts.component.html',\n\tstyleUrl: './toasts.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [AsyncPipe, PortalDirective],\n})\nexport class LuToastsComponent implements OnDestroy {\n\t@Input() public bottom = false;\n\t@Input() public set sources(sources: Array<Observable<LuToastInput>>) {\n\t\tmerge(...sources)\n\t\t\t.pipe(takeUntil(this.destroy$))\n\t\t\t.subscribe((toast) => this.toastsService.addToast(toast));\n\t}\n\n\tpublic toasts$ = this.toastsService.toasts$;\n\n\tprivate destroy$ = new Subject<void>();\n\n\tpublic intl = getIntl(LU_TOAST_TRANSLATIONS);\n\n\tconstructor(private toastsService: LuToastsService) {}\n\n\tpublic ngOnDestroy(): void {\n\t\tthis.destroy$.next();\n\t\tthis.destroy$.complete();\n\t}\n\n\tpublic iconClassByToastType: Record<LuToastType, string> = {\n\t\tInfo: 'icon-signInfo',\n\t\tSuccess: 'icon-signSuccess',\n\t\tError: 'icon-signError',\n\t\tWarning: 'icon-signWarning',\n\t};\n\n\tpublic paletteClassByToastType: Record<LuToastType, string> = {\n\t\tInfo: '',\n\t\tSuccess: 'palette-success',\n\t\tError: 'palette-error',\n\t\tWarning: 'palette-warning',\n\t};\n\n\tpublic isStringPortalContent(message: PortalContent): message is string {\n\t\treturn typeof message === 'string';\n\t}\n\n\tpublic removeToast(toast: LuToast): void {\n\t\tthis.toastsService.removeToast(toast);\n\t}\n\n\tpublic isOnlyDismissibleManually(toast: LuToast): boolean {\n\t\treturn this.toastsService.isOnlyDismissibleManually(toast);\n\t}\n}\n","<div class=\"toasts\" aria-live=\"polite\" [class.mod-bottom]=\"bottom\">\n\t@for (toast of toasts$ | async; track toast.id) {\n\t\t<div class=\"toasts-item\" [class]=\"paletteClassByToastType[toast.type]\">\n\t\t\t@if (toast.type) {\n\t\t\t\t<span class=\"toast-item-icon lucca-icon\" aria-hidden=\"true\" [class]=\"iconClassByToastType[toast.type]\"></span>\n\t\t\t}\n\t\t\t<div class=\"toast-item-content\">\n\t\t\t\t@if (toast.title) {\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<strong>{{ toast.title }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (isStringPortalContent(toast.message)) {\n\t\t\t\t\t<p class=\"toast-item-content-description\" [innerHtml]=\"toast.message\"></p>\n\t\t\t\t} @else {\n\t\t\t\t\t<ng-container *luPortal=\"toast.message\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"toasts-item-kill button\"\n\t\t\t\t(click)=\"removeToast(toast)\"\n\t\t\t\t(animationend)=\"!isOnlyDismissibleManually(toast) && toast.duration > 0 ? removeToast(toast) : null\"\n\t\t\t\t[style.animation-duration]=\"!isOnlyDismissibleManually(toast) && toast.duration > 0 ? toast.duration + 'ms' : null\"\n\t\t\t>\n\t\t\t\t<span class=\"lucca-icon icon-signClose\" aria-hidden=\"true\"></span>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.close }}</span>\n\t\t\t</button>\n\t\t</div>\n\t}\n</div>\n","import { NgModule } from '@angular/core';\nimport { LuToastsComponent } from './toasts.component';\n\n/**\n * @deprecated use `LuToastsComponent` instead\n */\n@NgModule({\n\timports: [LuToastsComponent],\n\texports: [LuToastsComponent],\n})\nexport class LuToastsModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toasts.component';\nexport * from './toasts.model';\nexport * from './toasts.module';\nexport * from './toasts.service';\nexport * from './toasts.translate';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LuToastsService"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-toast.mjs","sources":["../../../packages/ng/toast/toasts.model.ts","../../../packages/ng/toast/toasts.service.ts","../../../packages/ng/toast/translations.ts","../../../packages/ng/toast/toasts.translate.ts","../../../packages/ng/toast/toasts.component.ts","../../../packages/ng/toast/toasts.component.html","../../../packages/ng/toast/toasts.module.ts","../../../packages/ng/toast/public-api.ts","../../../packages/ng/toast/lucca-front-ng-toast.ts"],"sourcesContent":["import { PortalContent } from '@lucca-front/ng/core';\n\nexport type LuToastType = 'Info' | 'Error' | 'Success' | 'Warning';\n\nexport const defaultToastDuration = 5000;\n\nexport interface LuToastInput {\n\t/**\n\t * InnerHTML supported.\n\t */\n\tmessage: PortalContent;\n\t/**\n\t * Bold title.\n\t * InnerHTML not supported.\n\t */\n\ttitle?: string;\n\ttype?: LuToastType;\n\t/**\n\t * Auto kill default duration is 5000ms.\n\t * Null means manual dismiss only.\n\t */\n\tduration?: number | null;\n}\n\nexport interface LuToast extends LuToastInput {\n\tid: string;\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { defaultToastDuration, LuToast, LuToastInput } from './toasts.model';\n\n@Injectable({ providedIn: 'root' })\nexport class LuToastsService {\n\tpublic toasts$ = new BehaviorSubject<LuToast[]>([]);\n\n\tpublic addToast(toastInput: LuToastInput): LuToast {\n\t\tconst toast = this.getToast(toastInput);\n\n\t\tthis.toasts$.next([...this.toasts$.value, toast]);\n\n\t\treturn toast;\n\t}\n\n\tpublic removeToast(toast: LuToast): void {\n\t\tconst updatedToasts = this.toasts$.value.filter(({ id }) => id !== toast.id);\n\t\tthis.toasts$.next(updatedToasts);\n\t}\n\n\tpublic isOnlyDismissibleManually({ duration }: LuToastInput): boolean {\n\t\treturn duration === null;\n\t}\n\n\tprivate getToast(toastInput: LuToastInput): LuToast {\n\t\tconst id = this.generateId();\n\t\tconst duration = this.isOnlyDismissibleManually(toastInput) ? toastInput.duration : (toastInput.duration ?? defaultToastDuration);\n\n\t\treturn { ...toastInput, id, duration };\n\t}\n\n\tprivate generateId(): string {\n\t\tconst randomString = Math.random().toString(36).substring(2, 9);\n\t\treturn `_${randomString}`;\n\t}\n}\n","export const Translations = {\n\tpt: {\n\t\tclose: 'Fechar',\n\t},\n\t'nl-BE': {\n\t\tclose: 'Sluiten',\n\t},\n\tnl: {\n\t\tclose: 'Sluiten',\n\t},\n\tit: {\n\t\tclose: 'Chiudere',\n\t},\n\tde: {\n\t\tclose: 'Schließen',\n\t},\n\tfr: {\n\t\tclose: 'Fermer',\n\t},\n\tes: {\n\t\tclose: 'Cerrar',\n\t},\n\ten: {\n\t\tclose: 'Close',\n\t},\n};\n","import { InjectionToken } from '@angular/core';\nimport { LuTranslation } from '@lucca-front/ng/core';\nimport { Translations } from './translations';\n\nexport const LU_TOAST_TRANSLATIONS = new InjectionToken('LuToastTranslations', {\n\tfactory: () => luToastTranslations,\n});\n\nexport interface ILuToastLabel {\n\tclose: string;\n}\n\nexport const luToastTranslations: LuTranslation<ILuToastLabel> = Translations;\n","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, inject, input } from '@angular/core';\nimport { getIntl, isNotNil, PortalContent, PortalDirective, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { merge, Observable } from 'rxjs';\nimport { LuToast, LuToastInput, LuToastType } from './toasts.model';\nimport { LuToastsService } from './toasts.service';\nimport { LU_TOAST_TRANSLATIONS } from './toasts.translate';\n\n@Component({\n\tselector: 'lu-toasts',\n\ttemplateUrl: './toasts.component.html',\n\tstyleUrl: './toasts.component.scss',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [AsyncPipe, PortalDirective],\n})\nexport class LuToastsComponent {\n\treadonly #toastsService = inject(LuToastsService);\n\n\treadonly bottom = input(false);\n\treadonly sources = input<Array<Observable<LuToastInput>>>();\n\n\tconstructor() {\n\t\tɵeffectWithDeps([this.sources], (sources, onCleanup) => {\n\t\t\tif (isNotNil(sources)) {\n\t\t\t\tconst sub = merge(...sources).subscribe((toast) => this.#toastsService.addToast(toast));\n\n\t\t\t\tonCleanup(() => {\n\t\t\t\t\tsub.unsubscribe();\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\n\treadonly toasts$ = this.#toastsService.toasts$;\n\n\treadonly intl = getIntl(LU_TOAST_TRANSLATIONS);\n\n\treadonly iconClassByToastType: Record<LuToastType, string> = {\n\t\tInfo: 'icon-signInfo',\n\t\tSuccess: 'icon-signSuccess',\n\t\tError: 'icon-signError',\n\t\tWarning: 'icon-signWarning',\n\t};\n\n\treadonly paletteClassByToastType: Record<LuToastType, string> = {\n\t\tInfo: '',\n\t\tSuccess: 'palette-success',\n\t\tError: 'palette-error',\n\t\tWarning: 'palette-warning',\n\t};\n\n\tisStringPortalContent(message: PortalContent): message is string {\n\t\treturn typeof message === 'string';\n\t}\n\n\tremoveToast(toast: LuToast): void {\n\t\tthis.#toastsService.removeToast(toast);\n\t}\n\n\tisOnlyDismissibleManually(toast: LuToast): boolean {\n\t\treturn this.#toastsService.isOnlyDismissibleManually(toast);\n\t}\n}\n","<div class=\"toasts\" aria-live=\"polite\" [class.mod-bottom]=\"bottom()\">\n\t@for (toast of toasts$ | async; track toast.id) {\n\t\t<div class=\"toasts-item\" [class]=\"paletteClassByToastType[toast.type]\">\n\t\t\t@if (toast.type) {\n\t\t\t\t<span class=\"toast-item-icon lucca-icon\" aria-hidden=\"true\" [class]=\"iconClassByToastType[toast.type]\"></span>\n\t\t\t}\n\t\t\t<div class=\"toast-item-content\">\n\t\t\t\t@if (toast.title) {\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<strong>{{ toast.title }}</strong>\n\t\t\t\t\t</div>\n\t\t\t\t}\n\t\t\t\t@if (isStringPortalContent(toast.message)) {\n\t\t\t\t\t<p class=\"toast-item-content-description\" [innerHtml]=\"toast.message\"></p>\n\t\t\t\t} @else {\n\t\t\t\t\t<ng-container *luPortal=\"toast.message\" />\n\t\t\t\t}\n\t\t\t</div>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"toasts-item-kill button\"\n\t\t\t\t(click)=\"removeToast(toast)\"\n\t\t\t\t(animationend)=\"!isOnlyDismissibleManually(toast) && toast.duration > 0 ? removeToast(toast) : null\"\n\t\t\t\t[style.animation-duration]=\"!isOnlyDismissibleManually(toast) && toast.duration > 0 ? toast.duration + 'ms' : null\"\n\t\t\t>\n\t\t\t\t<span class=\"lucca-icon icon-signClose\" aria-hidden=\"true\"></span>\n\t\t\t\t<span class=\"pr-u-mask\">{{ intl.close }}</span>\n\t\t\t</button>\n\t\t</div>\n\t}\n</div>\n","import { NgModule } from '@angular/core';\nimport { LuToastsComponent } from './toasts.component';\n\n/**\n * @deprecated use `LuToastsComponent` instead\n */\n@NgModule({\n\timports: [LuToastsComponent],\n\texports: [LuToastsComponent],\n})\nexport class LuToastsModule {}\n","/*\n * Public API Surface of toast\n */\n\nexport * from './toasts.component';\nexport * from './toasts.model';\nexport * from './toasts.module';\nexport * from './toasts.service';\nexport * from './toasts.translate';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ɵeffectWithDeps"],"mappings":"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"}
@@ -1,12 +1,13 @@
1
1
  import { trigger, state, transition, style, animate } from '@angular/animations';
2
- import { NgClass, DOCUMENT } from '@angular/common';
3
2
  import * as i0 from '@angular/core';
4
- import { inject, DestroyRef, HostBinding, HostListener, ChangeDetectionStrategy, Component, NgModule, Injectable, ElementRef, Renderer2, NgZone, input, booleanAttribute, computed, effect, signal, numberAttribute, Input, Directive } from '@angular/core';
5
- import { Subject, timer, shareReplay, filter, firstValueFrom, BehaviorSubject, Observable, combineLatest, switchMap, merge, startWith } from 'rxjs';
3
+ import { inject, DestroyRef, signal, ChangeDetectionStrategy, Component, NgModule, Injectable, ElementRef, Renderer2, NgZone, Injector, input, numberAttribute, booleanAttribute, computed, linkedSignal, effect, Directive } from '@angular/core';
4
+ import { Subject, timer, shareReplay, filter, firstValueFrom, Observable, combineLatest, switchMap, startWith } from 'rxjs';
6
5
  import { Overlay, OverlayModule } from '@angular/cdk/overlay';
7
6
  import { ComponentPortal } from '@angular/cdk/portal';
8
7
  import { toObservable, toSignal, takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
- import { debounceTime, filter as filter$1, map, debounce } from 'rxjs/operators';
8
+ import { isNotNil, ɵeffectWithDeps as _effectWithDeps } from '@lucca-front/ng/core';
9
+ import { debounceTime, filter as filter$1, debounce, tap, map } from 'rxjs/operators';
10
+ import { DOCUMENT } from '@angular/common';
10
11
 
11
12
  const luTransformTooltip = trigger('transformTooltip', [
12
13
  state('enter', style({
@@ -28,40 +29,30 @@ class LuTooltipPanelComponent {
28
29
  this.destroyRef = inject(DestroyRef);
29
30
  this.mouseEnter$ = new Subject();
30
31
  this.mouseLeave$ = new Subject();
31
- this.contentPositionClasses = {};
32
- }
33
- mouseEnter() {
34
- this.mouseEnter$.next();
35
- }
36
- mouseLeave() {
37
- this.mouseLeave$.next();
32
+ this.content = signal(null);
33
+ this.id = signal(null);
34
+ this.contentPositionClasses = signal({});
38
35
  }
39
36
  setPanelPosition(posX, posY) {
40
- this.contentPositionClasses = {
37
+ this.contentPositionClasses.set({
41
38
  'is-before': posX === 'end',
42
39
  'is-after': posX === 'start',
43
40
  'is-above': posY === 'bottom',
44
41
  'is-below': posY === 'top',
45
- };
42
+ });
46
43
  }
47
44
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTooltipPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.0.2", type: LuTooltipPanelComponent, isStandalone: true, selector: "lu-tooltip-panel", host: { attributes: { "role": "tooltip" }, listeners: { "mouseenter": "mouseEnter()", "mouseleave": "mouseLeave()" }, properties: { "attr.id": "this.id" } }, ngImport: i0, template: "<div class=\"tooltip\" [class]=\"contentPositionClasses\" [innerHtml]=\"content()\"></div>\n", styles: ["@layer components{.tooltip{--components-tooltip-background-color: var(--palettes-neutral-900);--components-tooltip-color: var(--pr-t-color-text-reverse);--components-tooltip-max-width: 15rem;--components-tooltip-transformOrigin: center;--components-tooltip-margin: 0;background-color:var(--components-tooltip-background-color);color:var(--components-tooltip-color);padding-block:var(--pr-t-spacings-50);padding-inline:var(--pr-t-spacings-100);max-inline-size:var(--components-tooltip-max-width);border-radius:var(--pr-t-border-radius-default);font:var(--pr-t-font-body-XS);transform-origin:var(--components-tooltip-transformOrigin);margin:var(--components-tooltip-margin);text-align:center;inline-size:fit-content;animation-name:scaleIn;animation-duration:var(--commons-animations-durations-fast);animation-iteration-count:1;overflow-wrap:break-word}@keyframes scaleIn{0%{transform:scale(0)}to{transform:scale(1)}}.tooltip:empty{display:none}@supports (background-image: -webkit-named-image(i)){@media (hover: hover){[luTooltipWhenEllipsis]:after{content:\"\";display:block}}}}@layer mods{.tooltip.is-above{--components-tooltip-transformOrigin: bottom center}.tooltip.is-below{--components-tooltip-transformOrigin: top center}.tooltip.is-before{--components-tooltip-transformOrigin: center right}.tooltip.is-before.is-above{--components-tooltip-transformOrigin: bottom right}.tooltip.is-before.is-below{--components-tooltip-transformOrigin: top right}.tooltip.is-after{--components-tooltip-transformOrigin: center left}.tooltip.is-after.is-above{--components-tooltip-transformOrigin: bottom left}.tooltip.is-after.is-below{--components-tooltip-transformOrigin: top left}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.2", type: LuTooltipPanelComponent, isStandalone: true, selector: "lu-tooltip-panel", host: { attributes: { "role": "tooltip" }, listeners: { "mouseenter": "mouseEnter$.next()", "mouseleave": "mouseLeave$.next()" }, properties: { "attr.id": "id" } }, ngImport: i0, template: "@if (content(); as content) {\n\t<div class=\"tooltip\" [class]=\"contentPositionClasses()\" [innerHtml]=\"content\"></div>\n}\n", styles: ["@layer components{.tooltip{--components-tooltip-background-color: var(--palettes-neutral-900);--components-tooltip-color: var(--pr-t-color-text-reverse);--components-tooltip-max-width: 15rem;--components-tooltip-transformOrigin: center;--components-tooltip-margin: 0;background-color:var(--components-tooltip-background-color);color:var(--components-tooltip-color);padding-block:var(--pr-t-spacings-50);padding-inline:var(--pr-t-spacings-100);max-inline-size:var(--components-tooltip-max-width);border-radius:var(--pr-t-border-radius-default);font:var(--pr-t-font-body-XS);transform-origin:var(--components-tooltip-transformOrigin);margin:var(--components-tooltip-margin);text-align:center;inline-size:fit-content;animation-name:scaleIn;animation-duration:var(--commons-animations-durations-fast);animation-iteration-count:1;overflow-wrap:break-word}@keyframes scaleIn{0%{transform:scale(0)}to{transform:scale(1)}}.tooltip:empty{display:none}@supports (background-image: -webkit-named-image(i)){@media (hover: hover){[luTooltipWhenEllipsis]:after{content:\"\";display:block}}}}@layer mods{.tooltip.is-above{--components-tooltip-transformOrigin: bottom center}.tooltip.is-below{--components-tooltip-transformOrigin: top center}.tooltip.is-before{--components-tooltip-transformOrigin: center right}.tooltip.is-before.is-above{--components-tooltip-transformOrigin: bottom right}.tooltip.is-before.is-below{--components-tooltip-transformOrigin: top right}.tooltip.is-after{--components-tooltip-transformOrigin: center left}.tooltip.is-after.is-above{--components-tooltip-transformOrigin: bottom left}.tooltip.is-after.is-below{--components-tooltip-transformOrigin: top left}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
49
46
  }
50
47
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTooltipPanelComponent, decorators: [{
51
48
  type: Component,
52
49
  args: [{ selector: 'lu-tooltip-panel', host: {
53
50
  role: 'tooltip',
54
- }, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgClass], template: "<div class=\"tooltip\" [class]=\"contentPositionClasses\" [innerHtml]=\"content()\"></div>\n", styles: ["@layer components{.tooltip{--components-tooltip-background-color: var(--palettes-neutral-900);--components-tooltip-color: var(--pr-t-color-text-reverse);--components-tooltip-max-width: 15rem;--components-tooltip-transformOrigin: center;--components-tooltip-margin: 0;background-color:var(--components-tooltip-background-color);color:var(--components-tooltip-color);padding-block:var(--pr-t-spacings-50);padding-inline:var(--pr-t-spacings-100);max-inline-size:var(--components-tooltip-max-width);border-radius:var(--pr-t-border-radius-default);font:var(--pr-t-font-body-XS);transform-origin:var(--components-tooltip-transformOrigin);margin:var(--components-tooltip-margin);text-align:center;inline-size:fit-content;animation-name:scaleIn;animation-duration:var(--commons-animations-durations-fast);animation-iteration-count:1;overflow-wrap:break-word}@keyframes scaleIn{0%{transform:scale(0)}to{transform:scale(1)}}.tooltip:empty{display:none}@supports (background-image: -webkit-named-image(i)){@media (hover: hover){[luTooltipWhenEllipsis]:after{content:\"\";display:block}}}}@layer mods{.tooltip.is-above{--components-tooltip-transformOrigin: bottom center}.tooltip.is-below{--components-tooltip-transformOrigin: top center}.tooltip.is-before{--components-tooltip-transformOrigin: center right}.tooltip.is-before.is-above{--components-tooltip-transformOrigin: bottom right}.tooltip.is-before.is-below{--components-tooltip-transformOrigin: top right}.tooltip.is-after{--components-tooltip-transformOrigin: center left}.tooltip.is-after.is-above{--components-tooltip-transformOrigin: bottom left}.tooltip.is-after.is-below{--components-tooltip-transformOrigin: top left}}\n"] }]
55
- }], propDecorators: { mouseEnter: [{
56
- type: HostListener,
57
- args: ['mouseenter']
58
- }], mouseLeave: [{
59
- type: HostListener,
60
- args: ['mouseleave']
61
- }], id: [{
62
- type: HostBinding,
63
- args: ['attr.id']
64
- }] } });
51
+ '[attr.id]': 'id',
52
+ '(mouseenter)': 'mouseEnter$.next()',
53
+ '(mouseleave)': 'mouseLeave$.next()',
54
+ }, changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (content(); as content) {\n\t<div class=\"tooltip\" [class]=\"contentPositionClasses()\" [innerHtml]=\"content\"></div>\n}\n", styles: ["@layer components{.tooltip{--components-tooltip-background-color: var(--palettes-neutral-900);--components-tooltip-color: var(--pr-t-color-text-reverse);--components-tooltip-max-width: 15rem;--components-tooltip-transformOrigin: center;--components-tooltip-margin: 0;background-color:var(--components-tooltip-background-color);color:var(--components-tooltip-color);padding-block:var(--pr-t-spacings-50);padding-inline:var(--pr-t-spacings-100);max-inline-size:var(--components-tooltip-max-width);border-radius:var(--pr-t-border-radius-default);font:var(--pr-t-font-body-XS);transform-origin:var(--components-tooltip-transformOrigin);margin:var(--components-tooltip-margin);text-align:center;inline-size:fit-content;animation-name:scaleIn;animation-duration:var(--commons-animations-durations-fast);animation-iteration-count:1;overflow-wrap:break-word}@keyframes scaleIn{0%{transform:scale(0)}to{transform:scale(1)}}.tooltip:empty{display:none}@supports (background-image: -webkit-named-image(i)){@media (hover: hover){[luTooltipWhenEllipsis]:after{content:\"\";display:block}}}}@layer mods{.tooltip.is-above{--components-tooltip-transformOrigin: bottom center}.tooltip.is-below{--components-tooltip-transformOrigin: top center}.tooltip.is-before{--components-tooltip-transformOrigin: center right}.tooltip.is-before.is-above{--components-tooltip-transformOrigin: bottom right}.tooltip.is-before.is-below{--components-tooltip-transformOrigin: top right}.tooltip.is-after{--components-tooltip-transformOrigin: center left}.tooltip.is-after.is-above{--components-tooltip-transformOrigin: bottom left}.tooltip.is-after.is-below{--components-tooltip-transformOrigin: top left}}\n"] }]
55
+ }] });
65
56
 
66
57
  /**
67
58
  * @deprecated use `LuTooltipPanelComponent` instead
@@ -192,51 +183,43 @@ class LuTooltipTriggerDirective {
192
183
  #renderer;
193
184
  #ruler;
194
185
  #zone;
186
+ #injector;
195
187
  #destroyRef;
196
- #openDelay$;
197
- set luTooltipEnterDelay(delay) {
198
- this.#openDelay$.next(delay);
199
- }
200
- #closeDelay$;
201
- set luTooltipLeaveDelay(delay) {
202
- this.#closeDelay$.next(delay);
203
- }
204
188
  #hasEllipsis$;
205
189
  #hasEllipsis;
190
+ #action;
191
+ #realAction;
206
192
  onMouseEnter() {
207
- this.open$.next();
193
+ this.#action.set('open');
208
194
  }
209
195
  onMouseLeave() {
210
- this.close$.next();
196
+ this.#action.set('close');
211
197
  }
212
198
  onFocus() {
213
199
  if (this.#host.nativeElement.getAttribute('aria-expanded') !== 'true') {
214
- this.open$.next();
200
+ this.#action.set('open');
215
201
  }
216
202
  }
217
203
  onBlur() {
218
- this.close$.next();
204
+ this.#action.set('close');
219
205
  }
220
206
  #generatedId;
221
- get ariaDescribedBy() {
222
- if (this.luTooltipDisabled() || this.luTooltipWhenEllipsis() || this.luTooltipOnlyForDisplay) {
223
- return null;
224
- }
225
- return `${this.#generatedId}-panel`;
226
- }
207
+ #effectRef;
208
+ #idEffectRef;
227
209
  constructor() {
228
210
  this.#overlay = inject(Overlay);
229
211
  this.#host = inject(ElementRef);
230
212
  this.#renderer = inject(Renderer2);
231
213
  this.#ruler = inject(EllipsisRuler);
232
214
  this.#zone = inject(NgZone, { optional: true });
215
+ this.#injector = inject(Injector);
233
216
  this.#destroyRef = inject(DestroyRef);
234
217
  this.luTooltip = input();
235
- this.#openDelay$ = new BehaviorSubject(300);
236
- this.#closeDelay$ = new BehaviorSubject(100);
218
+ this.luTooltipEnterDelay = input(300, { transform: numberAttribute });
219
+ this.luTooltipLeaveDelay = input(100, { transform: numberAttribute });
237
220
  this.luTooltipDisabled = input(false, { transform: booleanAttribute });
238
- this.luTooltipOnlyForDisplay = false;
239
- this.luTooltipPosition = 'above';
221
+ this.luTooltipOnlyForDisplay = input(false, { transform: booleanAttribute });
222
+ this.luTooltipPosition = input('above');
240
223
  this.luTooltipWhenEllipsis = input(false, { transform: booleanAttribute });
241
224
  this.luTooltipAnchor = input(this.#host);
242
225
  this.resize$ = new Observable((observer) => {
@@ -260,36 +243,44 @@ class LuTooltipTriggerDirective {
260
243
  // 3. Check for ellipsis
261
244
  switchMap(() => this.runOutsideZoneJS(() => this.#ruler.hasEllipsis(this.#host.nativeElement))));
262
245
  this.#hasEllipsis = toSignal(this.#hasEllipsis$, { initialValue: false });
263
- this.open$ = new Subject();
264
- this.close$ = new Subject();
265
- this.#generatedId = `${this.#host.nativeElement.tagName.toLowerCase()}-tooltip-${nextId++}`;
266
- combineLatest([this.#openDelay$, this.#closeDelay$])
267
- .pipe(switchMap(([openDelay, closeDelay]) => {
268
- // We only filter open events because even if it's disabled while opened,
269
- // we want the tooltip to be able to close itself no matter what
270
- const openEvents$ = this.open$.pipe(filter$1(() => {
246
+ this.#action = signal(null);
247
+ this.#realAction = linkedSignal({
248
+ source: this.#action,
249
+ computation: (action, previous) => {
250
+ if (!action || action === 'close') {
251
+ return action;
252
+ }
253
+ // We only filter open events because even if it's disabled while opened,
254
+ // we want the tooltip to be able to close itself no matter what
271
255
  if (this.luTooltipDisabled()) {
272
- return false;
256
+ return previous.value;
273
257
  }
274
258
  // If not disabled, let's check for ellipsis if needed
275
259
  if (this.luTooltipWhenEllipsis()) {
276
- return this.#hasEllipsis();
260
+ return this.#hasEllipsis() ? 'open' : previous.value;
277
261
  }
278
262
  // If it's not disabled and is not triggered based on ellipsis, just return true
279
- return true;
280
- }), map(() => 'open'));
281
- return merge(openEvents$, this.close$.pipe(map(() => 'close'))).pipe(debounce((event) => {
282
- return timer(event === 'open' ? openDelay : closeDelay);
283
- }));
284
- }), takeUntilDestroyed(this.#destroyRef))
285
- .subscribe((event) => {
263
+ return 'open';
264
+ },
265
+ });
266
+ this.#generatedId = `${this.#host.nativeElement.tagName.toLowerCase()}-tooltip-${nextId++}`;
267
+ this.id = signal(this.#host.nativeElement.id || this.#generatedId);
268
+ this.ariaDescribedBy = computed(() => {
269
+ if (this.luTooltipDisabled() || this.luTooltipWhenEllipsis() || this.luTooltipOnlyForDisplay()) {
270
+ return null;
271
+ }
272
+ return `${this.id()}-panel`;
273
+ });
274
+ toObservable(this.#realAction)
275
+ .pipe(filter$1(isNotNil), debounce((action) => timer(action === 'open' ? this.luTooltipEnterDelay() : this.luTooltipLeaveDelay())), tap((event) => {
286
276
  if (event === 'open') {
287
277
  this.openTooltip();
288
278
  }
289
279
  else {
290
280
  this.closeTooltip();
291
281
  }
292
- });
282
+ }), takeUntilDestroyed())
283
+ .subscribe();
293
284
  effect(() => {
294
285
  if (!this.luTooltipDisabled() && (!this.luTooltipWhenEllipsis() || this.#hasEllipsis())) {
295
286
  this.setAccessibilityProperties(0);
@@ -321,25 +312,31 @@ class LuTooltipTriggerDirective {
321
312
  ref.instance.setPanelPosition(overlayX, overlayY);
322
313
  });
323
314
  if (this.luTooltip()) {
324
- ref.instance.content = this.luTooltip;
315
+ this.#effectRef = _effectWithDeps([this.luTooltip], (luTooltip) => {
316
+ ref.instance.content.set(luTooltip);
317
+ }, { injector: this.#injector });
325
318
  }
326
319
  else if (this.luTooltipWhenEllipsis()) {
327
- ref.instance.content = signal(this.#host.nativeElement.innerText);
320
+ ref.instance.content.set(this.#host.nativeElement.innerText);
328
321
  }
329
322
  else {
330
- ref.instance.content = signal('');
323
+ ref.instance.content.set('');
331
324
  }
332
- ref.instance.id = this.ariaDescribedBy;
325
+ this.#idEffectRef = _effectWithDeps([this.ariaDescribedBy], (ariaDescribedBy) => {
326
+ ref.instance.id.set(ariaDescribedBy);
327
+ }, { injector: this.#injector });
333
328
  // On tooltip leave => trigger close
334
- ref.instance.mouseLeave$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.close$.next());
329
+ ref.instance.mouseLeave$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.#action.set('close'));
335
330
  // On tooltip enter => trigger open to keep it opened
336
- ref.instance.mouseEnter$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.open$.next());
331
+ ref.instance.mouseEnter$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.#action.set('open'));
337
332
  }
338
333
  closeTooltip() {
339
334
  if (this.overlayRef) {
340
335
  this.overlayRef.detach();
341
336
  delete this.overlayRef;
342
337
  }
338
+ this.#effectRef?.destroy();
339
+ this.#idEffectRef?.destroy();
343
340
  }
344
341
  setAccessibilityProperties(tabindex) {
345
342
  if (tabindex === null) {
@@ -353,13 +350,10 @@ class LuTooltipTriggerDirective {
353
350
  if (!isNativelyFocusableTag && !hasATabIndex) {
354
351
  this.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());
355
352
  }
356
- if (!isNativelyFocusableTag && !this.luTooltipWhenEllipsis() && !this.luTooltipOnlyForDisplay) {
353
+ if (!isNativelyFocusableTag && !this.luTooltipWhenEllipsis() && !this.luTooltipOnlyForDisplay()) {
357
354
  this.#renderer.setAttribute(this.#host.nativeElement, 'role', 'button');
358
355
  }
359
356
  }
360
- ngAfterContentInit() {
361
- this._id = this.#host.nativeElement.id || this.#generatedId;
362
- }
363
357
  runOutsideZoneJS(callback) {
364
358
  return this.#zone ? this.#zone.runOutsideAngular(callback) : callback();
365
359
  }
@@ -374,7 +368,7 @@ class LuTooltipTriggerDirective {
374
368
  originY: 'top',
375
369
  };
376
370
  // Position
377
- const position = this.luTooltipPosition;
371
+ const position = this.luTooltipPosition();
378
372
  if (position === 'above') {
379
373
  connectionPosition.originY = 'top';
380
374
  }
@@ -455,44 +449,23 @@ class LuTooltipTriggerDirective {
455
449
  return x;
456
450
  }
457
451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTooltipTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
458
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: LuTooltipTriggerDirective, isStandalone: true, selector: "[luTooltip]", inputs: { luTooltip: { classPropertyName: "luTooltip", publicName: "luTooltip", isSignal: true, isRequired: false, transformFunction: null }, luTooltipEnterDelay: { classPropertyName: "luTooltipEnterDelay", publicName: "luTooltipEnterDelay", isSignal: false, isRequired: false, transformFunction: numberAttribute }, luTooltipLeaveDelay: { classPropertyName: "luTooltipLeaveDelay", publicName: "luTooltipLeaveDelay", isSignal: false, isRequired: false, transformFunction: numberAttribute }, luTooltipDisabled: { classPropertyName: "luTooltipDisabled", publicName: "luTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, luTooltipOnlyForDisplay: { classPropertyName: "luTooltipOnlyForDisplay", publicName: "luTooltipOnlyForDisplay", isSignal: false, isRequired: false, transformFunction: booleanAttribute }, luTooltipPosition: { classPropertyName: "luTooltipPosition", publicName: "luTooltipPosition", isSignal: false, isRequired: false, transformFunction: null }, luTooltipWhenEllipsis: { classPropertyName: "luTooltipWhenEllipsis", publicName: "luTooltipWhenEllipsis", isSignal: true, isRequired: false, transformFunction: null }, luTooltipAnchor: { classPropertyName: "luTooltipAnchor", publicName: "luTooltipAnchor", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "attr.id": "this._id", "attr.aria-describedby": "this.ariaDescribedBy" } }, exportAs: ["luTooltip"], ngImport: i0 }); }
452
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "20.0.2", type: LuTooltipTriggerDirective, isStandalone: true, selector: "[luTooltip]", inputs: { luTooltip: { classPropertyName: "luTooltip", publicName: "luTooltip", isSignal: true, isRequired: false, transformFunction: null }, luTooltipEnterDelay: { classPropertyName: "luTooltipEnterDelay", publicName: "luTooltipEnterDelay", isSignal: true, isRequired: false, transformFunction: null }, luTooltipLeaveDelay: { classPropertyName: "luTooltipLeaveDelay", publicName: "luTooltipLeaveDelay", isSignal: true, isRequired: false, transformFunction: null }, luTooltipDisabled: { classPropertyName: "luTooltipDisabled", publicName: "luTooltipDisabled", isSignal: true, isRequired: false, transformFunction: null }, luTooltipOnlyForDisplay: { classPropertyName: "luTooltipOnlyForDisplay", publicName: "luTooltipOnlyForDisplay", isSignal: true, isRequired: false, transformFunction: null }, luTooltipPosition: { classPropertyName: "luTooltipPosition", publicName: "luTooltipPosition", isSignal: true, isRequired: false, transformFunction: null }, luTooltipWhenEllipsis: { classPropertyName: "luTooltipWhenEllipsis", publicName: "luTooltipWhenEllipsis", isSignal: true, isRequired: false, transformFunction: null }, luTooltipAnchor: { classPropertyName: "luTooltipAnchor", publicName: "luTooltipAnchor", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "mouseenter": "onMouseEnter()", "mouseleave": "onMouseLeave()", "focus": "onFocus()", "blur": "onBlur()" }, properties: { "attr.aria-describedby": "ariaDescribedBy()", "attr.id": "id()" } }, exportAs: ["luTooltip"], ngImport: i0 }); }
459
453
  }
460
454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: LuTooltipTriggerDirective, decorators: [{
461
455
  type: Directive,
462
456
  args: [{
463
457
  selector: '[luTooltip]',
464
458
  exportAs: 'luTooltip',
459
+ host: {
460
+ '[attr.aria-describedby]': 'ariaDescribedBy()',
461
+ '[attr.id]': 'id()',
462
+ '(mouseenter)': 'onMouseEnter()',
463
+ '(mouseleave)': 'onMouseLeave()',
464
+ '(focus)': 'onFocus()',
465
+ '(blur)': 'onBlur()',
466
+ },
465
467
  }]
466
- }], ctorParameters: () => [], propDecorators: { luTooltipEnterDelay: [{
467
- type: Input,
468
- args: [{ transform: numberAttribute }]
469
- }], luTooltipLeaveDelay: [{
470
- type: Input,
471
- args: [{ transform: numberAttribute }]
472
- }], luTooltipOnlyForDisplay: [{
473
- type: Input,
474
- args: [{ transform: booleanAttribute }]
475
- }], luTooltipPosition: [{
476
- type: Input
477
- }], onMouseEnter: [{
478
- type: HostListener,
479
- args: ['mouseenter']
480
- }], onMouseLeave: [{
481
- type: HostListener,
482
- args: ['mouseleave']
483
- }], onFocus: [{
484
- type: HostListener,
485
- args: ['focus']
486
- }], onBlur: [{
487
- type: HostListener,
488
- args: ['blur']
489
- }], _id: [{
490
- type: HostBinding,
491
- args: ['attr.id']
492
- }], ariaDescribedBy: [{
493
- type: HostBinding,
494
- args: ['attr.aria-describedby']
495
- }] } });
468
+ }], ctorParameters: () => [] });
496
469
 
497
470
  /**
498
471
  * @deprecated use `LuTooltipTriggerDirective, OverlayModule` instead
@@ -1 +1 @@
1
- {"version":3,"file":"lucca-front-ng-tooltip.mjs","sources":["../../../packages/ng/tooltip/animation/tooltip.animation.ts","../../../packages/ng/tooltip/panel/tooltip-panel.component.ts","../../../packages/ng/tooltip/panel/tooltip-panel.component.html","../../../packages/ng/tooltip/panel/tooltip-panel.module.ts","../../../packages/ng/tooltip/trigger/ellipsis.ruler.ts","../../../packages/ng/tooltip/trigger/tooltip-trigger.directive.ts","../../../packages/ng/tooltip/trigger/tooltip-trigger.module.ts","../../../packages/ng/tooltip/tooltip.module.ts","../../../packages/ng/tooltip/lucca-front-ng-tooltip.ts"],"sourcesContent":["import { trigger, state, style, animate, transition, AnimationTriggerMetadata } from '@angular/animations';\n\nexport const luTransformTooltip: AnimationTriggerMetadata = trigger('transformTooltip', [\n\tstate(\n\t\t'enter',\n\t\tstyle({\n\t\t\topacity: 1,\n\t\t\ttransform: `scale(1)`,\n\t\t}),\n\t),\n\ttransition('void => *', [\n\t\tstyle({\n\t\t\topacity: 0,\n\t\t\ttransform: `scale(0)`,\n\t\t}),\n\t\tanimate(`150ms cubic-bezier(0.25, 0.8, 0.25, 1)`),\n\t]),\n\ttransition('* => void', [animate('50ms 100ms linear', style({ opacity: 0 }))]),\n]);\n","import { HorizontalConnectionPos, VerticalConnectionPos } from '@angular/cdk/overlay';\nimport { NgClass } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, DestroyRef, HostBinding, HostListener, inject, Signal } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\n\n@Component({\n\tselector: 'lu-tooltip-panel',\n\ttemplateUrl: './tooltip-panel.component.html',\n\tstyleUrl: './tooltip-panel.component.scss',\n\thost: {\n\t\trole: 'tooltip',\n\t},\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\timports: [NgClass],\n})\nexport class LuTooltipPanelComponent {\n\tdestroyRef = inject(DestroyRef);\n\n\tmouseEnter$ = new Subject<void>();\n\n\t@HostListener('mouseenter')\n\tmouseEnter(): void {\n\t\tthis.mouseEnter$.next();\n\t}\n\n\tmouseLeave$ = new Subject<void>();\n\n\t@HostListener('mouseleave')\n\tmouseLeave(): void {\n\t\tthis.mouseLeave$.next();\n\t}\n\n\tcontent: Signal<string | SafeHtml>;\n\n\t@HostBinding('attr.id')\n\tid: string;\n\n\tcontentPositionClasses: Record<string, boolean> = {};\n\n\tsetPanelPosition(posX: HorizontalConnectionPos, posY: VerticalConnectionPos): void {\n\t\tthis.contentPositionClasses = {\n\t\t\t'is-before': posX === 'end',\n\t\t\t'is-after': posX === 'start',\n\t\t\t'is-above': posY === 'bottom',\n\t\t\t'is-below': posY === 'top',\n\t\t};\n\t}\n}\n","<div class=\"tooltip\" [class]=\"contentPositionClasses\" [innerHtml]=\"content()\"></div>\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelComponent } from './tooltip-panel.component';\n\n/**\n * @deprecated use `LuTooltipPanelComponent` instead\n */\n@NgModule({\n\timports: [LuTooltipPanelComponent],\n\texports: [LuTooltipPanelComponent],\n})\nexport class LuTooltipPanelModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { filter, firstValueFrom, shareReplay, timer } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class EllipsisRuler {\n\t// As EllipsisRuler is a singleton, we can use shareReplay so the first subscriber starts the timer and the last one stops it\n\t// The timer allows us to alternate between read and write phases\n\t#interval = timer(100, 100).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\t#readPhase = this.#interval.pipe(filter((n) => n % 2 === 0));\n\t#writePhase = this.#interval.pipe(filter((n) => n % 2 === 1));\n\n\t#document = inject(DOCUMENT);\n\treadonly parentMasked = this.#document.createElement('div');\n\n\tconstructor() {\n\t\tthis.parentMasked.classList.add('pr-u-mask');\n\t\tthis.parentMasked.setAttribute('aria-hidden', 'true');\n\t\tthis.#document.body.appendChild(this.parentMasked);\n\t}\n\n\t/**\n\t * Hacky af but let's explain everything\n\t * This method checks for ellipsis by cloning the node and checking its width against original element.\n\t *\n\t * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,\n\t * you'd get true while it should be false and vice-versa, because of rounding.\n\t *\n\t * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,\n\t * which we then compare with its current size.\n\t *\n\t * To avoid doing multiple reflow per check, we wait for the next microtask on each key step of the process:\n\t * - After computing element style\n\t * - After cloning the element and appending it to the DOM\n\t * - After computing the width of the cloned element\n\t * - After removing the cloned element from the DOM\n\t *\n\t * This way, we have 2 reflows per check, no matter how many elements are checked in a row.\n\t */\n\tasync hasEllipsis(element: HTMLElement): Promise<boolean> {\n\t\tlet elementStyle: CSSStyleDeclaration;\n\t\tlet bodyStyle: CSSStyleDeclaration;\n\n\t\tawait this.#readOperation(() => {\n\t\t\telementStyle = getComputedStyle(element);\n\t\t\tbodyStyle = getComputedStyle(document.body);\n\t\t});\n\n\t\tif (elementStyle.textOverflow !== 'ellipsis') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { padding, borderWidth, borderStyle, boxSizing, fontFamily, fontWeight, fontStyle } = elementStyle;\n\n\t\tconst fontSize = (Number(elementStyle.fontSize.replace('px', '')) / Number(bodyStyle.fontSize.replace('px', ''))).toString() + 'rem';\n\n\t\tlet elementCloned: HTMLDivElement;\n\n\t\tawait this.#writeOperation(() => {\n\t\t\telementCloned = this.#document.createElement('div');\n\n\t\t\tObject.assign(elementCloned.style, {\n\t\t\t\tinlineSize: 'fit-content',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tposition: 'absolute',\n\t\t\t\tvisibility: 'hidden',\n\t\t\t\tpadding,\n\t\t\t\tborderWidth,\n\t\t\t\tborderStyle,\n\t\t\t\tboxSizing,\n\t\t\t\tfontFamily,\n\t\t\t\tfontWeight,\n\t\t\t\tfontStyle,\n\t\t\t\tfontSize,\n\t\t\t});\n\n\t\t\tthis.parentMasked.appendChild(elementCloned);\n\n\t\t\telementCloned.innerHTML = element.innerHTML;\n\t\t});\n\n\t\t// To avoid multiple reflows, we wait for the next microtask before calculating the width\n\n\t\ttry {\n\t\t\tlet clonedElementWidth: number;\n\t\t\tlet elementWidth: number;\n\n\t\t\tawait this.#readOperation(() => {\n\t\t\t\tclonedElementWidth = elementCloned.getBoundingClientRect().width;\n\t\t\t\telementWidth = element.getBoundingClientRect().width;\n\t\t\t});\n\n\t\t\treturn clonedElementWidth > elementWidth;\n\t\t} catch {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tawait this.#writeOperation(() => {\n\t\t\t\tthis.parentMasked.removeChild(elementCloned);\n\t\t\t});\n\t\t}\n\t}\n\n\t// To avoid multiple reflows, we wait for the next read phase before computing/reading element style\n\tasync #readOperation(operation: () => void): Promise<void> {\n\t\tawait firstValueFrom(this.#readPhase);\n\t\toperation();\n\t}\n\n\t// To avoid multiple reflows, we wait for the next write before inserting/removing the cloned element\n\tasync #writeOperation(operation: () => void): Promise<void> {\n\t\tawait firstValueFrom(this.#writePhase);\n\t\toperation();\n\t}\n}\n","import {\n\tFlexibleConnectedPositionStrategy,\n\tFlexibleConnectedPositionStrategyOrigin,\n\tHorizontalConnectionPos,\n\tOriginConnectionPosition,\n\tOverlay,\n\tOverlayConnectionPosition,\n\tOverlayRef,\n\tVerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n\tAfterContentInit,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tHostBinding,\n\tHostListener,\n\tInput,\n\tNgZone,\n\tOnDestroy,\n\tRenderer2,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tnumberAttribute,\n\tsignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LuPopoverPosition } from '@lucca-front/ng/popover';\nimport { BehaviorSubject, Observable, Subject, combineLatest, merge, startWith, switchMap, timer } from 'rxjs';\nimport { debounce, debounceTime, filter, map } from 'rxjs/operators';\nimport { LuTooltipPanelComponent } from '../panel';\nimport { EllipsisRuler } from './ellipsis.ruler';\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[luTooltip]',\n\texportAs: 'luTooltip',\n})\nexport class LuTooltipTriggerDirective implements AfterContentInit, OnDestroy {\n\t#overlay = inject(Overlay);\n\n\t#host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\t#renderer = inject(Renderer2);\n\t#ruler = inject(EllipsisRuler);\n\t#zone = inject(NgZone, { optional: true });\n\n\t#destroyRef = inject(DestroyRef);\n\n\tluTooltip = input<string | SafeHtml>();\n\n\t#openDelay$ = new BehaviorSubject<number>(300);\n\n\t@Input({ transform: numberAttribute })\n\tset luTooltipEnterDelay(delay: number) {\n\t\tthis.#openDelay$.next(delay);\n\t}\n\n\t#closeDelay$ = new BehaviorSubject<number>(100);\n\n\t@Input({ transform: numberAttribute })\n\tset luTooltipLeaveDelay(delay: number) {\n\t\tthis.#closeDelay$.next(delay);\n\t}\n\n\tluTooltipDisabled = input(false, { transform: booleanAttribute });\n\n\t@Input({ transform: booleanAttribute })\n\tluTooltipOnlyForDisplay = false;\n\n\t@Input()\n\tluTooltipPosition: LuPopoverPosition = 'above';\n\n\tluTooltipWhenEllipsis = input(false, { transform: booleanAttribute });\n\n\tluTooltipAnchor = input<FlexibleConnectedPositionStrategyOrigin>(this.#host);\n\n\tresize$ = new Observable<void>((observer) => {\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tobserver.next();\n\t\t});\n\t\tresizeObserver.observe(this.#host.nativeElement);\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t});\n\n\t#hasEllipsis$ = combineLatest([\n\t\ttoObservable(\n\t\t\t// 1. Group necessary inputs\n\t\t\tcomputed(() => ({ whenEllipsis: this.luTooltipWhenEllipsis(), disabled: this.luTooltipDisabled() })),\n\t\t),\n\t\t// Resend resize events to trigger the check\n\t\tthis.resize$.pipe(debounceTime(150)),\n\t]).pipe(\n\t\t// 2. Keep only necessary inputs\n\t\tfilter(([{ whenEllipsis, disabled }]) => !disabled && whenEllipsis),\n\t\t// 3. Check for ellipsis\n\t\tswitchMap(() => this.runOutsideZoneJS(() => this.#ruler.hasEllipsis(this.#host.nativeElement))),\n\t);\n\n\t#hasEllipsis = toSignal(this.#hasEllipsis$, { initialValue: false });\n\n\topen$ = new Subject<void>();\n\n\tclose$ = new Subject<void>();\n\n\t@HostListener('mouseenter')\n\tonMouseEnter() {\n\t\tthis.open$.next();\n\t}\n\n\t@HostListener('mouseleave')\n\tonMouseLeave() {\n\t\tthis.close$.next();\n\t}\n\n\t@HostListener('focus')\n\tonFocus() {\n\t\tif (this.#host.nativeElement.getAttribute('aria-expanded') !== 'true') {\n\t\t\tthis.open$.next();\n\t\t}\n\t}\n\n\t@HostListener('blur')\n\tonBlur() {\n\t\tthis.close$.next();\n\t}\n\n\t#generatedId = `${this.#host.nativeElement.tagName.toLowerCase()}-tooltip-${nextId++}`;\n\n\t@HostBinding('attr.id')\n\t_id: string;\n\n\t@HostBinding('attr.aria-describedby')\n\tget ariaDescribedBy() {\n\t\tif (this.luTooltipDisabled() || this.luTooltipWhenEllipsis() || this.luTooltipOnlyForDisplay) {\n\t\t\treturn null;\n\t\t}\n\t\treturn `${this.#generatedId}-panel`;\n\t}\n\n\toverlayRef?: OverlayRef;\n\n\tconstructor() {\n\t\tcombineLatest([this.#openDelay$, this.#closeDelay$])\n\t\t\t.pipe(\n\t\t\t\tswitchMap(([openDelay, closeDelay]) => {\n\t\t\t\t\t// We only filter open events because even if it's disabled while opened,\n\t\t\t\t\t// \twe want the tooltip to be able to close itself no matter what\n\t\t\t\t\tconst openEvents$ = this.open$.pipe(\n\t\t\t\t\t\tfilter(() => {\n\t\t\t\t\t\t\tif (this.luTooltipDisabled()) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// If not disabled, let's check for ellipsis if needed\n\t\t\t\t\t\t\tif (this.luTooltipWhenEllipsis()) {\n\t\t\t\t\t\t\t\treturn this.#hasEllipsis();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// If it's not disabled and is not triggered based on ellipsis, just return true\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tmap(() => 'open'),\n\t\t\t\t\t);\n\t\t\t\t\treturn merge(openEvents$, this.close$.pipe(map(() => 'close'))).pipe(\n\t\t\t\t\t\tdebounce((event) => {\n\t\t\t\t\t\t\treturn timer(event === 'open' ? openDelay : closeDelay);\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}),\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t)\n\t\t\t.subscribe((event) => {\n\t\t\t\tif (event === 'open') {\n\t\t\t\t\tthis.openTooltip();\n\t\t\t\t} else {\n\t\t\t\t\tthis.closeTooltip();\n\t\t\t\t}\n\t\t\t});\n\n\t\teffect(() => {\n\t\t\tif (!this.luTooltipDisabled() && (!this.luTooltipWhenEllipsis() || this.#hasEllipsis())) {\n\t\t\t\tthis.setAccessibilityProperties(0);\n\t\t\t} else {\n\t\t\t\tthis.setAccessibilityProperties(null);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.closeTooltip();\n\t}\n\n\tprivate openTooltip(): void {\n\t\t// If tooltip is already opened, don't do anything\n\t\tif (this.overlayRef) {\n\t\t\treturn;\n\t\t}\n\t\tconst position = this.legacyPositionBuilder();\n\t\tthis.overlayRef = this.#overlay.create({\n\t\t\tpositionStrategy: position,\n\t\t\tscrollStrategy: this.#overlay.scrollStrategies.close(),\n\t\t\tdisposeOnNavigation: true,\n\t\t});\n\t\tconst portal = new ComponentPortal(LuTooltipPanelComponent);\n\t\tconst ref = this.overlayRef.attach(portal);\n\t\tposition.positionChanges\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t\tmap(({ connectionPair }) => connectionPair),\n\t\t\t\tstartWith(position.positions[0]),\n\t\t\t)\n\t\t\t.subscribe(({ overlayX, overlayY }) => {\n\t\t\t\tref.instance.setPanelPosition(overlayX, overlayY);\n\t\t\t});\n\t\tif (this.luTooltip()) {\n\t\t\tref.instance.content = this.luTooltip;\n\t\t} else if (this.luTooltipWhenEllipsis()) {\n\t\t\tref.instance.content = signal(this.#host.nativeElement.innerText);\n\t\t} else {\n\t\t\tref.instance.content = signal('');\n\t\t}\n\t\tref.instance.id = this.ariaDescribedBy;\n\t\t// On tooltip leave => trigger close\n\t\tref.instance.mouseLeave$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.close$.next());\n\t\t// On tooltip enter => trigger open to keep it opened\n\t\tref.instance.mouseEnter$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.open$.next());\n\t}\n\n\tprivate closeTooltip(): void {\n\t\tif (this.overlayRef) {\n\t\t\tthis.overlayRef.detach();\n\t\t\tdelete this.overlayRef;\n\t\t}\n\t}\n\n\tprivate setAccessibilityProperties(tabindex: number | null): void {\n\t\tif (tabindex === null) {\n\t\t\tthis.#renderer.removeAttribute(this.#host.nativeElement, 'tabindex');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tag = this.#host.nativeElement.tagName.toLowerCase();\n\t\tconst nativelyFocusableTags = ['a', 'button', 'input', 'select', 'textarea'];\n\t\tconst isNativelyFocusableTag = nativelyFocusableTags.includes(tag);\n\n\t\tconst hasATabIndex = this.#host.nativeElement.getAttribute('tabindex') !== null;\n\n\t\tif (!isNativelyFocusableTag && !hasATabIndex) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());\n\t\t}\n\n\t\tif (!isNativelyFocusableTag && !this.luTooltipWhenEllipsis() && !this.luTooltipOnlyForDisplay) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'role', 'button');\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tthis._id = this.#host.nativeElement.id || this.#generatedId;\n\t}\n\n\tprivate runOutsideZoneJS<T>(callback: () => T): T {\n\t\treturn this.#zone ? this.#zone.runOutsideAngular(callback) : callback();\n\t}\n\n\t/**********************\n\t *\n\t * LEGACY STUFF TO HANDLE EXISTING POSITIONS\n\t *\n\t ***********************/\n\n\tprivate legacyPositionBuilder(): FlexibleConnectedPositionStrategy {\n\t\tconst connectionPosition: OriginConnectionPosition = {\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'top',\n\t\t};\n\n\t\t// Position\n\t\tconst position = this.luTooltipPosition;\n\t\tif (position === 'above') {\n\t\t\tconnectionPosition.originY = 'top';\n\t\t} else if (position === 'below') {\n\t\t\tconnectionPosition.originY = 'bottom';\n\t\t} else if (position === 'before') {\n\t\t\tconnectionPosition.originX = 'start';\n\t\t} else if (position === 'after') {\n\t\t\tconnectionPosition.originX = 'end';\n\t\t}\n\n\t\t// Alignment\n\t\tif (position === 'above' || position === 'below') {\n\t\t\tconnectionPosition.originX = 'center';\n\t\t} else {\n\t\t\tconnectionPosition.originY = 'center';\n\t\t}\n\n\t\tconst overlayPosition: OverlayConnectionPosition = {\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'top',\n\t\t};\n\n\t\tif (position === 'above' || position === 'below') {\n\t\t\toverlayPosition.overlayX = connectionPosition.originX;\n\t\t\toverlayPosition.overlayY = position === 'above' ? 'bottom' : 'top';\n\t\t} else {\n\t\t\toverlayPosition.overlayX = position === 'before' ? 'end' : 'start';\n\t\t\toverlayPosition.overlayY = connectionPosition.originY;\n\t\t}\n\n\t\treturn this.#overlay\n\t\t\t.position()\n\t\t\t.flexibleConnectedTo(this.luTooltipAnchor())\n\t\t\t.withPositions([\n\t\t\t\t{\n\t\t\t\t\toriginX: connectionPosition.originX,\n\t\t\t\t\toriginY: connectionPosition.originY,\n\t\t\t\t\toverlayX: overlayPosition.overlayX,\n\t\t\t\t\toverlayY: overlayPosition.overlayY,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: connectionPosition.originX,\n\t\t\t\t\toriginY: this.invertVerticalPos(connectionPosition.originY),\n\t\t\t\t\toverlayX: overlayPosition.overlayX,\n\t\t\t\t\toverlayY: this.invertVerticalPos(overlayPosition.overlayY),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: this.invertHorizontalPos(connectionPosition.originX),\n\t\t\t\t\toriginY: connectionPosition.originY,\n\t\t\t\t\toverlayX: this.invertHorizontalPos(overlayPosition.overlayX),\n\t\t\t\t\toverlayY: overlayPosition.overlayY,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: this.invertHorizontalPos(connectionPosition.originX),\n\t\t\t\t\toriginY: this.invertVerticalPos(connectionPosition.originY),\n\t\t\t\t\toverlayX: this.invertHorizontalPos(overlayPosition.overlayX),\n\t\t\t\t\toverlayY: this.invertVerticalPos(overlayPosition.overlayY),\n\t\t\t\t},\n\t\t\t]);\n\t}\n\n\tprivate invertVerticalPos(y: VerticalConnectionPos): VerticalConnectionPos {\n\t\tif (y === 'top') {\n\t\t\treturn 'bottom';\n\t\t} else if (y === 'bottom') {\n\t\t\treturn 'top';\n\t\t}\n\t\treturn y;\n\t}\n\n\tprivate invertHorizontalPos(x: HorizontalConnectionPos): HorizontalConnectionPos {\n\t\tif (x === 'end') {\n\t\t\treturn 'start';\n\t\t} else if (x === 'start') {\n\t\t\treturn 'end';\n\t\t}\n\t\treturn x;\n\t}\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { NgModule } from '@angular/core';\nimport { LuTooltipTriggerDirective } from './tooltip-trigger.directive';\n\n/**\n * @deprecated use `LuTooltipTriggerDirective, OverlayModule` instead\n */\n@NgModule({\n\timports: [LuTooltipTriggerDirective, OverlayModule],\n\texports: [LuTooltipTriggerDirective],\n})\nexport class LuTooltipTriggerModule {}\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelModule } from './panel/index';\nimport { LuTooltipTriggerModule } from './trigger/index';\n\n/**\n * @deprecated use `LuTooltipTriggerDirective, OverlayModule, LuTooltipPanelComponent` instead\n */\n@NgModule({\n\timports: [LuTooltipTriggerModule, LuTooltipPanelModule],\n\texports: [LuTooltipTriggerModule, LuTooltipPanelModule],\n})\nexport class LuTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter"],"mappings":"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"}
1
+ {"version":3,"file":"lucca-front-ng-tooltip.mjs","sources":["../../../packages/ng/tooltip/animation/tooltip.animation.ts","../../../packages/ng/tooltip/panel/tooltip-panel.component.ts","../../../packages/ng/tooltip/panel/tooltip-panel.component.html","../../../packages/ng/tooltip/panel/tooltip-panel.module.ts","../../../packages/ng/tooltip/trigger/ellipsis.ruler.ts","../../../packages/ng/tooltip/trigger/tooltip-trigger.directive.ts","../../../packages/ng/tooltip/trigger/tooltip-trigger.module.ts","../../../packages/ng/tooltip/tooltip.module.ts","../../../packages/ng/tooltip/lucca-front-ng-tooltip.ts"],"sourcesContent":["import { trigger, state, style, animate, transition, AnimationTriggerMetadata } from '@angular/animations';\n\nexport const luTransformTooltip: AnimationTriggerMetadata = trigger('transformTooltip', [\n\tstate(\n\t\t'enter',\n\t\tstyle({\n\t\t\topacity: 1,\n\t\t\ttransform: `scale(1)`,\n\t\t}),\n\t),\n\ttransition('void => *', [\n\t\tstyle({\n\t\t\topacity: 0,\n\t\t\ttransform: `scale(0)`,\n\t\t}),\n\t\tanimate(`150ms cubic-bezier(0.25, 0.8, 0.25, 1)`),\n\t]),\n\ttransition('* => void', [animate('50ms 100ms linear', style({ opacity: 0 }))]),\n]);\n","import { HorizontalConnectionPos, VerticalConnectionPos } from '@angular/cdk/overlay';\nimport { ChangeDetectionStrategy, Component, DestroyRef, inject, signal } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\n\n@Component({\n\tselector: 'lu-tooltip-panel',\n\ttemplateUrl: './tooltip-panel.component.html',\n\tstyleUrl: './tooltip-panel.component.scss',\n\thost: {\n\t\trole: 'tooltip',\n\t\t'[attr.id]': 'id',\n\t\t'(mouseenter)': 'mouseEnter$.next()',\n\t\t'(mouseleave)': 'mouseLeave$.next()',\n\t},\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LuTooltipPanelComponent {\n\treadonly destroyRef = inject(DestroyRef);\n\n\treadonly mouseEnter$ = new Subject<void>();\n\treadonly mouseLeave$ = new Subject<void>();\n\n\treadonly content = signal<string | SafeHtml | null>(null);\n\n\treadonly id = signal<string>(null);\n\n\treadonly contentPositionClasses = signal<Record<string, boolean>>({});\n\n\tsetPanelPosition(posX: HorizontalConnectionPos, posY: VerticalConnectionPos): void {\n\t\tthis.contentPositionClasses.set({\n\t\t\t'is-before': posX === 'end',\n\t\t\t'is-after': posX === 'start',\n\t\t\t'is-above': posY === 'bottom',\n\t\t\t'is-below': posY === 'top',\n\t\t});\n\t}\n}\n","@if (content(); as content) {\n\t<div class=\"tooltip\" [class]=\"contentPositionClasses()\" [innerHtml]=\"content\"></div>\n}\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelComponent } from './tooltip-panel.component';\n\n/**\n * @deprecated use `LuTooltipPanelComponent` instead\n */\n@NgModule({\n\timports: [LuTooltipPanelComponent],\n\texports: [LuTooltipPanelComponent],\n})\nexport class LuTooltipPanelModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { filter, firstValueFrom, shareReplay, timer } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class EllipsisRuler {\n\t// As EllipsisRuler is a singleton, we can use shareReplay so the first subscriber starts the timer and the last one stops it\n\t// The timer allows us to alternate between read and write phases\n\t#interval = timer(100, 100).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\t#readPhase = this.#interval.pipe(filter((n) => n % 2 === 0));\n\t#writePhase = this.#interval.pipe(filter((n) => n % 2 === 1));\n\n\t#document = inject(DOCUMENT);\n\treadonly parentMasked = this.#document.createElement('div');\n\n\tconstructor() {\n\t\tthis.parentMasked.classList.add('pr-u-mask');\n\t\tthis.parentMasked.setAttribute('aria-hidden', 'true');\n\t\tthis.#document.body.appendChild(this.parentMasked);\n\t}\n\n\t/**\n\t * Hacky af but let's explain everything\n\t * This method checks for ellipsis by cloning the node and checking its width against original element.\n\t *\n\t * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,\n\t * you'd get true while it should be false and vice-versa, because of rounding.\n\t *\n\t * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,\n\t * which we then compare with its current size.\n\t *\n\t * To avoid doing multiple reflow per check, we wait for the next microtask on each key step of the process:\n\t * - After computing element style\n\t * - After cloning the element and appending it to the DOM\n\t * - After computing the width of the cloned element\n\t * - After removing the cloned element from the DOM\n\t *\n\t * This way, we have 2 reflows per check, no matter how many elements are checked in a row.\n\t */\n\tasync hasEllipsis(element: HTMLElement): Promise<boolean> {\n\t\tlet elementStyle: CSSStyleDeclaration;\n\t\tlet bodyStyle: CSSStyleDeclaration;\n\n\t\tawait this.#readOperation(() => {\n\t\t\telementStyle = getComputedStyle(element);\n\t\t\tbodyStyle = getComputedStyle(document.body);\n\t\t});\n\n\t\tif (elementStyle.textOverflow !== 'ellipsis') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst { padding, borderWidth, borderStyle, boxSizing, fontFamily, fontWeight, fontStyle } = elementStyle;\n\n\t\tconst fontSize = (Number(elementStyle.fontSize.replace('px', '')) / Number(bodyStyle.fontSize.replace('px', ''))).toString() + 'rem';\n\n\t\tlet elementCloned: HTMLDivElement;\n\n\t\tawait this.#writeOperation(() => {\n\t\t\telementCloned = this.#document.createElement('div');\n\n\t\t\tObject.assign(elementCloned.style, {\n\t\t\t\tinlineSize: 'fit-content',\n\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\tposition: 'absolute',\n\t\t\t\tvisibility: 'hidden',\n\t\t\t\tpadding,\n\t\t\t\tborderWidth,\n\t\t\t\tborderStyle,\n\t\t\t\tboxSizing,\n\t\t\t\tfontFamily,\n\t\t\t\tfontWeight,\n\t\t\t\tfontStyle,\n\t\t\t\tfontSize,\n\t\t\t});\n\n\t\t\tthis.parentMasked.appendChild(elementCloned);\n\n\t\t\telementCloned.innerHTML = element.innerHTML;\n\t\t});\n\n\t\t// To avoid multiple reflows, we wait for the next microtask before calculating the width\n\n\t\ttry {\n\t\t\tlet clonedElementWidth: number;\n\t\t\tlet elementWidth: number;\n\n\t\t\tawait this.#readOperation(() => {\n\t\t\t\tclonedElementWidth = elementCloned.getBoundingClientRect().width;\n\t\t\t\telementWidth = element.getBoundingClientRect().width;\n\t\t\t});\n\n\t\t\treturn clonedElementWidth > elementWidth;\n\t\t} catch {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tawait this.#writeOperation(() => {\n\t\t\t\tthis.parentMasked.removeChild(elementCloned);\n\t\t\t});\n\t\t}\n\t}\n\n\t// To avoid multiple reflows, we wait for the next read phase before computing/reading element style\n\tasync #readOperation(operation: () => void): Promise<void> {\n\t\tawait firstValueFrom(this.#readPhase);\n\t\toperation();\n\t}\n\n\t// To avoid multiple reflows, we wait for the next write before inserting/removing the cloned element\n\tasync #writeOperation(operation: () => void): Promise<void> {\n\t\tawait firstValueFrom(this.#writePhase);\n\t\toperation();\n\t}\n}\n","import {\n\tFlexibleConnectedPositionStrategy,\n\tFlexibleConnectedPositionStrategyOrigin,\n\tHorizontalConnectionPos,\n\tOriginConnectionPosition,\n\tOverlay,\n\tOverlayConnectionPosition,\n\tOverlayRef,\n\tVerticalConnectionPos,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n\tDestroyRef,\n\tDirective,\n\tEffectRef,\n\tElementRef,\n\tInjector,\n\tNgZone,\n\tOnDestroy,\n\tRenderer2,\n\tbooleanAttribute,\n\tcomputed,\n\teffect,\n\tinject,\n\tinput,\n\tlinkedSignal,\n\tnumberAttribute,\n\tsignal,\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { isNotNil, ɵeffectWithDeps } from '@lucca-front/ng/core';\nimport { LuPopoverPosition } from '@lucca-front/ng/popover';\nimport { Observable, combineLatest, startWith, switchMap, timer } from 'rxjs';\nimport { debounce, debounceTime, filter, map, tap } from 'rxjs/operators';\nimport { LuTooltipPanelComponent } from '../panel';\nimport { EllipsisRuler } from './ellipsis.ruler';\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[luTooltip]',\n\texportAs: 'luTooltip',\n\thost: {\n\t\t'[attr.aria-describedby]': 'ariaDescribedBy()',\n\t\t'[attr.id]': 'id()',\n\t\t'(mouseenter)': 'onMouseEnter()',\n\t\t'(mouseleave)': 'onMouseLeave()',\n\t\t'(focus)': 'onFocus()',\n\t\t'(blur)': 'onBlur()',\n\t},\n})\nexport class LuTooltipTriggerDirective implements OnDestroy {\n\treadonly #overlay = inject(Overlay);\n\n\treadonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n\treadonly #renderer = inject(Renderer2);\n\treadonly #ruler = inject(EllipsisRuler);\n\treadonly #zone = inject(NgZone, { optional: true });\n\n\treadonly #injector = inject(Injector);\n\treadonly #destroyRef = inject(DestroyRef);\n\n\treadonly luTooltip = input<string | SafeHtml>();\n\n\treadonly luTooltipEnterDelay = input(300, { transform: numberAttribute });\n\treadonly luTooltipLeaveDelay = input(100, { transform: numberAttribute });\n\n\treadonly luTooltipDisabled = input(false, { transform: booleanAttribute });\n\n\treadonly luTooltipOnlyForDisplay = input(false, { transform: booleanAttribute });\n\n\treadonly luTooltipPosition = input<LuPopoverPosition>('above');\n\n\treadonly luTooltipWhenEllipsis = input(false, { transform: booleanAttribute });\n\n\treadonly luTooltipAnchor = input<FlexibleConnectedPositionStrategyOrigin>(this.#host);\n\n\treadonly resize$ = new Observable<void>((observer) => {\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tobserver.next();\n\t\t});\n\t\tresizeObserver.observe(this.#host.nativeElement);\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t});\n\n\treadonly #hasEllipsis$ = combineLatest([\n\t\ttoObservable(\n\t\t\t// 1. Group necessary inputs\n\t\t\tcomputed(() => ({ whenEllipsis: this.luTooltipWhenEllipsis(), disabled: this.luTooltipDisabled() })),\n\t\t),\n\t\t// Resend resize events to trigger the check\n\t\tthis.resize$.pipe(debounceTime(150)),\n\t]).pipe(\n\t\t// 2. Keep only necessary inputs\n\t\tfilter(([{ whenEllipsis, disabled }]) => !disabled && whenEllipsis),\n\t\t// 3. Check for ellipsis\n\t\tswitchMap(() => this.runOutsideZoneJS(() => this.#ruler.hasEllipsis(this.#host.nativeElement))),\n\t);\n\n\treadonly #hasEllipsis = toSignal(this.#hasEllipsis$, { initialValue: false });\n\n\treadonly #action = signal<'open' | 'close' | null>(null);\n\treadonly #realAction = linkedSignal<'open' | 'close' | null, 'open' | 'close' | null>({\n\t\tsource: this.#action,\n\t\tcomputation: (action, previous) => {\n\t\t\tif (!action || action === 'close') {\n\t\t\t\treturn action;\n\t\t\t}\n\n\t\t\t// We only filter open events because even if it's disabled while opened,\n\t\t\t// we want the tooltip to be able to close itself no matter what\n\t\t\tif (this.luTooltipDisabled()) {\n\t\t\t\treturn previous.value;\n\t\t\t}\n\n\t\t\t// If not disabled, let's check for ellipsis if needed\n\t\t\tif (this.luTooltipWhenEllipsis()) {\n\t\t\t\treturn this.#hasEllipsis() ? 'open' : previous.value;\n\t\t\t}\n\n\t\t\t// If it's not disabled and is not triggered based on ellipsis, just return true\n\t\t\treturn 'open';\n\t\t},\n\t});\n\n\tonMouseEnter() {\n\t\tthis.#action.set('open');\n\t}\n\n\tonMouseLeave() {\n\t\tthis.#action.set('close');\n\t}\n\n\tonFocus() {\n\t\tif (this.#host.nativeElement.getAttribute('aria-expanded') !== 'true') {\n\t\t\tthis.#action.set('open');\n\t\t}\n\t}\n\n\tonBlur() {\n\t\tthis.#action.set('close');\n\t}\n\n\treadonly #generatedId = `${this.#host.nativeElement.tagName.toLowerCase()}-tooltip-${nextId++}`;\n\n\treadonly id = signal<string>(this.#host.nativeElement.id || this.#generatedId);\n\n\treadonly ariaDescribedBy = computed(() => {\n\t\tif (this.luTooltipDisabled() || this.luTooltipWhenEllipsis() || this.luTooltipOnlyForDisplay()) {\n\t\t\treturn null;\n\t\t}\n\t\treturn `${this.id()}-panel`;\n\t});\n\n\toverlayRef?: OverlayRef;\n\t#effectRef?: EffectRef;\n\t#idEffectRef?: EffectRef;\n\n\tconstructor() {\n\t\ttoObservable(this.#realAction)\n\t\t\t.pipe(\n\t\t\t\tfilter(isNotNil),\n\t\t\t\tdebounce((action) => timer(action === 'open' ? this.luTooltipEnterDelay() : this.luTooltipLeaveDelay())),\n\t\t\t\ttap((event) => {\n\t\t\t\t\tif (event === 'open') {\n\t\t\t\t\t\tthis.openTooltip();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.closeTooltip();\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\ttakeUntilDestroyed(),\n\t\t\t)\n\t\t\t.subscribe();\n\n\t\teffect(() => {\n\t\t\tif (!this.luTooltipDisabled() && (!this.luTooltipWhenEllipsis() || this.#hasEllipsis())) {\n\t\t\t\tthis.setAccessibilityProperties(0);\n\t\t\t} else {\n\t\t\t\tthis.setAccessibilityProperties(null);\n\t\t\t}\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.closeTooltip();\n\t}\n\n\tprivate openTooltip(): void {\n\t\t// If tooltip is already opened, don't do anything\n\t\tif (this.overlayRef) {\n\t\t\treturn;\n\t\t}\n\t\tconst position = this.legacyPositionBuilder();\n\t\tthis.overlayRef = this.#overlay.create({\n\t\t\tpositionStrategy: position,\n\t\t\tscrollStrategy: this.#overlay.scrollStrategies.close(),\n\t\t\tdisposeOnNavigation: true,\n\t\t});\n\t\tconst portal = new ComponentPortal(LuTooltipPanelComponent);\n\t\tconst ref = this.overlayRef.attach(portal);\n\t\tposition.positionChanges\n\t\t\t.pipe(\n\t\t\t\ttakeUntilDestroyed(this.#destroyRef),\n\t\t\t\tmap(({ connectionPair }) => connectionPair),\n\t\t\t\tstartWith(position.positions[0]),\n\t\t\t)\n\t\t\t.subscribe(({ overlayX, overlayY }) => {\n\t\t\t\tref.instance.setPanelPosition(overlayX, overlayY);\n\t\t\t});\n\n\t\tif (this.luTooltip()) {\n\t\t\tthis.#effectRef = ɵeffectWithDeps(\n\t\t\t\t[this.luTooltip],\n\t\t\t\t(luTooltip) => {\n\t\t\t\t\tref.instance.content.set(luTooltip);\n\t\t\t\t},\n\t\t\t\t{ injector: this.#injector },\n\t\t\t);\n\t\t} else if (this.luTooltipWhenEllipsis()) {\n\t\t\tref.instance.content.set(this.#host.nativeElement.innerText);\n\t\t} else {\n\t\t\tref.instance.content.set('');\n\t\t}\n\n\t\tthis.#idEffectRef = ɵeffectWithDeps(\n\t\t\t[this.ariaDescribedBy],\n\t\t\t(ariaDescribedBy) => {\n\t\t\t\tref.instance.id.set(ariaDescribedBy);\n\t\t\t},\n\t\t\t{ injector: this.#injector },\n\t\t);\n\n\t\t// On tooltip leave => trigger close\n\t\tref.instance.mouseLeave$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.#action.set('close'));\n\t\t// On tooltip enter => trigger open to keep it opened\n\t\tref.instance.mouseEnter$.pipe(takeUntilDestroyed(ref.instance.destroyRef)).subscribe(() => this.#action.set('open'));\n\t}\n\n\tprivate closeTooltip(): void {\n\t\tif (this.overlayRef) {\n\t\t\tthis.overlayRef.detach();\n\t\t\tdelete this.overlayRef;\n\t\t}\n\t\tthis.#effectRef?.destroy();\n\t\tthis.#idEffectRef?.destroy();\n\t}\n\n\tprivate setAccessibilityProperties(tabindex: number | null): void {\n\t\tif (tabindex === null) {\n\t\t\tthis.#renderer.removeAttribute(this.#host.nativeElement, 'tabindex');\n\t\t\treturn;\n\t\t}\n\n\t\tconst tag = this.#host.nativeElement.tagName.toLowerCase();\n\t\tconst nativelyFocusableTags = ['a', 'button', 'input', 'select', 'textarea'];\n\t\tconst isNativelyFocusableTag = nativelyFocusableTags.includes(tag);\n\n\t\tconst hasATabIndex = this.#host.nativeElement.getAttribute('tabindex') !== null;\n\n\t\tif (!isNativelyFocusableTag && !hasATabIndex) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());\n\t\t}\n\n\t\tif (!isNativelyFocusableTag && !this.luTooltipWhenEllipsis() && !this.luTooltipOnlyForDisplay()) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'role', 'button');\n\t\t}\n\t}\n\n\tprivate runOutsideZoneJS<T>(callback: () => T): T {\n\t\treturn this.#zone ? this.#zone.runOutsideAngular(callback) : callback();\n\t}\n\n\t/**********************\n\t *\n\t * LEGACY STUFF TO HANDLE EXISTING POSITIONS\n\t *\n\t ***********************/\n\n\tprivate legacyPositionBuilder(): FlexibleConnectedPositionStrategy {\n\t\tconst connectionPosition: OriginConnectionPosition = {\n\t\t\toriginX: 'start',\n\t\t\toriginY: 'top',\n\t\t};\n\n\t\t// Position\n\t\tconst position = this.luTooltipPosition();\n\t\tif (position === 'above') {\n\t\t\tconnectionPosition.originY = 'top';\n\t\t} else if (position === 'below') {\n\t\t\tconnectionPosition.originY = 'bottom';\n\t\t} else if (position === 'before') {\n\t\t\tconnectionPosition.originX = 'start';\n\t\t} else if (position === 'after') {\n\t\t\tconnectionPosition.originX = 'end';\n\t\t}\n\n\t\t// Alignment\n\t\tif (position === 'above' || position === 'below') {\n\t\t\tconnectionPosition.originX = 'center';\n\t\t} else {\n\t\t\tconnectionPosition.originY = 'center';\n\t\t}\n\n\t\tconst overlayPosition: OverlayConnectionPosition = {\n\t\t\toverlayX: 'start',\n\t\t\toverlayY: 'top',\n\t\t};\n\n\t\tif (position === 'above' || position === 'below') {\n\t\t\toverlayPosition.overlayX = connectionPosition.originX;\n\t\t\toverlayPosition.overlayY = position === 'above' ? 'bottom' : 'top';\n\t\t} else {\n\t\t\toverlayPosition.overlayX = position === 'before' ? 'end' : 'start';\n\t\t\toverlayPosition.overlayY = connectionPosition.originY;\n\t\t}\n\n\t\treturn this.#overlay\n\t\t\t.position()\n\t\t\t.flexibleConnectedTo(this.luTooltipAnchor())\n\t\t\t.withPositions([\n\t\t\t\t{\n\t\t\t\t\toriginX: connectionPosition.originX,\n\t\t\t\t\toriginY: connectionPosition.originY,\n\t\t\t\t\toverlayX: overlayPosition.overlayX,\n\t\t\t\t\toverlayY: overlayPosition.overlayY,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: connectionPosition.originX,\n\t\t\t\t\toriginY: this.invertVerticalPos(connectionPosition.originY),\n\t\t\t\t\toverlayX: overlayPosition.overlayX,\n\t\t\t\t\toverlayY: this.invertVerticalPos(overlayPosition.overlayY),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: this.invertHorizontalPos(connectionPosition.originX),\n\t\t\t\t\toriginY: connectionPosition.originY,\n\t\t\t\t\toverlayX: this.invertHorizontalPos(overlayPosition.overlayX),\n\t\t\t\t\toverlayY: overlayPosition.overlayY,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\toriginX: this.invertHorizontalPos(connectionPosition.originX),\n\t\t\t\t\toriginY: this.invertVerticalPos(connectionPosition.originY),\n\t\t\t\t\toverlayX: this.invertHorizontalPos(overlayPosition.overlayX),\n\t\t\t\t\toverlayY: this.invertVerticalPos(overlayPosition.overlayY),\n\t\t\t\t},\n\t\t\t]);\n\t}\n\n\tprivate invertVerticalPos(y: VerticalConnectionPos): VerticalConnectionPos {\n\t\tif (y === 'top') {\n\t\t\treturn 'bottom';\n\t\t} else if (y === 'bottom') {\n\t\t\treturn 'top';\n\t\t}\n\t\treturn y;\n\t}\n\n\tprivate invertHorizontalPos(x: HorizontalConnectionPos): HorizontalConnectionPos {\n\t\tif (x === 'end') {\n\t\t\treturn 'start';\n\t\t} else if (x === 'start') {\n\t\t\treturn 'end';\n\t\t}\n\t\treturn x;\n\t}\n}\n","import { OverlayModule } from '@angular/cdk/overlay';\nimport { NgModule } from '@angular/core';\nimport { LuTooltipTriggerDirective } from './tooltip-trigger.directive';\n\n/**\n * @deprecated use `LuTooltipTriggerDirective, OverlayModule` instead\n */\n@NgModule({\n\timports: [LuTooltipTriggerDirective, OverlayModule],\n\texports: [LuTooltipTriggerDirective],\n})\nexport class LuTooltipTriggerModule {}\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelModule } from './panel/index';\nimport { LuTooltipTriggerModule } from './trigger/index';\n\n/**\n * @deprecated use `LuTooltipTriggerDirective, OverlayModule, LuTooltipPanelComponent` instead\n */\n@NgModule({\n\timports: [LuTooltipTriggerModule, LuTooltipPanelModule],\n\texports: [LuTooltipTriggerModule, LuTooltipPanelModule],\n})\nexport class LuTooltipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","ɵeffectWithDeps"],"mappings":"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"}