{"version":3,"file":"talenra-ngx-base-copy-content.mjs","sources":["../../../projects/ngx-base/copy-content/src/copy-content/copy-content-button.translation.ts","../../../projects/ngx-base/copy-content/src/copy-content/copy-content-button.component.ts","../../../projects/ngx-base/copy-content/src/copy-content/copy-content-button.component.html","../../../projects/ngx-base/copy-content/src/copy-content/copy-content.types.ts","../../../projects/ngx-base/copy-content/src/copy-content/copy-content.connect-position.ts","../../../projects/ngx-base/copy-content/src/copy-content/copy-content.directive.ts","../../../projects/ngx-base/copy-content/talenra-ngx-base-copy-content.ts"],"sourcesContent":["import { Dictionary } from '@talenra/ngx-base/shared';\n\n/** @internal */\nexport const translations: Dictionary = {\n  'de-CH': {\n    copyText: 'Text kopieren',\n  },\n  'fr-CH': {\n    copyText: 'Copier le texte',\n  },\n  'it-CH': {\n    copyText: 'Copia testo',\n  },\n  'en-US': {\n    copyText: 'Copy text',\n  },\n};\n","import {\n  booleanAttribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  computed,\n  inject,\n  input,\n  LOCALE_ID,\n} from '@angular/core';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { TLocale } from '@talenra/ngx-base/shared';\nimport { IconComponent } from '@talenra/ngx-base/icons';\nimport { TooltipDirective, TTooltipPosition } from '@talenra/ngx-base/tooltip';\nimport { translations } from './copy-content-button.translation';\nimport { TCopyContentPosition } from './copy-content.types';\n\n/**\n * The copy content button component.\n * This component is used to copy the content of a text field.\n *\n * ```html\n * <talenra-copy-content-button toCopy=\"text to copy\" />\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { CopyContentButtonComponent } from '@talenra/ngx-base/copy-content';\n * ```\n */\n@Component({\n  selector: 'talenra-copy-content-button',\n  imports: [IconComponent, TooltipDirective],\n  templateUrl: './copy-content-button.component.html',\n  styleUrl: './copy-content-button.component.scss',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  host: {\n    '[class]': 'hostClass',\n    '[class.invert]': 'negativeColor()',\n    '[class.success]': 'isCopied',\n  },\n})\nexport class CopyContentButtonComponent {\n  /**\n   * Text displayed that is to copy.\n   *\n   * ```html\n   * <talenra-copy-content-button toCopy=\"Text to copy\" />\n   * ```\n   */\n  toCopy = input('');\n\n  /**\n   * State if the color of the icon should be negative (white with opacity 0.5).\n   *\n   * ```html\n   * <talenra-copy-content-button negativeColor />\n   * ```\n   */\n  negativeColor = input(false, { transform: booleanAttribute });\n\n  /**\n   * The position relative to the hosting element ('west', 'east'). Defaults to 'east'.\n   *\n   * ```html\n   * <talenra-copy-content-button position=\"west\" />\n   * ```\n   *\n   * @see {@link CopyContentPosition}\n   * @see {@link TCopyContentPosition}\n   */\n  position = input<TCopyContentPosition>('east');\n\n  /**\n   * The tooltip text.\n   *\n   * ```html\n   * <talenra-copy-content-button tooltip=\"Tooltip text\" />\n   * ```\n   */\n  tooltip = input<string>('');\n\n  /**\n   * Locale to dynamically overwrite the app's locale.\n   * Allowed values, see: Locale\n   *\n   * ```html\n   * <talenra-copy-content dynamicLocale=\"fr-CH\" />\n   * ```\n   *\n   * @see {@link Locale}\n   * @see {@link TLocale}\n   */\n  dynamicLocale = input<TLocale | null>(null);\n\n  /**\n   * The tooltip position. In relation to the button position.\n   */\n  tooltipPosition = computed<TTooltipPosition>(() => this.position() as TTooltipPosition);\n\n  /**\n   * The locale to use.\n   */\n  private locale = computed(() => (this.dynamicLocale() ? this.dynamicLocale() : this.appLocale));\n\n  /**\n   * Text displayed in the tooltip. If no tooltip text is provided, the default text will be used.\n   */\n  protected tooltipText = computed(() =>\n    this.tooltip() !== '' ? this.tooltip() : translations[this.locale() as TLocale].copyText\n  );\n\n  /**\n   * The boolean to check if the item is copied.\n   */\n  protected isCopied: boolean = false;\n\n  /**\n   * Used for visual transitions. When `active`, the component is visible or fading-in, while `inactive` the component\n   * is invisible or fading-out.\n   */\n  public get state(): 'active' | 'inactive' {\n    return this._state;\n  }\n  public set state(value: 'active' | 'inactive') {\n    if (value === this._state) return;\n    this._state = value;\n    this.changeDetector.markForCheck();\n  }\n\n  /** State is set 'inactive' while fade-out transition is in progress. */\n  private _state: 'active' | 'inactive' = 'active';\n\n  /** Helper: Add classes to host element (hooks for styling) */\n  private get hostClass(): string {\n    return `state--${this.state}`;\n  }\n\n  /**\n   * The injected dependencies.\n   */\n  protected clipboard = inject(Clipboard);\n  private appLocale: string = inject(LOCALE_ID);\n  private changeDetector: ChangeDetectorRef = inject(ChangeDetectorRef);\n\n  /**\n   * After the icon is clicked, the data-item-attribute will be copied.\n   * @param event The mouse event.\n   */\n  protected copyText(event: MouseEvent): void {\n    this.clipboard.copy(this.toCopy());\n    event.stopPropagation();\n\n    // delay to change the icon to show that the text was copied\n    if (!this.isCopied) {\n      this.isCopied = true;\n      setTimeout(() => {\n        this.isCopied = false;\n        this.changeDetector.markForCheck();\n      }, 2000);\n    }\n  }\n}\n","<div class=\"wrapper\" (click)=\"copyText($event)\" [talenraTooltipPosition]=\"tooltipPosition()\" [talenraTooltip]=\"tooltipText()\">\n  <talenra-icon name=\"check\" class=\"icon success\" />\n  <talenra-icon name=\"layers\" class=\"icon copy\" />\n</div>\n","/**\n * Values accepted by `Copy-Content`'s `copyContentPosition` property. Determines the position of the copy-content-button relative to\n * the hosting element.\n *\n * ```html\n * <span textToCopy=\"Text to copy\" copyContentPosition=\"north\">Hover me</span>\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { CopyContentTypes } from '@talenra/ngx-base/copy-content';\n * ```\n *\n * @see {@link CopyContentDirective}\n */\nexport const CopyContentPosition = {\n  West: 'west',\n  East: 'east',\n} as const;\n\n/**\n * Type of values accepted by `Copy-Content`'s `copyContentPosition` property.\n *\n * ### Import\n *\n * ```typescript\n * import { TCopyContentPosition } from '@talenra/ngx-base/copy-content';\n * ```\n *\n * @see {@link CopyContentDirective}\n */\nexport type TCopyContentPosition = (typeof CopyContentPosition)[keyof typeof CopyContentPosition];\n","import { ConnectedPosition } from '@angular/cdk/overlay';\nimport { TCopyContentPosition } from './copy-content.types';\n\n/**\n * Type used for position maps. Represents a dictionary of ConnectedPosition for different positions. The keys of the\n * dictionary are the positions, and the values are objects containing key-value pairs for ConnectedPosition of the cdk-overlay.\n *\n * ```typescript\n * export const positions: Dictionary = {\n *  'north': {\n *       originX: 'center',\n *       originY: 'top',\n *       overlayX: 'center',\n *       overlayY: 'bottom',\n *  },\n *  'east': {\n *       originX: 'end',\n *       originY: 'center',\n *       overlayX: 'start',\n *       overlayY: 'center',\n *     },\n *     ...\n *  },\n * ```\n */\nexport type TCopyContentConnectedPosition = Record<TCopyContentPosition, ConnectedPosition>;\n\n/** @internal */\nexport const CopyContentConnectPositions: TCopyContentConnectedPosition = {\n  west: {\n    originX: 'start',\n    originY: 'center',\n    overlayX: 'end',\n    overlayY: 'center',\n  },\n  east: {\n    originX: 'end',\n    originY: 'center',\n    overlayX: 'start',\n    overlayY: 'center',\n  },\n};\n","import { booleanAttribute, Directive, ElementRef, input, OnDestroy, inject } from '@angular/core';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { ConnectedPosition, Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { CopyContentButtonComponent } from './copy-content-button.component';\nimport { CopyContentPosition, TCopyContentPosition } from './copy-content.types';\nimport { CopyContentConnectPositions } from './copy-content.connect-position';\n\n/**\n * Transition duration in seconds. Value must sync with CopyContentButtonComponent's stylesheet.\n *\n * @internal\n */\nconst TRANSITION_DURATION: number = 0.3;\n\n/**\n * Show is triggered slightly delayed. This is the delay time in seconds.\n *\n * @internal\n */\nconst SHOW_DELAY: number = 0.1;\n\n/**\n * Hide is triggered slightly delayed. This is the delay time in seconds.\n *\n * @internal\n */\nconst HIDE_DELAY: number = 0.5;\n\n/**\n * CopyContent provides a CopyContentButton which is displayed when the hosting element is hovered. By default the\n * CopyContentButton is displayed right of the hosting element (east). The preferred position can be changed\n * (s. {@link #position|copyContentPosition}). If space is limited, position is adjusted automatically.\n *\n * ```html\n * <span textToCopy=\"text to copy\" />\n * ```\n *\n * ### Import\n *\n * ```typescript\n * import { CopyContentDirective } from '@talenra/ngx-base/copy-content';\n * ```\n */\n@Directive({\n  selector: '[textToCopy]',\n  host: {\n    '(mouseenter)': 'show()',\n    '(mouseleave)': 'hide()',\n    '(click)': 'hide()',\n  },\n})\nexport class CopyContentDirective implements OnDestroy {\n  private elementRef = inject(ElementRef);\n  private overlay = inject(Overlay);\n\n  /**\n   * Text copied to clipboard when element is clicked.\n   *\n   * ```html\n   * <span textToCopy=\"Text to copy\" />\n   * ```\n   */\n  toCopy = input<string>('', { alias: 'textToCopy' });\n\n  /**\n   * The position relative to the hosting element ('north', 'east', …). Defaults to 'east'.\n   *\n   * ```html\n   * <span textToCopy=\"Text to copy\" copyContentPosition=\"west\" />\n   * ```\n   *\n   * @see {@link CopyContentPosition}\n   * @see {@link TCopyContentPosition}\n   */\n  position = input<TCopyContentPosition>('east', { alias: 'copyContentPosition' });\n\n  /**\n   * Inverts the color of the icon (white with opacity 0.5). Useful for dark backgrounds.\n   *\n   * ```html\n   * <span textToCopy=\"Text to copy\" copyContentNegativeColor />\n   * ```\n   */\n  negativeColor = input(false, { transform: booleanAttribute, alias: 'copyContentNegativeColor' });\n\n  /**\n   * Text displayed in the tooltip.\n   *\n   * ```html\n   * <talenra-copy-content-button copyContentTooltip=\"Tooltip text\" />\n   * ```\n   */\n  tooltip = input<string>('', { alias: 'copyContentTooltip' });\n\n  /** The overlay reference where the CopyContentButton resides */\n  private overlayRef: OverlayRef | null = null;\n  /** Instance of CopyContentButton attached to overlay. */\n  private buttonInstance?: CopyContentButtonComponent;\n  /** Timeout to detach after fade-out transition has completed */\n  private detachTimeoutId?: number;\n  /** Timeout to show slightly delayed */\n  private showTimeoutId?: number;\n  /** Timeout to hide slightly delayed */\n  private hideTimeoutId?: number;\n\n  /** @internal */\n  ngOnDestroy(): void {\n    this.detach();\n  }\n\n  /** Returns the position configuration for the overlay. */\n  private getPositionStrategy(): ConnectedPosition[] {\n    return this.position() === CopyContentPosition.East\n      ? [CopyContentConnectPositions.east, CopyContentConnectPositions.west]\n      : [CopyContentConnectPositions.west, CopyContentConnectPositions.east];\n  }\n\n  /** Create and setup overlay with button if required and return reference to button component */\n  private setupButton(): CopyContentButtonComponent {\n    if (this.buttonInstance) return this.buttonInstance;\n    const positionStrategy = this.overlay\n      .position()\n      .flexibleConnectedTo(this.elementRef)\n      .withPositions(this.getPositionStrategy());\n    this.overlayRef = this.overlay.create({\n      hasBackdrop: false,\n      positionStrategy,\n      scrollStrategy: this.overlay.scrollStrategies.reposition(),\n    });\n    this.overlayRef.overlayElement.addEventListener('mouseenter', this.show.bind(this));\n    this.overlayRef.overlayElement.addEventListener('mouseleave', this.hide.bind(this));\n    const buttonPortal = new ComponentPortal(CopyContentButtonComponent);\n    this.buttonInstance = this.overlayRef.attach(buttonPortal).instance;\n    return this.buttonInstance;\n  }\n\n  /** Shows the overlay. */\n  private show(): void {\n    // Initially show button slightly delayed to prevent flickering\n    const showDelayed: boolean = this.buttonInstance?.state !== 'active';\n    // Get button instance reference and update properties\n    const button: CopyContentButtonComponent = this.setupButton();\n    button.toCopy = this.toCopy;\n    button.negativeColor = this.negativeColor;\n    button.position = this.position;\n    button.tooltip = this.tooltip;\n    button.state = 'inactive';\n    // Clear eventually pending timeouts\n    this.hideTimeoutId && window.clearTimeout(this.hideTimeoutId);\n    this.detachTimeoutId && window.clearTimeout(this.detachTimeoutId);\n    // Update button state slightly delayed to trigger fade-in transition\n    this.showTimeoutId = window.setTimeout(\n      () => {\n        if (this.buttonInstance) {\n          this.buttonInstance.state = 'active';\n        }\n      },\n      showDelayed ? SHOW_DELAY * 1000 : 0\n    );\n  }\n\n  /** Fade out and detach button with a slight delay */\n  private hide(): void {\n    if (!this.overlayRef) return;\n    // Clear eventually pending timeouts\n    this.showTimeoutId && window.clearTimeout(this.showTimeoutId);\n    this.hideTimeoutId = window.setTimeout(() => {\n      window.clearTimeout(this.hideTimeoutId);\n      // Update button state to trigger fade-out transition\n      if (this.buttonInstance) {\n        this.buttonInstance.state = 'inactive';\n      }\n      // Detach overlay after fade-out transition has completed\n      this.detachTimeoutId = window.setTimeout(() => this.detach(), TRANSITION_DURATION * 1000);\n    }, HIDE_DELAY * 1000);\n  }\n\n  /** Closes the overlay. */\n  private detach(): void {\n    window.clearTimeout(this.detachTimeoutId);\n    this.overlayRef?.detach();\n    this.buttonInstance = undefined;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}