refactor(editor): move zod schema with model for non surface blocks (#9876)

This commit is contained in:
doodlewind
2025-01-23 10:57:49 +00:00
parent d6cfbec5c9
commit 872a578bf7
6 changed files with 85 additions and 66 deletions

View File

@@ -4,20 +4,43 @@ import type {
} from '@blocksuite/block-std/gfx';
import { GfxCompatible } from '@blocksuite/block-std/gfx';
import { BlockModel, defineBlockSchema } from '@blocksuite/store';
import { z } from 'zod';
import {
FontFamily,
FontFamilySchema,
FontStyle,
FontStyleSchema,
FontWeight,
FontWeightSchema,
TextAlign,
TextAlignSchema,
type TextStyleProps,
} from '../../consts/index.js';
import { ColorSchema } from '../../themes/color.js';
import { DefaultTheme } from '../../themes/default.js';
type EdgelessTextProps = {
hasMaxWidth: boolean;
} & Omit<TextStyleProps, 'fontSize'> &
GfxCommonBlockProps;
export const EdgelessTextZodSchema = z
.object({
color: ColorSchema,
fontFamily: FontFamilySchema,
fontWeight: FontWeightSchema,
fontStyle: FontStyleSchema,
textAlign: TextAlignSchema,
})
.default({
color: DefaultTheme.textColor,
fontFamily: FontFamily.Inter,
fontWeight: FontWeight.Regular,
fontStyle: FontStyle.Normal,
textAlign: TextAlign.Left,
});
export const EdgelessTextBlockSchema = defineBlockSchema({
flavour: 'affine:edgeless-text',
props: (): EdgelessTextProps => ({

View File

@@ -16,8 +16,9 @@ import {
} from '@blocksuite/block-std/gfx';
import { Bound } from '@blocksuite/global/utils';
import { BlockModel, defineBlockSchema, type Text } from '@blocksuite/store';
import { z } from 'zod';
import type { Color } from '../../themes/index.js';
import { type Color, ColorSchema } from '../../themes/index.js';
export type FrameBlockProps = {
title: Text;
@@ -26,6 +27,12 @@ export type FrameBlockProps = {
presentationIndex?: string;
} & GfxCompatibleProps;
export const FrameZodSchema = z
.object({
background: ColorSchema.optional(),
})
.default({});
export const FrameBlockSchema = defineBlockSchema({
flavour: 'affine:frame',
props: (internal): FrameBlockProps => ({

View File

@@ -5,6 +5,7 @@ import type {
import { GfxCompatible } from '@blocksuite/block-std/gfx';
import { Bound } from '@blocksuite/global/utils';
import { BlockModel, defineBlockSchema } from '@blocksuite/store';
import { z } from 'zod';
import {
DEFAULT_NOTE_BORDER_SIZE,
@@ -14,9 +15,38 @@ import {
DEFAULT_NOTE_SHADOW,
DEFAULT_NOTE_WIDTH,
NoteDisplayMode,
NoteDisplayModeSchema,
NoteShadowsSchema,
type StrokeStyle,
} from '../../consts/index.js';
import { type Color, DefaultTheme } from '../../themes/index.js';
StrokeStyleSchema,
} from '../../consts/note';
import { type Color, ColorSchema, DefaultTheme } from '../../themes';
export const NoteZodSchema = z
.object({
background: ColorSchema,
displayMode: NoteDisplayModeSchema,
edgeless: z.object({
style: z.object({
borderRadius: z.number(),
borderSize: z.number(),
borderStyle: StrokeStyleSchema,
shadowType: NoteShadowsSchema,
}),
}),
})
.default({
background: DefaultTheme.noteBackgrounColor,
displayMode: NoteDisplayMode.EdgelessOnly,
edgeless: {
style: {
borderRadius: DEFAULT_NOTE_CORNER,
borderSize: DEFAULT_NOTE_BORDER_SIZE,
borderStyle: DEFAULT_NOTE_BORDER_STYLE,
shadowType: DEFAULT_NOTE_SHADOW,
},
},
});
export const NoteBlockSchema = defineBlockSchema({
flavour: 'affine:note',

View File

@@ -44,6 +44,10 @@ export enum StrokeStyle {
Solid = 'solid',
}
export const StrokeStyleSchema = z.nativeEnum(StrokeStyle);
export const NoteDisplayModeSchema = z.nativeEnum(NoteDisplayMode);
export const DEFAULT_NOTE_BORDER_STYLE = StrokeStyle.None;
export const StrokeStyleMap = createEnumMap(StrokeStyle);

View File

@@ -1,3 +1,5 @@
import { z } from 'zod';
import type { Color } from '../themes/color.js';
import { createEnumMap } from '../utils/enum.js';
@@ -59,3 +61,8 @@ export enum TextResizing {
AUTO_WIDTH_AND_HEIGHT,
AUTO_HEIGHT,
}
export const FontFamilySchema = z.nativeEnum(FontFamily);
export const FontWeightSchema = z.nativeEnum(FontWeight);
export const FontStyleSchema = z.nativeEnum(FontStyle);
export const TextAlignSchema = z.nativeEnum(TextAlign);