@lucca-front/ng 18.3.0 → 18.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/core/type/style.d.ts +1 -1
  2. package/core-select/user/users.directive.d.ts +2 -1
  3. package/esm2022/callout/callout-disclosure/callout-disclosure.component.mjs +3 -3
  4. package/esm2022/comment/comment/comment.component.mjs +3 -3
  5. package/esm2022/core/portal/portal.directive.mjs +8 -3
  6. package/esm2022/core/type/style.mjs +1 -1
  7. package/esm2022/core-select/user/user-option.component.mjs +3 -3
  8. package/esm2022/core-select/user/users.directive.mjs +16 -23
  9. package/esm2022/department/select/feeder/department-feeder.component.mjs +2 -2
  10. package/esm2022/department/select/input/department-select-input.component.mjs +2 -1
  11. package/esm2022/department/service/department-v4.service.mjs +2 -2
  12. package/esm2022/dialog/dialog/dialog.component.mjs +2 -2
  13. package/esm2022/dialog/dialog-header/dialog-header.component.mjs +3 -3
  14. package/esm2022/form-field/form-field.component.mjs +3 -3
  15. package/esm2022/multi-select/input/select-all/with-select-all.directive.mjs +10 -9
  16. package/esm2022/multi-select/public-api.mjs +2 -1
  17. package/esm2022/multi-select/select.model.mjs +2 -2
  18. package/esm2022/multi-select/select.utils.mjs +32 -0
  19. package/esm2022/tooltip/trigger/ellipsis.ruler.mjs +59 -0
  20. package/esm2022/tooltip/trigger/tooltip-trigger.directive.mjs +8 -52
  21. package/fesm2022/lucca-front-ng-callout.mjs +2 -2
  22. package/fesm2022/lucca-front-ng-callout.mjs.map +1 -1
  23. package/fesm2022/lucca-front-ng-comment.mjs +2 -2
  24. package/fesm2022/lucca-front-ng-comment.mjs.map +1 -1
  25. package/fesm2022/lucca-front-ng-core-select-user.mjs +21 -28
  26. package/fesm2022/lucca-front-ng-core-select-user.mjs.map +1 -1
  27. package/fesm2022/lucca-front-ng-core.mjs +7 -2
  28. package/fesm2022/lucca-front-ng-core.mjs.map +1 -1
  29. package/fesm2022/lucca-front-ng-department.mjs +3 -2
  30. package/fesm2022/lucca-front-ng-department.mjs.map +1 -1
  31. package/fesm2022/lucca-front-ng-dialog.mjs +4 -4
  32. package/fesm2022/lucca-front-ng-dialog.mjs.map +1 -1
  33. package/fesm2022/lucca-front-ng-form-field.mjs +2 -2
  34. package/fesm2022/lucca-front-ng-form-field.mjs.map +1 -1
  35. package/fesm2022/lucca-front-ng-multi-select.mjs +44 -10
  36. package/fesm2022/lucca-front-ng-multi-select.mjs.map +1 -1
  37. package/fesm2022/lucca-front-ng-tooltip.mjs +62 -51
  38. package/fesm2022/lucca-front-ng-tooltip.mjs.map +1 -1
  39. package/multi-select/public-api.d.ts +2 -0
  40. package/multi-select/select.utils.d.ts +14 -0
  41. package/package.json +31 -31
  42. package/tooltip/trigger/ellipsis.ruler.d.ts +20 -0
  43. package/tooltip/trigger/tooltip-trigger.directive.d.ts +0 -13
@@ -1,8 +1,8 @@
1
1
  import { trigger, state, style, transition, animate } from '@angular/animations';
2
2
  import * as i0 from '@angular/core';
3
- import { inject, DestroyRef, Component, ChangeDetectionStrategy, HostListener, HostBinding, NgModule, ElementRef, Renderer2, ChangeDetectorRef, numberAttribute, booleanAttribute, Directive, Input } from '@angular/core';
3
+ import { inject, DestroyRef, Component, ChangeDetectionStrategy, HostListener, HostBinding, NgModule, Injectable, ElementRef, Renderer2, ChangeDetectorRef, numberAttribute, booleanAttribute, Directive, Input } from '@angular/core';
4
4
  import { Subject, BehaviorSubject, Observable, combineLatest, switchMap, merge, timer, startWith } from 'rxjs';
5
- import { NgClass } from '@angular/common';
5
+ import { NgClass, DOCUMENT } from '@angular/common';
6
6
  import { Overlay, OverlayModule } from '@angular/cdk/overlay';
7
7
  import { ComponentPortal } from '@angular/cdk/portal';
8
8
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@@ -76,11 +76,68 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImpor
76
76
  }]
77
77
  }] });
78
78
 
79
+ class EllipsisRuler {
80
+ #document;
81
+ constructor() {
82
+ this.#document = inject(DOCUMENT);
83
+ this.elementCloned = this.#document.createElement('div');
84
+ this.parentMasked = this.#document.createElement('div');
85
+ this.parentMasked.classList.add('u-mask');
86
+ this.parentMasked.setAttribute('aria-hidden', 'true');
87
+ this.elementCloned.style.width = 'fit-content';
88
+ this.elementCloned.style.whiteSpace = 'nowrap';
89
+ this.parentMasked.appendChild(this.elementCloned);
90
+ this.#document.body.appendChild(this.parentMasked);
91
+ }
92
+ /**
93
+ * Hacky af but let's explain everything
94
+ * This method checks for ellipsis by cloning the node and checking its width against original element.
95
+ *
96
+ * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,
97
+ * you'd get true while it should be false and vice-versa, because of rounding.
98
+ *
99
+ * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,
100
+ * which we then compare with its current size.
101
+ */
102
+ hasEllipsis(element) {
103
+ const elementStyle = window.getComputedStyle(element);
104
+ if (elementStyle.textOverflow !== 'ellipsis') {
105
+ return false;
106
+ }
107
+ Object.assign(this.elementCloned.style, {
108
+ padding: elementStyle.padding,
109
+ borderWidth: elementStyle.borderWidth,
110
+ borderStyle: elementStyle.borderStyle,
111
+ boxSizing: elementStyle.boxSizing,
112
+ fontFamily: elementStyle.fontFamily,
113
+ fontWeight: elementStyle.fontWeight,
114
+ fontStyle: elementStyle.fontStyle,
115
+ fontSize: (Number(elementStyle.fontSize.replace('px', '')) / Number(window.getComputedStyle(document.body).fontSize.replace('px', ''))).toString() + 'rem',
116
+ });
117
+ this.elementCloned.innerHTML = element.innerHTML;
118
+ try {
119
+ const elementClonedWidth = this.elementCloned.getBoundingClientRect().width;
120
+ const elementWidth = element.getBoundingClientRect().width;
121
+ return elementClonedWidth > elementWidth;
122
+ }
123
+ catch (e) {
124
+ return false;
125
+ }
126
+ }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: EllipsisRuler, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: EllipsisRuler, providedIn: 'root' }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.1", ngImport: i0, type: EllipsisRuler, decorators: [{
131
+ type: Injectable,
132
+ args: [{ providedIn: 'root' }]
133
+ }], ctorParameters: () => [] });
134
+
79
135
  let nextId = 0;
80
136
  class LuTooltipTriggerDirective {
81
137
  #overlay;
82
138
  #host;
83
139
  #renderer;
140
+ #ruler;
84
141
  #destroyRef;
85
142
  #cdr;
86
143
  #openDelay$;
@@ -123,6 +180,7 @@ class LuTooltipTriggerDirective {
123
180
  this.#overlay = inject(Overlay);
124
181
  this.#host = inject(ElementRef);
125
182
  this.#renderer = inject(Renderer2);
183
+ this.#ruler = inject(EllipsisRuler);
126
184
  this.#destroyRef = inject(DestroyRef);
127
185
  this.#cdr = inject(ChangeDetectorRef);
128
186
  this.#openDelay$ = new BehaviorSubject(300);
@@ -153,7 +211,7 @@ class LuTooltipTriggerDirective {
153
211
  }
154
212
  // If not disabled, let's check for ellipsis if needed
155
213
  if (this.luTooltipWhenEllipsis) {
156
- return this.hasEllipsis();
214
+ return this.#ruler.hasEllipsis(this.#host.nativeElement);
157
215
  }
158
216
  // If it's not disabled and is not triggered based on ellipsis, just return true
159
217
  return true;
@@ -215,7 +273,7 @@ class LuTooltipTriggerDirective {
215
273
  }
216
274
  }
217
275
  setAccessibilityProperties(tabindex) {
218
- if (this.#disabled || (this.luTooltipWhenEllipsis && !this.hasEllipsis())) {
276
+ if (this.#disabled || (this.luTooltipWhenEllipsis && !this.#ruler.hasEllipsis(this.#host.nativeElement))) {
219
277
  this.#renderer.removeAttribute(this.#host.nativeElement, 'tabindex');
220
278
  return;
221
279
  }
@@ -227,53 +285,6 @@ class LuTooltipTriggerDirective {
227
285
  this.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());
228
286
  }
229
287
  }
230
- /**
231
- * Hacky af but let's explain everything
232
- * This method checks for ellipsis by cloning the node and checking its width against original element.
233
- *
234
- * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,
235
- * you'd get true while it should be false and vice-versa, because of rounding.
236
- *
237
- * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,
238
- * which we then compare with its current size.
239
- *
240
- * @private
241
- */
242
- hasEllipsis() {
243
- if (window.getComputedStyle(this.#host.nativeElement).textOverflow !== 'ellipsis') {
244
- return false;
245
- }
246
- const element = this.#host.nativeElement;
247
- const elementCloned = this.#renderer.createElement('div');
248
- const parentMasked = this.#renderer.createElement('div');
249
- const elementStyle = window.getComputedStyle(element);
250
- this.#renderer.addClass(parentMasked, 'u-mask');
251
- this.#renderer.setAttribute(parentMasked, 'aria-hidden', 'true');
252
- this.#renderer.setStyle(elementCloned, 'width', 'fit-content');
253
- this.#renderer.setStyle(elementCloned, 'padding', elementStyle.padding);
254
- this.#renderer.setStyle(elementCloned, 'borderWidth', elementStyle.borderWidth);
255
- this.#renderer.setStyle(elementCloned, 'borderStyle', elementStyle.borderStyle);
256
- this.#renderer.setStyle(elementCloned, 'boxSizing', elementStyle.boxSizing);
257
- this.#renderer.setStyle(elementCloned, 'fontFamily', elementStyle.fontFamily);
258
- this.#renderer.setStyle(elementCloned, 'fontWeight', elementStyle.fontWeight);
259
- this.#renderer.setStyle(elementCloned, 'fontStyle', elementStyle.fontStyle);
260
- this.#renderer.setStyle(elementCloned, 'whiteSpace', 'nowrap');
261
- this.#renderer.setStyle(elementCloned, 'fontSize', (Number(elementStyle.fontSize.replace('px', '')) / Number(window.getComputedStyle(document.body).fontSize.replace('px', ''))).toString() + 'rem');
262
- elementCloned.innerHTML = element.innerHTML;
263
- this.#renderer.appendChild(parentMasked, elementCloned);
264
- this.#renderer.appendChild(document.body, parentMasked);
265
- try {
266
- const elementClonedWidth = elementCloned.getBoundingClientRect().width;
267
- const elementWidth = element.getBoundingClientRect().width;
268
- return elementClonedWidth > elementWidth;
269
- }
270
- catch (e) {
271
- return false;
272
- }
273
- finally {
274
- parentMasked.remove();
275
- }
276
- }
277
288
  ngAfterContentInit() {
278
289
  this.setAccessibilityProperties(0);
279
290
  this._id = this.#host.nativeElement.id || this.#generatedId;
@@ -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/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, HostBinding, HostListener, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { NgClass } from '@angular/common';\n\n@Component({\n\tselector: 'lu-tooltip-panel',\n\ttemplateUrl: './tooltip-panel.component.html',\n\tstyleUrls: ['./tooltip-panel.component.scss'],\n\tstandalone: true,\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: 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\" [ngClass]=\"contentPositionClasses\" [innerHtml]=\"content\"></div>\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelComponent } from './tooltip-panel.component';\n\n@NgModule({\n\timports: [LuTooltipPanelComponent],\n\texports: [LuTooltipPanelComponent],\n})\nexport class LuTooltipPanelModule {}\n","import { FlexibleConnectedPositionStrategy, HorizontalConnectionPos, OriginConnectionPosition, Overlay, OverlayConnectionPosition, OverlayRef, VerticalConnectionPos } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n\tAfterContentInit,\n\tbooleanAttribute,\n\tChangeDetectorRef,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tHostBinding,\n\tHostListener,\n\tinject,\n\tInput,\n\tnumberAttribute,\n\tOnDestroy,\n\tRenderer2,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { LuPopoverPosition } from '@lucca-front/ng/popover';\nimport { BehaviorSubject, combineLatest, merge, Observable, startWith, Subject, switchMap, timer } from 'rxjs';\nimport { debounce, debounceTime, filter, map } from 'rxjs/operators';\nimport { LuTooltipPanelComponent } from '../panel';\n\nlet nextId = 0;\n\n@Directive({\n\tselector: '[luTooltip]',\n\texportAs: 'luTooltip',\n\tstandalone: true,\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\n\t#destroyRef = inject(DestroyRef);\n\n\t#cdr = inject(ChangeDetectorRef);\n\n\t@Input()\n\tluTooltip: 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\t#disabled = false;\n\n\t@Input({ transform: booleanAttribute })\n\tset luTooltipDisabled(disabled: boolean) {\n\t\tthis.#disabled = disabled;\n\t\tif (disabled) {\n\t\t\tthis.setAccessibilityProperties(null);\n\t\t}\n\t}\n\n\t@Input({ transform: booleanAttribute })\n\tluTooltipOnlyForDisplay = false;\n\n\t@Input()\n\tluTooltipPosition: LuPopoverPosition = 'above';\n\n\t@Input({ transform: booleanAttribute })\n\tluTooltipWhenEllipsis = false;\n\n\tresize$ = new Observable((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\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.#disabled || 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.#disabled) {\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\tthis.resize$.pipe(takeUntilDestroyed(this.#destroyRef), debounceTime(150)).subscribe(() => {\n\t\t\tthis.setAccessibilityProperties(0);\n\t\t\tthis.#cdr.markForCheck();\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 = this.#host.nativeElement.innerText;\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 (this.#disabled || (this.luTooltipWhenEllipsis && !this.hasEllipsis())) {\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 isNatevelyFocusableTag = nativelyFocusableTags.includes(tag);\n\n\t\tconst hasATabIndex = this.#host.nativeElement.getAttribute('tabindex') !== null;\n\n\t\tif (!isNatevelyFocusableTag && !hasATabIndex) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());\n\t\t}\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 * @private\n\t */\n\tprivate hasEllipsis(): boolean {\n\t\tif (window.getComputedStyle(this.#host.nativeElement).textOverflow !== 'ellipsis') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst element = this.#host.nativeElement;\n\t\tconst elementCloned = this.#renderer.createElement('div') as HTMLDivElement;\n\t\tconst parentMasked = this.#renderer.createElement('div') as HTMLDivElement;\n\t\tconst elementStyle = window.getComputedStyle(element);\n\n\t\tthis.#renderer.addClass(parentMasked, 'u-mask');\n\t\tthis.#renderer.setAttribute(parentMasked, 'aria-hidden', 'true');\n\n\t\tthis.#renderer.setStyle(elementCloned, 'width', 'fit-content');\n\n\t\tthis.#renderer.setStyle(elementCloned, 'padding', elementStyle.padding);\n\t\tthis.#renderer.setStyle(elementCloned, 'borderWidth', elementStyle.borderWidth);\n\t\tthis.#renderer.setStyle(elementCloned, 'borderStyle', elementStyle.borderStyle);\n\t\tthis.#renderer.setStyle(elementCloned, 'boxSizing', elementStyle.boxSizing);\n\t\tthis.#renderer.setStyle(elementCloned, 'fontFamily', elementStyle.fontFamily);\n\t\tthis.#renderer.setStyle(elementCloned, 'fontWeight', elementStyle.fontWeight);\n\t\tthis.#renderer.setStyle(elementCloned, 'fontStyle', elementStyle.fontStyle);\n\t\tthis.#renderer.setStyle(elementCloned, 'whiteSpace', 'nowrap');\n\t\tthis.#renderer.setStyle(\n\t\t\telementCloned,\n\t\t\t'fontSize',\n\t\t\t(Number(elementStyle.fontSize.replace('px', '')) / Number(window.getComputedStyle(document.body).fontSize.replace('px', ''))).toString() + 'rem',\n\t\t);\n\n\t\telementCloned.innerHTML = element.innerHTML;\n\n\t\tthis.#renderer.appendChild(parentMasked, elementCloned);\n\t\tthis.#renderer.appendChild(document.body, parentMasked);\n\n\t\ttry {\n\t\t\tconst elementClonedWidth = elementCloned.getBoundingClientRect().width;\n\t\t\tconst elementWidth = element.getBoundingClientRect().width;\n\n\t\t\treturn elementClonedWidth > elementWidth;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t} finally {\n\t\t\tparentMasked.remove();\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tthis.setAccessibilityProperties(0);\n\t\tthis._id = this.#host.nativeElement.id || this.#generatedId;\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.#host)\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 { NgModule } from '@angular/core';\nimport { LuTooltipTriggerDirective } from './tooltip-trigger.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\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@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":[],"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, HostBinding, HostListener, inject } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Subject } from 'rxjs';\nimport { NgClass } from '@angular/common';\n\n@Component({\n\tselector: 'lu-tooltip-panel',\n\ttemplateUrl: './tooltip-panel.component.html',\n\tstyleUrls: ['./tooltip-panel.component.scss'],\n\tstandalone: true,\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: 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\" [ngClass]=\"contentPositionClasses\" [innerHtml]=\"content\"></div>\n","import { NgModule } from '@angular/core';\nimport { LuTooltipPanelComponent } from './tooltip-panel.component';\n\n@NgModule({\n\timports: [LuTooltipPanelComponent],\n\texports: [LuTooltipPanelComponent],\n})\nexport class LuTooltipPanelModule {}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, inject } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class EllipsisRuler {\n\t#document = inject(DOCUMENT);\n\treadonly elementCloned = this.#document.createElement('div');\n\treadonly parentMasked = this.#document.createElement('div');\n\n\tconstructor() {\n\t\tthis.parentMasked.classList.add('u-mask');\n\t\tthis.parentMasked.setAttribute('aria-hidden', 'true');\n\n\t\tthis.elementCloned.style.width = 'fit-content';\n\t\tthis.elementCloned.style.whiteSpace = 'nowrap';\n\n\t\tthis.parentMasked.appendChild(this.elementCloned);\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\thasEllipsis(element: HTMLElement): boolean {\n\t\tconst elementStyle = window.getComputedStyle(element);\n\n\t\tif (elementStyle.textOverflow !== 'ellipsis') {\n\t\t\treturn false;\n\t\t}\n\n\t\tObject.assign(this.elementCloned.style, {\n\t\t\tpadding: elementStyle.padding,\n\t\t\tborderWidth: elementStyle.borderWidth,\n\t\t\tborderStyle: elementStyle.borderStyle,\n\t\t\tboxSizing: elementStyle.boxSizing,\n\t\t\tfontFamily: elementStyle.fontFamily,\n\t\t\tfontWeight: elementStyle.fontWeight,\n\t\t\tfontStyle: elementStyle.fontStyle,\n\t\t\tfontSize: (Number(elementStyle.fontSize.replace('px', '')) / Number(window.getComputedStyle(document.body).fontSize.replace('px', ''))).toString() + 'rem',\n\t\t});\n\n\t\tthis.elementCloned.innerHTML = element.innerHTML;\n\n\t\ttry {\n\t\t\tconst elementClonedWidth = this.elementCloned.getBoundingClientRect().width;\n\t\t\tconst elementWidth = element.getBoundingClientRect().width;\n\n\t\t\treturn elementClonedWidth > elementWidth;\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t}\n}\n","import { FlexibleConnectedPositionStrategy, HorizontalConnectionPos, OriginConnectionPosition, Overlay, OverlayConnectionPosition, OverlayRef, VerticalConnectionPos } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport {\n\tAfterContentInit,\n\tChangeDetectorRef,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tHostBinding,\n\tHostListener,\n\tInput,\n\tOnDestroy,\n\tRenderer2,\n\tbooleanAttribute,\n\tinject,\n\tnumberAttribute,\n} from '@angular/core';\nimport { takeUntilDestroyed } 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\tstandalone: true,\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\n\t#destroyRef = inject(DestroyRef);\n\n\t#cdr = inject(ChangeDetectorRef);\n\n\t@Input()\n\tluTooltip: 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\t#disabled = false;\n\n\t@Input({ transform: booleanAttribute })\n\tset luTooltipDisabled(disabled: boolean) {\n\t\tthis.#disabled = disabled;\n\t\tif (disabled) {\n\t\t\tthis.setAccessibilityProperties(null);\n\t\t}\n\t}\n\n\t@Input({ transform: booleanAttribute })\n\tluTooltipOnlyForDisplay = false;\n\n\t@Input()\n\tluTooltipPosition: LuPopoverPosition = 'above';\n\n\t@Input({ transform: booleanAttribute })\n\tluTooltipWhenEllipsis = false;\n\n\tresize$ = new Observable((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\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.#disabled || 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.#disabled) {\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.#ruler.hasEllipsis(this.#host.nativeElement);\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\tthis.resize$.pipe(takeUntilDestroyed(this.#destroyRef), debounceTime(150)).subscribe(() => {\n\t\t\tthis.setAccessibilityProperties(0);\n\t\t\tthis.#cdr.markForCheck();\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 = this.#host.nativeElement.innerText;\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 (this.#disabled || (this.luTooltipWhenEllipsis && !this.#ruler.hasEllipsis(this.#host.nativeElement))) {\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 isNatevelyFocusableTag = nativelyFocusableTags.includes(tag);\n\n\t\tconst hasATabIndex = this.#host.nativeElement.getAttribute('tabindex') !== null;\n\n\t\tif (!isNatevelyFocusableTag && !hasATabIndex) {\n\t\t\tthis.#renderer.setAttribute(this.#host.nativeElement, 'tabindex', tabindex.toString());\n\t\t}\n\t}\n\n\tngAfterContentInit(): void {\n\t\tthis.setAccessibilityProperties(0);\n\t\tthis._id = this.#host.nativeElement.id || this.#generatedId;\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.#host)\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 { NgModule } from '@angular/core';\nimport { LuTooltipTriggerDirective } from './tooltip-trigger.directive';\nimport { OverlayModule } from '@angular/cdk/overlay';\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@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":[],"mappings":";;;;;;;;;;AAEa,MAAA,kBAAkB,GAA6B,OAAO,CAAC,kBAAkB,EAAE;AACvF,IAAA,KAAK,CACJ,OAAO,EACP,KAAK,CAAC;AACL,QAAA,OAAO,EAAE,CAAC;AACV,QAAA,SAAS,EAAE,CAAU,QAAA,CAAA;AACrB,KAAA,CAAC,CACF;IACD,UAAU,CAAC,WAAW,EAAE;AACvB,QAAA,KAAK,CAAC;AACL,YAAA,OAAO,EAAE,CAAC;AACV,YAAA,SAAS,EAAE,CAAU,QAAA,CAAA;SACrB,CAAC;QACF,OAAO,CAAC,wCAAwC,CAAC;KACjD,CAAC;AACF,IAAA,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,mBAAmB,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAA;;MCDY,uBAAuB,CAAA;AAXpC,IAAA,WAAA,GAAA;AAYC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEhC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;AAOlC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,OAAO,EAAQ,CAAC;QAYlC,IAAsB,CAAA,sBAAA,GAA4B,EAAE,CAAC;AAUrD,KAAA;IA1BA,UAAU,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACxB;IAKD,UAAU,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;KACxB;IASD,gBAAgB,CAAC,IAA6B,EAAE,IAA2B,EAAA;QAC1E,IAAI,CAAC,sBAAsB,GAAG;YAC7B,WAAW,EAAE,IAAI,KAAK,KAAK;YAC3B,UAAU,EAAE,IAAI,KAAK,OAAO;YAC5B,UAAU,EAAE,IAAI,KAAK,QAAQ;YAC7B,UAAU,EAAE,IAAI,KAAK,KAAK;SAC1B,CAAC;KACF;8GA/BW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAvB,uBAAuB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,SAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECjBpC,8FACA,EAAA,MAAA,EAAA,CAAA,olDAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcW,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAEL,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAXnC,SAAS;+BACC,kBAAkB,EAAA,UAAA,EAGhB,IAAI,EACV,IAAA,EAAA;AACL,wBAAA,IAAI,EAAE,SAAS;AACf,qBAAA,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EACtC,OAAA,EAAA,CAAC,OAAO,CAAC,EAAA,QAAA,EAAA,8FAAA,EAAA,MAAA,EAAA,CAAA,olDAAA,CAAA,EAAA,CAAA;8BAQlB,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,YAAY,CAAA;gBAQ1B,UAAU,EAAA,CAAA;sBADT,YAAY;uBAAC,YAAY,CAAA;gBAQ1B,EAAE,EAAA,CAAA;sBADD,WAAW;uBAAC,SAAS,CAAA;;;ME7BV,oBAAoB,CAAA;8GAApB,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;+GAApB,oBAAoB,EAAA,OAAA,EAAA,CAHtB,uBAAuB,CAAA,EAAA,OAAA,EAAA,CACvB,uBAAuB,CAAA,EAAA,CAAA,CAAA,EAAA;+GAErB,oBAAoB,EAAA,CAAA,CAAA,EAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAJhC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACT,OAAO,EAAE,CAAC,uBAAuB,CAAC;oBAClC,OAAO,EAAE,CAAC,uBAAuB,CAAC;AAClC,iBAAA,CAAA;;;MCFY,aAAa,CAAA;AACzB,IAAA,SAAS,CAAoB;AAI7B,IAAA,WAAA,GAAA;AAJA,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;QACpB,IAAa,CAAA,aAAA,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACpD,IAAY,CAAA,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAG3D,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAEtD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;QAE/C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;KACnD;AAED;;;;;;;;;AASG;AACH,IAAA,WAAW,CAAC,OAAoB,EAAA;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAEtD,QAAA,IAAI,YAAY,CAAC,YAAY,KAAK,UAAU,EAAE;AAC7C,YAAA,OAAO,KAAK,CAAC;SACb;QAED,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE;YACvC,OAAO,EAAE,YAAY,CAAC,OAAO;YAC7B,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,WAAW,EAAE,YAAY,CAAC,WAAW;YACrC,SAAS,EAAE,YAAY,CAAC,SAAS;YACjC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,UAAU,EAAE,YAAY,CAAC,UAAU;YACnC,SAAS,EAAE,YAAY,CAAC,SAAS;AACjC,YAAA,QAAQ,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,KAAK;AAC1J,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AAEjD,QAAA,IAAI;YACH,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC;YAE3D,OAAO,kBAAkB,GAAG,YAAY,CAAC;SACzC;QAAC,OAAO,CAAC,EAAE;AACX,YAAA,OAAO,KAAK,CAAC;SACb;KACD;8GAtDW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA,EAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACsBlC,IAAI,MAAM,GAAG,CAAC,CAAC;MAOF,yBAAyB,CAAA;AACrC,IAAA,QAAQ,CAAmB;AAE3B,IAAA,KAAK,CAA+C;AAEpD,IAAA,SAAS,CAAqB;AAC9B,IAAA,MAAM,CAAyB;AAE/B,IAAA,WAAW,CAAsB;AAEjC,IAAA,IAAI,CAA6B;AAKjC,IAAA,WAAW,CAAoC;IAE/C,IACI,mBAAmB,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED,IAAA,YAAY,CAAoC;IAEhD,IACI,mBAAmB,CAAC,KAAa,EAAA;AACpC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;AAED,IAAA,SAAS,CAAS;IAElB,IACI,iBAAiB,CAAC,QAAiB,EAAA;AACtC,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;SACtC;KACD;IA0BD,YAAY,GAAA;AACX,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;KAClB;IAGD,YAAY,GAAA;AACX,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACnB;IAGD,OAAO,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,eAAe,CAAC,KAAK,MAAM,EAAE;AACtE,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;SAClB;KACD;IAGD,MAAM,GAAA;AACL,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACnB;AAED,IAAA,YAAY,CAA2E;AAKvF,IAAA,IACI,eAAe,GAAA;AAClB,QAAA,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,uBAAuB,EAAE;AACjF,YAAA,OAAO,IAAI,CAAC;SACZ;AACD,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,YAAY,QAAQ,CAAC;KACpC;AAID,IAAA,WAAA,GAAA;AAlGA,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;AAE3B,QAAA,IAAA,CAAA,KAAK,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;AAEpD,QAAA,IAAA,CAAA,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;AAC9B,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAE/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAEjC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAKjC,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,eAAe,CAAS,GAAG,CAAC,CAAC;AAO/C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,eAAe,CAAS,GAAG,CAAC,CAAC;QAOhD,IAAS,CAAA,SAAA,GAAG,KAAK,CAAC;QAWlB,IAAuB,CAAA,uBAAA,GAAG,KAAK,CAAC;QAGhC,IAAiB,CAAA,iBAAA,GAAsB,OAAO,CAAC;QAG/C,IAAqB,CAAA,qBAAA,GAAG,KAAK,CAAC;AAE9B,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACrC,YAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;gBAC9C,QAAQ,CAAC,IAAI,EAAE,CAAC;AACjB,aAAC,CAAC,CAAC;YACH,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACjD,YAAA,OAAO,MAAK;gBACX,cAAc,CAAC,UAAU,EAAE,CAAC;AAC7B,aAAC,CAAC;AACH,SAAC,CAAC,CAAC;AAEH,QAAA,IAAA,CAAA,KAAK,GAAG,IAAI,OAAO,EAAQ,CAAC;AAE5B,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,OAAO,EAAQ,CAAC;AAwB7B,QAAA,IAAA,CAAA,YAAY,GAAG,CAAG,EAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA,SAAA,EAAY,MAAM,EAAE,EAAE,CAAC;QAgBtF,aAAa,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;aAClD,IAAI,CACJ,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,KAAI;;;YAGrC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAClC,MAAM,CAAC,MAAK;AACX,gBAAA,IAAI,IAAI,CAAC,SAAS,EAAE;AACnB,oBAAA,OAAO,KAAK,CAAC;iBACb;;AAED,gBAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC/B,oBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;iBACzD;;AAED,gBAAA,OAAO,IAAI,CAAC;aACZ,CAAC,EACF,GAAG,CAAC,MAAM,MAAM,CAAC,CACjB,CAAC;YACF,OAAO,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CACnE,QAAQ,CAAC,CAAC,KAAK,KAAI;AAClB,gBAAA,OAAO,KAAK,CAAC,KAAK,KAAK,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,CAAC;aACxD,CAAC,CACF,CAAC;SACF,CAAC,EACF,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CACpC;AACA,aAAA,SAAS,CAAC,CAAC,KAAK,KAAI;AACpB,YAAA,IAAI,KAAK,KAAK,MAAM,EAAE;gBACrB,IAAI,CAAC,WAAW,EAAE,CAAC;aACnB;iBAAM;gBACN,IAAI,CAAC,YAAY,EAAE,CAAC;aACpB;AACF,SAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACzF,YAAA,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACH;IAED,WAAW,GAAA;QACV,IAAI,CAAC,YAAY,EAAE,CAAC;KACpB;IAEO,WAAW,GAAA;;AAElB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACpB,OAAO;SACP;AACD,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC9C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;AACtC,YAAA,gBAAgB,EAAE,QAAQ;YAC1B,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE;AACtD,YAAA,mBAAmB,EAAE,IAAI;AACzB,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,uBAAuB,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAC3C,QAAA,QAAQ,CAAC,eAAe;AACtB,aAAA,IAAI,CACJ,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,EACpC,GAAG,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,cAAc,CAAC,EAC3C,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAChC;aACA,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAI;YACrC,GAAG,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;AACJ,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE;YACnB,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;SACtC;AAAM,aAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AACtC,YAAA,GAAG,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC;SAC1D;QACD,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC;;AAEvC,QAAA,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;;AAE/G,QAAA,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;KAC9G;IAEO,YAAY,GAAA;AACnB,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,UAAU,CAAC;SACvB;KACD;AAEO,IAAA,0BAA0B,CAAC,QAAuB,EAAA;QACzD,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,qBAAqB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE;AACzG,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;YACrE,OAAO;SACP;AAED,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;AAC3D,QAAA,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC7E,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAEnE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;AAEhF,QAAA,IAAI,CAAC,sBAAsB,IAAI,CAAC,YAAY,EAAE;AAC7C,YAAA,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvF;KACD;IAED,kBAAkB,GAAA;AACjB,QAAA,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;KAC5D;AAED;;;;AAIyB;IAEjB,qBAAqB,GAAA;AAC5B,QAAA,MAAM,kBAAkB,GAA6B;AACpD,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,OAAO,EAAE,KAAK;SACd,CAAC;;AAGF,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC;AACxC,QAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AACzB,YAAA,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;SACnC;AAAM,aAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AAChC,YAAA,kBAAkB,CAAC,OAAO,GAAG,QAAQ,CAAC;SACtC;AAAM,aAAA,IAAI,QAAQ,KAAK,QAAQ,EAAE;AACjC,YAAA,kBAAkB,CAAC,OAAO,GAAG,OAAO,CAAC;SACrC;AAAM,aAAA,IAAI,QAAQ,KAAK,OAAO,EAAE;AAChC,YAAA,kBAAkB,CAAC,OAAO,GAAG,KAAK,CAAC;SACnC;;QAGD,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE;AACjD,YAAA,kBAAkB,CAAC,OAAO,GAAG,QAAQ,CAAC;SACtC;aAAM;AACN,YAAA,kBAAkB,CAAC,OAAO,GAAG,QAAQ,CAAC;SACtC;AAED,QAAA,MAAM,eAAe,GAA8B;AAClD,YAAA,QAAQ,EAAE,OAAO;AACjB,YAAA,QAAQ,EAAE,KAAK;SACf,CAAC;QAEF,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,EAAE;AACjD,YAAA,eAAe,CAAC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;AACtD,YAAA,eAAe,CAAC,QAAQ,GAAG,QAAQ,KAAK,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;SACnE;aAAM;AACN,YAAA,eAAe,CAAC,QAAQ,GAAG,QAAQ,KAAK,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AACnE,YAAA,eAAe,CAAC,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC;SACtD;QAED,OAAO,IAAI,CAAC,QAAQ;AAClB,aAAA,QAAQ,EAAE;AACV,aAAA,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AAC/B,aAAA,aAAa,CAAC;AACd,YAAA;gBACC,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAClC,QAAQ,EAAE,eAAe,CAAC,QAAQ;AAClC,aAAA;AACD,YAAA;gBACC,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC3D,QAAQ,EAAE,eAAe,CAAC,QAAQ;gBAClC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1D,aAAA;AACD,YAAA;gBACC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC7D,OAAO,EAAE,kBAAkB,CAAC,OAAO;gBACnC,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5D,QAAQ,EAAE,eAAe,CAAC,QAAQ;AAClC,aAAA;AACD,YAAA;gBACC,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC7D,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,OAAO,CAAC;gBAC3D,QAAQ,EAAE,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,QAAQ,CAAC;gBAC5D,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,QAAQ,CAAC;AAC1D,aAAA;AACD,SAAA,CAAC,CAAC;KACJ;AAEO,IAAA,iBAAiB,CAAC,CAAwB,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK,KAAK,EAAE;AAChB,YAAA,OAAO,QAAQ,CAAC;SAChB;AAAM,aAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;AAC1B,YAAA,OAAO,KAAK,CAAC;SACb;AACD,QAAA,OAAO,CAAC,CAAC;KACT;AAEO,IAAA,mBAAmB,CAAC,CAA0B,EAAA;AACrD,QAAA,IAAI,CAAC,KAAK,KAAK,EAAE;AAChB,YAAA,OAAO,OAAO,CAAC;SACf;AAAM,aAAA,IAAI,CAAC,KAAK,OAAO,EAAE;AACzB,YAAA,OAAO,KAAK,CAAC;SACb;AACD,QAAA,OAAO,CAAC,CAAC;KACT;8GA3SW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,mBAAA,EAAA,CAAA,qBAAA,EAAA,qBAAA,EAiBjB,eAAe,CAOf,EAAA,mBAAA,EAAA,CAAA,qBAAA,EAAA,qBAAA,EAAA,eAAe,iEAOf,gBAAgB,CAAA,EAAA,uBAAA,EAAA,CAAA,yBAAA,EAAA,yBAAA,EAQhB,gBAAgB,CAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,CAAA,uBAAA,EAAA,uBAAA,EAMhB,gBAAgB,CAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,WAAA,EAAA,MAAA,EAAA,UAAA,EAAA,EAAA,UAAA,EAAA,EAAA,SAAA,EAAA,UAAA,EAAA,uBAAA,EAAA,sBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FA7CxB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,WAAW;AACrB,oBAAA,UAAU,EAAE,IAAI;AAChB,iBAAA,CAAA;wDAcA,SAAS,EAAA,CAAA;sBADR,KAAK;gBAMF,mBAAmB,EAAA,CAAA;sBADtB,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAQjC,mBAAmB,EAAA,CAAA;sBADtB,KAAK;uBAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAA;gBAQjC,iBAAiB,EAAA,CAAA;sBADpB,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAStC,uBAAuB,EAAA,CAAA;sBADtB,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAItC,iBAAiB,EAAA,CAAA;sBADhB,KAAK;gBAIN,qBAAqB,EAAA,CAAA;sBADpB,KAAK;uBAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAA;gBAkBtC,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAM1B,YAAY,EAAA,CAAA;sBADX,YAAY;uBAAC,YAAY,CAAA;gBAM1B,OAAO,EAAA,CAAA;sBADN,YAAY;uBAAC,OAAO,CAAA;gBAQrB,MAAM,EAAA,CAAA;sBADL,YAAY;uBAAC,MAAM,CAAA;gBAQpB,GAAG,EAAA,CAAA;sBADF,WAAW;uBAAC,SAAS,CAAA;gBAIlB,eAAe,EAAA,CAAA;sBADlB,WAAW;uBAAC,uBAAuB,CAAA;;;MCjHxB,sBAAsB,CAAA;8GAAtB,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,EAHxB,OAAA,EAAA,CAAA,yBAAyB,EAAE,aAAa,aACxC,yBAAyB,CAAA,EAAA,CAAA,CAAA,EAAA;AAEvB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,YAHG,aAAa,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAGtC,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAJlC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,yBAAyB,EAAE,aAAa,CAAC;oBACnD,OAAO,EAAE,CAAC,yBAAyB,CAAC;AACpC,iBAAA,CAAA;;;MCCY,eAAe,CAAA;8GAAf,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAf,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHjB,sBAAsB,EAAE,oBAAoB,CAC5C,EAAA,OAAA,EAAA,CAAA,sBAAsB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA,EAAA;AAE1C,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,YAHjB,sBAAsB,EAAE,oBAAoB,EAC5C,sBAAsB,EAAE,oBAAoB,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAE1C,eAAe,EAAA,UAAA,EAAA,CAAA;kBAJ3B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;AACvD,oBAAA,OAAO,EAAE,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;AACvD,iBAAA,CAAA;;;ACPD;;AAEG;;;;"}
@@ -1,3 +1,5 @@
1
1
  export * from './displayer/index';
2
2
  export * from './input/index';
3
+ export { LuMultiSelection, LuMultiSelectionMode } from './select.model';
3
4
  export * from './select.translate';
5
+ export * from './select.utils';
@@ -0,0 +1,14 @@
1
+ import { LuMultiSelection } from './select.model';
2
+ export declare function selectionToQueryParams<T, Key extends string>(key: Key, value: LuMultiSelection<T>, selector: (value: T) => unknown): Partial<Record<Key | `-${Key}`, string>>;
3
+ /**
4
+ * Transforms a selection from withSelectAll, the complete list of options and a getKey function to a list of options.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * const selection = { mode: 'exclude', values: [{ id: 1, name: 'foo' }] };
9
+ * const allOptions = [{ id: 1, name: 'foo' }, { id: 2, name: 'bar' }, { id: 3, name: 'baz' }];
10
+ *
11
+ * const selectedOptions = selectionToOptions(selection, allOptions, (o) => o.id);
12
+ * ```
13
+ */
14
+ export declare function selectionToOptions<T>(selection: LuMultiSelection<T>, options: T[], getKeyFn: (value: T) => unknown): T[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucca-front/ng",
3
- "version": "18.3.0",
3
+ "version": "18.3.1",
4
4
  "description": "A library of icons made by the team @Lucca",
5
5
  "repository": {
6
6
  "type": "git",
@@ -26,8 +26,8 @@
26
26
  "@angular/common": "^18.0.0",
27
27
  "@angular/core": "^18.0.0",
28
28
  "@angular/cdk": "^18.0.0",
29
- "@lucca-front/icons": "18.3.0",
30
- "@lucca-front/scss": "18.3.0",
29
+ "@lucca-front/icons": "18.3.1",
30
+ "@lucca-front/scss": "18.3.1",
31
31
  "@types/dompurify": "^3.0.0",
32
32
  "isomorphic-dompurify": "^2.11.0",
33
33
  "date-fns": "^3.6.0",
@@ -54,11 +54,11 @@
54
54
  "esm": "./esm2022/a11y/lucca-front-ng-a11y.mjs",
55
55
  "default": "./fesm2022/lucca-front-ng-a11y.mjs"
56
56
  },
57
- "./animations": {
58
- "types": "./animations/index.d.ts",
59
- "esm2022": "./esm2022/animations/lucca-front-ng-animations.mjs",
60
- "esm": "./esm2022/animations/lucca-front-ng-animations.mjs",
61
- "default": "./fesm2022/lucca-front-ng-animations.mjs"
57
+ "./api": {
58
+ "types": "./api/index.d.ts",
59
+ "esm2022": "./esm2022/api/lucca-front-ng-api.mjs",
60
+ "esm": "./esm2022/api/lucca-front-ng-api.mjs",
61
+ "default": "./fesm2022/lucca-front-ng-api.mjs"
62
62
  },
63
63
  "./button": {
64
64
  "types": "./button/index.d.ts",
@@ -66,17 +66,23 @@
66
66
  "esm": "./esm2022/button/lucca-front-ng-button.mjs",
67
67
  "default": "./fesm2022/lucca-front-ng-button.mjs"
68
68
  },
69
+ "./animations": {
70
+ "types": "./animations/index.d.ts",
71
+ "esm2022": "./esm2022/animations/lucca-front-ng-animations.mjs",
72
+ "esm": "./esm2022/animations/lucca-front-ng-animations.mjs",
73
+ "default": "./fesm2022/lucca-front-ng-animations.mjs"
74
+ },
69
75
  "./callout": {
70
76
  "types": "./callout/index.d.ts",
71
77
  "esm2022": "./esm2022/callout/lucca-front-ng-callout.mjs",
72
78
  "esm": "./esm2022/callout/lucca-front-ng-callout.mjs",
73
79
  "default": "./fesm2022/lucca-front-ng-callout.mjs"
74
80
  },
75
- "./api": {
76
- "types": "./api/index.d.ts",
77
- "esm2022": "./esm2022/api/lucca-front-ng-api.mjs",
78
- "esm": "./esm2022/api/lucca-front-ng-api.mjs",
79
- "default": "./fesm2022/lucca-front-ng-api.mjs"
81
+ "./core": {
82
+ "types": "./core/index.d.ts",
83
+ "esm2022": "./esm2022/core/lucca-front-ng-core.mjs",
84
+ "esm": "./esm2022/core/lucca-front-ng-core.mjs",
85
+ "default": "./fesm2022/lucca-front-ng-core.mjs"
80
86
  },
81
87
  "./comment": {
82
88
  "types": "./comment/index.d.ts",
@@ -84,12 +90,6 @@
84
90
  "esm": "./esm2022/comment/lucca-front-ng-comment.mjs",
85
91
  "default": "./fesm2022/lucca-front-ng-comment.mjs"
86
92
  },
87
- "./core": {
88
- "types": "./core/index.d.ts",
89
- "esm2022": "./esm2022/core/lucca-front-ng-core.mjs",
90
- "esm": "./esm2022/core/lucca-front-ng-core.mjs",
91
- "default": "./fesm2022/lucca-front-ng-core.mjs"
92
- },
93
93
  "./core-select": {
94
94
  "types": "./core-select/index.d.ts",
95
95
  "esm2022": "./esm2022/core-select/lucca-front-ng-core-select.mjs",
@@ -114,18 +114,18 @@
114
114
  "esm": "./esm2022/department/lucca-front-ng-department.mjs",
115
115
  "default": "./fesm2022/lucca-front-ng-department.mjs"
116
116
  },
117
- "./dialog": {
118
- "types": "./dialog/index.d.ts",
119
- "esm2022": "./esm2022/dialog/lucca-front-ng-dialog.mjs",
120
- "esm": "./esm2022/dialog/lucca-front-ng-dialog.mjs",
121
- "default": "./fesm2022/lucca-front-ng-dialog.mjs"
122
- },
123
117
  "./dropdown": {
124
118
  "types": "./dropdown/index.d.ts",
125
119
  "esm2022": "./esm2022/dropdown/lucca-front-ng-dropdown.mjs",
126
120
  "esm": "./esm2022/dropdown/lucca-front-ng-dropdown.mjs",
127
121
  "default": "./fesm2022/lucca-front-ng-dropdown.mjs"
128
122
  },
123
+ "./dialog": {
124
+ "types": "./dialog/index.d.ts",
125
+ "esm2022": "./esm2022/dialog/lucca-front-ng-dialog.mjs",
126
+ "esm": "./esm2022/dialog/lucca-front-ng-dialog.mjs",
127
+ "default": "./fesm2022/lucca-front-ng-dialog.mjs"
128
+ },
129
129
  "./empty-state": {
130
130
  "types": "./empty-state/index.d.ts",
131
131
  "esm2022": "./esm2022/empty-state/lucca-front-ng-empty-state.mjs",
@@ -252,18 +252,18 @@
252
252
  "esm": "./esm2022/popup-employee/lucca-front-ng-popup-employee.mjs",
253
253
  "default": "./fesm2022/lucca-front-ng-popup-employee.mjs"
254
254
  },
255
- "./safe-content": {
256
- "types": "./safe-content/index.d.ts",
257
- "esm2022": "./esm2022/safe-content/lucca-front-ng-safe-content.mjs",
258
- "esm": "./esm2022/safe-content/lucca-front-ng-safe-content.mjs",
259
- "default": "./fesm2022/lucca-front-ng-safe-content.mjs"
260
- },
261
255
  "./qualification": {
262
256
  "types": "./qualification/index.d.ts",
263
257
  "esm2022": "./esm2022/qualification/lucca-front-ng-qualification.mjs",
264
258
  "esm": "./esm2022/qualification/lucca-front-ng-qualification.mjs",
265
259
  "default": "./fesm2022/lucca-front-ng-qualification.mjs"
266
260
  },
261
+ "./safe-content": {
262
+ "types": "./safe-content/index.d.ts",
263
+ "esm2022": "./esm2022/safe-content/lucca-front-ng-safe-content.mjs",
264
+ "esm": "./esm2022/safe-content/lucca-front-ng-safe-content.mjs",
265
+ "default": "./fesm2022/lucca-front-ng-safe-content.mjs"
266
+ },
267
267
  "./scroll": {
268
268
  "types": "./scroll/index.d.ts",
269
269
  "esm2022": "./esm2022/scroll/lucca-front-ng-scroll.mjs",
@@ -0,0 +1,20 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class EllipsisRuler {
3
+ #private;
4
+ readonly elementCloned: HTMLDivElement;
5
+ readonly parentMasked: HTMLDivElement;
6
+ constructor();
7
+ /**
8
+ * Hacky af but let's explain everything
9
+ * This method checks for ellipsis by cloning the node and checking its width against original element.
10
+ *
11
+ * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,
12
+ * you'd get true while it should be false and vice-versa, because of rounding.
13
+ *
14
+ * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,
15
+ * which we then compare with its current size.
16
+ */
17
+ hasEllipsis(element: HTMLElement): boolean;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<EllipsisRuler, never>;
19
+ static ɵprov: i0.ɵɵInjectableDeclaration<EllipsisRuler>;
20
+ }
@@ -28,19 +28,6 @@ export declare class LuTooltipTriggerDirective implements AfterContentInit, OnDe
28
28
  private openTooltip;
29
29
  private closeTooltip;
30
30
  private setAccessibilityProperties;
31
- /**
32
- * Hacky af but let's explain everything
33
- * This method checks for ellipsis by cloning the node and checking its width against original element.
34
- *
35
- * We used to do this using scrollWidth but the thing is, it's a rounded value. Sometimes,
36
- * you'd get true while it should be false and vice-versa, because of rounding.
37
- *
38
- * So we duplicate the properties we're interested in on the element to be tested to calculate its ideal size,
39
- * which we then compare with its current size.
40
- *
41
- * @private
42
- */
43
- private hasEllipsis;
44
31
  ngAfterContentInit(): void;
45
32
  /**********************
46
33
  *