{"version":3,"sources":["../@types/index.d.ts","../utils/index.ts","../index.ts"],"sourcesContent":["declare global {\n  type EntryPage =\n    | \"dashboard\"\n    | \"editor\"\n    | \"creator\"\n    | \"creator-v2\"\n    | \"customTemplate\"\n    | \"templateCreator\"\n    | \"templateMarker\";\n\n  interface InitOptions {\n    DOMAIN?: string;\n    /**\n     * 容器\n     *  如果传入字符串，则表示这个容器元素的id\n     *\n     * @example 'id' | HTMLDivElement\n     * @import\n     */\n    container: HTMLDivElement | string;\n    /** token*/\n    token: string;\n\n    /** 进入的页面 */\n    page: EntryPage;\n\n    /** 进入editor页面时必须传递pptId参数 */\n    pptId?: string;\n\n    /**\n     * 所有事件的回调都会执行\n     */\n    onMessage?: EventCallback;\n\n    /**\n     * 进入editor页面时，是否显示制作动画\n     */\n    animation?: boolean;\n\n    mode?: \"light\" | \"dark\";\n    lang?: string;\n\n    /** 创建PPT 版本, V1是步骤式，V2是对话式 */\n    creatorVersion?: \"v1\" | \"v2\";\n\n    /**\n     * 注入 CSS 样式\n     * 可通过传递自定义 CSS 来更加深度地自定义文多多的样式，支持可访问的 URL 地址或直接传入 CSS 字符串\n     *\n     * @example #docmee_SdkContainer {background: white !important;}\n     * @example https://abc.cn/style.css\n     * */\n    css?: string;\n\n    /**\n     * iframe 背景颜色，可填入颜色或者图片 url 地址\n     *\n     */\n    background?: string;\n\n    /**\n     * iframe 背景大小 与 CSS 中的 background-size 语法相同\n     */\n    backgroundSize?: string | number;\n\n    /**\n     *  内边距（也就是 css 的 padding，语法相同）\n     */\n    padding?: string | number;\n\n    /**\n     * 下载文件选项 返回 false 表示禁用下载，如果只想打开一种下载方式，可以传递数组`['pptx']`表示只允许下载为 pptx 格式\n     *\n     * @example false\n     * @example ['pdf']\n     */\n    downloadButton?: boolean | (\"pptx\" | \"pdf\")[];\n\n    /**\n     *  生成 PPT 方式，topic：主题生成，material：外部资料\n     * 只在V1  中能使用\n     *  @example \"topic\"\n     */\n    creatorMode?: \"topic\" | \"material\";\n\n    /**\n     * 适配移动端\n     *\n     * */\n    isMobile?: boolean;\n\n    creatorData?:\n      | { subject?: string; text?: string; creatorNow?: boolean }\n      | {\n          files?: File[];\n          content?: string;\n          subject?: string;\n          type?: CreatorType;\n          options?: CreatorDataOptions;\n        };\n\n    /**\n     * 编辑器显示区域\n     *\n     * 不传或者传空数组表示显示全部\n     *\n     * - `viewport` 主编辑视窗\n     * - `slidesList` 左侧幻灯片列表\n     * - `header` 顶部状态栏\n     * - `statusBar` 底部状态栏\n     * - `tools` 右侧工具栏\n     */\n    editorDisplay?: EditorDisplayKey[];\n  }\n\n  interface CreatorDataOptions {\n    /** 篇幅长度：short/medium/long => 10-15页/20-30页/25-35页 */\n    length?: string;\n    /** 演示场景：通用场景、教学课件、工作总结、工作计划、项目汇报、解决方案、研究报告、会议材料、产品介绍、公司介绍、商业计划书、科普宣传、公众演讲 等任意场景类型。 */\n    scene?: string;\n    /** 受众：大众、学生、老师、上级领导、下属、面试官、同事 等任意受众类型。 */\n    audience?: string;\n    /** 是否开启反问模式（对话模式） */\n    questionMode?: boolean;\n    /** 是否开启智能搜索 */\n    aiSearch?: boolean;\n    /** 语言: zh/zh-Hant/en/ja/ko/ar/de/fr/it/pt/es/ru */\n    lang?: string;\n    /** 用户要求（小于50字） */\n    prompt?: string;\n    /** **多轮对话**  助手反问聊天对话，反问过程中如需终止直接生成请设置 questionMode 为 false 调用接口*/\n    messages?: GenerateContentContextMessage[];\n  }\n\n  interface GenerateContentContextMessage {\n    role: \"assistant\" | \"user\";\n    content: string;\n  }\n\n  type EditorDisplayKey = \"viewport\" | \"slidesList\" | \"statusBar\" | \"tools\" | \"header\";\n}\n\nexport enum CreatorType {\n  /** 智能生成（主题、要求） */\n  AI_GEN = 1,\n  /** 上传文件 */\n  UPLOAD_FILES = 2,\n  /** 上传思维导图 */\n  UPLOAD_MIND = 3,\n  /** 通过word精准转ppt */\n  WORD = 4,\n  /** 通过网页链接生成 */\n  URL = 5,\n  /** 粘贴文本内容生成 */\n  CONTENT = 6,\n  /** Markdown大纲生成 */\n  MD = 7,\n}\n","export const docmeeContext = {\n  BASE_URL: \"https://iframe.docmee.cn\",\n};\n\nexport const pageKeyHrefMap: Record<EntryPage, string> = {\n  dashboard: `sdk-ui/dashboard`,\n  editor: `sdk-ui/editor`,\n  creator: `sdk-ui/creator/0`,\n  \"creator-v2\": `sdk-ui/creator-v2`,\n  customTemplate: `sdk-ui/custom-template`,\n  templateCreator: `sdk-ui/custom-template-creator`,\n  templateMarker: `sdk-ui/marker`,\n};\n\nexport const getPageKey = (key: string, creatorVersion?: InitOptions[\"creatorVersion\"]) => {\n  if (/^(creator)/.test(key)) {\n    let suffix = \"\";\n    if (creatorVersion) {\n      suffix = creatorVersion === \"v1\" ? \"\" : `-${creatorVersion}`;\n    }\n    key = `creator${suffix}`;\n  }\n  return key;\n};\n\nexport const getBaseURL = () => {\n  return docmeeContext[\"BASE_URL\"];\n};\n\nexport const getPathname = (key: string, creatorVersion?: InitOptions[\"creatorVersion\"]) => {\n  const pathname = pageKeyHrefMap[key];\n  return pathname;\n};\n\nexport const getIframeUrl = (key: string, creatorVersion?: InitOptions[\"creatorVersion\"]) => {\n  key = getPageKey(key, creatorVersion);\n  const BASE_URL = getBaseURL(),\n    pathname = getPathname(key, creatorVersion);\n\n  return BASE_URL.endsWith(\"/\") ? `${BASE_URL}${pathname}` : `${BASE_URL}/${pathname}`;\n};\n","import { CreatorType } from './@types/index.d'\nimport { docmeeContext, getIframeUrl, getPageKey, pageKeyHrefMap } from './utils'\n\n// const BASE_URL = 'https://docmee.cn'\n// const BASE_URL = 'https://location:8125'\n\n/**\n * Docmee UI SDK class\n */\nexport class DocmeeUI {\n  private creatorVersion?: InitOptions['creatorVersion']\n  private token: string\n  private container: HTMLDivElement\n  private docmeeHref: string = getIframeUrl('dashboard')\n  private query: Record<string, any> = { iframe: '1' }\n  private iframe: HTMLIFrameElement | null = null\n  private onMessage: EventCallback\n  private iframeMounted: boolean = false\n  private initInterval = null\n\n  constructor({\n    token,\n    page = 'dashboard',\n    container,\n    pptId,\n    onMessage,\n    // @ts-ignore\n    DOMAIN,\n    ...otherOptions\n  }: InitOptions) {\n    // 如果在初始化的过程中传递token了，就是option模式创建docmee实例\n    // 如果没有传递token，就是async模式创建docmee实例\n\n    // option模式就是简单的同步模式，初始化docmee时，iframe就会创建\n    // async模式就不一样，初始化docmee时，iframe不会被立即创建，在调用 init 方法时，iframe才会创建出来。\n    this.onMessage = onMessage\n    this.creatorVersion = otherOptions.creatorVersion\n    if (typeof container == 'string') {\n      this.container = document.getElementById(container) as HTMLDivElement\n    } else {\n      this.container = container\n    }\n\n    if (location.protocol.startsWith('file')) {\n      console.log(\n        '%c %s',\n        'color: red; background-color: #f7c600',\n        '🔴 不能在file协议下运行，请启动一个http服务来运行！ 🔴 ',\n      )\n    }\n\n    if (!token) {\n      console.log('%c 初始化时，token不能为空！', 'color: #d7514f; background-color: #2e2e2e')\n    }\n\n    if (DOMAIN) {\n      docmeeContext.BASE_URL = DOMAIN\n    }\n    this.init({ token, page, pptId, ...otherOptions })\n  }\n\n  public on(eventName: UIEventName, callback: EventCallback) {\n    this._eventListeners[eventName] = [...(this._eventListeners[eventName] || []), callback]\n  }\n\n  private _eventListeners: Record<UIEventName, EventCallback[]> = {\n    pptxRenamed: [],\n    mounted: [],\n    beforeGenerate: [],\n    beforeCreateCustomTemplate: [],\n    'user-info': [],\n    charge: [],\n    afterCreateCustomTemplate: [],\n    afterGenerate: [],\n    beforeDownload: [],\n    error: [],\n    manuallySavePPT: [],\n    toggleGenerateMode: [],\n    pageChange: [],\n    changeSlideIndex: [],\n    'invalid-token': [],\n    beforeCreatePpt: [],\n  }\n\n  private _postMessage(message) {\n    if (!this.iframe?.contentWindow) {\n      console.log(this.iframe?.contentWindow)\n      console.error('iframe未挂载！')\n    }\n    this.iframe?.contentWindow?.postMessage(message, this.docmeeHref)\n  }\n\n  private init({ token, page = 'dashboard', ...otherOptions }) {\n    if (page === 'editor' && !otherOptions.pptId) throw new Error('初始化editor页面时，必须传入pptId')\n\n    this.query = Object.assign({}, this.query, otherOptions)\n    this.docmeeHref = getIframeUrl(page, otherOptions.creatorVersion)\n    this.updateToken(token)\n    this._initIframe(true)\n  }\n\n  // 初始化iframe\n  private _initIframe(parseTokenByMessage) {\n    const container = this.container\n    const iframe = document.createElement('iframe')\n    const targetOrigin = '*'\n    const [href, query] = this.docmeeHref?.split('?') || ['', '']\n\n    let queryParams: Record<string, string> = {}\n    try {\n      queryParams = (query?.split('&') || []).reduce((acc, item) => {\n        const [key, value] = item?.split('=') || ['', '']\n        acc[key] = value\n        return acc\n      }, {})\n    } catch {\n      queryParams = {}\n    }\n\n    queryParams['iframe'] = '1'\n    queryParams.targetOrigin = targetOrigin\n    if (parseTokenByMessage) {\n      queryParams.token = this.token\n    }\n    iframe.src = href\n    iframe.style.width = '100%'\n    iframe.style.height = '100%'\n    iframe.style.border = '0'\n    iframe.style.outline = 'none'\n    iframe.style.padding = '0px'\n    iframe.setAttribute('allow', `fullscreen *;clipboard-read; clipboard-write;payment; cross-origin-isolated`)\n\n    this.iframe = iframe\n    this.iframeMounted = false\n    // 清空iframe中的内容并挂载iframe\n    container.innerHTML = ''\n    container.appendChild(iframe)\n\n    window.addEventListener('message', async (event) => {\n      if (event.source !== this.iframe?.contentWindow) return\n      const message = event.data as { type: UIEventName; data: any }\n      if (!message.type) return\n      if (parseTokenByMessage) {\n        if (message.type === 'mounted' || message.type === 'invalid-token') {\n          this.iframeMounted = true\n          if (message.type === 'mounted') {\n            this._postMessage({\n              type: 'transParams',\n              data: this.query,\n            })\n          }\n        }\n      }\n      if (message.type === 'user-info') {\n        this.iframeMounted = true\n      }\n\n      let res\n      res = await this.onMessage?.(message)\n      const onCallbacks = this._eventListeners[message.type]\n      if (onCallbacks?.length > 0) {\n        for (const callback of onCallbacks) {\n          try {\n            let result = callback?.(message)\n            if (result instanceof Promise) {\n              result = await result\n            }\n            if (result !== undefined) {\n              res = result\n            }\n          } catch {}\n        }\n      }\n\n      if (message.type.startsWith('before')) {\n        if (res == undefined) res = true\n        this._postMessage({ data: res, type: `recover_${message.type}` })\n      }\n    })\n\n    this.iframe.addEventListener('load', () => {\n      let infoAPiCount = 0\n      setTimeout(() => {\n        if (this.iframeMounted) return\n        this.initInterval = setInterval(() => {\n          if (this.iframeMounted || infoAPiCount >= 5) {\n            infoAPiCount = 0\n            return clearInterval(this.initInterval)\n          }\n          if (parseTokenByMessage) {\n            this._postMessage({\n              type: 'transParams',\n              data: this.query,\n            })\n          }\n          infoAPiCount++\n        }, 200)\n      }, 300)\n    })\n  }\n\n  /**\n   * 在编辑页面跳转到对应的幻灯片\n   *\n   * @param targetPageIndex 跳转的幻灯片下标\n   */\n  public updateSlidePageIndex(targetPageIndex: number) {\n    this._postMessage({ type: 'changeSlidePageIndex', data: { pageIndex: targetPageIndex } })\n  }\n\n  /**\n   * 更新用户token\n   * @param {string} latestToken 新的token\n   */\n  public updateToken(latestToken: string) {\n    const regex = /(a|s)k_.+/\n    if (!regex.test(latestToken)) {\n      console.error('token 错误！')\n    }\n    this.token = latestToken\n    this.query.token = latestToken\n    if (this.iframeMounted) {\n      this._postMessage({\n        type: 'transParams',\n        data: {\n          token: latestToken,\n        },\n      })\n    }\n  }\n\n  /**\n   * 卸载iframe\n   */\n  public destroy() {\n    this.container.innerHTML = ''\n  }\n\n  /**\n   * 发送消息\n   */\n  public sendMessage(data: { type: 'warning' | 'success' | 'error' | 'info'; content: string }) {\n    this._postMessage({ type: 'message', data })\n  }\n\n  public getInfo() {\n    this._postMessage({ type: 'getInfo' })\n  }\n\n  /**\n   * 跳转到指定页面\n   *\n   */\n  public navigate({ page, pptId, templateId }: { page: string; pptId?: string; templateId?: string }) {\n    const href = pageKeyHrefMap[page]\n\n    if (!href) throw new Error(`页面${page} 不存在`)\n    const key = getPageKey(page, this.creatorVersion)\n\n    this._postMessage({\n      type: 'nav',\n      data: {\n        page: key,\n        token: this.token,\n        pptId,\n        templateId,\n      },\n    })\n  }\n\n  /**\n   * 继续生成PPT，仅在V2中可用\n   */\n  public continueCreatePpt() {\n    this._postMessage({ type: 'continueCreatePpt' })\n  }\n\n  /**\n   * 修改用于 生成PPT的内容\n   * @param data: any\n   * @param now\n   */\n  public changeCreatorData(data, now = false) {\n    this._postMessage({\n      type: 'transParams',\n      data: { creatorData: { ...data, createNow: now } },\n    })\n  }\n\n  /**\n   * 修改当前编辑中的PPT的模版\n   *\n   * 该方法只在编辑页面生效\n   * @param templateId  模版ID\n   */\n  public updateTemplate(templateId: string) {\n    this._postMessage({\n      type: 'changeTemplateById',\n      data: { templateId },\n    })\n  }\n\n  /**\n   * 打开模版选择弹窗\n   *\n   * 该方法只在编辑页面生效\n   */\n  public showTemplateDialog(type = 'system') {\n    this._postMessage({\n      type: 'showTemplateDialog',\n      data: { type },\n    })\n  }\n\n  /**\n   * 获取当前编辑中的PPT的信息，PPT数据将在回调中返回\n   *\n   * 该方法只在编辑页面生效\n   */\n  public getCurrentPptInfo() {\n    this._postMessage({\n      type: 'getCurrentPptInfo',\n    })\n  }\n\n  /**\n   * 导入外部CSS文件\n   *\n   * @param css css样式，可以传递标准的css规则字符串，也可以使用能够访问的url\n   */\n  public importCSS(css: string) {\n    this._postMessage({ type: 'importCSS', data: { css } })\n  }\n\n  /**\n   * 重新加载编辑器\n   * 该方法只在编辑页面生效\n   */\n  public reloadEditor() {\n    this._postMessage({ type: 'reloadEditor' })\n  }\n\n  /**\n   * 修改主题内容\n   * @param content 主题内容\n   */\n  public changeSubjectContent(content: string) {\n    this._postMessage({ type: 'changeSubjectContent', data: { content } })\n  }\n\n  /**\n   * 提交新任务\n   */\n  public submitNewCreator() {\n    this._postMessage({ type: 'submitNewCreator' })\n  }\n}\n\n// @ts-ignore\nwindow.DocmeeUI = DocmeeUI\n\nexport { CreatorType }\n"],"mappings":"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","names":["CreatorType"]}