{"version":3,"sources":["../src/provider.tsx","../src/context.ts","../src/initialize.ts","../src/utils.ts","../src/api.ts","../src/useZendesk.tsx"],"names":["React","useEffect","useLayoutEffect","useRef","createContext","ZendeskContext","IdScript","initialize","apiKey","onLoad","setup","removeNodes","appendScript","scriptElement","frameElement","s","x","isSSR","ZendeskApi","scope","method","args","ZendeskProvider","onOpen","onClose","onUnreadMessages","onResetWidget","children","isRegisteredCb","isOpen","setIsOpen","unreadMessages","setUnreadMessages","onOpenRef","onCloseRef","onUnreadMessagesRef","onResetWidgetRef","registerCallback","resetWidget","show","hide","open","close","setLocale","newLocale","setZIndex","newZIndex","setCookies","isEnabled","setConversationFields","conversationFields","setConversationTags","conversationTags","loginUser","jwtToken","callback","logoutUser","initialProviderValue","useZendesk","context"],"mappings":"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","sourcesContent":["\"use client\";\nimport React, { useEffect, useLayoutEffect, useRef } from \"react\";\nimport { ZendeskContext } from \"./context\";\nimport {\n  ZendeskContextValues,\n  ZendeskConversationField,\n  ZendeskProviderProps,\n} from \"./types\";\nimport { PropsWithChildren } from \"react\";\nimport { initialize } from \"./initialize\";\nimport { ZendeskApi } from \"./api\";\n\nexport const ZendeskProvider: React.FC<\n  PropsWithChildren<ZendeskProviderProps>\n> = ({\n  apiKey,\n  onOpen,\n  onClose,\n  onUnreadMessages,\n  onResetWidget,\n  children,\n}) => {\n  const isRegisteredCb = useRef(false);\n\n  const [isOpen, setIsOpen] = React.useState(false);\n  const [unreadMessages, setUnreadMessages] = React.useState<\n    number | undefined\n  >(undefined);\n\n  const onOpenRef = useRef(onOpen);\n  const onCloseRef = useRef(onClose);\n  const onUnreadMessagesRef = useRef(onUnreadMessages);\n  const onResetWidgetRef = useRef(onResetWidget);\n\n  useLayoutEffect(() => {\n    onOpenRef.current = onOpen;\n    onCloseRef.current = onClose;\n    onUnreadMessagesRef.current = onUnreadMessages;\n    onResetWidgetRef.current = onResetWidget;\n  });\n\n  function registerCallback() {\n    if (isRegisteredCb.current) {\n      return;\n    }\n\n    ZendeskApi(\"messenger:on\", \"open\", function () {\n      setIsOpen(true);\n      !!onOpenRef.current && onOpenRef.current();\n    });\n\n    ZendeskApi(\"messenger:on\", \"close\", function () {\n      setIsOpen(false);\n      !!onCloseRef.current && onCloseRef.current();\n    });\n\n    ZendeskApi(\n      \"messenger:on\",\n      \"unreadMessages\",\n      function (unreadMessages: number) {\n        setUnreadMessages(unreadMessages);\n        !!onUnreadMessagesRef.current &&\n          onUnreadMessagesRef.current(unreadMessages);\n      },\n    );\n\n    isRegisteredCb.current = true;\n  }\n\n  useEffect(() => {\n    initialize(apiKey, registerCallback);\n    return () => {\n      isRegisteredCb.current = false;\n      resetWidget();\n    };\n  }, [apiKey]);\n\n  const show = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"show\");\n  }, []);\n\n  const hide = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"hide\");\n  }, []);\n\n  const open = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"open\");\n  }, []);\n\n  const close = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"close\");\n  }, []);\n\n  const setLocale = React.useCallback((newLocale: string) => {\n    ZendeskApi(\"messenger:set\", \"locale\", newLocale);\n  }, []);\n\n  const setZIndex = React.useCallback((newZIndex: number) => {\n    ZendeskApi(\"messenger:set\", \"zIndex\", newZIndex);\n  }, []);\n\n  const setCookies = React.useCallback((isEnabled: boolean) => {\n    ZendeskApi(\"messenger:set\", \"cookies\", isEnabled);\n  }, []);\n\n  const setConversationFields = React.useCallback(\n    (conversationFields: Array<ZendeskConversationField>) => {\n      ZendeskApi(\"messenger:set\", \"conversationFields\", conversationFields);\n    },\n    [],\n  );\n\n  const setConversationTags = React.useCallback(\n    (conversationTags: Array<string>) => {\n      ZendeskApi(\"messenger:set\", \"conversationTags\", conversationTags);\n    },\n    [],\n  );\n\n  const loginUser = React.useCallback((jwtToken: string) => {\n    ZendeskApi(\n      \"messenger\",\n      \"loginUser\",\n      (callback: (token: string) => void) => {\n        callback(jwtToken);\n      },\n    );\n  }, []);\n\n  const logoutUser = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"logoutUser\");\n  }, []);\n\n  const resetWidget = React.useCallback(() => {\n    ZendeskApi(\"messenger\", \"resetWidget\", (callback: () => void) => {\n      !!onResetWidgetRef.current && onResetWidgetRef.current();\n    });\n  }, []);\n\n  const initialProviderValue: ZendeskContextValues = {\n    show,\n    hide,\n    open,\n    close,\n    setLocale,\n    setZIndex,\n    setCookies,\n    setConversationFields,\n    setConversationTags,\n    loginUser,\n    logoutUser,\n    resetWidget,\n    isOpen,\n    unreadMessages,\n  };\n\n  return (\n    <ZendeskContext.Provider value={initialProviderValue}>\n      {children}\n    </ZendeskContext.Provider>\n  );\n};\n","\"use client\";\n\nimport { createContext } from \"react\";\nimport { ZendeskContextValues } from \"./types\";\n\nexport const ZendeskContext = createContext<ZendeskContextValues | undefined>(\n  undefined,\n);\n","const IdScript = \"ze-snippet\";\n\nexport function initialize(apiKey: string, onLoad: () => void) {\n  if (\n    !!apiKey &&\n    typeof window !== \"undefined\"\n    // && typeof window.zE === \"undefined\"\n  ) {\n    const setup = () => {\n      removeNodes();\n      appendScript(apiKey, onLoad);\n    };\n    if (document.readyState === \"complete\") {\n      setup();\n    } else if (window.attachEvent) {\n      window.attachEvent(\"onload\", setup);\n    } else {\n      window.addEventListener(\"load\", setup, false);\n    }\n  }\n}\n\nexport function removeNodes() {\n  if (typeof window !== \"undefined\") {\n    delete window.zE;\n    delete (window as any).zEmbed;\n    delete (window as any).zEACLoaded;\n    delete (window as any).zEWebpackACJsonp;\n    var scriptElement = document.getElementById(IdScript);\n    var frameElement = document.querySelector(\"iframe#launcher\");\n    if (scriptElement) {\n      scriptElement.remove();\n    }\n    if (frameElement) {\n      frameElement.remove();\n    }\n  }\n}\n\nexport function appendScript(apiKey: string, onLoad: () => void) {\n  setTimeout(function () {\n    const s = document.createElement(\"script\");\n    s.id = IdScript;\n    s.type = \"text/javascript\";\n    s.async = true;\n    s.onload = onLoad;\n\n    s.src = \"https://static.zdassets.com/ekr/snippet.js?key=\" + apiKey;\n\n    const x = document.getElementsByTagName(\"script\")[0];\n    x?.parentNode.insertBefore(s, x);\n  }, 0);\n}\n","export const isSSR = typeof window === \"undefined\";\n","import { ZendeskMethod } from \"./types\";\nimport { isSSR } from \"./utils\";\n\ntype Scope = \"messenger\" | \"messenger:on\" | \"messenger:set\";\nexport const ZendeskApi = (\n  scope: Scope,\n  method: ZendeskMethod,\n  ...args: Array<unknown>\n) => {\n  if (!isSSR && !!window && window.zE) {\n    return window.zE.apply(null, [scope, method, ...args]);\n  }\n};\n","\"use client\";\nimport React from \"react\";\nimport { ZendeskContext } from \"./context\";\nimport { ZendeskContextValues } from \"./types\";\n\nexport function useZendesk() {\n  const context = React.useContext(ZendeskContext);\n  if (context === undefined) {\n    throw new Error(`\"useZendesk\" must be used within \"ZendeskProvider\"`);\n  }\n  return context as ZendeskContextValues;\n}\n"]}