import classnames from 'classnames' import { useCodeMirrorStateContext, useCodeMirrorViewContext, } from '../codemirror-editor' import { findCurrentSectionHeadingLevel, setSectionHeadingLevel, } from '../../extensions/toolbar/sections' import { useCallback, useMemo, useRef } from 'react' import { Overlay, Popover } from 'react-bootstrap' import useEventListener from '../../../../shared/hooks/use-event-listener' import useDropdown from '../../../../shared/hooks/use-dropdown' import { emitToolbarEvent } from '../../extensions/toolbar/utils/analytics' import Icon from '../../../../shared/components/icon' import { useTranslation } from 'react-i18next' const levels = new Map([ ['text', 'Normal text'], ['section', 'Section'], ['subsection', 'Subsection'], ['subsubsection', 'Subsubsection'], ['paragraph', 'Paragraph'], ['subparagraph', 'Subparagraph'], ]) const levelsEntries = [...levels.entries()] export const SectionHeadingDropdown = () => { const state = useCodeMirrorStateContext() const view = useCodeMirrorViewContext() const { t } = useTranslation() const { open: overflowOpen, onToggle: setOverflowOpen } = useDropdown() useEventListener( 'resize', useCallback(() => { setOverflowOpen(false) }, [setOverflowOpen]) ) const toggleButtonRef = useRef(null) const currentLevel = useMemo( () => findCurrentSectionHeadingLevel(state), [state] ) const currentLabel = currentLevel ? levels.get(currentLevel.level) ?? currentLevel.level : '---' return ( <> {overflowOpen && ( setOverflowOpen(false)} animation={false} container={view.dom} containerPadding={0} placement="bottom" rootClose target={toggleButtonRef.current ?? undefined} > )} ) }