Files
AFFiNE-Mirror/blocksuite/affine/blocks/root/src/view.ts
T
Saul-Mirone 3a2fe0bf91 refactor(editor): extract widgets (#12304)
<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced two new widgets: Edgeless Dragging Area and Note Slicer, now available for use.
  - Added extension support for these widgets, enabling enhanced interaction and integration within the application.

- **Chores**
  - Updated package configurations and workspace settings to include the new widgets and their dependencies.
  - Added project references and configuration files to support modular development and build processes.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2025-05-15 10:44:41 +00:00

94 lines
2.7 KiB
TypeScript

import {
type ViewExtensionContext,
ViewExtensionProvider,
} from '@blocksuite/affine-ext-loader';
import { NoteBlockSchema } from '@blocksuite/affine-model';
import {
ToolbarModuleExtension,
ViewportElementExtension,
} from '@blocksuite/affine-shared/services';
import {
BlockFlavourIdentifier,
BlockViewExtension,
FlavourExtension,
} from '@blocksuite/std';
import { literal } from 'lit/static-html.js';
import { PageClipboard, ReadOnlyClipboard } from './clipboard';
import { builtinToolbarConfig } from './configs/toolbar';
import { EdgelessClipboardController, EdgelessRootService } from './edgeless';
import { EdgelessElementToolbarExtension } from './edgeless/configs/toolbar';
import { EdgelessLocker } from './edgeless/edgeless-root-spec';
import { AltCloneExtension } from './edgeless/interact-extensions/clone-ext';
import { effects } from './effects';
import { fallbackKeymap } from './keyboard/keymap';
export class RootViewExtension extends ViewExtensionProvider {
override name = 'affine-root-block';
override effect(): void {
super.effect();
effects();
}
override setup(context: ViewExtensionContext) {
super.setup(context);
context.register([
FlavourExtension('affine:page'),
fallbackKeymap,
ToolbarModuleExtension({
id: BlockFlavourIdentifier(NoteBlockSchema.model.flavour),
config: builtinToolbarConfig,
}),
]);
if (
context.scope === 'preview-page' ||
context.scope === 'preview-edgeless'
) {
context.register(ReadOnlyClipboard);
}
if (this.isEdgeless(context.scope)) {
this._setupEdgeless(context);
return;
}
this._setupPage(context);
}
private readonly _setupPage = (context: ViewExtensionContext) => {
context.register(ViewportElementExtension('.affine-page-viewport'));
if (context.scope === 'preview-page') {
context.register(
BlockViewExtension('affine:page', literal`affine-preview-root`)
);
return;
}
context.register(
BlockViewExtension('affine:page', literal`affine-page-root`)
);
context.register(PageClipboard);
};
private readonly _setupEdgeless = (context: ViewExtensionContext) => {
context.register([
EdgelessRootService,
ViewportElementExtension('.affine-edgeless-viewport'),
]);
if (context.scope === 'preview-edgeless') {
context.register([
BlockViewExtension(
'affine:page',
literal`affine-edgeless-root-preview`
),
EdgelessLocker,
]);
return;
}
context.register([
BlockViewExtension('affine:page', literal`affine-edgeless-root`),
EdgelessClipboardController,
AltCloneExtension,
]);
context.register(EdgelessElementToolbarExtension);
};
}