diff --git a/packages/blocks/src/page-block/edgeless/components/component-toolbar/change-note-button.ts b/packages/blocks/src/page-block/edgeless/components/component-toolbar/change-note-button.ts
index 14a91998287b..c933302c3715 100644
--- a/packages/blocks/src/page-block/edgeless/components/component-toolbar/change-note-button.ts
+++ b/packages/blocks/src/page-block/edgeless/components/component-toolbar/change-note-button.ts
@@ -72,14 +72,22 @@ export class EdgelessChangeNoteButton extends WithDisposable(LitElement) {
background: var(--affine-blue-600);
border-radius: 4px;
color: var(--affine-white);
+ font-size: 12px;
+ font-family: Avenir Next;
+ font-weight: 600;
+ line-height: 16px;
}
.note-status > span {
- width: 12px;
- height: 16px;
- font-weight: 600;
- font-size: 12px;
- line-height: 16px;
+ display: flex;
+ padding: 4px 6px;
+ width: 24px;
+ flex-direction: column;
+ }
+
+ .note-status.hidden > span {
+ display: flex;
+ padding: 4px;
}
.note-status-button {
@@ -222,7 +230,7 @@ export class EdgelessChangeNoteButton extends WithDisposable(LitElement) {
if (note.hidden) {
return html`
-
this._setNoteHidden(note, !note.hidden)}
class="note-status-button"
diff --git a/packages/blocks/src/page-block/edgeless/components/notes-status.ts b/packages/blocks/src/page-block/edgeless/components/notes-status.ts
new file mode 100644
index 000000000000..1ea58913d877
--- /dev/null
+++ b/packages/blocks/src/page-block/edgeless/components/notes-status.ts
@@ -0,0 +1,96 @@
+import { HiddenIcon } from '@blocksuite/global/config';
+import { assertExists } from '@blocksuite/store';
+import { computePosition, flip, offset } from '@floating-ui/dom';
+import { html, nothing } from 'lit';
+import { styleMap } from 'lit/directives/style-map.js';
+
+import { getBlockElementById } from '../../../__internal__/utils/query.js';
+import type { NoteBlockModel } from '../../../note-block/note-model.js';
+import type { EdgelessPageBlockComponent } from '../edgeless-page-block.js';
+
+export function EdgelessNotesStatus(
+ edgeless: EdgelessPageBlockComponent,
+ notes: NoteBlockModel[]
+) {
+ const state = edgeless.selection.state;
+ const isSelectOne = state.selected.length === 1;
+ const singleSelected = state.selected[0];
+
+ if (!isSelectOne) return nothing;
+
+ const notesWithoutSelected = notes.filter(
+ note => note.id !== singleSelected.id
+ );
+ const visibleNotes = notes.filter(note => !note.hidden);
+
+ requestAnimationFrame(() => {
+ for (const note of notesWithoutSelected) {
+ const noteStatusElement = edgeless.querySelector(
+ `[data-note-id="${note.id}"]`
+ );
+ if (noteStatusElement instanceof HTMLElement) {
+ const noteElement = getBlockElementById(note.id);
+ assertExists(noteElement);
+ computePosition(noteElement, noteStatusElement, {
+ placement: 'top-start',
+ middleware: [
+ flip(),
+ offset({
+ // 24 is `EDGELESS_BLOCK_CHILD_PADDING`
+ mainAxis: (8 + 24) * edgeless.surface.viewport.zoom,
+ crossAxis: (4 - 24) * edgeless.surface.viewport.zoom,
+ }),
+ ],
+ }).then(({ x, y }) => {
+ noteStatusElement.style.top = y + 'px';
+ noteStatusElement.style.left = x + 'px';
+ });
+ }
+ }
+ });
+
+ return html`
+ ${notesWithoutSelected.map(note => {
+ const index = visibleNotes.indexOf(note);
+
+ return html`
+ ${!note.hidden
+ ? html`${index + 1}`
+ : html`${HiddenIcon}`}
+
`;
+ })}
+
`;
+}
diff --git a/packages/blocks/src/page-block/edgeless/edgeless-page-block.ts b/packages/blocks/src/page-block/edgeless/edgeless-page-block.ts
index f9c14e0a9923..b2069e348d8f 100644
--- a/packages/blocks/src/page-block/edgeless/edgeless-page-block.ts
+++ b/packages/blocks/src/page-block/edgeless/edgeless-page-block.ts
@@ -66,6 +66,7 @@ import { PageBlockService } from '../../index.js';
import { tryUpdateNoteSize } from '../utils/index.js';
import { createDragHandle } from './components/create-drag-handle.js';
import { EdgelessNotesContainer } from './components/edgeless-notes-container.js';
+import { EdgelessNotesStatus } from './components/notes-status.js';
import { EdgelessDraggingAreaRect } from './components/rects/dragging-area-rect.js';
import { EdgelessHoverRect } from './components/rects/hover-rect.js';
import {
@@ -1036,6 +1037,7 @@ export class EdgelessPageBlockComponent
>
`
: nothing}
+ ${EdgelessNotesStatus(this, this.sortedNotes)}
`;
}
diff --git a/packages/global/src/config/icons/edgeless.ts b/packages/global/src/config/icons/edgeless.ts
index 843ebf13f397..f1f89071230d 100644
--- a/packages/global/src/config/icons/edgeless.ts
+++ b/packages/global/src/config/icons/edgeless.ts
@@ -549,14 +549,14 @@ export const AlignRightIcon = html`