diff --git a/blocksuite/affine/widgets/toolbar/src/toolbar.ts b/blocksuite/affine/widgets/toolbar/src/toolbar.ts index 2052b641a..e1c5143f4 100644 --- a/blocksuite/affine/widgets/toolbar/src/toolbar.ts +++ b/blocksuite/affine/widgets/toolbar/src/toolbar.ts @@ -80,6 +80,11 @@ export class AffineToolbarWidget extends WidgetComponent { } } + editor-toolbar[data-open][data-inline='true'] { + transition-property: opacity, overlay, display, transform; + transition-timing-function: ease; + } + editor-toolbar[data-placement='inner'] { background-color: unset; box-shadow: unset; @@ -632,6 +637,7 @@ export class AffineToolbarWidget extends WidgetComponent { // Hides toolbar if (Flag.None === value || flags.check(Flag.Hiding, value)) { + if ('inline' in toolbar.dataset) delete toolbar.dataset.inline; if (toolbar.dataset.open) delete toolbar.dataset.open; // Closes dropdown menus toolbar diff --git a/blocksuite/affine/widgets/toolbar/src/utils.ts b/blocksuite/affine/widgets/toolbar/src/utils.ts index 3d9f2fb3f..5c0424325 100644 --- a/blocksuite/affine/widgets/toolbar/src/utils.ts +++ b/blocksuite/affine/widgets/toolbar/src/utils.ts @@ -29,7 +29,7 @@ import { shift, size, } from '@floating-ui/dom'; -import { html, nothing, render } from 'lit'; +import { html, render } from 'lit'; import { ifDefined } from 'lit/directives/if-defined.js'; import { join } from 'lit/directives/join.js'; import { keyed } from 'lit/directives/keyed.js'; @@ -297,11 +297,22 @@ export function renderToolbar( render( join( renderActions(primaryActionGroup, context), - innerToolbar ? nothing : renderToolbarSeparator() + innerToolbar ? null : renderToolbarSeparator() ), toolbar ); + // Avoids shaking + if (flavour === 'affine:note' && context.std.range.value) { + if (!('inline' in toolbar.dataset)) { + toolbar.dataset.inline = ''; + } else { + toolbar.dataset.inline = 'true'; + } + } else { + delete toolbar.dataset.inline; + } + if (toolbar.dataset.open) return; toolbar.dataset.open = 'true'; }