{"version":3,"file":"m-truncate.mjs","sources":["../../../projects/m-truncate/src/lib/m-truncate.service.ts","../../../projects/m-truncate/src/lib/m-truncate.component.ts","../../../projects/m-truncate/src/lib/m-truncate.directive.ts","../../../projects/m-truncate/src/lib/m-truncate.module.ts","../../../projects/m-truncate/src/public-api.ts","../../../projects/m-truncate/src/m-truncate.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class MTruncateService {\r\n  private direction: 'ltr' | 'rtl' = 'ltr'; // Default to 'ltr'\r\n\r\n  constructor() {}\r\n\r\n  setDirection(dir: 'ltr' | 'rtl') {\r\n    this.direction = dir;\r\n  }\r\n\r\n  getDirection(): 'ltr' | 'rtl' {\r\n    return this.direction;\r\n  }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-m-truncate',\r\n  standalone: true,\r\n  imports: [],\r\n  template: `\r\n    <p>\r\n      m-truncate works!\r\n    </p>\r\n  `,\r\n  styles: ``\r\n})\r\nexport class MTruncateComponent {\r\n\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  AfterViewInit,\r\n  Renderer2,\r\n  Input,\r\n  HostListener,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { debounceTime, fromEvent, Subject, takeUntil } from 'rxjs';\r\nimport { MTruncateService } from './m-truncate.service';\r\n\r\n@Directive({\r\n  selector: '[mTruncate]',\r\n  standalone: true,\r\n})\r\nexport class MTruncateDirective implements AfterViewInit {\r\n  /** Whether to show tooltip on truncated text hover */\r\n  @Input() showTooltip: boolean = true;\r\n  /** Number of lines to truncate the text to */\r\n  @Input() truncateLines: number = 0;\r\n  /** Maximum width for truncation */\r\n  @Input() maxTruncateWidth: number = 0;\r\n  /** Maximum width for tooltip */\r\n  @Input() maxTooltipWidth: number = 0;\r\n  /** Background color of the tooltip */\r\n  @Input() bgColor: string = '#fff';\r\n  /** Text color of the tooltip */\r\n  @Input() color: string = '#1c1c28';\r\n  /** Tooltip position (top, bottom, left, right) */\r\n  @Input() tooltipPosition: string = 'top';\r\n  /** Text direction (LTR, RTL) */\r\n  @Input() tooltipDirection: string = 'ltr';\r\n  /** Suffix to append when text is truncated */\r\n  @Input() truncateSuffix: string = '...';\r\n  /** ID for the tooltip element */\r\n  @Input() id: string = 'mId';\r\n  /** Maximum number of characters before truncation */\r\n  @Input() truncateChar: number = 0;\r\n  /** Whether to resize the truncated on resize */\r\n  @Input() resize!: Boolean;\r\n\r\n  /** to detect that the text when change */\r\n  @Input() textChange!: string;\r\n\r\n  element!: HTMLElement;\r\n  private fullText: string = '';\r\n  private tooltip: HTMLElement | null = null;\r\n  private tooltipArrow: HTMLElement | null = null;\r\n\r\n  private destroy$ = new Subject<void>();\r\n\r\n  constructor(\r\n    private el: ElementRef,\r\n    private renderer: Renderer2,\r\n    private mTruncateService: MTruncateService\r\n  ) {}\r\n\r\n  ngAfterViewInit() {\r\n    this.element = this.el.nativeElement;\r\n    this.fullText = this.el.nativeElement.innerText.trim();\r\n\r\n    this.tooltipDirection = this.mTruncateService.getDirection();\r\n    if (!this.fullText || this.fullText.trim().length <= 3) return;\r\n\r\n    fromEvent(window, 'resize')\r\n      .pipe(debounceTime(500), takeUntil(this.destroy$))\r\n      .subscribe(() => (this.resize ? this.onResize() : ''));\r\n\r\n    this.truncateMethod();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['truncateChar']) {\r\n      this.truncateMethod();\r\n    }\r\n    if (changes['truncateLines']) {\r\n      this.truncateMethod();\r\n    }\r\n    if (changes['maxTruncateWidth']) {\r\n      setTimeout(() => {\r\n        this.truncateMethod();\r\n      });\r\n    }\r\n    if (changes['textChange']) {\r\n      setTimeout(() => {\r\n        this.fullText = this.textChange;\r\n        this.truncateMethod();\r\n      });\r\n    }\r\n  }\r\n\r\n  truncateMethod() {\r\n    if (this.truncateChar > 0) {\r\n      this.truncateByChar();\r\n    } else {\r\n      if (this.truncateLines > 1) {\r\n        this.applyRowsTruncate();\r\n      } else {\r\n        this.applyTruncate();\r\n      }\r\n    }\r\n  }\r\n\r\n  private truncateByChar(): string {\r\n    return this.fullText.length <= this.truncateChar\r\n      ? this.fullText\r\n      : (this.element.innerText =\r\n          this.fullText.slice(0, this.truncateChar) + this.truncateSuffix);\r\n  }\r\n\r\n  private applyTruncate() {\r\n    const element = this.el.nativeElement;\r\n    element.innerText = this.fullText; // Reset to full text\r\n    if (this.maxTruncateWidth) {\r\n      element.style.maxWidth = this.maxTruncateWidth + 'px';\r\n    }\r\n    const maxWidth = element.clientWidth; // Get available width\r\n\r\n    element.style.textWrap = 'nowrap';\r\n    element.style.wordBreak = 'break-word';\r\n    let left = 0;\r\n    let right = this.fullText.length;\r\n    let truncatedText = this.fullText;\r\n\r\n    if (element.scrollWidth != maxWidth) {\r\n      while (left <= right) {\r\n        let mid = Math.floor((left + right) / 2);\r\n        element.innerText =\r\n          this.fullText.substring(0, mid) + this.truncateSuffix;\r\n\r\n        if (element.scrollWidth > maxWidth) {\r\n          right = mid - 1; // Too long, reduce size\r\n        } else {\r\n          left = mid + 1; // Too short, increase size\r\n          truncatedText = this.fullText.substring(0, mid) + this.truncateSuffix;\r\n        }\r\n      }\r\n    }\r\n\r\n    element.innerText = truncatedText; // Set final truncated text\r\n  }\r\n\r\n  private applyRowsTruncate() {\r\n    const element = this.el.nativeElement;\r\n    element.innerText = this.fullText; // Reset to full text\r\n\r\n    const lineHeight = parseFloat(window.getComputedStyle(element).lineHeight);\r\n\r\n    const maxHeight = lineHeight * this.truncateLines;\r\n\r\n    if (element.scrollHeight > maxHeight) {\r\n      let left = 0;\r\n      let right = this.fullText.length;\r\n      let truncatedText = this.fullText;\r\n\r\n      while (left <= right) {\r\n        let mid = Math.floor((left + right) / 2);\r\n        element.innerText =\r\n          this.fullText.substring(0, mid) + this.truncateSuffix;\r\n\r\n        if (element.scrollHeight > maxHeight) {\r\n          right = mid - 1; // Too long, reduce text\r\n        } else {\r\n          left = mid + 1; // Too short, increase text\r\n          truncatedText = this.fullText.substring(0, mid) + this.truncateSuffix;\r\n        }\r\n      }\r\n\r\n      element.innerText = truncatedText;\r\n    }\r\n  }\r\n\r\n  getTooltipDirection(dir: string) {\r\n    this.tooltipDirection = dir;\r\n  }\r\n\r\n  onResize() {\r\n    if (this.truncateChar > 0) {\r\n      this.truncateByChar();\r\n    } else {\r\n      if (this.truncateLines > 1) {\r\n        this.applyRowsTruncate();\r\n      } else {\r\n        this.applyTruncate();\r\n      }\r\n    }\r\n  }\r\n\r\n  private createTooltip() {\r\n    if (this.tooltip) return; // Avoid creating multiple tooltips\r\n\r\n    let maxWidth = this.el.nativeElement.clientWidth;\r\n\r\n    this.tooltip = this.renderer.createElement('div');\r\n    this.tooltip?.classList.add('mTooltip');\r\n    this.tooltip?.setAttribute('id', this.id);\r\n\r\n    this.renderer.appendChild(document.body, this.tooltip);\r\n    this.renderer.setProperty(this.tooltip, 'innerText', this.fullText);\r\n\r\n    this.renderer.setStyle(this.tooltip, 'opacity', '0'); // Start hidden\r\n    this.renderer.setStyle(\r\n      this.tooltip,\r\n      'animation',\r\n      'fadeIn 0.35s ease-out forwards'\r\n    ); // Apply animation\r\n\r\n    // Apply styles\r\n    this.renderer.setStyle(this.tooltip, 'position', 'fixed');\r\n    this.renderer.setStyle(this.tooltip, 'background', this.bgColor);\r\n    this.renderer.setStyle(this.tooltip, 'color', this.color);\r\n    this.renderer.setStyle(this.tooltip, 'whiteSpace', 'pre-wrap'); // Allows multi-line text\r\n    this.renderer.setStyle(this.tooltip, 'wordWrap', 'break-word'); // Wrap long words\r\n    this.renderer.setStyle(this.tooltip, 'direction', this.tooltipDirection); // direction\r\n\r\n    this.renderer.setStyle(\r\n      this.tooltip,\r\n      'box-shadow',\r\n      '0px 4px 15px 0px rgba(0, 0, 0, 0.2)'\r\n    );\r\n\r\n    this.renderer.setStyle(this.tooltip, 'width', 'fit-content');\r\n    this.renderer.setStyle(\r\n      this.tooltip,\r\n      'max-width',\r\n      this.maxTooltipWidth ? this.maxTooltipWidth + 'px' : maxWidth + 'px'\r\n    );\r\n\r\n    this.renderer.setStyle(this.tooltip, 'textOverflow', 'ellipsis');\r\n    this.renderer.setStyle(this.tooltip, 'padding', '10px');\r\n    this.renderer.setStyle(this.tooltip, 'borderRadius', '6px');\r\n    this.renderer.setStyle(this.tooltip, 'fontSize', '14px');\r\n    this.renderer.setStyle(this.tooltip, 'zIndex', '999999999999999');\r\n    this.renderer.setStyle(this.tooltip, 'pointerEvents', 'none'); // Prevent interference\r\n\r\n    // Tooltip Arrow\r\n    this.tooltipArrow = this.renderer.createElement('div');\r\n    this.tooltipArrow?.classList.add('mTooltipArrow');\r\n\r\n    this.renderer.appendChild(this.tooltip, this.tooltipArrow);\r\n    this.renderer.setStyle(this.tooltipArrow, 'position', 'absolute');\r\n    this.renderer.setStyle(this.tooltipArrow, 'width', '0');\r\n    this.renderer.setStyle(this.tooltipArrow, 'height', '0');\r\n    this.renderer.setStyle(this.tooltipArrow, 'borderStyle', 'solid');\r\n\r\n    this.positionTooltip();\r\n\r\n    // Animation\r\n    this.addKeyframes();\r\n  }\r\n  private removeTooltip() {\r\n    if (this.tooltip) {\r\n      this.renderer.setStyle(\r\n        this.tooltip,\r\n        'animation',\r\n        'fadeOut 0.5s ease-out forwards'\r\n      );\r\n\r\n      setTimeout(() => {\r\n        this.renderer.removeChild(document.body, this.tooltip);\r\n        this.tooltip = null;\r\n      });\r\n    }\r\n  }\r\n\r\n  private positionTooltip() {\r\n    if (!this.tooltip) return;\r\n\r\n    const rect = this.el.nativeElement.getBoundingClientRect();\r\n    const tooltipRect = this.tooltip.getBoundingClientRect();\r\n\r\n    let top = 0,\r\n      left = 0;\r\n\r\n    switch (this.tooltipPosition) {\r\n      case 'top':\r\n        top = rect.top - tooltipRect.height - 5;\r\n        left = rect.left + (rect.width - tooltipRect.width) / 2;\r\n        if (top < 0) {\r\n          top = rect.bottom + 5; // Move below if not enough space\r\n          this.arrowPositionUp();\r\n        } else {\r\n          // Arrow pointing **down** (placed at bottom)\r\n          this.arrowPositionDown();\r\n        }\r\n\r\n        break;\r\n\r\n      case 'bottom':\r\n        top = rect.bottom + 5;\r\n        left = rect.left + (rect.width - tooltipRect.width) / 2;\r\n        if (top + tooltipRect.height > window.innerHeight) {\r\n          top = rect.top - tooltipRect.height - 5;\r\n          this.arrowPositionDown();\r\n        } else {\r\n          // Arrow pointing **up** (placed at top)\r\n          this.arrowPositionUp();\r\n        }\r\n\r\n        break;\r\n\r\n      case 'inset-inline-start':\r\n      case 'right':\r\n        top = rect.top + (rect.height - tooltipRect.height) / 2;\r\n        left = rect.left - tooltipRect.width - 5;\r\n        if (left < 0) {\r\n          left = rect.right + 5; // Move to the right if not enough space\r\n          this.arrowPositionLeft();\r\n        } else {\r\n          this.arrowPositionRight();\r\n        }\r\n\r\n        // Arrow pointing **right** (placed at end)\r\n\r\n        break;\r\n\r\n      case 'inset-inline-end':\r\n      case 'left':\r\n        top = rect.top + (rect.height - tooltipRect.height) / 2;\r\n        left = rect.right + 5;\r\n        if (left + tooltipRect.width > window.innerWidth) {\r\n          left = rect.left - tooltipRect.width - 5;\r\n          this.arrowPositionRight();\r\n        } else {\r\n          // Arrow pointing **left** (placed at start)\r\n          this.arrowPositionLeft();\r\n        }\r\n\r\n        break;\r\n      default:\r\n        top = rect.top - tooltipRect.height - 5;\r\n        left = rect.left + (rect.width - tooltipRect.width) / 2;\r\n        if (top < 0) {\r\n          top = rect.bottom + 5; // Move below if not enough space\r\n          this.arrowPositionUp();\r\n        } else {\r\n          // Arrow pointing **down** (placed at bottom)\r\n          this.arrowPositionDown();\r\n        }\r\n        break;\r\n    }\r\n\r\n    this.renderer.setStyle(this.tooltip, 'top', `${top}px`);\r\n    this.renderer.setStyle(this.tooltip, 'left', `${left}px`);\r\n  }\r\n\r\n  arrowPositionDown() {\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderWidth',\r\n      '10px 10px 0 10px'\r\n    );\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderColor',\r\n      `${this.bgColor} transparent transparent transparent`\r\n    );\r\n    this.renderer.setStyle(this.tooltipArrow, 'left', '50%');\r\n    this.renderer.setStyle(this.tooltipArrow, 'bottom', '-8px');\r\n    this.renderer.setStyle(this.tooltipArrow, 'transform', 'translateX(-50%)');\r\n  }\r\n\r\n  arrowPositionUp() {\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderWidth',\r\n      '0 10px 10px 10px'\r\n    );\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderColor',\r\n      `transparent transparent ${this.bgColor} transparent`\r\n    );\r\n    this.renderer.setStyle(this.tooltipArrow, 'left', '50%');\r\n    this.renderer.setStyle(this.tooltipArrow, 'top', '-8px');\r\n    this.renderer.setStyle(this.tooltipArrow, 'transform', 'translateX(-50%)');\r\n  }\r\n\r\n  arrowPositionRight() {\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderWidth',\r\n      '10px 0 10px 10px'\r\n    );\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderColor',\r\n      `transparent transparent transparent ${this.bgColor}`\r\n    );\r\n    this.renderer.setStyle(this.tooltipArrow, 'top', '50%');\r\n    this.renderer.setStyle(this.tooltipArrow, 'right', '-8px');\r\n    this.renderer.setStyle(this.tooltipArrow, 'transform', 'translateY(-50%)');\r\n  }\r\n\r\n  arrowPositionLeft() {\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderWidth',\r\n      '10px 10px 10px 0'\r\n    );\r\n    this.renderer.setStyle(\r\n      this.tooltipArrow,\r\n      'borderColor',\r\n      `transparent ${this.bgColor} transparent transparent`\r\n    );\r\n    this.renderer.setStyle(this.tooltipArrow, 'top', '50%');\r\n    this.renderer.setStyle(this.tooltipArrow, 'left', '-8px');\r\n    this.renderer.setStyle(this.tooltipArrow, 'transform', 'translateY(-50%)');\r\n  }\r\n\r\n  private addKeyframes() {\r\n    if (document.getElementById('fadeInKeyframes')) return; // Avoid duplicates\r\n\r\n    const styleSheet = this.renderer.createElement('style');\r\n    styleSheet.id = 'fadeInKeyframes';\r\n    this.renderer.setProperty(\r\n      styleSheet,\r\n      'innerHTML',\r\n      `\r\n       @keyframes fadeIn {\r\n         from {\r\n           opacity: 0;\r\n           transform: translateY(-5px);\r\n         }\r\n         to {\r\n           opacity: 1;\r\n           transform: translateY(0);\r\n         }\r\n       }\r\n     `\r\n    );\r\n\r\n    this.renderer.appendChild(document.head, styleSheet);\r\n  }\r\n\r\n  @HostListener('mouseenter', ['$event'])\r\n  handleMouseOver(event: Event) {\r\n    const target = event.target as HTMLElement;\r\n\r\n    if (target === this.el.nativeElement) {\r\n      let currentText = this.element.innerText;\r\n\r\n      // Remove truncateSuffix only if it exists at the end\r\n      if (currentText.endsWith(this.truncateSuffix)) {\r\n        currentText = currentText.slice(0, -this.truncateSuffix.length);\r\n      }\r\n\r\n      if (currentText.length < this.fullText.length && this.showTooltip) {\r\n        this.createTooltip();\r\n      }\r\n    }\r\n  }\r\n\r\n  @HostListener('mouseleave')\r\n  handleMouseOut(event?: Event) {\r\n    this.removeTooltip();\r\n  }\r\n\r\n  // Unsubscribe when the directive is destroyed\r\n  ngOnDestroy() {\r\n    this.removeTooltip();\r\n    this.destroy$.next();\r\n    this.destroy$.complete();\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { MTruncateDirective } from './m-truncate.directive';\r\n\r\n@NgModule({\r\n  imports: [MTruncateDirective],\r\n  exports: [MTruncateDirective],\r\n})\r\nexport class MTruncateModule {}\r\n","/*\r\n * Public API Surface of m-truncate\r\n */\r\n\r\nexport * from './lib/m-truncate.service';\r\nexport * from './lib/m-truncate.component';\r\nexport * from './lib/m-truncate.directive';\r\nexport * from './lib/m-truncate.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MTruncateService"],"mappings":"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"}