chore: merge blocksuite source code (#9213)

This commit is contained in:
Mirone
2024-12-20 15:38:06 +08:00
committed by GitHub
parent 2c9ef916f4
commit 30200ff86d
2031 changed files with 238888 additions and 229 deletions
@@ -0,0 +1 @@
export * from './note-model.js';
@@ -0,0 +1,126 @@
import type {
GfxCompatibleProps,
GfxElementGeometry,
} from '@blocksuite/block-std/gfx';
import { GfxCompatible } from '@blocksuite/block-std/gfx';
import { Bound } from '@blocksuite/global/utils';
import { BlockModel, defineBlockSchema } from '@blocksuite/store';
import {
type Color,
DEFAULT_NOTE_BACKGROUND_COLOR,
DEFAULT_NOTE_BORDER_SIZE,
DEFAULT_NOTE_BORDER_STYLE,
DEFAULT_NOTE_CORNER,
DEFAULT_NOTE_HEIGHT,
DEFAULT_NOTE_SHADOW,
DEFAULT_NOTE_WIDTH,
NoteDisplayMode,
type StrokeStyle,
} from '../../consts/index.js';
export const NoteBlockSchema = defineBlockSchema({
flavour: 'affine:note',
props: (): NoteProps => ({
xywh: `[0,0,${DEFAULT_NOTE_WIDTH},${DEFAULT_NOTE_HEIGHT}]`,
background: DEFAULT_NOTE_BACKGROUND_COLOR,
index: 'a0',
lockedBySelf: false,
hidden: false,
displayMode: NoteDisplayMode.DocAndEdgeless,
edgeless: {
style: {
borderRadius: DEFAULT_NOTE_CORNER,
borderSize: DEFAULT_NOTE_BORDER_SIZE,
borderStyle: DEFAULT_NOTE_BORDER_STYLE,
shadowType: DEFAULT_NOTE_SHADOW,
},
},
}),
metadata: {
version: 1,
role: 'hub',
parent: ['affine:page'],
children: [
'affine:paragraph',
'affine:list',
'affine:code',
'affine:divider',
'affine:database',
'affine:data-view',
'affine:image',
'affine:bookmark',
'affine:attachment',
'affine:surface-ref',
'affine:embed-*',
'affine:latex',
],
},
toModel: () => {
return new NoteBlockModel();
},
});
export type NoteProps = {
background: Color;
displayMode: NoteDisplayMode;
edgeless: NoteEdgelessProps;
/**
* @deprecated
* use `displayMode` instead
* hidden:true -> displayMode:NoteDisplayMode.EdgelessOnly:
* means the note is visible only in the edgeless mode
* hidden:false -> displayMode:NoteDisplayMode.DocAndEdgeless:
* means the note is visible in the doc and edgeless mode
*/
hidden: boolean;
} & GfxCompatibleProps;
export type NoteEdgelessProps = {
style: {
borderRadius: number;
borderSize: number;
borderStyle: StrokeStyle;
shadowType: string;
};
collapse?: boolean;
collapsedHeight?: number;
scale?: number;
};
export class NoteBlockModel
extends GfxCompatible<NoteProps>(BlockModel)
implements GfxElementGeometry
{
private _isSelectable(): boolean {
return this.displayMode !== NoteDisplayMode.DocOnly;
}
override containsBound(bounds: Bound): boolean {
if (!this._isSelectable()) return false;
return super.containsBound(bounds);
}
override includesPoint(x: number, y: number): boolean {
if (!this._isSelectable()) return false;
const bound = Bound.deserialize(this.xywh);
return bound.isPointInBound([x, y], 0);
}
override intersectsBound(bound: Bound): boolean {
if (!this._isSelectable()) return false;
return super.intersectsBound(bound);
}
}
declare global {
namespace BlockSuite {
interface BlockModels {
'affine:note': NoteBlockModel;
}
interface EdgelessBlockModelMap {
'affine:note': NoteBlockModel;
}
}
}