mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-08-02 18:09:58 +08:00
chore: merge blocksuite source code (#9213)
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
import type {
|
||||
GfxCommonBlockProps,
|
||||
GfxElementGeometry,
|
||||
} from '@blocksuite/block-std/gfx';
|
||||
import { GfxCompatible } from '@blocksuite/block-std/gfx';
|
||||
import { BlockModel, defineBlockSchema } from '@blocksuite/store';
|
||||
|
||||
import { ImageBlockTransformer } from './image-transformer.js';
|
||||
|
||||
export type ImageBlockProps = {
|
||||
caption?: string;
|
||||
sourceId?: string;
|
||||
width?: number;
|
||||
height?: number;
|
||||
rotate: number;
|
||||
size?: number;
|
||||
} & Omit<GfxCommonBlockProps, 'scale'>;
|
||||
|
||||
const defaultImageProps: ImageBlockProps = {
|
||||
caption: '',
|
||||
sourceId: '',
|
||||
width: 0,
|
||||
height: 0,
|
||||
index: 'a0',
|
||||
xywh: '[0,0,0,0]',
|
||||
lockedBySelf: false,
|
||||
rotate: 0,
|
||||
size: -1,
|
||||
};
|
||||
|
||||
export const ImageBlockSchema = defineBlockSchema({
|
||||
flavour: 'affine:image',
|
||||
props: () => defaultImageProps,
|
||||
metadata: {
|
||||
version: 1,
|
||||
role: 'content',
|
||||
},
|
||||
transformer: () => new ImageBlockTransformer(),
|
||||
toModel: () => new ImageBlockModel(),
|
||||
});
|
||||
|
||||
export class ImageBlockModel
|
||||
extends GfxCompatible<ImageBlockProps>(BlockModel)
|
||||
implements GfxElementGeometry {}
|
||||
|
||||
declare global {
|
||||
namespace BlockSuite {
|
||||
interface BlockModels {
|
||||
'affine:image': ImageBlockModel;
|
||||
}
|
||||
interface EdgelessBlockModelMap {
|
||||
'affine:image': ImageBlockModel;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
import type { FromSnapshotPayload, SnapshotNode } from '@blocksuite/store';
|
||||
import { BaseBlockTransformer } from '@blocksuite/store';
|
||||
|
||||
import type { ImageBlockProps } from './image-model.js';
|
||||
|
||||
export class ImageBlockTransformer extends BaseBlockTransformer<ImageBlockProps> {
|
||||
override async fromSnapshot(
|
||||
payload: FromSnapshotPayload
|
||||
): Promise<SnapshotNode<ImageBlockProps>> {
|
||||
const snapshotRet = await super.fromSnapshot(payload);
|
||||
const sourceId = snapshotRet.props.sourceId;
|
||||
if (!payload.assets.isEmpty() && sourceId && !sourceId.startsWith('/'))
|
||||
await payload.assets.writeToBlob(sourceId);
|
||||
|
||||
return snapshotRet;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
export * from './image-model.js';
|
||||
export * from './image-transformer.js';
|
||||
Reference in New Issue
Block a user