mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-09-01 06:10:16 +08:00
205cd7a86d
Closes: BS-2946
58 lines
1.3 KiB
TypeScript
58 lines
1.3 KiB
TypeScript
import type {
|
|
GfxCommonBlockProps,
|
|
GfxElementGeometry,
|
|
} from '@blocksuite/std/gfx';
|
|
import { GfxCompatible } from '@blocksuite/std/gfx';
|
|
import {
|
|
BlockModel,
|
|
BlockSchemaExtension,
|
|
defineBlockSchema,
|
|
} from '@blocksuite/store';
|
|
|
|
import type { BlockMeta } from '../../utils/types.js';
|
|
import { ImageBlockTransformer } from './image-transformer.js';
|
|
|
|
export type ImageBlockProps = {
|
|
caption?: string;
|
|
sourceId?: string;
|
|
width?: number;
|
|
height?: number;
|
|
rotate: number;
|
|
size?: number;
|
|
} & Omit<GfxCommonBlockProps, 'scale'> &
|
|
BlockMeta;
|
|
|
|
const defaultImageProps: ImageBlockProps = {
|
|
caption: '',
|
|
sourceId: '',
|
|
width: 0,
|
|
height: 0,
|
|
index: 'a0',
|
|
xywh: '[0,0,0,0]',
|
|
lockedBySelf: false,
|
|
rotate: 0,
|
|
size: -1,
|
|
'meta:createdAt': undefined,
|
|
'meta:createdBy': undefined,
|
|
'meta:updatedAt': undefined,
|
|
'meta:updatedBy': undefined,
|
|
};
|
|
|
|
export const ImageBlockSchema = defineBlockSchema({
|
|
flavour: 'affine:image',
|
|
props: () => defaultImageProps,
|
|
metadata: {
|
|
version: 1,
|
|
role: 'content',
|
|
},
|
|
transformer: transformerConfigs =>
|
|
new ImageBlockTransformer(transformerConfigs),
|
|
toModel: () => new ImageBlockModel(),
|
|
});
|
|
|
|
export const ImageBlockSchemaExtension = BlockSchemaExtension(ImageBlockSchema);
|
|
|
|
export class ImageBlockModel
|
|
extends GfxCompatible<ImageBlockProps>(BlockModel)
|
|
implements GfxElementGeometry {}
|