diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts index f95f2d77e1..dc8da0374d 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-menu.ts @@ -5,14 +5,13 @@ import { ThemeProvider, } from '@blocksuite/affine-shared/services'; import type { ColorEvent } from '@blocksuite/affine-shared/utils'; +import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import type { GfxToolsFullOptionValue } from '@blocksuite/block-std/gfx'; import { SignalWatcher } from '@blocksuite/global/lit'; import { computed } from '@preact/signals-core'; import { css, html, LitElement } from 'lit'; import { property } from 'lit/decorators.js'; -import { EdgelessToolbarToolMixin } from '../mixins/tool.mixin.js'; - export class EdgelessBrushMenu extends EdgelessToolbarToolMixin( SignalWatcher(LitElement) ) { diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts index 51c7b8ceef..96bddf8aa6 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/brush/brush-tool-button.ts @@ -2,12 +2,12 @@ import { EditPropsStore, ThemeProvider, } from '@blocksuite/affine-shared/services'; +import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import { SignalWatcher } from '@blocksuite/global/lit'; import { computed } from '@preact/signals-core'; import { css, html, LitElement } from 'lit'; import { styleMap } from 'lit/directives/style-map.js'; -import { EdgelessToolbarToolMixin } from '../mixins/tool.mixin.js'; import { EdgelessPenDarkIcon, EdgelessPenLightIcon } from './icons.js'; export class EdgelessBrushToolButton extends EdgelessToolbarToolMixin( diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts index 883a057bf6..e9498f82b9 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/draggable-element.controller.ts @@ -3,6 +3,7 @@ import { ThemeProvider, ViewportElementProvider, } from '@blocksuite/affine-shared/services'; +import { GfxControllerIdentifier } from '@blocksuite/block-std/gfx'; import { Bound } from '@blocksuite/global/gfx'; import { type ReactiveController, @@ -66,6 +67,10 @@ export class EdgelessDraggableElementController host.addController(this); } + get gfx() { + return this.options.edgeless.std.get(GfxControllerIdentifier); + } + /** * let overlay shape animate back to the original position */ @@ -146,8 +151,8 @@ export class EdgelessDraggableElementController private _onDragEnd() { const { overlay, info, options } = this; const { startTime, elementInfo, edgelessRect, validMoved } = info; - const { service, clickThreshold = 1500 } = options; - const zoom = service.viewport.zoom; + const { clickThreshold = 1500 } = options; + const zoom = this.gfx.viewport.zoom; if (!validMoved) { const duration = Date.now() - startTime; @@ -168,7 +173,7 @@ export class EdgelessDraggableElementController if (this.states.dragOut && !this.states.cancelled && overlay) { const rect = overlay.transitionWrapper.getBoundingClientRect(); - const [modelX, modelY] = this.options.service.viewport.toModelCoord( + const [modelX, modelY] = this.gfx.viewport.toModelCoord( rect.left - edgelessRect.left, rect.top - edgelessRect.top ); @@ -228,7 +233,7 @@ export class EdgelessDraggableElementController overlay.element.style.setProperty('--translate-x', `${offsetX}px`); overlay.element.style.setProperty('--translate-y', `${offsetY}px`); // - scale shape with scale - const zoom = options.service.viewport.zoom; + const zoom = this.gfx.viewport.zoom; this._updateOverlayScale(zoom); } @@ -386,7 +391,7 @@ export class EdgelessDraggableElementController hostConnected() { this.host.disposables.add( - this.options.service.viewport.viewportUpdated.subscribe(({ zoom }) => { + this.gfx.viewport.viewportUpdated.subscribe(({ zoom }) => { this._updateOverlayScale(zoom); }) ); diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/types.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/types.ts index a1853d2509..32577522ab 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/types.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/common/draggable/types.ts @@ -1,10 +1,8 @@ +import type { BlockComponent } from '@blocksuite/block-std'; import type { Bound } from '@blocksuite/global/gfx'; import type { DisposableClass } from '@blocksuite/global/lit'; import type { TemplateResult } from 'lit'; -import type { EdgelessRootBlockComponent } from '../../../../edgeless-root-block.js'; -import type { EdgelessRootService } from '../../../../edgeless-root-service.js'; - export interface EdgelessDraggableElementHost extends DisposableClass {} export interface OverlayLayer { @@ -25,8 +23,7 @@ export interface OverlayLayer { } export interface EdgelessDraggableElementOptions { - edgeless: EdgelessRootBlockComponent; - service: EdgelessRootService; + edgeless: BlockComponent; /** * In which element that the target should be dragged out * If not provided, recognized as the drag-out whenever dragging diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts index ccaa8fcd6e..fc61d39563 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-menu.ts @@ -9,6 +9,7 @@ import { ThemeProvider, } from '@blocksuite/affine-shared/services'; import type { ColorEvent } from '@blocksuite/affine-shared/utils'; +import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import type { GfxToolsFullOptionValue } from '@blocksuite/block-std/gfx'; import { SignalWatcher } from '@blocksuite/global/lit'; import { @@ -20,8 +21,6 @@ import { computed } from '@preact/signals-core'; import { css, html, LitElement } from 'lit'; import { property } from 'lit/decorators.js'; -import { EdgelessToolbarToolMixin } from '../mixins/tool.mixin.js'; - function ConnectorModeButtonGroup( mode: ConnectorMode, setConnectorMode: (props: Record) => void diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts index 5645acc4b2..1b5e93fefd 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/connector/connector-tool-button.ts @@ -1,5 +1,6 @@ import { ConnectorMode, getConnectorModeName } from '@blocksuite/affine-model'; import { EditPropsStore } from '@blocksuite/affine-shared/services'; +import { QuickToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import { SignalWatcher } from '@blocksuite/global/lit'; import { ConnectorCIcon, @@ -9,8 +10,6 @@ import { import { computed } from '@preact/signals-core'; import { css, html, LitElement } from 'lit'; -import { QuickToolMixin } from '../mixins/quick-tool.mixin.js'; - const IcomMap = { [ConnectorMode.Straight]: ConnectorLIcon(), [ConnectorMode.Orthogonal]: ConnectorEIcon(), @@ -65,7 +64,7 @@ export class EdgelessConnectorToolButton extends QuickToolMixin( @click=${() => { // don't update tool before toggling menu this._toggleMenu(); - this.edgeless.gfx.tool.setTool('connector', { + this.gfx.tool.setTool('connector', { mode, }); }} diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts index a687f577a0..cb8cf4c570 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/default/default-tool-button.ts @@ -1,10 +1,10 @@ +import { QuickToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import type { GfxToolsFullOptionValue } from '@blocksuite/block-std/gfx'; import { HandIcon, SelectIcon } from '@blocksuite/icons/lit'; import { effect } from '@preact/signals-core'; import { css, html, LitElement } from 'lit'; import { query } from 'lit/decorators.js'; -import { QuickToolMixin } from '../mixins/quick-tool.mixin.js'; export class EdgelessDefaultToolButton extends QuickToolMixin(LitElement) { static override styles = css` .current-icon { @@ -62,7 +62,7 @@ export class EdgelessDefaultToolButton extends QuickToolMixin(LitElement) { } this.disposables.add( effect(() => { - const tool = this.edgeless.gfx.tool.currentToolName$.value; + const tool = this.gfx.tool.currentToolName$.value; if (tool === 'default' || tool === 'pan') { localStorage.defaultTool = tool; } diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts index d549338855..6393522f2c 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/eraser/eraser-tool-button.ts @@ -1,8 +1,8 @@ import { ThemeProvider } from '@blocksuite/affine-shared/services'; +import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import type { GfxToolsFullOptionValue } from '@blocksuite/block-std/gfx'; import { css, html, LitElement } from 'lit'; -import { EdgelessToolbarToolMixin } from '../mixins/tool.mixin.js'; import { EdgelessEraserDarkIcon, EdgelessEraserLightIcon } from './icons.js'; export class EdgelessEraserToolButton extends EdgelessToolbarToolMixin( diff --git a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts index 068ceddf86..844f816b9c 100644 --- a/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts +++ b/blocksuite/affine/blocks/block-root/src/edgeless/components/toolbar/frame/frame-menu.ts @@ -1,8 +1,9 @@ +import { EdgelessFrameManagerIdentifier } from '@blocksuite/affine-block-frame'; +import { EdgelessToolbarToolMixin } from '@blocksuite/affine-widget-edgeless-toolbar'; import type { GfxToolsFullOptionValue } from '@blocksuite/block-std/gfx'; import { css, html, LitElement } from 'lit'; import { repeat } from 'lit/directives/repeat.js'; -import { EdgelessToolbarToolMixin } from '../mixins/tool.mixin.js'; import { FrameConfig } from './config.js'; export class EdgelessFrameMenu extends EdgelessToolbarToolMixin(LitElement) { @@ -66,8 +67,12 @@ export class EdgelessFrameMenu extends EdgelessToolbarToolMixin(LitElement) { override type: GfxToolsFullOptionValue['type'] = 'frame'; + get frameManager() { + return this.edgeless.std.get(EdgelessFrameManagerIdentifier); + } + override render() { - const { edgeless } = this; + const { gfx, frameManager } = this; return html`