refactor(editor): rename doc to blocks (#9510)

This commit is contained in:
Saul-Mirone
2025-01-03 12:49:33 +00:00
parent 2074bda8ff
commit 4457cb7266
99 changed files with 271 additions and 256 deletions
@@ -11,7 +11,7 @@ import type { EditorHost } from '@blocksuite/block-std';
import { DataSourceBase, type PropertyMetaConfig } from '@blocksuite/data-view';
import { propertyPresets } from '@blocksuite/data-view/property-presets';
import { assertExists, Slot } from '@blocksuite/global/utils';
import type { Block, Doc } from '@blocksuite/store';
import type { Block, Blocks } from '@blocksuite/store';
import type { BlockMeta } from './block-meta/base.js';
import { blockMetaMap } from './block-meta/index.js';
@@ -140,7 +140,7 @@ export class BlockQueryDataSource extends DataSourceBase {
return this.block.columns.find(v => v.id === id);
}
listenToDoc(doc: Doc) {
listenToDoc(doc: Blocks) {
this.docDisposeMap.set(
doc.id,
doc.slots.blockUpdated.on(v => {
@@ -4,7 +4,7 @@ import {
} from '@blocksuite/affine-model';
import { BlockService } from '@blocksuite/block-std';
import { viewPresets } from '@blocksuite/data-view/view-presets';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import {
databaseViewAddView,
@@ -36,7 +36,7 @@ export class DatabaseBlockService extends BlockService {
viewPresets = viewPresets;
initDatabaseBlock(
doc: Doc,
doc: Blocks,
model: BlockModel,
databaseId: string,
viewType: string,
@@ -11,9 +11,9 @@ import { BlockStdScope } from '@blocksuite/block-std';
import { assertExists } from '@blocksuite/global/utils';
import {
type BlockModel,
type Blocks,
type BlockSnapshot,
BlockViewType,
type Doc,
type DraftModel,
type Query,
Slice,
@@ -220,7 +220,7 @@ function filterTextModel(model: BlockModel) {
return false;
}
export function getNotesFromDoc(doc: Doc) {
export function getNotesFromDoc(doc: Blocks) {
const notes = doc.root?.children.filter(
child =>
matchFlavours(child, ['affine:note']) &&
@@ -234,7 +234,7 @@ export function getNotesFromDoc(doc: Doc) {
return notes;
}
export function isEmptyDoc(doc: Doc | null, mode: DocMode) {
export function isEmptyDoc(doc: Blocks | null, mode: DocMode) {
if (!doc) {
return true;
}
@@ -266,7 +266,7 @@ export function isEmptyNote(note: BlockModel) {
/**
* Gets the document content with a max length.
*/
export function getDocContentWithMaxLength(doc: Doc, maxlength = 500) {
export function getDocContentWithMaxLength(doc: Blocks, maxlength = 500) {
const notes = getNotesFromDoc(doc);
if (!notes) return;
@@ -326,7 +326,7 @@ export function promptDocTitle(std: BlockStdScope, autofill?: string) {
});
}
export function notifyDocCreated(std: BlockStdScope, doc: Doc) {
export function notifyDocCreated(std: BlockStdScope, doc: Blocks) {
const notification = std.getOptional(NotificationProvider);
if (!notification) return;
@@ -365,7 +365,7 @@ export function notifyDocCreated(std: BlockStdScope, doc: Doc) {
export async function convertSelectedBlocksToLinkedDoc(
std: BlockStdScope,
doc: Doc,
doc: Blocks,
selectedModels: DraftModel[] | Promise<DraftModel[]>,
docTitle?: string
) {
@@ -399,7 +399,7 @@ export async function convertSelectedBlocksToLinkedDoc(
export function createLinkedDocFromSlice(
std: BlockStdScope,
doc: Doc,
doc: Blocks,
snapshots: BlockSnapshot[],
docTitle?: string
) {
@@ -3,7 +3,7 @@ import {
getNextContinuousNumberedLists,
matchFlavours,
} from '@blocksuite/affine-shared/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
/**
* correct target is a numbered list, which is divided into two steps:
@@ -12,7 +12,7 @@ import type { BlockModel, Doc } from '@blocksuite/store';
* 2. find continuous lists starting from the target list and keep their order continuous
*/
export function correctNumberedListsOrderToPrev(
doc: Doc,
doc: Blocks,
modelOrId: BlockModel | string,
transact = true
) {
@@ -58,7 +58,7 @@ export function correctNumberedListsOrderToPrev(
}
}
export function correctListOrder(doc: Doc, model: ListBlockModel) {
export function correctListOrder(doc: Blocks, model: ListBlockModel) {
// old numbered list has no order
if (model.type === 'numbered' && !Number.isInteger(model.order)) {
correctNumberedListsOrderToPrev(doc, model, false);
@@ -45,7 +45,7 @@ import {
DisposableGroup,
type SerializedXYWH,
} from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { css, html, nothing, type TemplateResult } from 'lit';
import { query, state } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
@@ -238,7 +238,7 @@ export class SurfaceRefBlockComponent extends BlockComponent<SurfaceRefBlockMode
}
`;
private _previewDoc: Doc | null = null;
private _previewDoc: Blocks | null = null;
private readonly _previewSpec =
SpecProvider.getInstance().getSpec('edgeless:preview');
@@ -1,8 +1,8 @@
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import type { SurfaceBlockModel } from '../surface-model';
export function getSurfaceBlock(doc: Doc) {
export function getSurfaceBlock(doc: Blocks) {
const blocks = doc.getBlocksByFlavour('affine:surface');
return blocks.length !== 0 ? (blocks[0].model as SurfaceBlockModel) : null;
}
@@ -8,7 +8,7 @@ import {
stdContext,
} from '@blocksuite/block-std';
import { WithDisposable } from '@blocksuite/global/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { Text } from '@blocksuite/store';
import { consume } from '@lit/context';
import { css, html, nothing } from 'lit';
@@ -161,7 +161,7 @@ export class BlockCaptionEditor<
accessor display = false;
@consume({ context: docContext })
accessor doc!: Doc;
accessor doc!: Blocks;
@query('.block-caption-editor')
accessor input!: HTMLInputElement;
@@ -24,7 +24,7 @@ import {
ZERO_WIDTH_NON_JOINER,
ZERO_WIDTH_SPACE,
} from '@blocksuite/inline';
import type { Doc, DocMeta } from '@blocksuite/store';
import type { Blocks, DocMeta } from '@blocksuite/store';
import { css, html, nothing } from 'lit';
import { property, state } from 'lit/decorators.js';
import { choose } from 'lit/directives/choose.js';
@@ -71,7 +71,7 @@ export class AffineReference extends WithDisposable(ShadowlessElement) {
}
`;
private readonly _updateRefMeta = (doc: Doc) => {
private readonly _updateRefMeta = (doc: Blocks) => {
const refAttribute = this.delta.attributes?.reference;
if (!refAttribute) {
return;
@@ -1,9 +1,9 @@
import type { BlockStdScope, EditorHost } from '@blocksuite/block-std';
import type { GfxModel } from '@blocksuite/block-std/gfx';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
export abstract class MenuContext {
abstract get doc(): Doc;
abstract get doc(): Blocks;
get firstElement(): GfxModel | null {
return null;
@@ -11,7 +11,7 @@ import {
LinkedPageIcon,
PageIcon,
} from '@blocksuite/icons/lit';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { computed, type Signal, signal } from '@preact/signals-core';
import type { TemplateResult } from 'lit';
@@ -70,9 +70,9 @@ export class DocDisplayMetaService
readonly disposables: Disposable[] = [];
readonly iconMap = new WeakMap<Doc, Signal<TemplateResult>>();
readonly iconMap = new WeakMap<Blocks, Signal<TemplateResult>>();
readonly titleMap = new WeakMap<Doc, Signal<string>>();
readonly titleMap = new WeakMap<Blocks, Signal<string>>();
static override setup(di: Container) {
di.addImpl(DocDisplayMetaProvider, this, [StdIdentifier]);
@@ -1,4 +1,4 @@
import type { BlockModel, Doc, DraftModel } from '@blocksuite/store';
import type { BlockModel, Blocks, DraftModel } from '@blocksuite/store';
import { minimatch } from 'minimatch';
export function matchFlavours<Key extends (keyof BlockSuite.BlockModels)[]>(
@@ -14,7 +14,7 @@ export function matchFlavours<Key extends (keyof BlockSuite.BlockModels)[]>(
}
export function isInsideBlockByFlavour(
doc: Doc,
doc: Blocks,
block: BlockModel | string,
flavour: string
): boolean {
@@ -1,6 +1,6 @@
import { type NoteBlockModel, NoteDisplayMode } from '@blocksuite/affine-model';
import type { BlockComponent, EditorHost } from '@blocksuite/block-std';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { matchFlavours } from './checker.js';
@@ -41,7 +41,7 @@ export function findNoteBlockModel(model: BlockModel) {
) as NoteBlockModel | null;
}
export function getLastNoteBlock(doc: Doc) {
export function getLastNoteBlock(doc: Blocks) {
let note: NoteBlockModel | null = null;
if (!doc.root) return null;
const { children } = doc.root;
@@ -1,6 +1,6 @@
import type { ListBlockModel } from '@blocksuite/affine-model';
import type { BlockStdScope } from '@blocksuite/block-std';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { matchFlavours } from './checker.js';
@@ -9,7 +9,7 @@ import { matchFlavours } from './checker.js';
* typically used for updating list numbers. The result not contains the list passed in.
*/
export function getNextContinuousNumberedLists(
doc: Doc,
doc: Blocks,
modelOrId: BlockModel | string
): ListBlockModel[] {
const model =
@@ -1,9 +1,9 @@
import type { BlockModel, Doc, Text } from '@blocksuite/store';
import type { BlockModel, Blocks, Text } from '@blocksuite/store';
export function transformModel(
model: BlockModel,
flavour: BlockSuite.Flavour,
props?: Parameters<Doc['addBlock']>[1]
props?: Parameters<Blocks['addBlock']>[1]
) {
const doc = model.doc;
const parent = doc.getParent(model);
@@ -17,7 +17,7 @@ import {
RootBlockSchema,
} from '@blocksuite/affine-model';
import { propertyModelPresets } from '@blocksuite/data-view/property-pure-presets';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { Schema } from '@blocksuite/store';
import {
createAutoIncrementIdGenerator,
@@ -49,7 +49,7 @@ function createTestDoc(docId = 'doc0') {
}
describe('DatabaseManager', () => {
let doc: Doc;
let doc: Blocks;
let db: DatabaseBlockModel;
let rootId: BlockModel['id'];
@@ -25,7 +25,7 @@ import type { GfxBlockElementModel } from '@blocksuite/block-std/gfx';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import type { IBound } from '@blocksuite/global/utils';
import { Bound } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import {
getBlockComponentByModel,
@@ -110,7 +110,7 @@ export class ExportManager {
await Promise.all(promises);
};
get doc(): Doc {
get doc(): Blocks {
return this.std.doc;
}
@@ -1,7 +1,7 @@
import { HtmlAdapter } from '@blocksuite/affine-shared/adapters';
import { Container } from '@blocksuite/global/di';
import { sha } from '@blocksuite/global/utils';
import type { Doc, Workspace } from '@blocksuite/store';
import type { Blocks, Workspace } from '@blocksuite/store';
import { extMimeMap, Job } from '@blocksuite/store';
import { defaultBlockHtmlAdapterMatchers } from '../adapters/html/block-matcher.js';
@@ -43,7 +43,7 @@ const provider = container.provider();
* @param doc - The doc to be exported.
* @returns A Promise that resolves when the export is complete.
*/
async function exportDoc(doc: Doc) {
async function exportDoc(doc: Blocks) {
const job = new Job({
schema: doc.schema,
blobCRUD: doc.blobSync,
@@ -2,7 +2,7 @@ import { MarkdownAdapter } from '@blocksuite/affine-shared/adapters';
import { Container } from '@blocksuite/global/di';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { assertExists, sha } from '@blocksuite/global/utils';
import type { Doc, Workspace } from '@blocksuite/store';
import type { Blocks, Workspace } from '@blocksuite/store';
import { extMimeMap, Job } from '@blocksuite/store';
import { defaultBlockMarkdownAdapterMatchers } from '../adapters/index.js';
@@ -28,7 +28,7 @@ const container = new Container();
const provider = container.provider();
type ImportMarkdownToBlockOptions = {
doc: Doc;
doc: Blocks;
markdown: string;
blockId: string;
};
@@ -49,7 +49,7 @@ type ImportMarkdownZipOptions = {
* @param doc The doc to export
* @returns A Promise that resolves when the export is complete
*/
async function exportDoc(doc: Doc) {
async function exportDoc(doc: Blocks) {
const job = new Job({
schema: doc.schema,
blobCRUD: doc.blobSync,
@@ -1,11 +1,11 @@
import { sha } from '@blocksuite/global/utils';
import type { Doc, DocSnapshot, Workspace } from '@blocksuite/store';
import type { Blocks, DocSnapshot, Workspace } from '@blocksuite/store';
import { extMimeMap, getAssetName, Job } from '@blocksuite/store';
import { download, Unzip, Zip } from '../transformers/utils.js';
import { replaceIdMiddleware, titleMiddleware } from './middlewares.js';
async function exportDocs(collection: Workspace, docs: Doc[]) {
async function exportDocs(collection: Workspace, docs: Blocks[]) {
const zip = new Zip();
const job = new Job({
schema: collection.schema,
+2 -2
View File
@@ -5,7 +5,7 @@ import type {
GroupElementModel,
} from '@blocksuite/affine-model';
import type { Slot } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
/** Common context interface definition for block models. */
@@ -14,7 +14,7 @@ type EditorSlots = {
};
export type AbstractEditor = {
doc: Doc;
doc: Blocks;
mode: DocMode;
readonly slots: EditorSlots;
} & HTMLElement;
@@ -8,7 +8,7 @@ import {
} from '@blocksuite/affine-shared/adapters';
import type { BlockComponent, UIEventHandler } from '@blocksuite/block-std';
import { DisposableGroup } from '@blocksuite/global/utils';
import type { BlockSnapshot, Doc } from '@blocksuite/store';
import type { Blocks, BlockSnapshot } from '@blocksuite/store';
import { MixTextAdapter } from '../../_common/adapters/index.js';
import {
@@ -99,7 +99,7 @@ export class PageClipboard {
onBlockSnapshotPaste = async (
snapshot: BlockSnapshot,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) => {
@@ -10,7 +10,7 @@ import {
} from '@blocksuite/block-std';
import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx';
import { DisposableGroup, Vec, WithDisposable } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { consume } from '@lit/context';
import { css, html, LitElement } from 'lit';
import { property, query } from 'lit/decorators.js';
@@ -150,7 +150,7 @@ export class EdgelessConnectorHandle extends WithDisposable(LitElement) {
@consume({
context: docContext,
})
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor edgeless!: EdgelessRootBlockComponent;
@@ -12,7 +12,7 @@ import {
DisposableGroup,
WithDisposable,
} from '@blocksuite/global/utils';
import { BlockViewType, type Doc, type Query } from '@blocksuite/store';
import { type Blocks, BlockViewType, type Query } from '@blocksuite/store';
import { css, html, nothing, type PropertyValues } from 'lit';
import { property, query, state } from 'lit/decorators.js';
import { styleMap } from 'lit/directives/style-map.js';
@@ -78,7 +78,7 @@ export class FramePreview extends WithDisposable(ShadowlessElement) {
private _frameDisposables: DisposableGroup | null = null;
private _previewDoc: Doc | null = null;
private _previewDoc: Blocks | null = null;
private readonly _previewSpec =
SpecProvider.getInstance().getSpec('edgeless:preview');
@@ -19,7 +19,7 @@ import {
type IVec,
type SerializedXYWH,
} from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { Text } from '@blocksuite/store';
import * as Y from 'yjs';
@@ -463,7 +463,7 @@ export class EdgelessFrameManager extends GfxExtension {
}
export function getNotesInFrameBound(
doc: Doc,
doc: Blocks,
frame: FrameBlockModel,
fullyContained: boolean = true
) {
@@ -481,7 +481,7 @@ export function getNotesInFrameBound(
}
export function getBlocksInFrameBound(
doc: Doc,
doc: Blocks,
model: FrameBlockModel,
fullyContained: boolean = true
) {
@@ -5,7 +5,7 @@ import { DocModeProvider } from '@blocksuite/affine-shared/services';
import { getBlockProps } from '@blocksuite/affine-shared/utils';
import type { EditorHost } from '@blocksuite/block-std';
import { GfxBlockElementModel } from '@blocksuite/block-std/gfx';
import { type BlockModel, type Doc } from '@blocksuite/store';
import { type BlockModel, type Blocks } from '@blocksuite/store';
import {
getElementProps,
@@ -14,7 +14,11 @@ import {
} from '../../../edgeless/utils/clone-utils.js';
import { isFrameBlock, isNoteBlock } from '../../../edgeless/utils/query.js';
function addBlocksToDoc(targetDoc: Doc, model: BlockModel, parentId: string) {
function addBlocksToDoc(
targetDoc: Blocks,
model: BlockModel,
parentId: string
) {
// Add current block to linked doc
const blockProps = getBlockProps(model);
const newModelId = targetDoc.addBlock(
@@ -32,7 +36,7 @@ function addBlocksToDoc(targetDoc: Doc, model: BlockModel, parentId: string) {
}
export function createLinkedDocFromNote(
doc: Doc,
doc: Blocks,
note: NoteBlockModel,
docTitle?: string
) {
@@ -1,5 +1,5 @@
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { html } from 'lit';
import { customElement, property } from 'lit/decorators.js';
@@ -32,7 +32,7 @@ export class TestEditorContainer extends SignalWatcher(
}
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor specs: ExtensionType[] = [];
@@ -2,8 +2,8 @@ import type { ServiceProvider } from '@blocksuite/global/di';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import type {
BaseAdapter,
Blocks,
BlockSnapshot,
Doc,
Job,
JobMiddleware,
Slice,
@@ -110,7 +110,7 @@ export class Clipboard extends LifeCycleWatcher {
private readonly _getSnapshotByPriority = async (
getItem: (type: string) => string | File[],
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) => {
@@ -182,7 +182,7 @@ export class Clipboard extends LifeCycleWatcher {
duplicateSlice = async (
slice: Slice,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number,
type = 'BLOCKSUITE/SNAPSHOT'
@@ -201,7 +201,7 @@ export class Clipboard extends LifeCycleWatcher {
paste = async (
event: ClipboardEvent,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) => {
@@ -238,7 +238,7 @@ export class Clipboard extends LifeCycleWatcher {
pasteBlockSnapshot = async (
snapshot: BlockSnapshot,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) => {
@@ -4,7 +4,7 @@ import {
getBoundWithRotation,
intersects,
} from '@blocksuite/global/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { compare } from '../utils/layer.js';
import { GfxBlockElementModel } from './model/gfx-block-model.js';
@@ -361,7 +361,7 @@ export class GridManager {
this.add(element);
}
watch(blocks: { doc?: Doc; surface?: SurfaceBlockModel | null }) {
watch(blocks: { doc?: Blocks; surface?: SurfaceBlockModel | null }) {
const disposables: { dispose: () => void }[] = [];
const { doc, surface } = blocks;
const isRenderableBlock = (
@@ -5,7 +5,7 @@ import {
last,
Slot,
} from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { generateKeyBetween } from 'fractional-indexing';
import {
@@ -100,7 +100,7 @@ export class LayerManager {
};
constructor(
private readonly _doc: Doc,
private readonly _doc: Blocks,
private _surface: SurfaceBlockModel | null,
options: {
watch: boolean;
@@ -775,7 +775,7 @@ export class LayerManager {
}
}
watch(blocks: { doc?: Doc; surface: SurfaceBlockModel | null }) {
watch(blocks: { doc?: Blocks; surface: SurfaceBlockModel | null }) {
const { doc, surface } = blocks;
if (doc) {
@@ -1,7 +1,7 @@
import type { ServiceProvider } from '@blocksuite/global/di';
import { Container } from '@blocksuite/global/di';
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { type Doc, Job, type JobMiddleware } from '@blocksuite/store';
import { type Blocks, Job, type JobMiddleware } from '@blocksuite/store';
import { Clipboard } from '../clipboard/index.js';
import { CommandManager } from '../command/index.js';
@@ -31,7 +31,7 @@ import { EditorHost } from '../view/element/index.js';
import { ViewStore } from '../view/view-store.js';
export interface BlockStdOptions {
doc: Doc;
doc: Blocks;
extensions: ExtensionType[];
}
@@ -60,7 +60,7 @@ export class BlockStdScope {
readonly container: Container;
readonly doc: Doc;
readonly doc: Blocks;
readonly provider: ServiceProvider;
@@ -1,10 +1,10 @@
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { effect } from '@preact/signals-core';
import { SurfaceBlockModel } from '../gfx/model/surface/surface-model.js';
export function onSurfaceAdded(
doc: Doc,
doc: Blocks,
callback: (model: SurfaceBlockModel | null) => void
) {
let found = false;
@@ -1,5 +1,5 @@
import { nToLast } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import type { GfxLocalElementModel } from '../gfx/index.js';
import type { Layer } from '../gfx/layer.js';
@@ -82,7 +82,7 @@ export function isInRange(edges: [GfxModel, GfxModel], target: GfxModel) {
}
export function renderableInEdgeless(
doc: Doc,
doc: Blocks,
surface: SurfaceBlockModel,
block: GfxBlockElementModel
) {
@@ -1,4 +1,4 @@
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import {
type GfxCompatibleInterface,
@@ -124,13 +124,16 @@ export function isLockedImpl(element: GfxCompatibleInterface): boolean {
return isLockedBySelfImpl(element) || isLockedByAncestorImpl(element);
}
export function lockElementImpl(doc: Doc, element: GfxCompatibleInterface) {
export function lockElementImpl(doc: Blocks, element: GfxCompatibleInterface) {
doc.transact(() => {
element.lockedBySelf = true;
});
}
export function unlockElementImpl(doc: Doc, element: GfxCompatibleInterface) {
export function unlockElementImpl(
doc: Blocks,
element: GfxCompatibleInterface
) {
doc.transact(() => {
element.lockedBySelf = false;
});
@@ -1,6 +1,6 @@
import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import { type BlockModel, BlockViewType, Doc } from '@blocksuite/store';
import { type BlockModel, Blocks, BlockViewType } from '@blocksuite/store';
import { consume, provide } from '@lit/context';
import { computed } from '@preact/signals-core';
import { nothing, type TemplateResult } from 'lit';
@@ -23,7 +23,7 @@ import { ShadowlessElement } from './shadowless-element.js';
import type { WidgetComponent } from './widget-component.js';
@requiredProperties({
doc: PropTypes.instanceOf(Doc),
doc: PropTypes.instanceOf(Blocks),
std: PropTypes.object,
widgets: PropTypes.recordOf(PropTypes.object),
})
@@ -307,7 +307,7 @@ export class BlockComponent<
private accessor _service: Service | null = null;
@consume({ context: docContext })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor viewType: BlockViewType = BlockViewType.Display;
@@ -4,7 +4,7 @@ import {
handleError,
} from '@blocksuite/global/exceptions';
import { SignalWatcher, Slot, WithDisposable } from '@blocksuite/global/utils';
import { type BlockModel, BlockViewType, Doc } from '@blocksuite/store';
import { type BlockModel, Blocks, BlockViewType } from '@blocksuite/store';
import { createContext, provide } from '@lit/context';
import { css, LitElement, nothing, type TemplateResult } from 'lit';
import { property } from 'lit/decorators.js';
@@ -22,11 +22,11 @@ import type { ViewStore } from '../view-store.js';
import { BLOCK_ID_ATTR, WIDGET_ID_ATTR } from './consts.js';
import { ShadowlessElement } from './shadowless-element.js';
export const docContext = createContext<Doc>('doc');
export const docContext = createContext<Blocks>('doc');
export const stdContext = createContext<BlockStdScope>('std');
@requiredProperties({
doc: PropTypes.instanceOf(Doc),
doc: PropTypes.instanceOf(Blocks),
std: PropTypes.object,
})
export class EditorHost extends SignalWatcher(
@@ -189,7 +189,7 @@ export class EditorHost extends SignalWatcher(
@provide({ context: docContext })
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@provide({ context: stdContext })
@property({ attribute: false })
@@ -1,5 +1,5 @@
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { consume } from '@lit/context';
import { LitElement } from 'lit';
@@ -94,7 +94,7 @@ export class WidgetComponent<
}
@consume({ context: docContext })
private accessor _doc!: Doc;
private accessor _doc!: Blocks;
@consume({ context: modelContext })
private accessor _model!: Model;
@@ -5,7 +5,7 @@ import { assert, beforeEach, describe, expect, it, vi } from 'vitest';
import { applyUpdate, encodeStateAsUpdate } from 'yjs';
import { COLLECTION_VERSION, PAGE_VERSION } from '../consts.js';
import type { BlockModel, BlockSchemaType, Doc } from '../index.js';
import type { BlockModel, Blocks, BlockSchemaType } from '../index.js';
import { Schema } from '../index.js';
import type { DocMeta } from '../store/workspace.js';
import { TestWorkspace } from '../test/test-workspace.js';
@@ -54,7 +54,7 @@ function waitOnce<T>(slot: Slot<T>) {
return new Promise<T>(resolve => slot.once(val => resolve(val)));
}
function createRoot(doc: Doc) {
function createRoot(doc: Blocks) {
doc.addBlock('affine:page');
if (!doc.root) throw new Error('root not found');
return doc.root;
@@ -1,6 +1,6 @@
import { BlockSuiteError } from '@blocksuite/global/exceptions';
import type { Doc } from '../store/index.js';
import type { Blocks } from '../store/index.js';
import type { AssetsManager } from '../transformer/assets.js';
import type { DraftModel, Job, Slice } from '../transformer/index.js';
import type {
@@ -93,7 +93,7 @@ export abstract class BaseAdapter<AdapterTarget = unknown> {
| Promise<FromBlockSnapshotResult<AdapterTarget>>
| FromBlockSnapshotResult<AdapterTarget>;
async fromDoc(doc: Doc) {
async fromDoc(doc: Blocks) {
try {
const docSnapshot = this.job.docToSnapshot(doc);
if (!docSnapshot) return;
@@ -138,7 +138,7 @@ export abstract class BaseAdapter<AdapterTarget = unknown> {
async toBlock(
payload: ToBlockSnapshotPayload<AdapterTarget>,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) {
@@ -175,7 +175,7 @@ export abstract class BaseAdapter<AdapterTarget = unknown> {
async toSlice(
payload: ToSliceSnapshotPayload<AdapterTarget>,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
) {
@@ -7,7 +7,7 @@ import { z } from 'zod';
import { Boxed } from '../reactive/boxed.js';
import { Text } from '../reactive/text.js';
import type { YBlock } from '../store/doc/block/index.js';
import type { Doc } from '../store/index.js';
import type { Blocks } from '../store/index.js';
import type { BaseBlockTransformer } from '../transformer/base.js';
const FlavourSchema = z.string();
@@ -160,7 +160,7 @@ export class BlockModel<
/**
* @deprecated use doc instead
*/
page!: Doc;
page!: Blocks;
private readonly _childModels = computed(() => {
const value: BlockModel[] = [];
@@ -224,7 +224,7 @@ export class BlockModel<
return this.page;
}
set doc(doc: Doc) {
set doc(doc: Blocks) {
this.page = doc;
}
@@ -8,7 +8,7 @@ import type { BlockModel } from '../../schema/base.js';
import type { IdGenerator } from '../../utils/id-generator.js';
import type { AwarenessStore, BlockSuiteDoc } from '../../yjs/index.js';
import type { GetDocOptions, Workspace } from '../workspace.js';
import { Doc } from './doc.js';
import { Blocks } from './doc.js';
import type { YBlock } from './index.js';
import type { Query } from './query.js';
@@ -40,9 +40,9 @@ export class BlockCollection {
private readonly _collection: Workspace;
private readonly _docMap = {
undefined: new Map<string, Doc>(),
true: new Map<string, Doc>(),
false: new Map<string, Doc>(),
undefined: new Map<string, Blocks>(),
true: new Map<string, Blocks>(),
false: new Map<string, Blocks>(),
};
// doc/space container.
@@ -324,7 +324,7 @@ export class BlockCollection {
return this._docMap[readonlyKey].get(key)!;
}
const doc = new Doc({
const doc = new Blocks({
blockCollection: this,
schema: this.collection.schema,
readonly,
@@ -1,6 +1,6 @@
import type { Schema } from '../../../schema/index.js';
import { BlockViewType } from '../consts.js';
import type { Doc } from '../doc.js';
import type { Blocks } from '../doc.js';
import { SyncController } from './sync-controller.js';
import type { BlockOptions, YBlock } from './types.js';
@@ -38,7 +38,7 @@ export class Block {
constructor(
readonly schema: Schema,
readonly yBlock: YBlock,
readonly doc?: Doc,
readonly doc?: Blocks,
readonly options: BlockOptions = {}
) {
const onChange = !options.onChange
@@ -12,7 +12,7 @@ import {
} from '../../../reactive/index.js';
import { BlockModel, internalPrimitives } from '../../../schema/base.js';
import type { Schema } from '../../../schema/schema.js';
import type { Doc } from '../doc.js';
import type { Blocks } from '../doc.js';
import type { YBlock } from './types.js';
/**
@@ -103,7 +103,7 @@ export class SyncController {
constructor(
readonly schema: Schema,
readonly yBlock: YBlock,
readonly doc?: Doc,
readonly doc?: Blocks,
readonly onChange?: (key: string, value: unknown) => void
) {
const { id, flavour, version, yChildren, props } = this._parseYBlock();
@@ -18,7 +18,7 @@ type DocOptions = {
query?: Query;
};
export class Doc {
export class Blocks {
private readonly _runQuery = (block: Block) => {
runQuery(this._query, block);
};
@@ -5,7 +5,7 @@ import type { Schema } from '../schema/schema.js';
import type { IdGenerator } from '../utils/id-generator.js';
import type { AwarenessStore } from '../yjs/awareness.js';
import type { BlockSuiteDoc } from '../yjs/doc.js';
import type { Doc } from './doc/doc.js';
import type { Blocks } from './doc/doc.js';
import type { BlockCollection } from './doc/index.js';
import type { Query } from './doc/query.js';
@@ -78,8 +78,8 @@ export interface Workspace {
docRemoved: Slot<string>;
};
createDoc(options?: CreateDocOptions): Doc;
getDoc(docId: string, options?: GetDocOptions): Doc | null;
createDoc(options?: CreateDocOptions): Blocks;
getDoc(docId: string, options?: GetDocOptions): Blocks | null;
removeDoc(docId: string): void;
dispose(): void;
@@ -18,8 +18,8 @@ import { Awareness } from 'y-protocols/awareness.js';
import type { Schema } from '../schema/index.js';
import {
BlockCollection,
type Blocks,
type CreateDocOptions,
type Doc,
DocCollectionMeta,
type GetDocOptions,
type Workspace,
@@ -208,7 +208,7 @@ export class TestWorkspace implements Workspace {
tags: [],
});
this.slots.docCreated.emit(docId);
return this.getDoc(docId, { query, readonly }) as Doc;
return this.getDoc(docId, { query, readonly }) as Blocks;
}
dispose() {
@@ -230,7 +230,7 @@ export class TestWorkspace implements Workspace {
return space ?? null;
}
getDoc(docId: string, options?: GetDocOptions): Doc | null {
getDoc(docId: string, options?: GetDocOptions): Blocks | null {
const collection = this.getBlockCollection(docId);
return collection?.getDoc(options) ?? null;
}
@@ -2,7 +2,7 @@ import { BlockSuiteError, ErrorCode } from '@blocksuite/global/exceptions';
import { nextTick, Slot } from '@blocksuite/global/utils';
import type { BlockModel, BlockSchemaType, Schema } from '../schema/index.js';
import type { Doc } from '../store/index.js';
import type { Blocks } from '../store/index.js';
import { AssetsManager } from './assets.js';
import { BaseBlockTransformer } from './base.js';
import type { DraftModel } from './draft.js';
@@ -78,7 +78,7 @@ export class Job {
}
};
docToSnapshot = (doc: Doc): DocSnapshot | undefined => {
docToSnapshot = (doc: Blocks): DocSnapshot | undefined => {
try {
this._slots.beforeExport.emit({
type: 'page',
@@ -154,7 +154,7 @@ export class Job {
snapshotToBlock = async (
snapshot: BlockSnapshot,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
): Promise<BlockModel | undefined> => {
@@ -170,7 +170,9 @@ export class Job {
}
};
snapshotToDoc = async (snapshot: DocSnapshot): Promise<Doc | undefined> => {
snapshotToDoc = async (
snapshot: DocSnapshot
): Promise<Blocks | undefined> => {
try {
this._slots.beforeImport.emit({
type: 'page',
@@ -222,7 +224,7 @@ export class Job {
snapshotToSlice = async (
snapshot: SliceSnapshot,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
): Promise<Slice | undefined> => {
@@ -418,7 +420,7 @@ export class Job {
}
}
private _exportDocMeta(doc: Doc): DocSnapshot['meta'] {
private _exportDocMeta(doc: Blocks): DocSnapshot['meta'] {
const docMeta = doc.meta;
if (!docMeta) {
@@ -466,7 +468,7 @@ export class Job {
private async _insertBlockTree(
nodes: DraftBlockTreeNode[],
doc: Doc,
doc: Blocks,
parentId?: string,
startIndex?: number,
counter: number = 0
@@ -555,7 +557,7 @@ export class Job {
private async _snapshotToBlock(
snapshot: BlockSnapshot,
doc: Doc,
doc: Blocks,
parent?: string,
index?: number
): Promise<BlockModel | null> {
@@ -1,6 +1,6 @@
import type { Slot } from '@blocksuite/global/utils';
import type { Doc } from '../store/index.js';
import type { Blocks } from '../store/index.js';
import type { AssetsManager } from './assets.js';
import type { DraftModel } from './draft.js';
import type { Slice } from './slice.js';
@@ -38,7 +38,7 @@ export type BeforeExportPayload =
type: 'block';
}
| {
page: Doc;
page: Blocks;
type: 'page';
}
| {
@@ -60,7 +60,7 @@ export type FinalPayload =
| {
snapshot: DocSnapshot;
type: 'page';
page: Doc;
page: Blocks;
}
| {
snapshot: SliceSnapshot;
@@ -1,4 +1,4 @@
import type { Doc } from '../store/index.js';
import type { Blocks } from '../store/index.js';
import type { DraftModel } from './draft.js';
type SliceData = {
@@ -22,7 +22,7 @@ export class Slice {
constructor(readonly data: SliceData) {}
static fromModels(doc: Doc, models: DraftModel[]) {
static fromModels(doc: Blocks, models: DraftModel[]) {
return new Slice({
content: models,
workspaceId: doc.collection.id,
@@ -1,6 +1,6 @@
import { z } from 'zod';
import type { Doc } from '../store/doc/doc.js';
import type { Blocks } from '../store/doc/doc.js';
import type { DocMeta, DocsPropertiesMeta } from '../store/workspace.js';
export type BlockSnapshot = {
@@ -75,7 +75,7 @@ export interface BlobCRUD {
}
export interface DocCRUD {
create: (id: string) => Doc;
get: (id: string) => Doc | null;
create: (id: string) => Blocks;
get: (id: string) => Blocks | null;
delete: (id: string) => void;
}
@@ -5,7 +5,7 @@ import type {
GroupElementModel,
NoteBlockModel,
} from '@blocksuite/blocks';
import { type BlockModel, type Doc } from '@blocksuite/store';
import { type BlockModel, type Blocks } from '@blocksuite/store';
import { beforeEach, describe, expect, test } from 'vitest';
import * as Y from 'yjs';
@@ -19,7 +19,7 @@ import { setupEditor } from '../utils/setup.js';
let service!: EdgelessRootBlockComponent['service'];
const addNote = (doc: Doc, props: Record<string, unknown> = {}) => {
const addNote = (doc: Blocks, props: Record<string, unknown> = {}) => {
return _addNote(doc, {
index: service.layer.generateIndex(),
...props,
@@ -1,14 +1,13 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
import type {
EdgelessRootBlockComponent,
PageRootBlockComponent,
SurfaceBlockComponent,
} from '@blocksuite/blocks';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import type { AffineEditorContainer } from '../../index.js';
export function getSurface(doc: Doc, editor: AffineEditorContainer) {
export function getSurface(doc: Blocks, editor: AffineEditorContainer) {
const surfaceModel = doc.getBlockByFlavour('affine:surface');
return editor.host!.view.getBlock(
@@ -17,17 +16,17 @@ export function getSurface(doc: Doc, editor: AffineEditorContainer) {
}
export function getDocRootBlock(
doc: Doc,
doc: Blocks,
editor: AffineEditorContainer,
mode: 'page'
): PageRootBlockComponent;
export function getDocRootBlock(
doc: Doc,
doc: Blocks,
editor: AffineEditorContainer,
mode: 'edgeless'
): EdgelessRootBlockComponent;
export function getDocRootBlock(
doc: Doc,
doc: Blocks,
editor: AffineEditorContainer,
_?: 'edgeless' | 'page'
) {
@@ -36,7 +35,7 @@ export function getDocRootBlock(
| PageRootBlockComponent;
}
export function addNote(doc: Doc, props: Record<string, any> = {}) {
export function addNote(doc: Blocks, props: Record<string, any> = {}) {
const noteId = doc.addBlock(
'affine:note',
{
@@ -1,5 +1,5 @@
import { effects as blocksEffects } from '@blocksuite/blocks/effects';
import type { BlockCollection, Doc, Job } from '@blocksuite/store';
import type { BlockCollection, Blocks, Job } from '@blocksuite/store';
import { effects } from '../../effects.js';
@@ -111,12 +111,12 @@ export function cleanup() {
declare global {
const editor: AffineEditorContainer;
const doc: Doc;
const doc: Blocks;
const collection: TestWorkspace;
const job: Job;
interface Window {
editor: AffineEditorContainer;
doc: Doc;
doc: Blocks;
job: Job;
collection: TestWorkspace;
}
@@ -1,7 +1,7 @@
import { BlockStdScope, ShadowlessElement } from '@blocksuite/block-std';
import { EdgelessEditorBlockSpecs, ThemeProvider } from '@blocksuite/blocks';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { css, html, nothing, type TemplateResult } from 'lit';
import { property, state } from 'lit/decorators.js';
import { guard } from 'lit/directives/guard.js';
@@ -85,7 +85,7 @@ export class EdgelessEditor extends SignalWatcher(
}
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor editor!: TemplateResult;
@@ -11,7 +11,7 @@ import {
ThemeProvider,
} from '@blocksuite/blocks';
import { SignalWatcher, Slot, WithDisposable } from '@blocksuite/global/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { computed, signal } from '@preact/signals-core';
import { css, html } from 'lit';
import { property } from 'lit/decorators.js';
@@ -88,7 +88,7 @@ export class AffineEditorContainer
}
`;
private readonly _doc = signal<Doc>();
private readonly _doc = signal<Blocks>();
private readonly _edgelessSpecs = signal<ExtensionType[]>(
EdgelessEditorBlockSpecs
@@ -123,10 +123,10 @@ export class AffineEditorContainer
};
get doc() {
return this._doc.value as Doc;
return this._doc.value as Blocks;
}
set doc(doc: Doc) {
set doc(doc: Blocks) {
this._doc.value = doc;
}
@@ -5,7 +5,7 @@ import {
} from '@blocksuite/block-std';
import { PageEditorBlockSpecs, ThemeProvider } from '@blocksuite/blocks';
import { noop, SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { css, html, nothing } from 'lit';
import { property, state } from 'lit/decorators.js';
import { guard } from 'lit/directives/guard.js';
@@ -101,7 +101,7 @@ export class PageEditor extends SignalWatcher(
}
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ type: Boolean })
accessor hasViewport = true;
@@ -2,7 +2,7 @@ import type { EditorHost } from '@blocksuite/block-std';
import { ShadowlessElement } from '@blocksuite/block-std';
import type { RichText, RootBlockModel } from '@blocksuite/blocks';
import { assertExists, WithDisposable } from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { css, html } from 'lit';
import { property, query, state } from 'lit/decorators.js';
@@ -178,7 +178,7 @@ export class DocTitle extends WithDisposable(ShadowlessElement) {
private accessor _richTextElement!: RichText;
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
}
export function getDocTitleByEditorHost(
@@ -13,7 +13,7 @@ import {
SignalWatcher,
WithDisposable,
} from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { css, html, nothing, type PropertyValues } from 'lit';
import { property, query, state } from 'lit/decorators.js';
import { keyed } from 'lit/directives/keyed.js';
@@ -326,7 +326,7 @@ export class FramePanelBody extends SignalWatcher(
}
}
private _setDocDisposables(doc: Doc) {
private _setDocDisposables(doc: Blocks) {
this._clearDocDisposables();
this._docDisposables = new DisposableGroup();
this._docDisposables.add(
@@ -13,7 +13,7 @@ import {
SignalWatcher,
WithDisposable,
} from '@blocksuite/global/utils';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import { effect, signal } from '@preact/signals-core';
import { css, html, LitElement, nothing, type PropertyValues } from 'lit';
import { property, query, state } from 'lit/decorators.js';
@@ -698,7 +698,7 @@ export class OutlinePanelBody extends SignalWatcher(
private accessor _selected: string[] = [];
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor domHost!: Document | HTMLElement;
@@ -7,7 +7,7 @@ import {
once,
} from '@blocksuite/blocks';
import { SignalWatcher, WithDisposable } from '@blocksuite/global/utils';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { baseTheme } from '@toeverything/theme';
import { css, html, LitElement, nothing, unsafeCSS } from 'lit';
import { property, query, state } from 'lit/decorators.js';
@@ -395,7 +395,7 @@ export class OutlineNoteCard extends SignalWatcher(WithDisposable(LitElement)) {
accessor activeHeadingId: string | null = null;
@property({ attribute: false })
accessor doc!: Doc;
accessor doc!: Blocks;
@property({ attribute: false })
accessor editorMode: 'page' | 'edgeless' = 'page';
@@ -1,5 +1,5 @@
import { on, once } from '@blocksuite/blocks';
import type { Doc } from '@blocksuite/store';
import type { Blocks } from '@blocksuite/store';
import type { OutlinePanelBody } from '../body/outline-panel-body.js';
import type { OutlineNoteCard } from '../card/outline-card.js';
@@ -15,7 +15,7 @@ export function startDragging(options: {
document: Document;
host: Document | HTMLElement;
container: OutlinePanelBody;
doc: Doc;
doc: Blocks;
}) {
const {
document,
@@ -5,7 +5,7 @@ import {
type ParagraphBlockModel,
type RootBlockModel,
} from '@blocksuite/blocks';
import type { BlockModel, Doc } from '@blocksuite/store';
import type { BlockModel, Blocks } from '@blocksuite/store';
import { headingKeys } from '../config.js';
@@ -22,7 +22,7 @@ type OutlineNoteItem = {
};
export function getNotesFromDoc(
doc: Doc,
doc: Blocks,
modes: NoteDisplayMode[]
): OutlineNoteItem[] {
const rootModel = doc.root;
@@ -74,7 +74,7 @@ export function getHeadingBlocksFromNote(
}
export function getHeadingBlocksFromDoc(
doc: Doc,
doc: Blocks,
modes: NoteDisplayMode[],
ignoreEmpty = false
) {