Files
AFFiNE-Mirror/blocksuite/affine/blocks/embed/src/common/to-edgeless-embed-block.ts
T
Saul-Mirone 1f45cc5dec refactor(editor): unify directories naming (#11516)
**Directory Structure Changes**

- Renamed multiple block-related directories by removing the "block-" prefix:
  - `block-attachment` → `attachment`
  - `block-bookmark` → `bookmark`
  - `block-callout` → `callout`
  - `block-code` → `code`
  - `block-data-view` → `data-view`
  - `block-database` → `database`
  - `block-divider` → `divider`
  - `block-edgeless-text` → `edgeless-text`
  - `block-embed` → `embed`
2025-04-07 12:34:40 +00:00

82 lines
2.1 KiB
TypeScript

import { EdgelessLegacySlotIdentifier } from '@blocksuite/affine-block-surface';
import { Bound } from '@blocksuite/global/gfx';
import {
blockComponentSymbol,
type BlockService,
type GfxBlockComponent,
GfxElementSymbol,
toGfxBlockComponent,
} from '@blocksuite/std';
import type {
GfxBlockElementModel,
GfxCompatibleProps,
} from '@blocksuite/std/gfx';
import type { StyleInfo } from 'lit/directives/style-map.js';
import type { EmbedBlockComponent } from './embed-block-element.js';
export function toEdgelessEmbedBlock<
Model extends GfxBlockElementModel<GfxCompatibleProps>,
Service extends BlockService,
WidgetName extends string,
B extends typeof EmbedBlockComponent<Model, Service, WidgetName>,
>(block: B) {
return class extends toGfxBlockComponent(block) {
override selectedStyle$ = null;
override [blockComponentSymbol] = true;
override blockDraggable = false;
protected override embedContainerStyle: StyleInfo = {};
override [GfxElementSymbol] = true;
get bound(): Bound {
return Bound.deserialize(this.model.xywh);
}
_handleClick(_: MouseEvent): void {
return;
}
get edgelessSlots() {
return this.std.get(EdgelessLegacySlotIdentifier);
}
override connectedCallback(): void {
super.connectedCallback();
this._disposables.add(
this.edgelessSlots.elementResizeStart.subscribe(() => {
this.isResizing$.value = true;
})
);
this._disposables.add(
this.edgelessSlots.elementResizeEnd.subscribe(() => {
this.isResizing$.value = false;
})
);
}
override renderGfxBlock() {
const bound = Bound.deserialize(this.model.xywh);
this.embedContainerStyle.width = `${bound.w}px`;
this.embedContainerStyle.height = `${bound.h}px`;
this.blockContainerStyles = {
width: `${bound.w}px`,
};
this._scale = bound.w / this._cardWidth;
return this.renderPageContent();
}
protected override accessor blockContainerStyles: StyleInfo | undefined =
undefined;
} as B & {
new (...args: any[]): GfxBlockComponent;
};
}