refactor(editor): extract code block (#9397)

This commit is contained in:
Saul-Mirone
2024-12-27 14:45:11 +00:00
parent 5e1d936c2e
commit 6ebefbbf2b
42 changed files with 177 additions and 52 deletions

View File

@@ -0,0 +1,43 @@
{
"name": "@blocksuite/affine-block-code",
"description": "Code block for BlockSuite.",
"type": "module",
"scripts": {
"build": "tsc",
"test:unit": "nx vite:test --run --passWithNoTests",
"test:unit:coverage": "nx vite:test --run --coverage",
"test:e2e": "playwright test"
},
"sideEffects": false,
"keywords": [],
"author": "toeverything",
"license": "MIT",
"dependencies": {
"@blocksuite/affine-components": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
"@blocksuite/inline": "workspace:*",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.10",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.1",
"@types/mdast": "^4.0.4",
"lit": "^3.2.0",
"minimatch": "^10.0.1",
"shiki": "^1.14.1",
"zod": "^3.23.8"
},
"exports": {
".": "./src/index.ts",
"./effects": "./src/effects.ts"
},
"files": [
"src",
"dist",
"!src/__tests__",
"!dist/__tests__"
]
}

View File

@@ -8,7 +8,7 @@ import {
Clipboard, Clipboard,
type UIEventHandler, type UIEventHandler,
} from '@blocksuite/block-std'; } from '@blocksuite/block-std';
import { assertExists, DisposableGroup } from '@blocksuite/global/utils'; import { DisposableGroup } from '@blocksuite/global/utils';
export class CodeClipboardController { export class CodeClipboardController {
private _clipboard!: Clipboard; private _clipboard!: Clipboard;
@@ -42,17 +42,15 @@ export class CodeClipboardController {
.try(cmd => [ .try(cmd => [
cmd.getTextSelection().inline<'currentSelectionPath'>((ctx, next) => { cmd.getTextSelection().inline<'currentSelectionPath'>((ctx, next) => {
const textSelection = ctx.currentTextSelection; const textSelection = ctx.currentTextSelection;
assertExists(textSelection); if (!textSelection) return;
const end = textSelection.to ?? textSelection.from; const end = textSelection.to ?? textSelection.from;
next({ currentSelectionPath: end.blockId }); next({ currentSelectionPath: end.blockId });
}), }),
cmd.getBlockSelections().inline<'currentSelectionPath'>((ctx, next) => { cmd.getBlockSelections().inline<'currentSelectionPath'>((ctx, next) => {
const currentBlockSelections = ctx.currentBlockSelections; const currentBlockSelections = ctx.currentBlockSelections;
assertExists(currentBlockSelections); if (!currentBlockSelections) return;
const blockSelection = currentBlockSelections.at(-1); const blockSelection = currentBlockSelections.at(-1);
if (!blockSelection) { if (!blockSelection) return;
return;
}
next({ currentSelectionPath: blockSelection.blockId }); next({ currentSelectionPath: blockSelection.blockId });
}), }),
]) ])

View File

@@ -6,13 +6,13 @@ import {
} from '@blocksuite/block-std'; } from '@blocksuite/block-std';
import { literal, unsafeStatic } from 'lit/static-html.js'; import { literal, unsafeStatic } from 'lit/static-html.js';
import { AFFINE_CODE_TOOLBAR_WIDGET } from '../root-block/widgets/code-toolbar/index.js';
import { CodeBlockAdapterExtensions } from './adapters/extension.js'; import { CodeBlockAdapterExtensions } from './adapters/extension.js';
import { import {
CodeBlockInlineManagerExtension, CodeBlockInlineManagerExtension,
CodeBlockUnitSpecExtension, CodeBlockUnitSpecExtension,
} from './code-block-inline.js'; } from './code-block-inline.js';
import { CodeBlockService } from './code-block-service.js'; import { CodeBlockService } from './code-block-service.js';
import { AFFINE_CODE_TOOLBAR_WIDGET } from './code-toolbar/index.js';
export const CodeBlockSpec: ExtensionType[] = [ export const CodeBlockSpec: ExtensionType[] = [
FlavourExtension('affine:code'), FlavourExtension('affine:code'),

View File

@@ -11,7 +11,7 @@ import { property, query } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js'; import { styleMap } from 'lit/directives/style-map.js';
import { html } from 'lit/static-html.js'; import { html } from 'lit/static-html.js';
import type { CodeBlockComponent } from '../../../../code-block/code-block.js'; import type { CodeBlockComponent } from '../..';
export class LanguageListButton extends WithDisposable( export class LanguageListButton extends WithDisposable(
SignalWatcher(LitElement) SignalWatcher(LitElement)

View File

@@ -1,6 +1,6 @@
import { MenuContext } from '@blocksuite/affine-components/toolbar'; import { MenuContext } from '@blocksuite/affine-components/toolbar';
import type { CodeBlockComponent } from '../../../code-block/code-block.js'; import type { CodeBlockComponent } from '../code-block';
export class CodeBlockToolbarContext extends MenuContext { export class CodeBlockToolbarContext extends MenuContext {
override close = () => { override close = () => {

View File

@@ -13,7 +13,7 @@ import { WidgetComponent } from '@blocksuite/block-std';
import { limitShift, shift } from '@floating-ui/dom'; import { limitShift, shift } from '@floating-ui/dom';
import { html } from 'lit'; import { html } from 'lit';
import type { CodeBlockComponent } from '../../../code-block/code-block.js'; import type { CodeBlockComponent } from '../code-block.js';
import { MORE_GROUPS, PRIMARY_GROUPS } from './config.js'; import { MORE_GROUPS, PRIMARY_GROUPS } from './config.js';
import { CodeBlockToolbarContext } from './context.js'; import { CodeBlockToolbarContext } from './context.js';

View File

@@ -0,0 +1,35 @@
import type * as CommandsType from '@blocksuite/affine-shared/commands';
import { CodeBlockComponent } from './code-block';
import type { CodeBlockConfig } from './code-block-config';
import {
AFFINE_CODE_TOOLBAR_WIDGET,
AffineCodeToolbarWidget,
} from './code-toolbar';
import { AffineCodeToolbar } from './code-toolbar/components/code-toolbar';
import { LanguageListButton } from './code-toolbar/components/lang-button';
import { AffineCodeUnit } from './highlight/affine-code-unit';
export function effects() {
customElements.define('language-list-button', LanguageListButton);
customElements.define('affine-code-toolbar', AffineCodeToolbar);
customElements.define(AFFINE_CODE_TOOLBAR_WIDGET, AffineCodeToolbarWidget);
customElements.define('affine-code-unit', AffineCodeUnit);
customElements.define('affine-code', CodeBlockComponent);
}
declare type _GLOBAL_ = typeof CommandsType;
declare global {
namespace BlockSuite {
interface BlockConfigs {
'affine:code': CodeBlockConfig;
}
}
interface HTMLElementTagNameMap {
'language-list-button': LanguageListButton;
'affine-code-toolbar': AffineCodeToolbar;
[AFFINE_CODE_TOOLBAR_WIDGET]: AffineCodeToolbarWidget;
}
}

View File

@@ -0,0 +1,5 @@
export * from './adapters';
export * from './code-block';
export * from './code-block-config';
export * from './code-block-spec';
export * from './code-toolbar';

View File

@@ -0,0 +1,32 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "./src/",
"outDir": "./dist/",
"noEmit": false
},
"include": ["./src"],
"references": [
{
"path": "../../framework/global"
},
{
"path": "../../framework/store"
},
{
"path": "../../framework/block-std"
},
{
"path": "../../framework/inline"
},
{
"path": "../model"
},
{
"path": "../components"
},
{
"path": "../shared"
}
]
}

View File

@@ -16,6 +16,7 @@
"dependencies": { "dependencies": {
"@blocksuite/affine-block-attachment": "workspace:*", "@blocksuite/affine-block-attachment": "workspace:*",
"@blocksuite/affine-block-bookmark": "workspace:*", "@blocksuite/affine-block-bookmark": "workspace:*",
"@blocksuite/affine-block-code": "workspace:*",
"@blocksuite/affine-block-divider": "workspace:*", "@blocksuite/affine-block-divider": "workspace:*",
"@blocksuite/affine-block-edgeless-text": "workspace:*", "@blocksuite/affine-block-edgeless-text": "workspace:*",
"@blocksuite/affine-block-embed": "workspace:*", "@blocksuite/affine-block-embed": "workspace:*",

View File

@@ -1,4 +1,5 @@
import { BookmarkBlockHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark'; import { BookmarkBlockHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark';
import { CodeBlockHtmlAdapterExtension } from '@blocksuite/affine-block-code';
import { DividerBlockHtmlAdapterExtension } from '@blocksuite/affine-block-divider'; import { DividerBlockHtmlAdapterExtension } from '@blocksuite/affine-block-divider';
import { import {
EmbedFigmaBlockHtmlAdapterExtension, EmbedFigmaBlockHtmlAdapterExtension,
@@ -12,7 +13,6 @@ import { ImageBlockHtmlAdapterExtension } from '@blocksuite/affine-block-image';
import { ListBlockHtmlAdapterExtension } from '@blocksuite/affine-block-list'; import { ListBlockHtmlAdapterExtension } from '@blocksuite/affine-block-list';
import { ParagraphBlockHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph'; import { ParagraphBlockHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph';
import { CodeBlockHtmlAdapterExtension } from '../../../code-block/adapters/html.js';
import { DatabaseBlockHtmlAdapterExtension } from '../../../database-block/adapters/html.js'; import { DatabaseBlockHtmlAdapterExtension } from '../../../database-block/adapters/html.js';
import { RootBlockHtmlAdapterExtension } from '../../../root-block/adapters/html.js'; import { RootBlockHtmlAdapterExtension } from '../../../root-block/adapters/html.js';

View File

@@ -1,4 +1,5 @@
import { bookmarkBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-bookmark'; import { bookmarkBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-bookmark';
import { codeBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-code';
import { dividerBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-divider'; import { dividerBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-divider';
import { import {
embedFigmaBlockMarkdownAdapterMatcher, embedFigmaBlockMarkdownAdapterMatcher,
@@ -13,7 +14,6 @@ import { latexBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-latex
import { listBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-list'; import { listBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-list';
import { paragraphBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-paragraph'; import { paragraphBlockMarkdownAdapterMatcher } from '@blocksuite/affine-block-paragraph';
import { codeBlockMarkdownAdapterMatcher } from '../../../code-block/adapters/markdown.js';
import { databaseBlockMarkdownAdapterMatcher } from '../../../database-block/adapters/markdown.js'; import { databaseBlockMarkdownAdapterMatcher } from '../../../database-block/adapters/markdown.js';
import { rootBlockMarkdownAdapterMatcher } from '../../../root-block/adapters/markdown.js'; import { rootBlockMarkdownAdapterMatcher } from '../../../root-block/adapters/markdown.js';

View File

@@ -1,5 +1,6 @@
import { AttachmentBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-attachment'; import { AttachmentBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-attachment';
import { BookmarkBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark'; import { BookmarkBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-bookmark';
import { CodeBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-code';
import { DividerBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-divider'; import { DividerBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-divider';
import { import {
EmbedFigmaBlockNotionHtmlAdapterExtension, EmbedFigmaBlockNotionHtmlAdapterExtension,
@@ -13,7 +14,6 @@ import { ListBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-li
import { ParagraphBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph'; import { ParagraphBlockNotionHtmlAdapterExtension } from '@blocksuite/affine-block-paragraph';
import type { ExtensionType } from '@blocksuite/block-std'; import type { ExtensionType } from '@blocksuite/block-std';
import { CodeBlockNotionHtmlAdapterExtension } from '../../../code-block/adapters/notion-html.js';
import { DatabaseBlockNotionHtmlAdapterExtension } from '../../../database-block/adapters/notion-html.js'; import { DatabaseBlockNotionHtmlAdapterExtension } from '../../../database-block/adapters/notion-html.js';
import { RootBlockNotionHtmlAdapterExtension } from '../../../root-block/adapters/notion-html.js'; import { RootBlockNotionHtmlAdapterExtension } from '../../../root-block/adapters/notion-html.js';

View File

@@ -1,4 +1,5 @@
import { BookmarkBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-bookmark'; import { BookmarkBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-bookmark';
import { CodeBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-code';
import { DividerBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-divider'; import { DividerBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-divider';
import { import {
EmbedFigmaBlockPlainTextAdapterExtension, EmbedFigmaBlockPlainTextAdapterExtension,
@@ -13,7 +14,6 @@ import { ListBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-lis
import { ParagraphBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-paragraph'; import { ParagraphBlockPlainTextAdapterExtension } from '@blocksuite/affine-block-paragraph';
import type { ExtensionType } from '@blocksuite/block-std'; import type { ExtensionType } from '@blocksuite/block-std';
import { CodeBlockPlainTextAdapterExtension } from '../../../code-block/adapters/plain-text.js';
import { DatabaseBlockPlainTextAdapterExtension } from '../../../database-block/adapters/plain-text.js'; import { DatabaseBlockPlainTextAdapterExtension } from '../../../database-block/adapters/plain-text.js';
export const defaultBlockPlainTextAdapterMatchers: ExtensionType[] = [ export const defaultBlockPlainTextAdapterMatchers: ExtensionType[] = [

View File

@@ -1,5 +1,6 @@
import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment'; import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment';
import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark'; import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark';
import { CodeBlockSpec } from '@blocksuite/affine-block-code';
import { DividerBlockSpec } from '@blocksuite/affine-block-divider'; import { DividerBlockSpec } from '@blocksuite/affine-block-divider';
import { EmbedExtensions } from '@blocksuite/affine-block-embed'; import { EmbedExtensions } from '@blocksuite/affine-block-embed';
import { ImageBlockSpec } from '@blocksuite/affine-block-image'; import { ImageBlockSpec } from '@blocksuite/affine-block-image';
@@ -14,7 +15,6 @@ import { EditPropsStore } from '@blocksuite/affine-shared/services';
import type { ExtensionType } from '@blocksuite/block-std'; import type { ExtensionType } from '@blocksuite/block-std';
import { AdapterFactoryExtensions } from '../_common/adapters/extension.js'; import { AdapterFactoryExtensions } from '../_common/adapters/extension.js';
import { CodeBlockSpec } from '../code-block/code-block-spec.js';
import { DataViewBlockSpec } from '../data-view-block/data-view-spec.js'; import { DataViewBlockSpec } from '../data-view-block/data-view-spec.js';
import { DatabaseBlockSpec } from '../database-block/database-spec.js'; import { DatabaseBlockSpec } from '../database-block/database-spec.js';

View File

@@ -1,5 +1,6 @@
import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment'; import { AttachmentBlockSpec } from '@blocksuite/affine-block-attachment';
import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark'; import { BookmarkBlockSpec } from '@blocksuite/affine-block-bookmark';
import { CodeBlockSpec } from '@blocksuite/affine-block-code';
import { DividerBlockSpec } from '@blocksuite/affine-block-divider'; import { DividerBlockSpec } from '@blocksuite/affine-block-divider';
import { import {
EmbedFigmaBlockSpec, EmbedFigmaBlockSpec,
@@ -18,7 +19,6 @@ import {
} from '@blocksuite/affine-block-note'; } from '@blocksuite/affine-block-note';
import { ParagraphBlockSpec } from '@blocksuite/affine-block-paragraph'; import { ParagraphBlockSpec } from '@blocksuite/affine-block-paragraph';
import { CodeBlockSpec } from '../../code-block/code-block-spec.js';
import { DataViewBlockSpec } from '../../data-view-block/data-view-spec.js'; import { DataViewBlockSpec } from '../../data-view-block/data-view-spec.js';
import { DatabaseBlockSpec } from '../../database-block/database-spec.js'; import { DatabaseBlockSpec } from '../../database-block/database-spec.js';

View File

@@ -1,3 +1,4 @@
import type { CodeBlockConfig } from '@blocksuite/affine-block-code';
import { import {
type ReferenceNodeConfig, type ReferenceNodeConfig,
ReferenceNodeConfigIdentifier, ReferenceNodeConfigIdentifier,
@@ -11,7 +12,6 @@ import {
} from '@blocksuite/block-std'; } from '@blocksuite/block-std';
import type { Container } from '@blocksuite/global/di'; import type { Container } from '@blocksuite/global/di';
import type { CodeBlockConfig } from '../../code-block/code-block-config.js';
import { AFFINE_EMBED_CARD_TOOLBAR_WIDGET } from '../../root-block/widgets/embed-card-toolbar/embed-card-toolbar.js'; import { AFFINE_EMBED_CARD_TOOLBAR_WIDGET } from '../../root-block/widgets/embed-card-toolbar/embed-card-toolbar.js';
import { AFFINE_FORMAT_BAR_WIDGET } from '../../root-block/widgets/format-bar/format-bar.js'; import { AFFINE_FORMAT_BAR_WIDGET } from '../../root-block/widgets/format-bar/format-bar.js';
import { AFFINE_SLASH_MENU_WIDGET } from '../../root-block/widgets/slash-menu/index.js'; import { AFFINE_SLASH_MENU_WIDGET } from '../../root-block/widgets/slash-menu/index.js';

View File

@@ -1,3 +0,0 @@
export * from './adapters/markdown.js';
export * from './code-block.js';
export * from './code-block-config.js';

View File

@@ -1,5 +1,6 @@
import { effects as blockAttachmentEffects } from '@blocksuite/affine-block-attachment/effects'; import { effects as blockAttachmentEffects } from '@blocksuite/affine-block-attachment/effects';
import { effects as blockBookmarkEffects } from '@blocksuite/affine-block-bookmark/effects'; import { effects as blockBookmarkEffects } from '@blocksuite/affine-block-bookmark/effects';
import { effects as blockCodeEffects } from '@blocksuite/affine-block-code/effects';
import { effects as blockDividerEffects } from '@blocksuite/affine-block-divider/effects'; import { effects as blockDividerEffects } from '@blocksuite/affine-block-divider/effects';
import { effects as blockEdgelessTextEffects } from '@blocksuite/affine-block-edgeless-text/effects'; import { effects as blockEdgelessTextEffects } from '@blocksuite/affine-block-edgeless-text/effects';
import { effects as blockEmbedEffects } from '@blocksuite/affine-block-embed/effects'; import { effects as blockEmbedEffects } from '@blocksuite/affine-block-embed/effects';
@@ -36,11 +37,6 @@ import { EmbedCardEditCaptionEditModal } from './_common/components/embed-card/m
import { EmbedCardCreateModal } from './_common/components/embed-card/modal/embed-card-create-modal.js'; import { EmbedCardCreateModal } from './_common/components/embed-card/modal/embed-card-create-modal.js';
import { EmbedCardEditModal } from './_common/components/embed-card/modal/embed-card-edit-modal.js'; import { EmbedCardEditModal } from './_common/components/embed-card/modal/embed-card-edit-modal.js';
import { registerSpecs } from './_specs/register-specs.js'; import { registerSpecs } from './_specs/register-specs.js';
import { AffineCodeUnit } from './code-block/highlight/affine-code-unit.js';
import {
CodeBlockComponent,
type CodeBlockConfig,
} from './code-block/index.js';
import { DataViewBlockComponent } from './data-view-block/index.js'; import { DataViewBlockComponent } from './data-view-block/index.js';
import { CenterPeek } from './database-block/components/layout.js'; import { CenterPeek } from './database-block/components/layout.js';
import { DatabaseTitle } from './database-block/components/title/index.js'; import { DatabaseTitle } from './database-block/components/title/index.js';
@@ -184,7 +180,6 @@ import {
AIPanelGenerating, AIPanelGenerating,
AIPanelInput, AIPanelInput,
} from './root-block/widgets/ai-panel/components/index.js'; } from './root-block/widgets/ai-panel/components/index.js';
import { effects as widgetCodeToolbarEffects } from './root-block/widgets/code-toolbar/effects.js';
import { AFFINE_DOC_REMOTE_SELECTION_WIDGET } from './root-block/widgets/doc-remote-selection/index.js'; import { AFFINE_DOC_REMOTE_SELECTION_WIDGET } from './root-block/widgets/doc-remote-selection/index.js';
import { DragPreview } from './root-block/widgets/drag-handle/components/drag-preview.js'; import { DragPreview } from './root-block/widgets/drag-handle/components/drag-preview.js';
import { DropIndicator } from './root-block/widgets/drag-handle/components/drop-indicator.js'; import { DropIndicator } from './root-block/widgets/drag-handle/components/drop-indicator.js';
@@ -252,6 +247,7 @@ export function effects() {
blockLatexEffects(); blockLatexEffects();
blockEdgelessTextEffects(); blockEdgelessTextEffects();
blockDividerEffects(); blockDividerEffects();
blockCodeEffects();
componentCaptionEffects(); componentCaptionEffects();
componentContextMenuEffects(); componentContextMenuEffects();
@@ -268,7 +264,6 @@ export function effects() {
widgetLinkedDocEffects(); widgetLinkedDocEffects();
widgetFrameTitleEffects(); widgetFrameTitleEffects();
widgetEdgelessElementToolbarEffects(); widgetEdgelessElementToolbarEffects();
widgetCodeToolbarEffects();
dataViewEffects(); dataViewEffects();
@@ -281,7 +276,6 @@ export function effects() {
'data-view-header-area-text-editing', 'data-view-header-area-text-editing',
HeaderAreaTextCellEditing HeaderAreaTextCellEditing
); );
customElements.define('affine-code-unit', AffineCodeUnit);
customElements.define('affine-database-rich-text-cell', RichTextCell); customElements.define('affine-database-rich-text-cell', RichTextCell);
customElements.define( customElements.define(
'affine-database-rich-text-cell-editing', 'affine-database-rich-text-cell-editing',
@@ -292,7 +286,6 @@ export function effects() {
customElements.define('database-datasource-block-renderer', BlockRenderer); customElements.define('database-datasource-block-renderer', BlockRenderer);
customElements.define('affine-page-root', PageRootBlockComponent); customElements.define('affine-page-root', PageRootBlockComponent);
customElements.define('affine-preview-root', PreviewRootBlockComponent); customElements.define('affine-preview-root', PreviewRootBlockComponent);
customElements.define('affine-code', CodeBlockComponent);
customElements.define('mini-mindmap-preview', MiniMindmapPreview); customElements.define('mini-mindmap-preview', MiniMindmapPreview);
customElements.define('mini-mindmap-surface-block', MindmapSurfaceBlock); customElements.define('mini-mindmap-surface-block', MindmapSurfaceBlock);
customElements.define('affine-data-view', DataViewBlockComponent); customElements.define('affine-data-view', DataViewBlockComponent);
@@ -519,7 +512,6 @@ declare global {
updatedBlocks?: BlockModel[]; updatedBlocks?: BlockModel[];
} }
interface BlockConfigs { interface BlockConfigs {
'affine:code': CodeBlockConfig;
'affine:page': RootBlockConfig; 'affine:page': RootBlockConfig;
} }
interface BlockServices { interface BlockServices {

View File

@@ -16,7 +16,6 @@ export * from './_common/test-utils/test-utils.js';
export * from './_common/transformers/index.js'; export * from './_common/transformers/index.js';
export { type AbstractEditor } from './_common/types.js'; export { type AbstractEditor } from './_common/types.js';
export * from './_specs/index.js'; export * from './_specs/index.js';
export * from './code-block/index.js';
export * from './data-view-block/index.js'; export * from './data-view-block/index.js';
export * from './database-block/index.js'; export * from './database-block/index.js';
export { EdgelessTemplatePanel } from './root-block/edgeless/components/toolbar/template/template-panel.js'; export { EdgelessTemplatePanel } from './root-block/edgeless/components/toolbar/template/template-panel.js';
@@ -44,6 +43,7 @@ export {
export * from './surface-ref-block/index.js'; export * from './surface-ref-block/index.js';
export * from '@blocksuite/affine-block-attachment'; export * from '@blocksuite/affine-block-attachment';
export * from '@blocksuite/affine-block-bookmark'; export * from '@blocksuite/affine-block-bookmark';
export * from '@blocksuite/affine-block-code';
export * from '@blocksuite/affine-block-divider'; export * from '@blocksuite/affine-block-divider';
export * from '@blocksuite/affine-block-edgeless-text'; export * from '@blocksuite/affine-block-edgeless-text';
export * from '@blocksuite/affine-block-embed'; export * from '@blocksuite/affine-block-embed';

View File

@@ -1,20 +0,0 @@
import { AffineCodeToolbar } from './components/code-toolbar.js';
import { LanguageListButton } from './components/lang-button.js';
import {
AFFINE_CODE_TOOLBAR_WIDGET,
AffineCodeToolbarWidget,
} from './index.js';
export function effects() {
customElements.define('language-list-button', LanguageListButton);
customElements.define('affine-code-toolbar', AffineCodeToolbar);
customElements.define(AFFINE_CODE_TOOLBAR_WIDGET, AffineCodeToolbarWidget);
}
declare global {
interface HTMLElementTagNameMap {
'language-list-button': LanguageListButton;
'affine-code-toolbar': AffineCodeToolbar;
[AFFINE_CODE_TOOLBAR_WIDGET]: AffineCodeToolbarWidget;
}
}

View File

@@ -6,7 +6,6 @@ export {
type AffineAIPanelState, type AffineAIPanelState,
type AffineAIPanelWidgetConfig, type AffineAIPanelWidgetConfig,
} from './ai-panel/type.js'; } from './ai-panel/type.js';
export { AffineCodeToolbarWidget } from './code-toolbar/index.js';
export { AffineDocRemoteSelectionWidget } from './doc-remote-selection/doc-remote-selection.js'; export { AffineDocRemoteSelectionWidget } from './doc-remote-selection/doc-remote-selection.js';
export { AffineDragHandleWidget } from './drag-handle/drag-handle.js'; export { AffineDragHandleWidget } from './drag-handle/drag-handle.js';
export { export {

View File

@@ -37,6 +37,9 @@
{ {
"path": "../affine/block-list" "path": "../affine/block-list"
}, },
{
"path": "../affine/block-code"
},
{ {
"path": "../affine/block-embed" "path": "../affine/block-embed"
}, },

View File

@@ -42,6 +42,19 @@ export const PackageList = [
'blocksuite/framework/store', 'blocksuite/framework/store',
], ],
}, },
{
location: 'blocksuite/affine/block-code',
name: '@blocksuite/affine-block-code',
workspaceDependencies: [
'blocksuite/affine/components',
'blocksuite/affine/model',
'blocksuite/affine/shared',
'blocksuite/framework/block-std',
'blocksuite/framework/global',
'blocksuite/framework/inline',
'blocksuite/framework/store',
],
},
{ {
location: 'blocksuite/affine/block-divider', location: 'blocksuite/affine/block-divider',
name: '@blocksuite/affine-block-divider', name: '@blocksuite/affine-block-divider',
@@ -237,6 +250,7 @@ export const PackageList = [
workspaceDependencies: [ workspaceDependencies: [
'blocksuite/affine/block-attachment', 'blocksuite/affine/block-attachment',
'blocksuite/affine/block-bookmark', 'blocksuite/affine/block-bookmark',
'blocksuite/affine/block-code',
'blocksuite/affine/block-divider', 'blocksuite/affine/block-divider',
'blocksuite/affine/block-edgeless-text', 'blocksuite/affine/block-edgeless-text',
'blocksuite/affine/block-embed', 'blocksuite/affine/block-embed',
@@ -584,6 +598,7 @@ export type PackageName =
| '@blocksuite/affine' | '@blocksuite/affine'
| '@blocksuite/affine-block-attachment' | '@blocksuite/affine-block-attachment'
| '@blocksuite/affine-block-bookmark' | '@blocksuite/affine-block-bookmark'
| '@blocksuite/affine-block-code'
| '@blocksuite/affine-block-divider' | '@blocksuite/affine-block-divider'
| '@blocksuite/affine-block-edgeless-text' | '@blocksuite/affine-block-edgeless-text'
| '@blocksuite/affine-block-embed' | '@blocksuite/affine-block-embed'

View File

@@ -9,6 +9,7 @@
{ "path": "./blocksuite/affine/all" }, { "path": "./blocksuite/affine/all" },
{ "path": "./blocksuite/affine/block-attachment" }, { "path": "./blocksuite/affine/block-attachment" },
{ "path": "./blocksuite/affine/block-bookmark" }, { "path": "./blocksuite/affine/block-bookmark" },
{ "path": "./blocksuite/affine/block-code" },
{ "path": "./blocksuite/affine/block-divider" }, { "path": "./blocksuite/affine/block-divider" },
{ "path": "./blocksuite/affine/block-edgeless-text" }, { "path": "./blocksuite/affine/block-edgeless-text" },
{ "path": "./blocksuite/affine/block-embed" }, { "path": "./blocksuite/affine/block-embed" },

View File

@@ -3289,6 +3289,29 @@ __metadata:
languageName: unknown languageName: unknown
linkType: soft linkType: soft
"@blocksuite/affine-block-code@workspace:*, @blocksuite/affine-block-code@workspace:blocksuite/affine/block-code":
version: 0.0.0-use.local
resolution: "@blocksuite/affine-block-code@workspace:blocksuite/affine/block-code"
dependencies:
"@blocksuite/affine-components": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
"@blocksuite/inline": "workspace:*"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.10"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.1.1"
"@types/mdast": "npm:^4.0.4"
lit: "npm:^3.2.0"
minimatch: "npm:^10.0.1"
shiki: "npm:^1.14.1"
zod: "npm:^3.23.8"
languageName: unknown
linkType: soft
"@blocksuite/affine-block-divider@workspace:*, @blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider": "@blocksuite/affine-block-divider@workspace:*, @blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider":
version: 0.0.0-use.local version: 0.0.0-use.local
resolution: "@blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider" resolution: "@blocksuite/affine-block-divider@workspace:blocksuite/affine/block-divider"
@@ -3645,6 +3668,7 @@ __metadata:
dependencies: dependencies:
"@blocksuite/affine-block-attachment": "workspace:*" "@blocksuite/affine-block-attachment": "workspace:*"
"@blocksuite/affine-block-bookmark": "workspace:*" "@blocksuite/affine-block-bookmark": "workspace:*"
"@blocksuite/affine-block-code": "workspace:*"
"@blocksuite/affine-block-divider": "workspace:*" "@blocksuite/affine-block-divider": "workspace:*"
"@blocksuite/affine-block-edgeless-text": "workspace:*" "@blocksuite/affine-block-edgeless-text": "workspace:*"
"@blocksuite/affine-block-embed": "workspace:*" "@blocksuite/affine-block-embed": "workspace:*"