@energycap/components 0.32.19 → 0.32.20

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.
@@ -18,7 +18,7 @@ import { takeUntil, distinctUntilChanged, filter, take, debounceTime, switchMap,
18
18
  import moment from 'moment';
19
19
  import Popper from 'popper.js';
20
20
  import { cloneDeep, uniqueId, isEqual, sortBy, orderBy, get, upperFirst } from 'lodash';
21
- import { TemplatePortal, ComponentPortal } from '@angular/cdk/portal';
21
+ import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
22
22
 
23
23
  class CacheService {
24
24
  constructor() {
@@ -4252,6 +4252,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
4252
4252
  args: ['textbox', { static: true }]
4253
4253
  }] } });
4254
4254
 
4255
+ class TooltipComponent {
4256
+ constructor() {
4257
+ this.position = 'top-center';
4258
+ this.dismissible = false;
4259
+ this.onHide = new EventEmitter();
4260
+ }
4261
+ hide() {
4262
+ this.onHide.next();
4263
+ this.overlayRef?.dispose();
4264
+ }
4265
+ }
4266
+ TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
4267
+ TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: TooltipComponent, selector: "ec-tooltip", host: { properties: { "style.--ec-tooltip-background-color": "this.backgroundColor" } }, ngImport: i0, template: "<article id=\"{{id}}\" class=\"py-3 position-{{position}}\">\r\n <header *ngIf=\"title || subtitle\" class=\"mb-3\">\r\n <h1 class=\"text-heading-2 px-3 mb-0\">{{title}}</h1>\r\n <p class=\"text-caption-1 px-3 mb-0\">{{subtitle}}</p>\r\n </header>\r\n \r\n <ng-container *ngIf=\"customContent; else textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customContent\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #textTemplate>\r\n <div class=\"text-body-1 px-3\" [innerHTML]=\"text\"></div>\r\n </ng-template>\r\n \r\n <ec-button *ngIf=\"dismissible\" id=\"tooltipDismiss\" type=\"icon\" icon=\"icon-cancel\" (clicked)=\"hide()\" style=\"--ec-button-color-icon: var(--ec-color-secondary-light);\"></ec-button>\r\n</article>", styles: [":host{display:block;padding:.75rem}article{background-color:var(--ec-tooltip-background-color, #162F3B);color:var(--ec-tooltip-color, var(--ec-color-primary-light));border-radius:var(--ec-border-radius-card);position:relative;box-shadow:var(--ec-box-shadow-overlay);--ec-color-interactive: var(--ec-color-interactive-light)}article:after{content:\"\";height:0;width:0;border:.625rem solid transparent;display:block;position:absolute;pointer-events:none}article.position-top-left:after,article.position-top-center:after,article.position-top-right:after{bottom:-1.25rem;border-top-color:var(--ec-tooltip-background-color, #162F3B)}article.position-bottom-left:after,article.position-bottom-center:after,article.position-bottom-right:after{top:-1.25rem;border-bottom-color:var(--ec-tooltip-background-color, #162F3B)}article.position-top-left:after,article.position-bottom-left:after{right:1rem}article.position-top-right:after,article.position-bottom-right:after{left:1rem}article.position-top-center:after,article.position-bottom-center:after{right:50%;transform:translate(50%)}article.position-right-top:after,article.position-right-center:after,article.position-right-bottom:after{left:-1.25rem;border-right-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-left-center:after,article.position-left-bottom:after{right:-1.25rem;border-left-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-right-top:after{top:1rem}article.position-left-bottom:after,article.position-right-bottom:after{bottom:1rem}article.position-left-center:after,article.position-right-center:after{bottom:50%;transform:translateY(50%)}.text-heading-2,.text-body-1{color:var(--ec-color-primary-light)}.text-body-1 ::ng-deep p:last-child{margin-bottom:0}.text-body-1 ::ng-deep a{font-weight:var(--ec-font-weight-bold)}.text-caption-1{color:var(--ec-color-secondary-light)}ec-button{position:absolute;top:.25rem;right:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }] });
4268
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, decorators: [{
4269
+ type: Component,
4270
+ args: [{ selector: 'ec-tooltip', template: "<article id=\"{{id}}\" class=\"py-3 position-{{position}}\">\r\n <header *ngIf=\"title || subtitle\" class=\"mb-3\">\r\n <h1 class=\"text-heading-2 px-3 mb-0\">{{title}}</h1>\r\n <p class=\"text-caption-1 px-3 mb-0\">{{subtitle}}</p>\r\n </header>\r\n \r\n <ng-container *ngIf=\"customContent; else textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customContent\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #textTemplate>\r\n <div class=\"text-body-1 px-3\" [innerHTML]=\"text\"></div>\r\n </ng-template>\r\n \r\n <ec-button *ngIf=\"dismissible\" id=\"tooltipDismiss\" type=\"icon\" icon=\"icon-cancel\" (clicked)=\"hide()\" style=\"--ec-button-color-icon: var(--ec-color-secondary-light);\"></ec-button>\r\n</article>", styles: [":host{display:block;padding:.75rem}article{background-color:var(--ec-tooltip-background-color, #162F3B);color:var(--ec-tooltip-color, var(--ec-color-primary-light));border-radius:var(--ec-border-radius-card);position:relative;box-shadow:var(--ec-box-shadow-overlay);--ec-color-interactive: var(--ec-color-interactive-light)}article:after{content:\"\";height:0;width:0;border:.625rem solid transparent;display:block;position:absolute;pointer-events:none}article.position-top-left:after,article.position-top-center:after,article.position-top-right:after{bottom:-1.25rem;border-top-color:var(--ec-tooltip-background-color, #162F3B)}article.position-bottom-left:after,article.position-bottom-center:after,article.position-bottom-right:after{top:-1.25rem;border-bottom-color:var(--ec-tooltip-background-color, #162F3B)}article.position-top-left:after,article.position-bottom-left:after{right:1rem}article.position-top-right:after,article.position-bottom-right:after{left:1rem}article.position-top-center:after,article.position-bottom-center:after{right:50%;transform:translate(50%)}article.position-right-top:after,article.position-right-center:after,article.position-right-bottom:after{left:-1.25rem;border-right-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-left-center:after,article.position-left-bottom:after{right:-1.25rem;border-left-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-right-top:after{top:1rem}article.position-left-bottom:after,article.position-right-bottom:after{bottom:1rem}article.position-left-center:after,article.position-right-center:after{bottom:50%;transform:translateY(50%)}.text-heading-2,.text-body-1{color:var(--ec-color-primary-light)}.text-body-1 ::ng-deep p:last-child{margin-bottom:0}.text-body-1 ::ng-deep a{font-weight:var(--ec-font-weight-bold)}.text-caption-1{color:var(--ec-color-secondary-light)}ec-button{position:absolute;top:.25rem;right:.25rem}\n"] }]
4271
+ }], propDecorators: { backgroundColor: [{
4272
+ type: HostBinding,
4273
+ args: ['style.--ec-tooltip-background-color']
4274
+ }] } });
4275
+
4276
+ class TooltipService {
4277
+ constructor(overlay) {
4278
+ this.overlay = overlay;
4279
+ this.positions = {
4280
+ 'top-left': { originX: 'center', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetX: 38 },
4281
+ 'top-center': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },
4282
+ 'top-right': { originX: 'center', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetX: -38 },
4283
+ 'bottom-left': { originX: 'center', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetX: 38 },
4284
+ 'bottom-center': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },
4285
+ 'bottom-right': { originX: 'center', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetX: -38 },
4286
+ 'left-top': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'top', offsetY: -38 },
4287
+ 'left-center': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
4288
+ 'left-bottom': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'bottom', offsetY: 38 },
4289
+ 'right-top': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'top', offsetY: -38 },
4290
+ 'right-center': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
4291
+ 'right-bottom': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'bottom', offsetY: 38 }
4292
+ };
4293
+ }
4294
+ /**
4295
+ * Show a tooltip attached to a specified element
4296
+ */
4297
+ show(anchor, position = 'top-center', options) {
4298
+ const overlayConfig = this.getOverlayConfig(anchor, this.positions[position], options?.width, options?.maxWidth);
4299
+ const overlayRef = this.overlay.create(overlayConfig);
4300
+ const contentPortal = new ComponentPortal(TooltipComponent);
4301
+ const contentViewRef = overlayRef.attach(contentPortal);
4302
+ contentViewRef.instance.position = position;
4303
+ contentViewRef.instance.id = options?.id;
4304
+ contentViewRef.instance.title = options?.title;
4305
+ contentViewRef.instance.subtitle = options?.subtitle;
4306
+ contentViewRef.instance.text = options?.text;
4307
+ contentViewRef.instance.customContent = options?.customContent;
4308
+ contentViewRef.instance.dismissible = options?.dismissible || false;
4309
+ contentViewRef.instance.backgroundColor = options?.backgroundColor;
4310
+ contentViewRef.instance.overlayRef = overlayRef;
4311
+ return contentViewRef.instance;
4312
+ }
4313
+ onMove(event, contentRect) {
4314
+ let callCallback = false;
4315
+ if (contentRect) {
4316
+ if (event.clientX > contentRect.right
4317
+ || event.clientX < contentRect.left
4318
+ || event.clientY > contentRect.bottom
4319
+ || event.clientY < contentRect.top) {
4320
+ callCallback = true;
4321
+ }
4322
+ }
4323
+ return callCallback;
4324
+ }
4325
+ getOverlayConfig(element, position, width, maxWidth) {
4326
+ const positionStrategy = this.overlay.position()
4327
+ .flexibleConnectedTo(element)
4328
+ .withPositions([position]);
4329
+ const config = new OverlayConfig({
4330
+ positionStrategy: positionStrategy,
4331
+ width: width,
4332
+ maxWidth: maxWidth
4333
+ });
4334
+ return config;
4335
+ }
4336
+ }
4337
+ TooltipService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, deps: [{ token: i1$2.Overlay }], target: i0.ɵɵFactoryTarget.Injectable });
4338
+ TooltipService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, providedIn: 'root' });
4339
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, decorators: [{
4340
+ type: Injectable,
4341
+ args: [{
4342
+ providedIn: 'root'
4343
+ }]
4344
+ }], ctorParameters: function () { return [{ type: i1$2.Overlay }]; } });
4345
+
4255
4346
  class TagsComponent {
4256
4347
  constructor() {
4257
4348
  /**The ID of this set of tags */
@@ -4326,10 +4417,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
4326
4417
  }] } });
4327
4418
 
4328
4419
  class PopoverComponent {
4329
- constructor(overlay, viewContainerRef, elementRef) {
4420
+ constructor(overlay, viewContainerRef, elementRef, tooltipService) {
4330
4421
  this.overlay = overlay;
4331
4422
  this.viewContainerRef = viewContainerRef;
4332
4423
  this.elementRef = elementRef;
4424
+ this.tooltipService = tooltipService;
4333
4425
  /** An optional icon that, if provided, enables the popover to use it as the anchor element */
4334
4426
  this.icon = '';
4335
4427
  this.contentPosition = 'top-left';
@@ -4359,6 +4451,9 @@ class PopoverComponent {
4359
4451
  const contentPortal = new TemplatePortal(this.content, this.viewContainerRef);
4360
4452
  this.contentViewRef = this.overlayRef.attach(contentPortal);
4361
4453
  this.isVisible = true;
4454
+ //contentRect will be assing only after showing a tooltip/popover and it will be
4455
+ //reset after hide the same tooltip/popover
4456
+ this.contentRect = this.contentViewRef?.rootNodes[0].getBoundingClientRect();
4362
4457
  }
4363
4458
  }
4364
4459
  onMouseOver() {
@@ -4371,23 +4466,19 @@ class PopoverComponent {
4371
4466
  * Hides the popover if the mouse moves outside of the popover content
4372
4467
  */
4373
4468
  onMouseMove(event) {
4374
- if (!this.contentRect) {
4375
- this.contentRect = this.contentViewRef?.rootNodes[0].getBoundingClientRect();
4376
- }
4469
+ let callCallback = false;
4377
4470
  if (this.contentRect) {
4378
- if (event.clientX > this.contentRect.right
4379
- || event.clientX < this.contentRect.left
4380
- || event.clientY > this.contentRect.bottom
4381
- || event.clientY < this.contentRect.top) {
4471
+ callCallback = this.tooltipService.onMove(event, this.contentRect);
4472
+ if (callCallback) {
4382
4473
  this.hide();
4383
4474
  }
4384
4475
  }
4385
4476
  }
4386
4477
  hide() {
4387
- this.contentRect = undefined;
4478
+ this.interrupt.next();
4388
4479
  this.overlayRef?.dispose();
4389
4480
  this.isVisible = false;
4390
- this.interrupt.next();
4481
+ this.contentRect = undefined;
4391
4482
  }
4392
4483
  getOverlayConfig() {
4393
4484
  const position = this.getPosition();
@@ -4406,12 +4497,12 @@ class PopoverComponent {
4406
4497
  return { originX: overlayX, originY: overlayY, overlayX: overlayX, overlayY: overlayY };
4407
4498
  }
4408
4499
  }
4409
- PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PopoverComponent, deps: [{ token: i1$2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
4500
+ PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PopoverComponent, deps: [{ token: i1$2.Overlay }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: TooltipService }], target: i0.ɵɵFactoryTarget.Component });
4410
4501
  PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: PopoverComponent, selector: "ec-popover", inputs: { icon: "icon", tag: "tag", tagHoverType: "tagHoverType", contentPosition: "contentPosition", iconHoverClass: "iconHoverClass" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseleave": "onLeave()" } }, viewQueries: [{ propertyName: "content", first: true, predicate: ["content"], descendants: true }], ngImport: i0, template: "<!-- Before hover state -->\r\n<div class=\"p-2\">\r\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm\"></i>\r\n <ec-tags *ngIf=\"tag\"\r\n [isCondensed] = \"true\"\r\n [tags]=\"tag\">\r\n </ec-tags>\r\n</div>\r\n<!-- ./Before hover state -->\r\n\r\n<!-- Hover state -->\r\n<ng-template #content>\r\n <article class=\"popover-content\"\r\n (document:mousemove)=\"onMouseMove($event)\">\r\n <ng-content></ng-content>\r\n </article>\r\n <div class=\"p-2 {{contentPosition}}\">\r\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm {{iconHoverClass}}\"></i>\r\n <ec-tags *ngIf=\"tag\"\r\n [isCondensed]=\"true\"\r\n [tags]=\"hoverTag\">\r\n </ec-tags>\r\n </div>\r\n</ng-template>\r\n<!-- ./Hover state -->\r\n", styles: [":host{line-height:.75rem;display:inline-block}.popover-content{border-radius:var(--ec-border-radius);box-shadow:0 3px 6px #1a1a231f;overflow:hidden;position:relative}.popover-content+div{position:absolute;line-height:.75rem}.popover-content+div.top-left{top:0;left:0}.popover-content+div.top-right{top:0;right:0}.popover-content+div.bottom-right{bottom:0;right:0}.popover-content+div.bottom-left{bottom:0;left:0}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TagsComponent, selector: "ec-tags", inputs: ["id", "tags", "wrap", "isCondensed"], outputs: ["tagClosed"] }] });
4411
4502
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: PopoverComponent, decorators: [{
4412
4503
  type: Component,
4413
4504
  args: [{ selector: 'ec-popover', template: "<!-- Before hover state -->\r\n<div class=\"p-2\">\r\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm\"></i>\r\n <ec-tags *ngIf=\"tag\"\r\n [isCondensed] = \"true\"\r\n [tags]=\"tag\">\r\n </ec-tags>\r\n</div>\r\n<!-- ./Before hover state -->\r\n\r\n<!-- Hover state -->\r\n<ng-template #content>\r\n <article class=\"popover-content\"\r\n (document:mousemove)=\"onMouseMove($event)\">\r\n <ng-content></ng-content>\r\n </article>\r\n <div class=\"p-2 {{contentPosition}}\">\r\n <i *ngIf=\"!tag\" class=\"ec-icon {{icon}} ec-icon-sm {{iconHoverClass}}\"></i>\r\n <ec-tags *ngIf=\"tag\"\r\n [isCondensed]=\"true\"\r\n [tags]=\"hoverTag\">\r\n </ec-tags>\r\n </div>\r\n</ng-template>\r\n<!-- ./Hover state -->\r\n", styles: [":host{line-height:.75rem;display:inline-block}.popover-content{border-radius:var(--ec-border-radius);box-shadow:0 3px 6px #1a1a231f;overflow:hidden;position:relative}.popover-content+div{position:absolute;line-height:.75rem}.popover-content+div.top-left{top:0;left:0}.popover-content+div.top-right{top:0;right:0}.popover-content+div.bottom-right{bottom:0;right:0}.popover-content+div.bottom-left{bottom:0;left:0}\n"] }]
4414
- }], ctorParameters: function () { return [{ type: i1$2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }]; }, propDecorators: { icon: [{
4505
+ }], ctorParameters: function () { return [{ type: i1$2.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: TooltipService }]; }, propDecorators: { icon: [{
4415
4506
  type: Input
4416
4507
  }], tag: [{
4417
4508
  type: Input
@@ -8918,27 +9009,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
8918
9009
  type: Input
8919
9010
  }] } });
8920
9011
 
8921
- class TooltipComponent {
8922
- constructor() {
8923
- this.position = 'top-center';
8924
- this.dismissible = false;
8925
- this.onHide = new EventEmitter();
8926
- }
8927
- hide() {
8928
- this.onHide.next();
8929
- this.overlayRef?.dispose();
8930
- }
8931
- }
8932
- TooltipComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8933
- TooltipComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: TooltipComponent, selector: "ec-tooltip", host: { properties: { "style.--ec-tooltip-background-color": "this.backgroundColor" } }, ngImport: i0, template: "<article id=\"{{id}}\" class=\"py-3 position-{{position}}\">\r\n <header *ngIf=\"title || subtitle\" class=\"mb-3\">\r\n <h1 class=\"text-heading-2 px-3 mb-0\">{{title}}</h1>\r\n <p class=\"text-caption-1 px-3 mb-0\">{{subtitle}}</p>\r\n </header>\r\n \r\n <ng-container *ngIf=\"customContent; else textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customContent\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #textTemplate>\r\n <div class=\"text-body-1 px-3\" [innerHTML]=\"text\"></div>\r\n </ng-template>\r\n \r\n <ec-button *ngIf=\"dismissible\" id=\"tooltipDismiss\" type=\"icon\" icon=\"icon-cancel\" (clicked)=\"hide()\" style=\"--ec-button-color-icon: var(--ec-color-secondary-light);\"></ec-button>\r\n</article>", styles: [":host{display:block;padding:.75rem}article{background-color:var(--ec-tooltip-background-color, #162F3B);color:var(--ec-tooltip-color, var(--ec-color-primary-light));border-radius:var(--ec-border-radius-card);position:relative;box-shadow:var(--ec-box-shadow-overlay);--ec-color-interactive: var(--ec-color-interactive-light)}article:after{content:\"\";height:0;width:0;border:.625rem solid transparent;display:block;position:absolute;pointer-events:none}article.position-top-left:after,article.position-top-center:after,article.position-top-right:after{bottom:-1.25rem;border-top-color:var(--ec-tooltip-background-color, #162F3B)}article.position-bottom-left:after,article.position-bottom-center:after,article.position-bottom-right:after{top:-1.25rem;border-bottom-color:var(--ec-tooltip-background-color, #162F3B)}article.position-top-left:after,article.position-bottom-left:after{right:1rem}article.position-top-right:after,article.position-bottom-right:after{left:1rem}article.position-top-center:after,article.position-bottom-center:after{right:50%;transform:translate(50%)}article.position-right-top:after,article.position-right-center:after,article.position-right-bottom:after{left:-1.25rem;border-right-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-left-center:after,article.position-left-bottom:after{right:-1.25rem;border-left-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-right-top:after{top:1rem}article.position-left-bottom:after,article.position-right-bottom:after{bottom:1rem}article.position-left-center:after,article.position-right-center:after{bottom:50%;transform:translateY(50%)}.text-heading-2,.text-body-1{color:var(--ec-color-primary-light)}.text-body-1 ::ng-deep p:last-child{margin-bottom:0}.text-body-1 ::ng-deep a{font-weight:var(--ec-font-weight-bold)}.text-caption-1{color:var(--ec-color-secondary-light)}ec-button{position:absolute;top:.25rem;right:.25rem}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: ButtonComponent, selector: "ec-button", inputs: ["id", "disabled", "icon", "label", "badge", "tabindex", "type", "pending", "pendingIcon", "customTemplate", "isSubmit", "autofocus"], outputs: ["clicked"] }] });
8934
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipComponent, decorators: [{
8935
- type: Component,
8936
- args: [{ selector: 'ec-tooltip', template: "<article id=\"{{id}}\" class=\"py-3 position-{{position}}\">\r\n <header *ngIf=\"title || subtitle\" class=\"mb-3\">\r\n <h1 class=\"text-heading-2 px-3 mb-0\">{{title}}</h1>\r\n <p class=\"text-caption-1 px-3 mb-0\">{{subtitle}}</p>\r\n </header>\r\n \r\n <ng-container *ngIf=\"customContent; else textTemplate\">\r\n <ng-container *ngTemplateOutlet=\"customContent\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #textTemplate>\r\n <div class=\"text-body-1 px-3\" [innerHTML]=\"text\"></div>\r\n </ng-template>\r\n \r\n <ec-button *ngIf=\"dismissible\" id=\"tooltipDismiss\" type=\"icon\" icon=\"icon-cancel\" (clicked)=\"hide()\" style=\"--ec-button-color-icon: var(--ec-color-secondary-light);\"></ec-button>\r\n</article>", styles: [":host{display:block;padding:.75rem}article{background-color:var(--ec-tooltip-background-color, #162F3B);color:var(--ec-tooltip-color, var(--ec-color-primary-light));border-radius:var(--ec-border-radius-card);position:relative;box-shadow:var(--ec-box-shadow-overlay);--ec-color-interactive: var(--ec-color-interactive-light)}article:after{content:\"\";height:0;width:0;border:.625rem solid transparent;display:block;position:absolute;pointer-events:none}article.position-top-left:after,article.position-top-center:after,article.position-top-right:after{bottom:-1.25rem;border-top-color:var(--ec-tooltip-background-color, #162F3B)}article.position-bottom-left:after,article.position-bottom-center:after,article.position-bottom-right:after{top:-1.25rem;border-bottom-color:var(--ec-tooltip-background-color, #162F3B)}article.position-top-left:after,article.position-bottom-left:after{right:1rem}article.position-top-right:after,article.position-bottom-right:after{left:1rem}article.position-top-center:after,article.position-bottom-center:after{right:50%;transform:translate(50%)}article.position-right-top:after,article.position-right-center:after,article.position-right-bottom:after{left:-1.25rem;border-right-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-left-center:after,article.position-left-bottom:after{right:-1.25rem;border-left-color:var(--ec-tooltip-background-color, #162F3B)}article.position-left-top:after,article.position-right-top:after{top:1rem}article.position-left-bottom:after,article.position-right-bottom:after{bottom:1rem}article.position-left-center:after,article.position-right-center:after{bottom:50%;transform:translateY(50%)}.text-heading-2,.text-body-1{color:var(--ec-color-primary-light)}.text-body-1 ::ng-deep p:last-child{margin-bottom:0}.text-body-1 ::ng-deep a{font-weight:var(--ec-font-weight-bold)}.text-caption-1{color:var(--ec-color-secondary-light)}ec-button{position:absolute;top:.25rem;right:.25rem}\n"] }]
8937
- }], propDecorators: { backgroundColor: [{
8938
- type: HostBinding,
8939
- args: ['style.--ec-tooltip-background-color']
8940
- }] } });
8941
-
8942
9012
  class Tour {
8943
9013
  constructor() {
8944
9014
  /** Unique identifier for the tour */
@@ -9039,64 +9109,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
9039
9109
  }]
9040
9110
  }], ctorParameters: function () { return [{ type: CacheService }]; } });
9041
9111
 
9042
- class TooltipService {
9043
- constructor(overlay) {
9044
- this.overlay = overlay;
9045
- this.positions = {
9046
- 'top-left': { originX: 'center', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetX: 38 },
9047
- 'top-center': { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom' },
9048
- 'top-right': { originX: 'center', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetX: -38 },
9049
- 'bottom-left': { originX: 'center', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetX: 38 },
9050
- 'bottom-center': { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top' },
9051
- 'bottom-right': { originX: 'center', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetX: -38 },
9052
- 'left-top': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'top', offsetY: -38 },
9053
- 'left-center': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center' },
9054
- 'left-bottom': { originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'bottom', offsetY: 38 },
9055
- 'right-top': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'top', offsetY: -38 },
9056
- 'right-center': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center' },
9057
- 'right-bottom': { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'bottom', offsetY: 38 }
9058
- };
9059
- }
9060
- /**
9061
- * Show a tooltip attached to a specified element
9062
- */
9063
- show(anchor, position = 'top-center', options) {
9064
- const overlayConfig = this.getOverlayConfig(anchor, this.positions[position], options?.width, options?.maxWidth);
9065
- const overlayRef = this.overlay.create(overlayConfig);
9066
- const contentPortal = new ComponentPortal(TooltipComponent);
9067
- const contentViewRef = overlayRef.attach(contentPortal);
9068
- contentViewRef.instance.position = position;
9069
- contentViewRef.instance.id = options?.id;
9070
- contentViewRef.instance.title = options?.title;
9071
- contentViewRef.instance.subtitle = options?.subtitle;
9072
- contentViewRef.instance.text = options?.text;
9073
- contentViewRef.instance.customContent = options?.customContent;
9074
- contentViewRef.instance.dismissible = options?.dismissible || false;
9075
- contentViewRef.instance.backgroundColor = options?.backgroundColor;
9076
- contentViewRef.instance.overlayRef = overlayRef;
9077
- return contentViewRef.instance;
9078
- }
9079
- getOverlayConfig(element, position, width, maxWidth) {
9080
- const positionStrategy = this.overlay.position()
9081
- .flexibleConnectedTo(element)
9082
- .withPositions([position]);
9083
- const config = new OverlayConfig({
9084
- positionStrategy: positionStrategy,
9085
- width: width,
9086
- maxWidth: maxWidth
9087
- });
9088
- return config;
9089
- }
9090
- }
9091
- TooltipService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, deps: [{ token: i1$2.Overlay }], target: i0.ɵɵFactoryTarget.Injectable });
9092
- TooltipService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, providedIn: 'root' });
9093
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipService, decorators: [{
9094
- type: Injectable,
9095
- args: [{
9096
- providedIn: 'root'
9097
- }]
9098
- }], ctorParameters: function () { return [{ type: i1$2.Overlay }]; } });
9099
-
9100
9112
  class TourComponent {
9101
9113
  constructor(tourService, tooltipService, telemetryService, cacheService, dialogService, translateService, document) {
9102
9114
  this.tourService = tourService;
@@ -9548,6 +9560,19 @@ class TooltipDirective {
9548
9560
  console.error('There are too many parameters or none parameter to config the tooltip options');
9549
9561
  }
9550
9562
  }
9563
+ //Detects where the mouse is to trigger the leave/hide process
9564
+ onMouseMove(event) {
9565
+ let callCallback = false;
9566
+ if (this.contentRect) {
9567
+ callCallback = this.tooltipService.onMove(event, this.contentRect);
9568
+ if (callCallback) {
9569
+ //trigger on hide process
9570
+ this.interrupt.next();
9571
+ //reset the contentRec for a new tooltip
9572
+ this.contentRect = undefined;
9573
+ }
9574
+ }
9575
+ }
9551
9576
  //Trigger the process to show the tooltip
9552
9577
  onMouseOver() {
9553
9578
  this.mouseOver.next();
@@ -9597,8 +9622,13 @@ class TooltipDirective {
9597
9622
  show() {
9598
9623
  //Reference to the element where to tooltip is attached
9599
9624
  const element = this.element.nativeElement;
9625
+ //contentRect will be assing only after showing a tooltip/popover and it will be
9626
+ //reset after hide the same tooltip/popover
9627
+ this.contentRect = this.element.nativeElement.getBoundingClientRect();
9600
9628
  //tooltipPosition is never undefined, default value = "top-center"
9601
- this.tooltip = this.tooltipService.show(element, this.tooltipPosition, this.tooltipOptions);
9629
+ if (!this.tooltip) {
9630
+ this.tooltip = this.tooltipService.show(element, this.tooltipPosition, this.tooltipOptions);
9631
+ }
9602
9632
  }
9603
9633
  hide() {
9604
9634
  //There is a timing issue between the show - hide with
@@ -9607,6 +9637,7 @@ class TooltipDirective {
9607
9637
  if (this.tooltip) {
9608
9638
  //Call the hide() from the tooltip component
9609
9639
  this.tooltip.hide();
9640
+ this.tooltip = undefined;
9610
9641
  }
9611
9642
  //Interrupt the flow of mouseover with a delay and triggers the
9612
9643
  //flow to hide the tooltip with a delay
@@ -9617,11 +9648,11 @@ class TooltipDirective {
9617
9648
  //When the element where the tooltip is attached disappears
9618
9649
  //the tooltip should be destroy as well
9619
9650
  ngOnDestroy() {
9620
- this.onLeave();
9651
+ this.interrupt.next();
9621
9652
  }
9622
9653
  }
9623
9654
  TooltipDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipDirective, deps: [{ token: TooltipService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
9624
- TooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: TooltipDirective, selector: "[ecTooltip]", inputs: { tooltipConfig: "tooltipConfig", tooltipText: "tooltipText", tooltipCustomContent: "tooltipCustomContent", tooltipPosition: "tooltipPosition" }, host: { listeners: { "mouseover": "onMouseOver()", "mouseleave": "onLeave()" } }, ngImport: i0 });
9655
+ TooltipDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: TooltipDirective, selector: "[ecTooltip]", inputs: { tooltipConfig: "tooltipConfig", tooltipText: "tooltipText", tooltipCustomContent: "tooltipCustomContent", tooltipPosition: "tooltipPosition" }, host: { listeners: { "document:mousemove": "onMouseMove($event)", "mouseover": "onMouseOver()", "mouseleave": "onLeave()" } }, ngImport: i0 });
9625
9656
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: TooltipDirective, decorators: [{
9626
9657
  type: Directive,
9627
9658
  args: [{
@@ -9635,6 +9666,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
9635
9666
  type: Input
9636
9667
  }], tooltipPosition: [{
9637
9668
  type: Input
9669
+ }], onMouseMove: [{
9670
+ type: HostListener,
9671
+ args: ['document:mousemove', ['$event']]
9638
9672
  }], onMouseOver: [{
9639
9673
  type: HostListener,
9640
9674
  args: ['mouseover']