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

@@ -1,4 +1,5 @@
import { splitElements } from '@blocksuite/affine/blocks/root';
import type * as PointerEffect from '@blocksuite/affine/gfx/pointer';
import {
CodeBlockModel,
EdgelessTextBlockModel,
@@ -48,6 +49,8 @@ import {
getToolbar,
} from './edgeless-response';
declare type _GLOBAL_ = typeof PointerEffect;
async function getContentFromEmbedSyncedDocModel(
host: EditorHost,
models: EmbedSyncedDocModel[]

View File

@@ -1,51 +1,11 @@
import { EdgelessRootBlockSpec } from '@blocksuite/affine/blocks/root';
import { ToolbarModuleExtension } from '@blocksuite/affine/shared/services';
import {
BlockFlavourIdentifier,
LifeCycleWatcher,
} from '@blocksuite/affine/std';
import type { ExtensionType } from '@blocksuite/affine/store';
import { LifeCycleWatcher } from '@blocksuite/affine/std';
import type { FrameworkProvider } from '@toeverything/infra';
import { buildAIPanelConfig } from '../ai-panel';
import { toolbarAIEntryConfig } from '../entries';
import {
edgelessToolbarAIEntryConfig,
setupEdgelessCopilot,
} from '../entries/edgeless/index';
import { setupEdgelessCopilot } from '../entries/edgeless/index';
import { setupSpaceAIEntry } from '../entries/space/setup-space';
import { CopilotTool } from '../tool/copilot-tool';
import {
AffineAIPanelWidget,
aiPanelWidget,
} from '../widgets/ai-panel/ai-panel';
import {
EdgelessCopilotWidget,
edgelessCopilotWidget,
} from '../widgets/edgeless-copilot';
import { AiSlashMenuConfigExtension } from './ai-slash-menu';
export function createAIEdgelessRootBlockSpec(
framework: FrameworkProvider
): ExtensionType[] {
return [
...EdgelessRootBlockSpec,
CopilotTool,
aiPanelWidget,
edgelessCopilotWidget,
getAIEdgelessRootWatcher(framework),
// In note
ToolbarModuleExtension({
id: BlockFlavourIdentifier('custom:affine:note'),
config: toolbarAIEntryConfig(),
}),
ToolbarModuleExtension({
id: BlockFlavourIdentifier('custom:affine:surface:*'),
config: edgelessToolbarAIEntryConfig(),
}),
AiSlashMenuConfigExtension(),
];
}
import { AffineAIPanelWidget } from '../widgets/ai-panel/ai-panel';
import { EdgelessCopilotWidget } from '../widgets/edgeless-copilot';
export function getAIEdgelessRootWatcher(framework: FrameworkProvider) {
class AIEdgelessRootWatcher extends LifeCycleWatcher {