{"version":3,"sources":["../../src/react/HeadingPlugin.tsx","../../src/lib/BaseHeadingPlugin.ts","../../src/react/TocPlugin.tsx","../../src/lib/BaseTocPlugin.ts","../../src/lib/utils/isHeading.ts","../../src/react/hooks/useContentController.ts","../../src/react/utils/checkIn.ts","../../src/react/utils/heightToTop.ts","../../src/react/hooks/useContentObserver.ts","../../src/internal/getHeadingList.ts","../../src/react/hooks/useTocController.ts","../../src/react/hooks/useTocObserver.ts","../../src/react/hooks/useTocElement.ts","../../src/react/hooks/useTocSideBar.ts"],"sourcesContent":["import { type PlatePlugin, Key, toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseHeadingPlugin } from '../lib/BaseHeadingPlugin';\n\nexport const HeadingPlugin = toPlatePlugin(BaseHeadingPlugin, ({ plugin }) => ({\n  plugins: (plugin as unknown as PlatePlugin).plugins.map((p) =>\n    (p as PlatePlugin).extend(({ plugin }) => {\n      const level = p.key.at(-1);\n\n      if (level > 3) return {};\n\n      return {\n        shortcuts: {\n          ['toggleHeading' + level]: {\n            keys: [\n              [Key.Mod, Key.Alt, level],\n              [Key.Mod, Key.Shift, level],\n            ],\n            preventDefault: true,\n            handler: ({ editor }) => {\n              editor.tf.toggleBlock(editor.getType(plugin.key));\n            },\n          },\n        },\n      };\n    })\n  ),\n}));\n","import {\n  type PluginConfig,\n  type SlatePlugin,\n  createSlatePlugin,\n  createTSlatePlugin,\n  KEYS,\n} from '@udecode/plate';\n\nexport type HeadingConfig = PluginConfig<\n  'heading',\n  {\n    /** Heading levels supported from 1 to `levels` */\n    levels?: HeadingLevel | HeadingLevel[];\n  }\n>;\n\nexport type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\n/** Enables support for headings with configurable levels (from 1 to 6). */\nexport const BaseHeadingPlugin = createTSlatePlugin<HeadingConfig>({\n  key: 'heading',\n  options: {\n    levels: [1, 2, 3, 4, 5, 6],\n  },\n}).extend(({ plugin }) => {\n  const {\n    options: { levels },\n  } = plugin;\n\n  const plugins: SlatePlugin[] = [];\n\n  const headingLevels = Array.isArray(levels)\n    ? levels\n    : Array.from({ length: levels || 6 }, (_, i) => i + 1);\n\n  headingLevels.forEach((level) => {\n    const plugin: SlatePlugin = createSlatePlugin({\n      key: KEYS.heading[level - 1],\n      node: { isElement: true },\n      parsers: {\n        html: {\n          deserializer: {\n            rules: [\n              {\n                validNodeName: `H${level}`,\n              },\n            ],\n          },\n        },\n      },\n      render: { as: `h${level}` as any },\n    });\n\n    plugins.push(plugin);\n  });\n\n  return {\n    plugins,\n  };\n});\n","import { toPlatePlugin } from '@udecode/plate/react';\n\nimport { BaseTocPlugin } from '../lib';\n\nexport const TocPlugin = toPlatePlugin(BaseTocPlugin);\n","import {\n  type PluginConfig,\n  type SlateEditor,\n  createTSlatePlugin,\n  KEYS,\n} from '@udecode/plate';\n\nimport type { Heading } from './types';\n\nexport type TocConfig = PluginConfig<\n  'toc',\n  {\n    isScroll: boolean;\n    topOffset: number;\n    queryHeading?: (editor: SlateEditor) => Heading[];\n  }\n>;\n\nexport const BaseTocPlugin = createTSlatePlugin<TocConfig>({\n  key: KEYS.toc,\n  node: { isElement: true, isVoid: true },\n  options: {\n    isScroll: true,\n    topOffset: 80,\n  },\n});\n","import { type TNode, KEYS } from '@udecode/plate';\n\nexport const isHeading = (node: TNode) => {\n  return node.type && KEYS.heading.includes(node.type as any);\n};\n","'use client';\n\nimport React from 'react';\n\nimport { KEYS } from '@udecode/plate';\nimport { useEditorRef } from '@udecode/plate/react';\n\nimport type { UseContentController } from '../types';\n\nimport { heightToTop } from '../utils';\nimport { useContentObserver } from './useContentObserver';\n\nexport const useContentController = ({\n  containerRef,\n  isObserve,\n  rootMargin,\n  topOffset,\n}: UseContentController) => {\n  const editor = useEditorRef();\n  const [editorContentRef, setEditorContentRef] = React.useState(containerRef);\n\n  const isScrollRef = React.useRef(false);\n\n  const isScroll =\n    (editorContentRef.current?.scrollHeight || 0) >\n    (editorContentRef.current?.clientHeight || 0);\n\n  isScrollRef.current = isScroll;\n\n  const scrollContainer = React.useMemo(() => {\n    if (typeof window !== 'object') return;\n\n    return isScroll ? editorContentRef.current : window;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isScroll]);\n\n  const [status, setStatus] = React.useState(0);\n\n  const { activeId } = useContentObserver({\n    editorContentRef,\n    isObserve,\n    isScroll,\n    rootMargin,\n    status,\n  });\n\n  const [activeContentId, setActiveContentId] = React.useState(activeId);\n\n  const onContentScroll = ({\n    id,\n    behavior = 'instant',\n    el,\n  }: {\n    id: string;\n    el: HTMLElement;\n    behavior?: ScrollBehavior;\n  }) => {\n    setActiveContentId(id);\n\n    if (isScrollRef.current) {\n      editorContentRef.current?.scrollTo({\n        behavior,\n        top: heightToTop(el, editorContentRef) - topOffset,\n      });\n    } else {\n      const top = heightToTop(el) - topOffset;\n      // Note: if behavior === smooth,scrolling the toc then click the title immediately will scroll to the wrong position.It should be a chrome bug.\n      window.scrollTo({ behavior, top });\n    }\n\n    editor\n      .getApi({ key: KEYS.blockSelection })\n      .blockSelection?.addSelectedRow?.(id);\n  };\n\n  React.useEffect(() => {\n    setEditorContentRef(containerRef);\n  }, [containerRef]);\n\n  React.useEffect(() => {\n    setActiveContentId(activeId);\n  }, [activeId]);\n\n  React.useEffect(() => {\n    if (!scrollContainer) return;\n\n    const scroll = () => {\n      if (isObserve) {\n        setStatus(Date.now());\n      }\n    };\n\n    scrollContainer.addEventListener('scroll', scroll);\n\n    return () => {\n      scrollContainer.removeEventListener('scroll', scroll);\n    };\n  }, [isObserve, scrollContainer]);\n\n  return { activeContentId, onContentScroll };\n};\n","export function checkIn(\n  e: React.MouseEvent<HTMLElement, globalThis.MouseEvent>\n) {\n  const event = window.event as unknown as React.MouseEvent<\n    HTMLElement,\n    globalThis.MouseEvent\n  >;\n  const x = Number(event.clientX); // 鼠标相对屏幕横坐标\n  const y = Number(event.clientY); // 鼠标相对屏幕纵坐标\n\n  const ele = e.target as HTMLElement;\n  const div_x = Number(ele.getBoundingClientRect().left); // 相对屏幕的横坐标\n  const div_x_width = Number(\n    ele.getBoundingClientRect().left + ele.clientWidth\n  ); // 相对屏幕的横坐标+width\n\n  const div_y = Number(ele.getBoundingClientRect().top); // 相对屏幕的纵坐标\n  const div_y_height = Number(\n    ele.getBoundingClientRect().top + ele.clientHeight\n  ); // 相对屏幕的纵坐标+height\n\n  if (x > div_x && x < div_x_width && y > div_y && y < div_y_height) {\n    return true;\n  }\n\n  return false;\n}\n","import type React from 'react';\n\nexport const heightToTop = (\n  ele: HTMLElement,\n  editorContentRef?: React.RefObject<HTMLDivElement | null>\n) => {\n  const root = editorContentRef ? editorContentRef.current : document.body;\n\n  if (!root || !ele) return 0;\n\n  const containerRect = root.getBoundingClientRect();\n  const elementRect = ele.getBoundingClientRect();\n\n  const scrollY = root.scrollTop;\n  const absoluteElementTop = elementRect.top + scrollY - containerRect.top;\n\n  return absoluteElementTop;\n};\n","import React from 'react';\n\nimport { NodeApi } from '@udecode/plate';\nimport { useEditorRef, useEditorSelector } from '@udecode/plate/react';\n\nimport { getHeadingList } from '../../internal/getHeadingList';\n\ninterface UseContentObserver {\n  editorContentRef: React.RefObject<HTMLElement | null>;\n  isObserve: boolean;\n  isScroll: boolean;\n  rootMargin: string;\n  status: number;\n}\n\nexport const useContentObserver = ({\n  editorContentRef,\n  isObserve,\n  isScroll,\n  rootMargin,\n  status,\n}: UseContentObserver) => {\n  const headingElementsRef = React.useRef<\n    Record<string, IntersectionObserverEntry>\n  >({});\n\n  const root = isScroll ? editorContentRef.current : undefined;\n  const editor = useEditorRef();\n  const headingList = useEditorSelector(getHeadingList, []);\n\n  const [activeId, setActiveId] = React.useState('');\n\n  React.useEffect(() => {\n    const callback = (headings: IntersectionObserverEntry[]) => {\n      if (!isObserve) return;\n\n      headingElementsRef.current = headings.reduce((map, headingElement) => {\n        map[headingElement.target.id] = headingElement;\n\n        return map;\n      }, headingElementsRef.current);\n\n      const visibleHeadings: string[] = [];\n\n      Object.keys(headingElementsRef.current).forEach((key) => {\n        const headingElement = headingElementsRef.current[key];\n\n        if (headingElement.isIntersecting) visibleHeadings.push(key);\n      });\n      const lastKey = Object.keys(headingElementsRef.current).pop()!;\n      visibleHeadings.length > 0 && setActiveId(visibleHeadings[0] || lastKey);\n      headingElementsRef.current = {};\n    };\n    const observer = new IntersectionObserver(callback, {\n      root: root,\n      rootMargin: rootMargin,\n    });\n\n    headingList.forEach((item) => {\n      const { path } = item;\n\n      const node = NodeApi.get(editor, path);\n\n      if (!node) return;\n\n      const element = editor.api.toDOMNode(node);\n\n      return element && observer.observe(element);\n    });\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [headingList, isObserve, editor, root, rootMargin, status]);\n\n  return { activeId };\n};\n","import { type SlateEditor, type TElement, NodeApi } from '@udecode/plate';\n\nimport type { Heading } from '../lib/types';\n\nimport { BaseTocPlugin } from '../lib';\nimport { isHeading } from '../lib/utils/isHeading';\n\nconst headingDepth: Record<string, number> = {\n  h1: 1,\n  h2: 2,\n  h3: 3,\n  h4: 4,\n  h5: 5,\n  h6: 6,\n};\n\nexport const getHeadingList = (editor: SlateEditor) => {\n  const options = editor.getOptions(BaseTocPlugin);\n\n  if (options.queryHeading) {\n    return options.queryHeading(editor);\n  }\n\n  const headingList: Heading[] = [];\n\n  const values = editor.api.nodes<TElement>({\n    at: [],\n    match: (n) => isHeading(n),\n  });\n\n  if (!values) return [];\n\n  Array.from(values, ([node, path]) => {\n    const { type } = node;\n    const title = NodeApi.string(node);\n    const depth = headingDepth[type];\n    const id = node.id as string;\n    title && headingList.push({ id, depth, path, title, type });\n  });\n\n  return headingList;\n};\n","import React from 'react';\n\nimport { useTocObserver } from './useTocObserver';\n\ninterface UseTocController {\n  activeId: string;\n  isObserve: boolean;\n  tocRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const useTocController = ({\n  activeId,\n  isObserve,\n  tocRef,\n}: UseTocController) => {\n  const [activeTocId, setActiveTocId] = React.useState('');\n  const { offset, visible } = useTocObserver({\n    activeId: activeTocId,\n    isObserve,\n    tocRef,\n  });\n\n  React.useEffect(() => {\n    if (!visible) {\n      const tocItemWrapper = tocRef.current?.querySelector('#toc_wrap');\n      const top = (tocItemWrapper?.scrollTop as any) + offset;\n\n      tocItemWrapper?.scrollTo({ behavior: 'instant', top: top });\n    }\n  }, [visible, offset, tocRef]);\n\n  React.useEffect(() => {\n    setActiveTocId(activeId);\n  }, [activeId]);\n};\n","import React from 'react';\n\ninterface UseTocObserver {\n  activeId: string;\n  isObserve: boolean;\n  tocRef: React.RefObject<HTMLElement | null>;\n}\n\nexport const useTocObserver = ({\n  activeId,\n  isObserve,\n  tocRef,\n}: UseTocObserver) => {\n  const root = tocRef.current;\n\n  const [visible, setVisible] = React.useState<boolean>(true);\n  const [offset, setOffset] = React.useState<number>(0);\n\n  const updateOffset = React.useCallback(\n    (entries: IntersectionObserverEntry[]) => {\n      if (!isObserve) return;\n\n      const [entry] = entries;\n      const { boundingClientRect, intersectionRatio, rootBounds } = entry;\n\n      if (!rootBounds) return;\n\n      const halfHeight = (root?.getBoundingClientRect().height || 0) / 2;\n      const isAbove = boundingClientRect.top < rootBounds.top;\n      const isBelow = boundingClientRect.bottom > rootBounds.bottom;\n      const isVisible = intersectionRatio === 1;\n\n      setVisible(isVisible);\n\n      if (!isVisible) {\n        const offset = isAbove\n          ? boundingClientRect.top - rootBounds!.top! - halfHeight\n          : isBelow\n            ? boundingClientRect.bottom - rootBounds!.bottom! + halfHeight\n            : 0;\n\n        setOffset(offset);\n      }\n    },\n    [isObserve, root]\n  );\n\n  React.useEffect(() => {\n    const observer = new IntersectionObserver(updateOffset, {\n      root: root,\n    });\n\n    const element = root?.querySelectorAll('#toc_item_active')[0];\n\n    if (element) observer.observe(element);\n\n    return () => {\n      observer.disconnect();\n    };\n  }, [root, activeId, updateOffset]);\n\n  return { offset, visible };\n};\n","import React from 'react';\n\nimport { KEYS, NodeApi } from '@udecode/plate';\nimport {\n  useEditorPlugin,\n  useEditorSelector,\n  useScrollRef,\n} from '@udecode/plate/react';\n\nimport type { Heading } from '../../lib/types';\n\nimport { getHeadingList } from '../../internal/getHeadingList';\nimport { TocPlugin } from '../TocPlugin';\nimport { heightToTop } from '../utils';\n\nexport const useTocElementState = () => {\n  const { editor, getOptions } = useEditorPlugin(TocPlugin);\n  const { isScroll, topOffset } = getOptions();\n\n  const headingList = useEditorSelector(getHeadingList, []);\n\n  const containerRef = useScrollRef();\n\n  const onContentScroll = React.useCallback(\n    (el: HTMLElement, id: string, behavior: ScrollBehavior = 'instant') => {\n      if (!containerRef.current) return;\n      if (isScroll) {\n        containerRef.current?.scrollTo({\n          behavior,\n          top: heightToTop(el, containerRef as any) - topOffset,\n        });\n      } else {\n        const top = heightToTop(el) - topOffset;\n        window.scrollTo({ behavior, top });\n      }\n\n      setTimeout(() => {\n        editor\n          .getApi({ key: KEYS.blockSelection })\n          .blockSelection?.addSelectedRow?.(id);\n      }, 0);\n    },\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n    [isScroll, topOffset]\n  );\n\n  return { editor, headingList, onContentScroll };\n};\n\nexport const useTocElement = ({\n  editor,\n  onContentScroll,\n}: ReturnType<typeof useTocElementState>) => {\n  return {\n    props: {\n      onClick: (\n        e: React.MouseEvent<HTMLElement, globalThis.MouseEvent>,\n        item: Heading,\n        behavior: ScrollBehavior\n      ) => {\n        e.preventDefault();\n        const { id, path } = item;\n        const node = NodeApi.get(editor, path);\n\n        if (!node) return;\n\n        const el = editor.api.toDOMNode(node);\n\n        if (!el) return;\n\n        onContentScroll(el, id, behavior);\n      },\n    },\n  };\n};\n","import React from 'react';\n\nimport { NodeApi } from '@udecode/plate';\nimport {\n  useEditorRef,\n  useEditorSelector,\n  useScrollRef,\n} from '@udecode/plate/react';\n\nimport type { Heading } from '../../lib/types';\nimport type { TocSideBarProps } from '../types';\n\nimport { useContentController, useTocController } from '.';\nimport { getHeadingList } from '../../internal/getHeadingList';\nimport { checkIn } from '../utils';\n\nexport const useTocSideBarState = ({\n  open = true,\n  rootMargin = '0px 0px 0px 0px',\n  topOffset = 0,\n}: TocSideBarProps) => {\n  const editor = useEditorRef();\n  const headingList = useEditorSelector(getHeadingList, []);\n  const containerRef = useScrollRef();\n\n  const tocRef = React.useRef<HTMLElement>(null);\n\n  const [mouseInToc, setMouseInToc] = React.useState(false);\n\n  const [isObserve, setIsObserve] = React.useState(open);\n\n  const { activeContentId, onContentScroll } = useContentController({\n    containerRef,\n    isObserve,\n    rootMargin,\n    topOffset,\n  });\n\n  useTocController({\n    activeId: activeContentId,\n    isObserve,\n    tocRef,\n  });\n\n  return {\n    activeContentId,\n    editor,\n    headingList,\n    mouseInToc,\n    open,\n    setIsObserve,\n    setMouseInToc,\n    tocRef,\n    onContentScroll,\n  };\n};\n\nexport const useTocSideBar = ({\n  editor,\n  mouseInToc,\n  open,\n  setIsObserve,\n  setMouseInToc,\n  tocRef,\n  onContentScroll,\n}: ReturnType<typeof useTocSideBarState>) => {\n  React.useEffect(() => {\n    if (mouseInToc) {\n      setIsObserve(false);\n    } else {\n      setIsObserve(true);\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [mouseInToc]);\n\n  const onContentClick = React.useCallback(\n    (\n      e: React.MouseEvent<HTMLElement, globalThis.MouseEvent>,\n      item: Heading,\n      behavior?: ScrollBehavior\n    ) => {\n      e.preventDefault();\n      const { id, path } = item;\n      const node = NodeApi.get(editor, path);\n\n      if (!node) return;\n\n      const el = editor.api.toDOMNode(node);\n\n      if (!el) return;\n\n      onContentScroll({ id, behavior, el });\n    },\n    [editor, onContentScroll]\n  );\n\n  return {\n    navProps: {\n      ref: tocRef,\n      onMouseEnter: () => {\n        !mouseInToc && open && setMouseInToc(true);\n      },\n      onMouseLeave: (\n        e: React.MouseEvent<HTMLElement, globalThis.MouseEvent>\n      ) => {\n        if (open) {\n          const isIn = checkIn(e);\n          isIn !== mouseInToc && setMouseInToc(isIn);\n        }\n      },\n    },\n    onContentClick,\n  };\n};\n"],"mappings":"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","names":["plugin","plugin","toPlatePlugin","createTSlatePlugin","KEYS","KEYS","toPlatePlugin","React","KEYS","useEditorRef","NodeApi","NodeApi","useEditorRef","React","KEYS","React","React","offset","React","React","KEYS","NodeApi","useEditorSelector","useEditorSelector","React","KEYS","NodeApi","React","NodeApi","useEditorRef","useEditorSelector","useScrollRef","useEditorRef","useEditorSelector","useScrollRef","React","NodeApi"]}