feat(editor): add gfx pointer extension (#12006)

<!-- This is an auto-generated comment: release notes by coderabbit.ai -->
## Summary by CodeRabbit

- **New Features**
  - Introduced a new pointer graphics module with tools and quick tool integration for edgeless surfaces.
  - Added a quick tool button for pointer interactions in edgeless mode.
  - Exposed new extension points for pointer graphics and effects.

- **Improvements**
  - Integrated pointer graphics as a dependency into related packages.
  - Enhanced toolbar context to support additional surface alignment modes.
  - Added conditional clipboard configuration registrations for edgeless contexts across multiple block types.

- **Removals**
  - Removed legacy tool and effect definitions and related quick tool exports from edgeless components.
  - Streamlined extension arrays and removed unused exports for a cleaner codebase.
  - Deleted obsolete utility functions and component registrations.

- **Chores**
  - Updated workspace and TypeScript project references to include the new pointer graphics module.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Saul-Mirone
2025-04-27 04:46:44 +00:00
parent 59d4942d9b
commit 81b439c4e1
49 changed files with 290 additions and 183 deletions

View File

@@ -0,0 +1,26 @@
import { EditPropsStore } from '@blocksuite/affine-shared/services';
import {
type SurfaceMiddleware,
SurfaceMiddlewareBuilder,
} from '@blocksuite/std/gfx';
import { getLastPropsKey } from '../utils';
export class EditPropsMiddlewareBuilder extends SurfaceMiddlewareBuilder {
static override key = 'editProps';
middleware: SurfaceMiddleware = ctx => {
if (ctx.type === 'beforeAdd') {
const { type, props } = ctx.payload;
const key = getLastPropsKey(type, props);
const nProps = key
? this.std.get(EditPropsStore).applyLastProps(key, ctx.payload.props)
: null;
ctx.payload.props = {
...(nProps ?? props),
index: props.index ?? this.gfx.layer.generateIndex(),
};
}
};
}

View File

@@ -1,5 +1,6 @@
export * from './clipboard-config';
export * from './crud-extension';
export * from './edit-props-middleware-builder';
export * from './element-renderer';
export * from './export-manager';
export * from './legacy-slot-extension';

View File

@@ -9,6 +9,7 @@ import { effects } from './effects';
import {
EdgelessCRUDExtension,
EdgelessLegacySlotExtension,
EditPropsMiddlewareBuilder,
} from './extensions';
import { ExportManagerExtension } from './extensions/export-manager/export-manager';
@@ -32,6 +33,7 @@ export class SurfaceViewExtension extends ViewExtensionProvider {
context.register(
BlockViewExtension('affine:surface', literal`affine-surface`)
);
context.register(EditPropsMiddlewareBuilder);
} else {
context.register(
BlockViewExtension('affine:surface', literal`affine-surface-void`)