mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-11 14:08:55 +08:00
205cd7a86d
Closes: BS-2946
115 lines
3.5 KiB
TypeScript
115 lines
3.5 KiB
TypeScript
import { inlineFootnoteExtensions } from '@blocksuite/affine-inline-footnote';
|
|
import { inlineLatexExtensions } from '@blocksuite/affine-inline-latex';
|
|
import { inlineLinkExtensions } from '@blocksuite/affine-inline-link';
|
|
import { inlineMentionExtensions } from '@blocksuite/affine-inline-mention';
|
|
import { inlineReferenceExtensions } from '@blocksuite/affine-inline-reference';
|
|
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
|
|
import {
|
|
type InlineRootElement,
|
|
InlineSpecExtension,
|
|
} from '@blocksuite/std/inline';
|
|
import type { ExtensionType } from '@blocksuite/store';
|
|
import { html } from 'lit';
|
|
import { z } from 'zod';
|
|
|
|
export type AffineInlineRootElement = InlineRootElement<AffineTextAttributes>;
|
|
|
|
export const BoldInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'bold',
|
|
schema: z.literal(true).optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.bold;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const ItalicInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'italic',
|
|
schema: z.literal(true).optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.italic;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const UnderlineInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'underline',
|
|
schema: z.literal(true).optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.underline;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const StrikeInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'strike',
|
|
schema: z.literal(true).optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.strike;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const CodeInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'code',
|
|
schema: z.literal(true).optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.code;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const BackgroundInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'background',
|
|
schema: z.string().optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.background;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const ColorInlineSpecExtension =
|
|
InlineSpecExtension<AffineTextAttributes>({
|
|
name: 'color',
|
|
schema: z.string().optional().nullable().catch(undefined),
|
|
match: delta => {
|
|
return !!delta.attributes?.color;
|
|
},
|
|
renderer: ({ delta }) => {
|
|
return html`<affine-text .delta=${delta}></affine-text>`;
|
|
},
|
|
});
|
|
|
|
export const InlineSpecExtensions: ExtensionType[] = [
|
|
BoldInlineSpecExtension,
|
|
ItalicInlineSpecExtension,
|
|
UnderlineInlineSpecExtension,
|
|
StrikeInlineSpecExtension,
|
|
CodeInlineSpecExtension,
|
|
BackgroundInlineSpecExtension,
|
|
ColorInlineSpecExtension,
|
|
...inlineLinkExtensions,
|
|
...inlineReferenceExtensions,
|
|
...inlineLatexExtensions,
|
|
...inlineFootnoteExtensions,
|
|
...inlineMentionExtensions,
|
|
];
|