refactor(editor): improve implementation of lit adapter (#12101)

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

- **New Features**
  - Improved mobile experience by disabling certain toolbars and slash menu features on mobile devices.
  - Introduced new modular extension classes for editor and view customization, enabling more flexible configuration of themes, AI features, and editor enhancements.
  - Added clipboard adapter configurations for a wide range of data types, improving clipboard compatibility.
  - Added a new theme extension specifically for preview scenarios.
  - Provided new hooks for block scope management in document modules.

- **Refactor**
  - Streamlined editor extension setup, consolidating options and reducing complexity for better maintainability.
  - Reorganized mobile-specific extension exports for clearer usage.
  - Refined React-to-Lit rendering API by introducing a typed alias and updating related function signatures.
  - Simplified extension registration by splitting monolithic view extension into separate common and editor view extensions.

- **Bug Fixes**
  - Corrected naming inconsistencies in internal effect tracking.

- **Chores**
  - Updated type exports and documentation comments for improved clarity and consistency.
  - Removed unused or redundant exports and functions to clean up the codebase.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Saul-Mirone
2025-05-01 14:29:11 +00:00
parent e0308c5815
commit 41d404f7f8
26 changed files with 638 additions and 575 deletions

View File

@@ -0,0 +1,20 @@
import { getViewManager } from '@affine/core/blocksuite/manager/migrating-view';
import { DebugLogger } from '@affine/debug';
import { BlockStdScope } from '@blocksuite/affine/std';
import type { Store } from '@blocksuite/affine/store';
import { useMemo } from 'react';
const logger = new DebugLogger('doc-info');
// todo(pengx17): use rc pool?
export function createBlockStdScope(doc: Store) {
logger.debug('createBlockStdScope', doc.id);
const std = new BlockStdScope({
store: doc,
extensions: getViewManager().get('page'),
});
return std;
}
export function useBlockStdScope(doc: Store) {
return useMemo(() => createBlockStdScope(doc), [doc]);
}

View File

@@ -1,12 +1,6 @@
import { getViewManager } from '@affine/core/blocksuite/manager/migrating-view';
import { DebugLogger } from '@affine/debug';
import { BlockStdScope } from '@blocksuite/affine/std';
import type { Store } from '@blocksuite/affine/store';
import { useEffect, useMemo, useState } from 'react';
import { useEffect, useState } from 'react';
import { Observable } from 'rxjs';
const logger = new DebugLogger('doc-info');
interface ReadonlySignal<T> {
value: T;
subscribe: (fn: (value: T) => void) => () => void;
@@ -38,17 +32,3 @@ export function useSignalValue<T>(signal?: ReadonlySignal<T>): T | undefined {
}, [signal]);
return value;
}
// todo(pengx17): use rc pool?
export function createBlockStdScope(doc: Store) {
logger.debug('createBlockStdScope', doc.id);
const std = new BlockStdScope({
store: doc,
extensions: getViewManager().get('page'),
});
return std;
}
export function useBlockStdScope(doc: Store) {
return useMemo(() => createBlockStdScope(doc), [doc]);
}

View File

@@ -10,7 +10,7 @@ import { type CSSProperties, useEffect, useRef, useState } from 'react';
import type * as Y from 'yjs';
import type { DatabaseCellRendererProps } from '../../../types';
import { useBlockStdScope } from '../../../utils';
import { useBlockStdScope } from '../../../use-std';
import * as styles from './rich-text.css';
// todo(@pengx17): handle markdown/keyboard shortcuts