{"version":3,"file":"pv-frontend-pv-shared-components-copy.mjs","sources":["../../../projects/pv-shared-components/copy/copy.component.ts","../../../projects/pv-shared-components/copy/copy.component.html","../../../projects/pv-shared-components/copy/copy.module.ts","../../../projects/pv-shared-components/copy/pv-frontend-pv-shared-components-copy.ts"],"sourcesContent":["import { Component, Input, ViewChild } from '@angular/core';\nimport {\n  OverrideStyleConfig,\n  ToolTipPosition,\n} from '@pv-frontend/pv-shared-components/common/types';\nimport { Tooltip } from 'primeng/tooltip';\n\nexport interface CopyStyleOverride {\n  label?: OverrideStyleConfig;\n  copyIconStyle?: OverrideStyleConfig;\n  successIconStyle?: OverrideStyleConfig;\n  container?: OverrideStyleConfig;\n}\n\n@Component({\n  selector: 'pv-copy',\n  templateUrl: './copy.component.html',\n})\nexport class CopyComponent {\n  public showCopySuccessIcon: boolean = false;\n\n  @ViewChild(Tooltip)\n  public tooltip?: Tooltip;\n\n  /**\n   * To render the tooltip top | left | right | bottom positions\n   */\n  @Input()\n  public toolTipPosition: ToolTipPosition = 'right';\n\n  /**\n   * One variant of tooltip where underline is shown below the label passed\n   */\n  @Input()\n  public label: string = '';\n\n  /**\n   * The value to be copied to the clipboard when the label/icon is clicked upon\n   */\n  @Input()\n  public valueToBeCopied: string = '';\n\n  /**\n   * The text to be shown in the tooltip when copy is successful\n   */\n  @Input()\n  public successText: string = 'Copied';\n\n  /**\n   * the default amount of time for which we will show the tooltip\n   */\n  @Input()\n  public delay: number = 800;\n\n  /**\n   * Icon to be used for copy\n   */\n  @Input()\n  public copyIcon: string = 'copy';\n\n  /**\n   * Icon to be used for copy\n   */\n  @Input()\n  public successIcon: string = 'tick';\n\n  @Input()\n  public style?: CopyStyleOverride = {};\n\n  public iconStyle: OverrideStyleConfig = {\n    fill: 'var(--primary-color)',\n    height: '1rem',\n    width: '1rem',\n  };\n\n  private isSecuredWindow(): boolean {\n    return window.isSecureContext;\n  }\n\n  public handleClick(): void {\n    /**\n     * Async clipboard isn't allowed in non-secure context\n     * Reference - https://web.dev/async-clipboard/#security-and-permissions\n     * Check if it is a secure context and then only proceed to write to clipboard\n     */\n    if (this.isSecuredWindow()) {\n      navigator.clipboard\n        .writeText(this.valueToBeCopied)\n        .then(() => {\n          this.showCopySuccessIcon = true;\n          // tooltip becomes available in dom once the success icon svg is rendered\n          // hence schedule it via timeout and not in main thread\n          setTimeout(() => this.tooltip?.show());\n\n          // now revert back to copy icon after the delay\n          setTimeout(() => (this.showCopySuccessIcon = false), this.delay);\n        })\n        .catch((error) => {\n          // todo - integrate with error service in future\n          console.error('something went wrong while copying ', error);\n        });\n    } else {\n      // todo - integrate with error service in future\n      console.error('copy not allowed in insecure window, please use HTTPS');\n    }\n  }\n}\n","<div\n  [style]=\"this.style?.container\"\n  class=\"pv-copy-container flex surface-text-muted-low-contrast\">\n  <p\n    *ngIf=\"this.label && !this.showCopySuccessIcon\"\n    [style]=\"this.style?.label\"\n    class=\"m-0 text-base underline cursor-pointer pv-dotted-decoration\"\n    (click)=\"this.handleClick()\">\n    {{ this.label }}\n  </p>\n\n  <pv-svg-icon\n    styleClass=\"cursor-pointer\"\n    [name]=\"this.copyIcon\"\n    *ngIf=\"!this.label && !this.showCopySuccessIcon\"\n    (click)=\"this.handleClick()\"\n    [style]=\"this.style?.copyIconStyle ?? this.iconStyle\"></pv-svg-icon>\n\n  <pv-svg-icon\n    styleClass=\"cursor-pointer\"\n    [name]=\"this.successIcon\"\n    *ngIf=\"this.showCopySuccessIcon\"\n    [pTooltip]=\"this.successText\"\n    tooltipEvent=\"focusout\"\n    [tooltipPosition]=\"toolTipPosition\"\n    [tooltipDisabled]=\"false\"\n    [style]=\"this.style?.successIconStyle ?? this.iconStyle\"></pv-svg-icon>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SvgIconModule } from '@pv-frontend/pv-shared-components/svg-icon';\nimport { TooltipModule } from 'primeng/tooltip';\n\nimport { CopyComponent } from './copy.component';\n\n@NgModule({\n  imports: [CommonModule, SvgIconModule, TooltipModule],\n  exports: [CopyComponent],\n  declarations: [CopyComponent],\n})\nexport class PvCopyModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}