import { ComponentType, FC, memo } from 'react' import { EditorState } from '@codemirror/state' import { useEditorContext } from '../../../../shared/context/editor-context' import { ToolbarButton } from './toolbar-button' import { redo, undo } from '@codemirror/commands' import * as commands from '../../extensions/toolbar/commands' import { SectionHeadingDropdown } from './section-heading-dropdown' import getMeta from '../../../../utils/meta' import { InsertFigureDropdown } from './insert-figure-dropdown' import { useTranslation } from 'react-i18next' import { MathDropdown } from './math-dropdown' import { InsertListDropdown } from './insert-list-dropdown' import { TableDropdown } from './table-dropdown' import { LegacyTableDropdown } from './table-inserter-dropdown-legacy' import { withinFormattingCommand } from '@/features/source-editor/utils/tree-operations/formatting' import { isMac } from '@/shared/utils/os' import { useProjectContext } from '@/shared/context/project-context' import { useEditorPropertiesContext } from '@/features/ide-react/context/editor-properties-context' import { usePermissionsContext } from '@/features/ide-react/context/permissions-context' import { isCursorOnEmptyLine } from '@/features/source-editor/utils/is-cursor-on-empty-line' import importOverleafModules from '../../../../../macros/import-overleaf-module.macro' const sourceEditorToolbarButtonGroups = importOverleafModules( 'sourceEditorToolbarButtonGroups' ) as { import: { default: ComponentType; overflowGroupId: string } path: string }[] const addCommentFromToolbar = () => commands.addComment('toolbar') export const ToolbarItems: FC<{ state: EditorState overflowed?: Set languageName?: string visual: boolean listDepth: number }> = memo(function ToolbarItems({ state, overflowed, languageName, visual, listDepth, }) { const { t } = useTranslation() const { showSymbolPalette, toggleSymbolPalette } = useEditorPropertiesContext() const { writefullInstance } = useEditorContext() const { features } = useProjectContext() const permissions = usePermissionsContext() const isActive = withinFormattingCommand(state) const symbolPaletteAvailable = getMeta('ol-symbolPaletteAvailable') const showAiFeaturesDisabled = getMeta('ol-showAiFeaturesDisabled') const showGroup = (group: string) => !overflowed || overflowed.has(group) return ( <> {showGroup('group-history') && (
)} {sourceEditorToolbarButtonGroups.map( ({ import: { default: Component, overflowGroupId }, path }) => showGroup(overflowGroupId) && )} {languageName === 'latex' && ( <> {showGroup('group-section') && (
)} {showGroup('group-format') && (
)} {showGroup('group-math') && (
{symbolPaletteAvailable && ( )}
)}
{showGroup('misc-href') && (
)} {features.trackChangesVisible && permissions.comment && showGroup('misc-comment') && (
)} {showGroup('misc-ref') && (
)} {showGroup('misc-cite') && (
)} {showGroup('misc-figure') && (
)} {showGroup('misc-table') && (
{writefullInstance || showAiFeaturesDisabled ? ( ) : ( )}
)}
{showGroup('group-list') && (
{listDepth >= 1 && ( <> )}
)} )} ) })