chore: add per-level indentation to super note table of contents list
This commit is contained in:
@@ -50,6 +50,7 @@ import Popover from '@/Components/Popover/Popover'
|
|||||||
import LexicalTableOfContents from '@lexical/react/LexicalTableOfContents'
|
import LexicalTableOfContents from '@lexical/react/LexicalTableOfContents'
|
||||||
import Menu from '@/Components/Menu/Menu'
|
import Menu from '@/Components/Menu/Menu'
|
||||||
import MenuItem from '@/Components/Menu/MenuItem'
|
import MenuItem from '@/Components/Menu/MenuItem'
|
||||||
|
import { remToPx } from '@/Utils'
|
||||||
|
|
||||||
const TOGGLE_LINK_AND_EDIT_COMMAND = createCommand<string | null>('TOGGLE_LINK_AND_EDIT_COMMAND')
|
const TOGGLE_LINK_AND_EDIT_COMMAND = createCommand<string | null>('TOGGLE_LINK_AND_EDIT_COMMAND')
|
||||||
|
|
||||||
@@ -693,25 +694,34 @@ const ToolbarPlugin = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<Menu a11yLabel="Table of contents" isOpen className="!px-0">
|
<Menu a11yLabel="Table of contents" isOpen className="!px-0">
|
||||||
{tableOfContents.map(([key, text, tag]) => (
|
{tableOfContents.map(([key, text, tag]) => {
|
||||||
<MenuItem
|
const level = parseInt(tag.slice(1)) || 1
|
||||||
key={key}
|
if (level > 3) {
|
||||||
className="overflow-hidden md:py-2"
|
return null
|
||||||
onClick={() => {
|
}
|
||||||
editor.getEditorState().read(() => {
|
return (
|
||||||
const domElement = editor.getElementByKey(key)
|
<MenuItem
|
||||||
if (!domElement) {
|
key={key}
|
||||||
return
|
className="overflow-hidden md:py-2"
|
||||||
}
|
onClick={() => {
|
||||||
domElement.scrollIntoView({ block: 'start' })
|
editor.getEditorState().read(() => {
|
||||||
setIsTOCOpen(false)
|
const domElement = editor.getElementByKey(key)
|
||||||
})
|
if (!domElement) {
|
||||||
}}
|
return
|
||||||
>
|
}
|
||||||
<Icon type={tag} className="-mt-px mr-2.5 flex-shrink-0" />
|
domElement.scrollIntoView({ block: 'start' })
|
||||||
<span className="overflow-hidden text-ellipsis whitespace-nowrap">{text}</span>
|
setIsTOCOpen(false)
|
||||||
</MenuItem>
|
})
|
||||||
))}
|
}}
|
||||||
|
style={{
|
||||||
|
paddingLeft: `${(level - 1) * remToPx(1) + remToPx(0.75)}px`,
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<Icon type={tag} className="-mt-px mr-2.5 flex-shrink-0" />
|
||||||
|
<span className="overflow-hidden text-ellipsis whitespace-nowrap">{text}</span>
|
||||||
|
</MenuItem>
|
||||||
|
)
|
||||||
|
})}
|
||||||
</Menu>
|
</Menu>
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -255,3 +255,7 @@ export function getScrollParent(node: HTMLElement | null): HTMLElement | null {
|
|||||||
return getScrollParent(node.parentElement)
|
return getScrollParent(node.parentElement)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function remToPx(rem: number) {
|
||||||
|
return rem * parseFloat(getComputedStyle(document.documentElement).fontSize)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user