mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-23 05:25:53 +08:00
chore: merge blocksuite source code (#9213)
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
export function createEnumMap<T extends Record<string, string | number>>(
|
||||
EnumObject: T
|
||||
) {
|
||||
return Object.entries(EnumObject).reduce(
|
||||
(acc, [key, value]) => {
|
||||
acc[value as T[keyof T]] = key as keyof T;
|
||||
return acc;
|
||||
},
|
||||
{} as Record<T[keyof T], keyof T>
|
||||
);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
import type {
|
||||
GfxBlockElementModel,
|
||||
GfxGroupLikeElementModel,
|
||||
GfxLocalElementModel,
|
||||
GfxModel,
|
||||
GfxPrimitiveElementModel,
|
||||
} from '@blocksuite/block-std/gfx';
|
||||
|
||||
declare global {
|
||||
namespace BlockSuite {
|
||||
interface EdgelessBlockModelMap {}
|
||||
type EdgelessBlockModelKeyType = keyof EdgelessBlockModelMap;
|
||||
type EdgelessBlockModelType =
|
||||
| EdgelessBlockModelMap[EdgelessBlockModelKeyType]
|
||||
| GfxBlockElementModel;
|
||||
|
||||
type EdgelessModel = GfxModel;
|
||||
|
||||
interface EdgelessTextModelMap {}
|
||||
type EdgelessTextModelKeyType = keyof EdgelessTextModelMap;
|
||||
type EdgelessTextModelType = EdgelessTextModelMap[EdgelessTextModelKeyType];
|
||||
|
||||
interface SurfaceElementModelMap {}
|
||||
type SurfaceElementModelKeys = keyof SurfaceElementModelMap;
|
||||
type SurfaceElementModel =
|
||||
| SurfaceElementModelMap[SurfaceElementModelKeys]
|
||||
| GfxPrimitiveElementModel;
|
||||
|
||||
interface SurfaceGroupLikeModelMap {}
|
||||
type SurfaceGroupLikeModelKeys = keyof SurfaceGroupLikeModelMap;
|
||||
type SurfaceGroupLikeModel =
|
||||
| SurfaceGroupLikeModelMap[SurfaceGroupLikeModelKeys]
|
||||
| GfxGroupLikeElementModel;
|
||||
|
||||
interface SurfaceLocalModelMap {}
|
||||
type SurfaceLocalModelKeys = keyof SurfaceLocalModelMap;
|
||||
type SurfaceLocalModel =
|
||||
| SurfaceLocalModelMap[SurfaceLocalModelKeys]
|
||||
| GfxLocalElementModel;
|
||||
|
||||
// not include local model
|
||||
type SurfaceModel = SurfaceElementModel | SurfaceGroupLikeModel;
|
||||
type SurfaceModelKeyType =
|
||||
| SurfaceElementModelKeys
|
||||
| SurfaceGroupLikeModelKeys;
|
||||
|
||||
type EdgelessModelKeys = EdgelessBlockModelKeyType | SurfaceModelKeyType;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
import type { GfxCompatibleProps } from '@blocksuite/block-std/gfx';
|
||||
import { GfxCompatible } from '@blocksuite/block-std/gfx';
|
||||
import type { Constructor } from '@blocksuite/global/utils';
|
||||
import {
|
||||
type BaseBlockTransformer,
|
||||
type BlockModel,
|
||||
defineBlockSchema,
|
||||
type InternalPrimitives,
|
||||
} from '@blocksuite/store';
|
||||
|
||||
export function defineEmbedModel<
|
||||
Props extends object,
|
||||
T extends Constructor<BlockModel<Props>> = Constructor<BlockModel<Props>>,
|
||||
>(BlockModelSuperClass: T) {
|
||||
return GfxCompatible<Props & GfxCompatibleProps>(
|
||||
BlockModelSuperClass as Constructor<BlockModel<Props & GfxCompatibleProps>>
|
||||
);
|
||||
}
|
||||
|
||||
export type EmbedProps<Props = object> = Props & GfxCompatibleProps;
|
||||
|
||||
export type EmbedBlockModel<Props = object> = BlockModel<EmbedProps<Props>>;
|
||||
|
||||
export function createEmbedBlockSchema<
|
||||
Props extends object,
|
||||
Model extends EmbedBlockModel<Props>,
|
||||
Transformer extends BaseBlockTransformer<
|
||||
EmbedProps<Props>
|
||||
> = BaseBlockTransformer<EmbedProps<Props>>,
|
||||
>({
|
||||
name,
|
||||
version,
|
||||
toModel,
|
||||
props,
|
||||
transformer,
|
||||
}: {
|
||||
name: string;
|
||||
version: number;
|
||||
toModel: () => Model;
|
||||
props?: (internalPrimitives: InternalPrimitives) => Props;
|
||||
transformer?: () => Transformer;
|
||||
}) {
|
||||
return defineBlockSchema({
|
||||
flavour: `affine:embed-${name}`,
|
||||
props: internalPrimitives => {
|
||||
const userProps = props?.(internalPrimitives);
|
||||
|
||||
return {
|
||||
index: 'a0',
|
||||
xywh: '[0,0,0,0]',
|
||||
lockedBySelf: false,
|
||||
rotate: 0,
|
||||
...userProps,
|
||||
} as unknown as EmbedProps<Props>;
|
||||
},
|
||||
metadata: {
|
||||
version,
|
||||
role: 'content',
|
||||
},
|
||||
toModel,
|
||||
transformer,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
export * from './enum.js';
|
||||
export * from './global.js';
|
||||
export * from './helper.js';
|
||||
export * from './types.js';
|
||||
@@ -0,0 +1,19 @@
|
||||
export type EmbedCardStyle =
|
||||
| 'horizontal'
|
||||
| 'horizontalThin'
|
||||
| 'list'
|
||||
| 'vertical'
|
||||
| 'cube'
|
||||
| 'cubeThick'
|
||||
| 'video'
|
||||
| 'figma'
|
||||
| 'html'
|
||||
| 'syncedDoc'
|
||||
| 'pdf';
|
||||
|
||||
export type LinkPreviewData = {
|
||||
description: string | null;
|
||||
icon: string | null;
|
||||
image: string | null;
|
||||
title: string | null;
|
||||
};
|
||||
Reference in New Issue
Block a user