{"version":3,"file":"qualcomm-ui-angular-core-events.mjs","sources":["../../src/events/listener.service.ts","../../src/events/use-copy-to-clipboard.ts","../../src/events/qualcomm-ui-angular-core-events.ts"],"sourcesContent":["// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n// SPDX-License-Identifier: BSD-3-Clause-Clear\n\nimport {DOCUMENT} from \"@angular/common\"\nimport {ElementRef, inject, Injectable, Renderer2} from \"@angular/core\"\n\nexport type ListenerTrigger = \"hover\" | \"focus\" | \"click\" | \"manual\"\n\nexport type ListenerTriggerOn = \"focus\" | \"mouse-enter\"\nexport type ListenerTriggerOff = \"blur\" | \"mouse-leave\"\nexport type ListenerTriggerToggle = \"click\"\n\nexport interface ListenerConfig {\n  callbackOff?: (event: any, reason: ListenerTriggerOff) => void\n  callbackOn?: (event: any, reason: ListenerTriggerOn) => void\n  callbackToggle?: (event: any, reason: ListenerTriggerToggle) => void\n  hostElement: ElementRef\n  trigger?: ListenerTrigger | ListenerTrigger[]\n}\n\n@Injectable()\nexport class ListenerService {\n  private listeners: Map<string, () => void> = new Map()\n  private rendererListeners: Array<(() => void) | undefined> = []\n\n  private renderer = inject(Renderer2)\n  private document = inject(DOCUMENT)\n\n  setDocumentListener<T extends Event>(\n    eventName: string,\n    callback: (event: T) => void,\n  ) {\n    this.setListener(this.document, eventName, callback)\n  }\n\n  setListener<T extends Event>(\n    el: HTMLElement | Document | Window,\n    eventName: string,\n    callback: (event: T) => void,\n  ) {\n    this.rendererListeners.push(this.renderer.listen(el, eventName, callback))\n  }\n\n  clearDomListeners() {\n    this.rendererListeners.forEach((unsub) => unsub?.())\n    this.rendererListeners.fill(undefined)\n    this.rendererListeners = []\n  }\n\n  setListeners({\n    callbackOff,\n    callbackOn,\n    callbackToggle,\n    hostElement,\n    trigger,\n  }: ListenerConfig): void {\n    const host = hostElement.nativeElement\n    const triggers = Array.isArray(trigger)\n      ? trigger\n      : (trigger?.split(\" \") ?? [])\n\n    if (triggers.includes(\"click\")) {\n      if (typeof callbackToggle === \"function\") {\n        this.listeners.set(\n          \"click\",\n          this.renderer.listen(host, \"click\", (event) =>\n            callbackToggle(event, \"click\"),\n          ),\n        )\n      }\n    }\n    if (triggers.includes(\"focus\")) {\n      if (typeof callbackOn === \"function\") {\n        this.listeners.set(\n          \"focus\",\n          this.renderer.listen(host, \"focus\", (event) =>\n            callbackOn(event, \"focus\"),\n          ),\n        )\n      }\n    }\n    if (triggers.includes(\"click\") || triggers.includes(\"focus\")) {\n      if (typeof callbackOff === \"function\") {\n        this.listeners.set(\n          \"blur\",\n          this.renderer.listen(host, \"blur\", (event) =>\n            callbackOff(event, \"blur\"),\n          ),\n        )\n      }\n    }\n    if (triggers.includes(\"hover\")) {\n      if (typeof callbackOn === \"function\") {\n        this.listeners.set(\n          \"mouseenter\",\n          this.renderer.listen(host, \"mouseenter\", (event) =>\n            callbackOn(event, \"mouse-enter\"),\n          ),\n        )\n      }\n\n      if (typeof callbackOff === \"function\") {\n        this.listeners.set(\n          \"mouseleave\",\n          this.renderer.listen(host, \"mouseleave\", (event) =>\n            callbackOff(event, \"mouse-leave\"),\n          ),\n        )\n      }\n    }\n  }\n\n  clearListeners(): void {\n    this.listeners.forEach((unListen) => {\n      unListen()\n    })\n    this.listeners.forEach((unlisten, key) => {\n      // @ts-ignore\n      this.listeners.set(key, null)\n    })\n    this.listeners.clear()\n  }\n}\n","// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.\n// SPDX-License-Identifier: BSD-3-Clause-Clear\n\nimport {DestroyRef, effect, inject, signal} from \"@angular/core\"\n\nimport {NAVIGATOR} from \"@qualcomm-ui/angular-core/dom\"\n\nexport interface UseCopyToClipboardProps {\n  valueOrFn: (() => string) | string\n}\n\nexport interface UseCopyToClipboard {\n  copyToClipboard: () => void\n  isCopied: () => boolean\n}\n\nexport function useCopyToClipboard(\n  props: UseCopyToClipboardProps,\n): UseCopyToClipboard {\n  const {valueOrFn} = props\n  const destroyRef = inject(DestroyRef)\n\n  const navigator = inject(NAVIGATOR)\n\n  const isCopied = signal<boolean>(false)\n  let copyTimeout: ReturnType<typeof setTimeout>\n\n  effect(() => {\n    if (isCopied()) {\n      copyTimeout = setTimeout(() => {\n        isCopied.set(false)\n      }, 2000)\n    } else {\n      if (copyTimeout !== undefined) {\n        clearTimeout(copyTimeout)\n      }\n    }\n  })\n\n  destroyRef.onDestroy(() => {\n    if (copyTimeout !== undefined) {\n      clearTimeout(copyTimeout)\n    }\n  })\n\n  const copyToClipboard = () => {\n    if (!navigator?.clipboard) {\n      console.error(\"Access to clipboard rejected!\")\n      return\n    }\n\n    const value = typeof valueOrFn === \"function\" ? valueOrFn() : valueOrFn\n\n    navigator.clipboard\n      .writeText(value)\n      .then(() => {\n        isCopied.set(true)\n      })\n      .catch(() => {\n        console.error(\"Failed to copy!\")\n      })\n  }\n\n  return {\n    copyToClipboard,\n    isCopied: isCopied.asReadonly(),\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}