refactor: move image proxy middleware and adapter extensions (#10345)

### TL;DR
Moved image proxy middleware and adapter extensions to their respective packages and introduced a new spec provider for adapter registration.

### What changed?
- Relocated `defaultImageProxyMiddleware` from blocks to `@blocksuite/affine-block-image`
- Moved `PresentTool` from fragment-frame-panel to block-frame
- Created new adapter extension specs for HTML, Markdown, and Notion HTML
- Introduced a spec provider pattern for adapter registration
- Removed direct transformer references from RootService
- Updated imports across affected files to use new locations

### How to test?
1. Verify image proxy functionality works in exports and imports
2. Test HTML, Markdown, and Notion HTML adapters still function correctly
3. Confirm presentation mode works with the relocated PresentTool
4. Check that all file import/export operations continue to work as expected

### Why make this change?
This reorganization improves code modularity by placing features in their logical packages and introduces a more maintainable pattern for adapter registration. The spec provider pattern makes it easier to manage and extend adapter functionality while reducing coupling between components.
This commit is contained in:
Saul-Mirone
2025-02-21 09:01:57 +00:00
parent 296d88f721
commit 22e4bd8c20
64 changed files with 301 additions and 329 deletions

View File

@@ -209,7 +209,7 @@ export class AISlidesRenderer extends WithDisposable(LitElement) {
${new BlockStdScope({
store: this._doc,
extensions:
SpecProvider.getInstance().getSpec('edgeless:preview').value,
SpecProvider.getInstance().getSpec('preview:edgeless').value,
}).render()}
</div>
<div class="mask"></div>

View File

@@ -245,10 +245,10 @@ export const extendEdgelessPreviewSpec = (function () {
return _extension;
} else {
_extension &&
SpecProvider.getInstance().omitSpec('edgeless:preview', _extension);
SpecProvider.getInstance().omitSpec('preview:edgeless', _extension);
_extension = getThemeExtension(framework);
_framework = framework;
SpecProvider.getInstance().extendSpec('edgeless:preview', [_extension]);
SpecProvider.getInstance().extendSpec('preview:edgeless', [_extension]);
return _extension;
}
};

View File

@@ -29,14 +29,17 @@ const CustomSpecs: ExtensionType[] = [
getFontConfigExtension(),
].flat();
function patchPreviewSpec(id: string, specs: ExtensionType[]) {
function patchPreviewSpec(
id: 'preview:edgeless' | 'preview:page',
specs: ExtensionType[]
) {
const specProvider = SpecProvider.getInstance();
specProvider.extendSpec(id, specs);
}
export function effects() {
// Patch edgeless preview spec for blocksuite surface-ref and embed-synced-doc
patchPreviewSpec('edgeless:preview', CustomSpecs);
patchPreviewSpec('preview:edgeless', CustomSpecs);
}
export function getPagePreviewThemeExtension(framework: FrameworkProvider) {
@@ -98,7 +101,7 @@ export function createPageModePreviewSpecs(
framework: FrameworkProvider
): SpecBuilder {
const specProvider = SpecProvider.getInstance();
const pagePreviewSpec = specProvider.getSpec('page:preview');
const pagePreviewSpec = specProvider.getSpec('preview:page');
// Enable theme extension, doc display meta extension and peek view service
const peekViewService = framework.get(PeekViewService);
pagePreviewSpec.extend([

View File

@@ -92,7 +92,7 @@ export const EdgelessSnapshot = (props: Props) => {
const editorHost = new BlockStdScope({
store: doc,
extensions: [
...SpecProvider.getInstance().getSpec('edgeless:preview').value,
...SpecProvider.getInstance().getSpec('preview:edgeless').value,
getThemeExtension(framework),
],
}).render();