refactor(editor): latex slash menu config extension (#10677)

This commit is contained in:
L-Sun
2025-03-07 08:21:18 +00:00
parent 4677049b5c
commit 4be80d87ff
9 changed files with 59 additions and 44 deletions

View File

@@ -16,9 +16,12 @@
"@blocksuite/affine-block-note": "workspace:*",
"@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/icons": "^2.2.1",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",

View File

@@ -0,0 +1,45 @@
import { insertInlineLatex } from '@blocksuite/affine-rich-text';
import {
getSelectedModelsCommand,
getTextSelectionCommand,
} from '@blocksuite/affine-shared/commands';
import { type SlashMenuConfig } from '@blocksuite/affine-widget-slash-menu';
import { TeXIcon } from '@blocksuite/icons/lit';
import { insertLatexBlockCommand } from '../commands';
export const latexSlashMenuConfig: SlashMenuConfig = {
items: [
{
name: 'Inline equation',
group: '0_Basic@8',
description: 'Create a inline equation.',
icon: TeXIcon(),
searchAlias: ['inlineMath, inlineEquation', 'inlineLatex'],
action: ({ std }) => {
std.command
.chain()
.pipe(getTextSelectionCommand)
.pipe(insertInlineLatex)
.run();
},
},
{
name: 'Equation',
description: 'Create a equation block.',
icon: TeXIcon(),
searchAlias: ['mathBlock, equationBlock', 'latexBlock'],
group: '4_Content & Media@9',
action: ({ std }) => {
std.command
.chain()
.pipe(getSelectedModelsCommand)
.pipe(insertLatexBlockCommand, {
place: 'after',
removeEmptyLine: true,
})
.run();
},
},
],
};

View File

@@ -1,10 +1,13 @@
import { SlashMenuConfigExtension } from '@blocksuite/affine-widget-slash-menu';
import { BlockViewExtension } from '@blocksuite/block-std';
import type { ExtensionType } from '@blocksuite/store';
import { literal } from 'lit/static-html.js';
import { LatexBlockAdapterExtensions } from './adapters/extension.js';
import { latexSlashMenuConfig } from './configs/slash-menu.js';
export const LatexBlockSpec: ExtensionType[] = [
BlockViewExtension('affine:latex', literal`affine-latex`),
LatexBlockAdapterExtensions,
SlashMenuConfigExtension('affine:latex', latexSlashMenuConfig),
].flat();

View File

@@ -10,7 +10,9 @@
{ "path": "../block-note" },
{ "path": "../components" },
{ "path": "../model" },
{ "path": "../rich-text" },
{ "path": "../shared" },
{ "path": "../widget-slash-menu" },
{ "path": "../../framework/block-std" },
{ "path": "../../framework/global" },
{ "path": "../../framework/inline" },

View File

@@ -14,7 +14,6 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine-block-embed": "workspace:*",
"@blocksuite/affine-block-latex": "workspace:*",
"@blocksuite/affine-block-note": "workspace:*",
"@blocksuite/affine-block-surface": "workspace:*",
"@blocksuite/affine-block-surface-ref": "workspace:*",

View File

@@ -1,4 +1,3 @@
import { insertLatexBlockCommand } from '@blocksuite/affine-block-latex';
import { getSurfaceBlock } from '@blocksuite/affine-block-surface';
import { insertSurfaceRefBlockCommand } from '@blocksuite/affine-block-surface-ref';
import { toggleEmbedCardCreateModal } from '@blocksuite/affine-components/embed-card-modal';
@@ -10,14 +9,10 @@ import type {
import {
getInlineEditorByModel,
insertContent,
insertInlineLatex,
textConversionConfigs,
textFormatConfigs,
} from '@blocksuite/affine-rich-text';
import {
getSelectedModelsCommand,
getTextSelectionCommand,
} from '@blocksuite/affine-shared/commands';
import { getSelectedModelsCommand } from '@blocksuite/affine-shared/commands';
import { REFERENCE_NODE } from '@blocksuite/affine-shared/consts';
import { createDefaultDoc } from '@blocksuite/affine-shared/utils';
import {
@@ -35,7 +30,6 @@ import {
LoomLogoDuotoneIcon,
NowIcon,
PlusIcon,
TeXIcon,
TodayIcon,
TomorrowIcon,
YesterdayIcon,
@@ -91,21 +85,6 @@ export const defaultSlashMenuConfig: SlashMenuConfig = {
}) satisfies SlashMenuActionItem
),
{
name: 'Inline equation',
group: `0_Basic@${index++}`,
description: 'Create a equation block.',
icon: TeXIcon(),
searchAlias: ['inlineMath, inlineEquation', 'inlineLatex'],
action: ({ std }) => {
std.command
.chain()
.pipe(getTextSelectionCommand)
.pipe(insertInlineLatex)
.run();
},
},
// ---------------------------------------------------------
// { groupName: 'List' },
...textConversionConfigs
@@ -287,24 +266,6 @@ export const defaultSlashMenuConfig: SlashMenuConfig = {
},
},
{
name: 'Equation',
description: 'Create a equation block.',
icon: TeXIcon(),
searchAlias: ['mathBlock, equationBlock', 'latexBlock'],
group: `4_Content & Media@${index++}`,
action: ({ std }) => {
std.command
.chain()
.pipe(getSelectedModelsCommand)
.pipe(insertLatexBlockCommand, {
place: 'after',
removeEmptyLine: true,
})
.run();
},
},
// TODO(@L-Sun): Linear
// ---------------------------------------------------------

View File

@@ -8,7 +8,6 @@
"include": ["./src"],
"references": [
{ "path": "../block-embed" },
{ "path": "../block-latex" },
{ "path": "../block-note" },
{ "path": "../block-surface" },
{ "path": "../block-surface-ref" },