refactor(editor): remove global types in config (#10143)

Closes: [BS-2554](https://linear.app/affine-design/issue/BS-2554/remove-global-types-in-block-config)
This commit is contained in:
Saul-Mirone
2025-02-13 04:35:35 +00:00
parent dbf1d0038a
commit 9321ce94a7
34 changed files with 98 additions and 153 deletions
@@ -1,3 +1,4 @@
import { ConfigExtensionFactory } from '@blocksuite/block-std';
import type { BundledLanguageInfo, ThemeInput } from 'shiki';
export interface CodeBlockConfig {
@@ -13,3 +14,6 @@ export interface CodeBlockConfig {
*/
showLineNumbers?: boolean;
}
export const CodeBlockConfigExtension =
ConfigExtensionFactory<CodeBlockConfig>('affine:code');
@@ -12,6 +12,7 @@ import {
} from 'shiki';
import getWasm from 'shiki/wasm';
import { CodeBlockConfigExtension } from './code-block-config.js';
import {
CODE_BLOCK_DEFAULT_DARK_THEME,
CODE_BLOCK_DEFAULT_LIGHT_THEME,
@@ -27,7 +28,10 @@ export class CodeBlockService extends BlockService {
highlighter$: Signal<HighlighterCore | null> = signal(null);
get langs() {
return this.std.getConfig('affine:code')?.langs ?? bundledLanguagesInfo;
return (
this.std.getOptional(CodeBlockConfigExtension.identifier)?.langs ??
bundledLanguagesInfo
);
}
get themeKey() {
@@ -46,7 +50,9 @@ export class CodeBlockService extends BlockService {
engine: createOnigurumaEngine(() => getWasm),
})
.then(async highlighter => {
const config = this.std.getConfig('affine:code');
const config = this.std.getOptional(
CodeBlockConfigExtension.identifier
);
const darkTheme = config?.theme?.dark ?? CODE_BLOCK_DEFAULT_DARK_THEME;
const lightTheme =
config?.theme?.light ?? CODE_BLOCK_DEFAULT_LIGHT_THEME;
@@ -32,6 +32,7 @@ import { classMap } from 'lit/directives/class-map.js';
import type { ThemedToken } from 'shiki';
import { CodeClipboardController } from './clipboard/index.js';
import { CodeBlockConfigExtension } from './code-block-config.js';
import { CodeBlockInlineManagerExtension } from './code-block-inline.js';
import type { CodeBlockService } from './code-block-service.js';
import { codeBlockStyles } from './styles.js';
@@ -383,7 +384,8 @@ export class CodeBlockComponent extends CaptionedBlockComponent<
override renderBlock(): TemplateResult<1> {
const showLineNumbers =
this.std.getConfig('affine:code')?.showLineNumbers ?? true;
this.std.getOptional(CodeBlockConfigExtension.identifier)
?.showLineNumbers ?? true;
return html`
<div
@@ -1,5 +1,4 @@
import { CodeBlockComponent } from './code-block';
import type { CodeBlockConfig } from './code-block-config';
import {
AFFINE_CODE_TOOLBAR_WIDGET,
AffineCodeToolbarWidget,
@@ -17,12 +16,6 @@ export function effects() {
}
declare global {
namespace BlockSuite {
interface BlockConfigs {
'affine:code': CodeBlockConfig;
}
}
interface HTMLElementTagNameMap {
'language-list-button': LanguageListButton;
'affine-code-toolbar': AffineCodeToolbar;