diff --git a/blocksuite/affine/all/package.json b/blocksuite/affine/all/package.json
index 4d1f9236dc..9ebc581a19 100644
--- a/blocksuite/affine/all/package.json
+++ b/blocksuite/affine/all/package.json
@@ -42,6 +42,7 @@
"@blocksuite/affine-inline-footnote": "workspace:*",
"@blocksuite/affine-inline-latex": "workspace:*",
"@blocksuite/affine-inline-link": "workspace:*",
+ "@blocksuite/affine-inline-mention": "workspace:*",
"@blocksuite/affine-inline-preset": "workspace:*",
"@blocksuite/affine-inline-reference": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
@@ -106,6 +107,7 @@
"./inlines/preset": "./src/inlines/preset.ts",
"./inlines/footnote": "./src/inlines/footnote.ts",
"./inlines/latex": "./src/inlines/latex.ts",
+ "./inlines/mention": "./src/inlines/mention.ts",
"./widgets/drag-handle": "./src/widgets/drag-handle.ts",
"./widgets/edgeless-auto-connect": "./src/widgets/edgeless-auto-connect.ts",
"./widgets/edgeless-toolbar": "./src/widgets/edgeless-toolbar.ts",
diff --git a/blocksuite/affine/all/src/effects.ts b/blocksuite/affine/all/src/effects.ts
index fcbdfe45f8..45afee1c44 100644
--- a/blocksuite/affine/all/src/effects.ts
+++ b/blocksuite/affine/all/src/effects.ts
@@ -48,6 +48,7 @@ import { effects as fragmentOutlineEffects } from '@blocksuite/affine-fragment-o
import { effects as inlineFootnoteEffects } from '@blocksuite/affine-inline-footnote/effects';
import { effects as inlineLatexEffects } from '@blocksuite/affine-inline-latex/effects';
import { effects as inlineLinkEffects } from '@blocksuite/affine-inline-link/effects';
+import { effects as inlineMentionEffects } from '@blocksuite/affine-inline-mention';
import { effects as inlinePresetEffects } from '@blocksuite/affine-inline-preset/effects';
import { effects as inlineReferenceEffects } from '@blocksuite/affine-inline-reference/effects';
import { effects as richTextEffects } from '@blocksuite/affine-rich-text/effects';
@@ -123,6 +124,7 @@ export function effects() {
inlineLinkEffects();
inlineFootnoteEffects();
inlineLatexEffects();
+ inlineMentionEffects();
blockNoteEffects();
blockAttachmentEffects();
diff --git a/blocksuite/affine/all/src/inlines/mention.ts b/blocksuite/affine/all/src/inlines/mention.ts
new file mode 100644
index 0000000000..d6a132af41
--- /dev/null
+++ b/blocksuite/affine/all/src/inlines/mention.ts
@@ -0,0 +1 @@
+export * from '@blocksuite/affine-inline-mention';
diff --git a/blocksuite/affine/all/tsconfig.json b/blocksuite/affine/all/tsconfig.json
index dd3ddee2e0..d1920e6738 100644
--- a/blocksuite/affine/all/tsconfig.json
+++ b/blocksuite/affine/all/tsconfig.json
@@ -39,6 +39,7 @@
{ "path": "../inlines/footnote" },
{ "path": "../inlines/latex" },
{ "path": "../inlines/link" },
+ { "path": "../inlines/mention" },
{ "path": "../inlines/preset" },
{ "path": "../inlines/reference" },
{ "path": "../model" },
diff --git a/blocksuite/affine/blocks/block-attachment/package.json b/blocksuite/affine/blocks/block-attachment/package.json
index 3c20d45a38..e062eae2a4 100644
--- a/blocksuite/affine/blocks/block-attachment/package.json
+++ b/blocksuite/affine/blocks/block-attachment/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-bookmark/package.json b/blocksuite/affine/blocks/block-bookmark/package.json
index e3748fe842..24c6de8a6b 100644
--- a/blocksuite/affine/blocks/block-bookmark/package.json
+++ b/blocksuite/affine/blocks/block-bookmark/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/blocks/block-callout/package.json b/blocksuite/affine/blocks/block-callout/package.json
index 4be535dbe6..f819146ff0 100644
--- a/blocksuite/affine/blocks/block-callout/package.json
+++ b/blocksuite/affine/blocks/block-callout/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@emoji-mart/data": "^1.2.1",
"@floating-ui/dom": "^1.6.10",
diff --git a/blocksuite/affine/blocks/block-code/package.json b/blocksuite/affine/blocks/block-code/package.json
index a1eae7218f..c24e9d8c2e 100644
--- a/blocksuite/affine/blocks/block-code/package.json
+++ b/blocksuite/affine/blocks/block-code/package.json
@@ -20,7 +20,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-data-view/package.json b/blocksuite/affine/blocks/block-data-view/package.json
index 45d9769028..8732f9f29d 100644
--- a/blocksuite/affine/blocks/block-data-view/package.json
+++ b/blocksuite/affine/blocks/block-data-view/package.json
@@ -18,7 +18,7 @@
"@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-database/package.json b/blocksuite/affine/blocks/block-database/package.json
index 6c12a57466..576f725a03 100644
--- a/blocksuite/affine/blocks/block-database/package.json
+++ b/blocksuite/affine/blocks/block-database/package.json
@@ -21,7 +21,7 @@
"@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-edgeless-text/package.json b/blocksuite/affine/blocks/block-edgeless-text/package.json
index 707f8fb03c..a5ee7a5f64 100644
--- a/blocksuite/affine/blocks/block-edgeless-text/package.json
+++ b/blocksuite/affine/blocks/block-edgeless-text/package.json
@@ -19,7 +19,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-embed/package.json b/blocksuite/affine/blocks/block-embed/package.json
index 374c06b39c..119081f479 100644
--- a/blocksuite/affine/blocks/block-embed/package.json
+++ b/blocksuite/affine/blocks/block-embed/package.json
@@ -19,7 +19,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-frame/package.json b/blocksuite/affine/blocks/block-frame/package.json
index 807fbb2bdc..4319886e0a 100644
--- a/blocksuite/affine/blocks/block-frame/package.json
+++ b/blocksuite/affine/blocks/block-frame/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-frame-title": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-image/package.json b/blocksuite/affine/blocks/block-image/package.json
index 687b2e8a25..31e670b515 100644
--- a/blocksuite/affine/blocks/block-image/package.json
+++ b/blocksuite/affine/blocks/block-image/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-latex/package.json b/blocksuite/affine/blocks/block-latex/package.json
index 2358ba140a..0fa7703c33 100644
--- a/blocksuite/affine/blocks/block-latex/package.json
+++ b/blocksuite/affine/blocks/block-latex/package.json
@@ -19,7 +19,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-list/package.json b/blocksuite/affine/blocks/block-list/package.json
index 706c320f16..d5ebc67970 100644
--- a/blocksuite/affine/blocks/block-list/package.json
+++ b/blocksuite/affine/blocks/block-list/package.json
@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-note/package.json b/blocksuite/affine/blocks/block-note/package.json
index fa4031fb10..fe5192ed6f 100644
--- a/blocksuite/affine/blocks/block-note/package.json
+++ b/blocksuite/affine/blocks/block-note/package.json
@@ -21,7 +21,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/blocks/block-root/package.json b/blocksuite/affine/blocks/block-root/package.json
index b2db2bb5b8..8e063a72f3 100644
--- a/blocksuite/affine/blocks/block-root/package.json
+++ b/blocksuite/affine/blocks/block-root/package.json
@@ -50,7 +50,7 @@
"@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-surface-ref/package.json b/blocksuite/affine/blocks/block-surface-ref/package.json
index 58cc918331..e8f06e1b8d 100644
--- a/blocksuite/affine/blocks/block-surface-ref/package.json
+++ b/blocksuite/affine/blocks/block-surface-ref/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-slash-menu": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/blocks/block-table/package.json b/blocksuite/affine/blocks/block-table/package.json
index b5e672c8d4..a78804e995 100644
--- a/blocksuite/affine/blocks/block-table/package.json
+++ b/blocksuite/affine/blocks/block-table/package.json
@@ -20,7 +20,7 @@
"@blocksuite/block-std": "workspace:*",
"@blocksuite/data-view": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/components/package.json b/blocksuite/affine/components/package.json
index 9ffcd23975..77a777e3a7 100644
--- a/blocksuite/affine/components/package.json
+++ b/blocksuite/affine/components/package.json
@@ -14,7 +14,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/data-view/package.json b/blocksuite/affine/data-view/package.json
index af663854a7..88c458f4af 100644
--- a/blocksuite/affine/data-view/package.json
+++ b/blocksuite/affine/data-view/package.json
@@ -14,7 +14,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@emotion/hash": "^0.9.2",
"@floating-ui/dom": "^1.6.13",
diff --git a/blocksuite/affine/fragments/fragment-doc-title/package.json b/blocksuite/affine/fragments/fragment-doc-title/package.json
index 291d849969..09851d9c9c 100644
--- a/blocksuite/affine/fragments/fragment-doc-title/package.json
+++ b/blocksuite/affine/fragments/fragment-doc-title/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/fragments/fragment-frame-panel/package.json b/blocksuite/affine/fragments/fragment-frame-panel/package.json
index 775711204e..e2aa3734c1 100644
--- a/blocksuite/affine/fragments/fragment-frame-panel/package.json
+++ b/blocksuite/affine/fragments/fragment-frame-panel/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/fragments/fragment-outline/package.json b/blocksuite/affine/fragments/fragment-outline/package.json
index 41b03c1ccc..5f4e81d088 100644
--- a/blocksuite/affine/fragments/fragment-outline/package.json
+++ b/blocksuite/affine/fragments/fragment-outline/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/gfx/connector/package.json b/blocksuite/affine/gfx/connector/package.json
index 011260d4ba..134ef096d7 100644
--- a/blocksuite/affine/gfx/connector/package.json
+++ b/blocksuite/affine/gfx/connector/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/gfx/mindmap/package.json b/blocksuite/affine/gfx/mindmap/package.json
index b90f1f413e..de4ada0b97 100644
--- a/blocksuite/affine/gfx/mindmap/package.json
+++ b/blocksuite/affine/gfx/mindmap/package.json
@@ -22,7 +22,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/gfx/note/package.json b/blocksuite/affine/gfx/note/package.json
index 27c0bb0081..04c9c3f2fa 100644
--- a/blocksuite/affine/gfx/note/package.json
+++ b/blocksuite/affine/gfx/note/package.json
@@ -21,7 +21,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/gfx/shape/package.json b/blocksuite/affine/gfx/shape/package.json
index d9f04e08a5..8dc6e627e9 100644
--- a/blocksuite/affine/gfx/shape/package.json
+++ b/blocksuite/affine/gfx/shape/package.json
@@ -19,7 +19,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/gfx/text/package.json b/blocksuite/affine/gfx/text/package.json
index da76121424..c5c5cb8582 100644
--- a/blocksuite/affine/gfx/text/package.json
+++ b/blocksuite/affine/gfx/text/package.json
@@ -19,7 +19,7 @@
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/inlines/footnote/package.json b/blocksuite/affine/inlines/footnote/package.json
index e1d31d23bb..91c07faae1 100644
--- a/blocksuite/affine/inlines/footnote/package.json
+++ b/blocksuite/affine/inlines/footnote/package.json
@@ -16,7 +16,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/inlines/latex/package.json b/blocksuite/affine/inlines/latex/package.json
index b6ff6ad5cf..d31350c1e7 100644
--- a/blocksuite/affine/inlines/latex/package.json
+++ b/blocksuite/affine/inlines/latex/package.json
@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/inlines/link/package.json b/blocksuite/affine/inlines/link/package.json
index 659db5c67b..dfcdbf1b22 100644
--- a/blocksuite/affine/inlines/link/package.json
+++ b/blocksuite/affine/inlines/link/package.json
@@ -16,7 +16,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/inlines/mention/package.json b/blocksuite/affine/inlines/mention/package.json
new file mode 100644
index 0000000000..9fc9e4eaab
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@blocksuite/affine-inline-mention",
+ "description": "Inline mention for BlockSuite.",
+ "type": "module",
+ "scripts": {
+ "build": "tsc"
+ },
+ "sideEffects": false,
+ "keywords": [],
+ "author": "toeverything",
+ "license": "MIT",
+ "dependencies": {
+ "@blocksuite/affine-components": "workspace:*",
+ "@blocksuite/affine-model": "workspace:*",
+ "@blocksuite/affine-shared": "workspace:*",
+ "@blocksuite/block-std": "workspace:*",
+ "@blocksuite/global": "workspace:*",
+ "@blocksuite/icons": "^2.2.8",
+ "@blocksuite/store": "workspace:*",
+ "@floating-ui/dom": "^1.6.13",
+ "@lit/context": "^1.1.2",
+ "@preact/signals-core": "^1.8.0",
+ "@toeverything/theme": "^1.1.12",
+ "@types/lodash-es": "^4.17.12",
+ "collapse-white-space": "^2.1.0",
+ "date-fns": "^4.0.0",
+ "lit": "^3.2.0",
+ "lit-html": "^3.2.1",
+ "lodash-es": "^4.17.21",
+ "rxjs": "^7.8.1",
+ "yjs": "^13.6.21",
+ "zod": "^3.23.8"
+ },
+ "exports": {
+ ".": "./src/index.ts",
+ "./effects": "./src/effects.ts"
+ },
+ "files": [
+ "src",
+ "dist",
+ "!src/__tests__",
+ "!dist/__tests__"
+ ],
+ "version": "0.20.0"
+}
diff --git a/blocksuite/affine/inlines/mention/src/affine-mention.ts b/blocksuite/affine/inlines/mention/src/affine-mention.ts
new file mode 100644
index 0000000000..5ee6b9edf2
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/affine-mention.ts
@@ -0,0 +1,149 @@
+import { UserProvider } from '@blocksuite/affine-shared/services';
+import { unsafeCSSVarV2 } from '@blocksuite/affine-shared/theme';
+import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
+import type { BlockStdScope } from '@blocksuite/block-std';
+import { ShadowlessElement } from '@blocksuite/block-std';
+import {
+ ZERO_WIDTH_NON_JOINER,
+ ZERO_WIDTH_SPACE,
+} from '@blocksuite/block-std/inline';
+import { SignalWatcher, WithDisposable } from '@blocksuite/global/lit';
+import type { DeltaInsert } from '@blocksuite/store';
+import { css, html } from 'lit';
+import { property } from 'lit/decorators.js';
+
+export class AffineMention extends SignalWatcher(
+ WithDisposable(ShadowlessElement)
+) {
+ static override styles = css`
+ .affine-mention {
+ color: ${unsafeCSSVarV2('text/primary')};
+ font-feature-settings:
+ 'liga' off,
+ 'clig' off;
+ /* Client/baseMedium */
+ font-family: Inter;
+ font-size: 15px;
+ font-style: normal;
+ font-weight: 500;
+ line-height: 24px; /* 160% */
+ padding: 0 4px;
+ border-radius: 4px;
+ }
+ .affine-mention:hover {
+ background: var(--affine-hover-color);
+ }
+ .affine-mention[data-selected='true'] {
+ background: var(--affine-hover-color);
+ }
+ .affine-mention[data-type='default'] {
+ color: ${unsafeCSSVarV2('text/primary')};
+ }
+ .affine-mention[data-type='removed'] {
+ color: ${unsafeCSSVarV2('text/disable')};
+ }
+ .affine-mention[data-type='error'] {
+ color: ${unsafeCSSVarV2('text/disable')};
+ }
+ .affine-mention[data-type='loading'] {
+ color: ${unsafeCSSVarV2('text/placeholder')};
+ background: ${unsafeCSSVarV2('skeleton/skeleton')};
+ }
+ .loading-text {
+ display: inline-block;
+ }
+ .dots {
+ display: inline-block;
+ }
+ .dot {
+ display: inline-block;
+ opacity: 0;
+ animation: pulse 1.2s infinite;
+ }
+ .dots > .dot:nth-child(2) {
+ animation-delay: 0.4s;
+ }
+ .dots > .dot:nth-child(3) {
+ animation-delay: 0.8s;
+ }
+ @keyframes pulse {
+ 0% {
+ opacity: 0;
+ }
+ 33.333% {
+ opacity: 1;
+ }
+ 66.666% {
+ opacity: 1;
+ }
+ 100% {
+ opacity: 0;
+ }
+ }
+ `;
+
+ override render() {
+ const errorContent = html`@Unknown Member`;
+
+ const userService = this.std.getOptional(UserProvider);
+ const memberId = this.delta.attributes?.mention?.member;
+ if (!userService || !memberId) {
+ return errorContent;
+ }
+
+ userService.revalidateUserInfo(memberId);
+ const isLoading$ = userService.isLoading$(memberId);
+ const userInfo$ = userService.userInfo$(memberId);
+
+ if (userInfo$.value) {
+ if (userInfo$.value.removed) {
+ return html`@Inactive Member`;
+ } else {
+ return html`@${userInfo$.value.name ?? 'Unknown'}`;
+ }
+ }
+
+ if (isLoading$.value) {
+ return html`@loading...`;
+ }
+
+ return errorContent;
+ }
+
+ @property({ type: Object })
+ accessor delta: DeltaInsert = {
+ insert: ZERO_WIDTH_SPACE,
+ attributes: {},
+ };
+
+ @property({ type: Boolean })
+ accessor selected = false;
+
+ @property({ attribute: false })
+ accessor std!: BlockStdScope;
+}
diff --git a/blocksuite/affine/inlines/mention/src/effects.ts b/blocksuite/affine/inlines/mention/src/effects.ts
new file mode 100644
index 0000000000..046ceafcce
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/effects.ts
@@ -0,0 +1,11 @@
+import { AffineMention } from './affine-mention';
+
+export function effects() {
+ customElements.define('affine-mention', AffineMention);
+}
+
+declare global {
+ interface HTMLElementTagNameMap {
+ 'affine-mention': AffineMention;
+ }
+}
diff --git a/blocksuite/affine/inlines/mention/src/exts.ts b/blocksuite/affine/inlines/mention/src/exts.ts
new file mode 100644
index 0000000000..210b1df1d9
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/exts.ts
@@ -0,0 +1,7 @@
+import type { ExtensionType } from '@blocksuite/store';
+
+import { MentionInlineSpecExtension } from './inline-spec';
+
+export const inlineMentionExtensions: ExtensionType[] = [
+ MentionInlineSpecExtension,
+];
diff --git a/blocksuite/affine/inlines/mention/src/index.ts b/blocksuite/affine/inlines/mention/src/index.ts
new file mode 100644
index 0000000000..7064ecf895
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/index.ts
@@ -0,0 +1,4 @@
+export * from './affine-mention';
+export * from './effects';
+export * from './exts';
+export * from './inline-spec';
diff --git a/blocksuite/affine/inlines/mention/src/inline-spec.ts b/blocksuite/affine/inlines/mention/src/inline-spec.ts
new file mode 100644
index 0000000000..dd9eec5088
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/src/inline-spec.ts
@@ -0,0 +1,32 @@
+import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
+import { StdIdentifier } from '@blocksuite/block-std';
+import { InlineSpecExtension } from '@blocksuite/block-std/inline';
+import { html } from 'lit';
+import { z } from 'zod';
+
+export const MentionInlineSpecExtension =
+ InlineSpecExtension('mention', provider => {
+ const std = provider.get(StdIdentifier);
+ return {
+ name: 'mention',
+ schema: z
+ .object({
+ member: z.string(),
+ notification: z.string(),
+ })
+ .optional()
+ .nullable()
+ .catch(undefined),
+ match: delta => {
+ return !!delta.attributes?.mention?.member;
+ },
+ renderer: ({ delta, selected }) => {
+ return html``;
+ },
+ embed: true,
+ };
+ });
diff --git a/blocksuite/affine/inlines/mention/tsconfig.json b/blocksuite/affine/inlines/mention/tsconfig.json
new file mode 100644
index 0000000000..1e2cb0da10
--- /dev/null
+++ b/blocksuite/affine/inlines/mention/tsconfig.json
@@ -0,0 +1,17 @@
+{
+ "extends": "../../../tsconfig.json",
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "tsBuildInfoFile": "./dist/tsconfig.tsbuildinfo"
+ },
+ "include": ["./src"],
+ "references": [
+ { "path": "../../components" },
+ { "path": "../../model" },
+ { "path": "../../shared" },
+ { "path": "../../../framework/block-std" },
+ { "path": "../../../framework/global" },
+ { "path": "../../../framework/store" }
+ ]
+}
diff --git a/blocksuite/affine/inlines/preset/package.json b/blocksuite/affine/inlines/preset/package.json
index d8193742fe..9761743377 100644
--- a/blocksuite/affine/inlines/preset/package.json
+++ b/blocksuite/affine/inlines/preset/package.json
@@ -14,13 +14,14 @@
"@blocksuite/affine-inline-footnote": "workspace:*",
"@blocksuite/affine-inline-latex": "workspace:*",
"@blocksuite/affine-inline-link": "workspace:*",
+ "@blocksuite/affine-inline-mention": "workspace:*",
"@blocksuite/affine-inline-reference": "workspace:*",
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-rich-text": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/inlines/preset/src/default-inline-manager.ts b/blocksuite/affine/inlines/preset/src/default-inline-manager.ts
index b4351d9d83..1ea6501d7b 100644
--- a/blocksuite/affine/inlines/preset/src/default-inline-manager.ts
+++ b/blocksuite/affine/inlines/preset/src/default-inline-manager.ts
@@ -1,6 +1,7 @@
import { FootNoteInlineSpecExtension } from '@blocksuite/affine-inline-footnote';
import { LatexInlineSpecExtension } from '@blocksuite/affine-inline-latex';
import { LinkInlineSpecExtension } from '@blocksuite/affine-inline-link';
+import { MentionInlineSpecExtension } from '@blocksuite/affine-inline-mention';
import { ReferenceInlineSpecExtension } from '@blocksuite/affine-inline-reference';
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
import { InlineManagerExtension } from '@blocksuite/block-std/inline';
@@ -30,5 +31,6 @@ export const DefaultInlineManagerExtension =
ReferenceInlineSpecExtension.identifier,
LinkInlineSpecExtension.identifier,
FootNoteInlineSpecExtension.identifier,
+ MentionInlineSpecExtension.identifier,
],
});
diff --git a/blocksuite/affine/inlines/preset/src/inline-spec.ts b/blocksuite/affine/inlines/preset/src/inline-spec.ts
index 1200e09666..5281d0fde3 100644
--- a/blocksuite/affine/inlines/preset/src/inline-spec.ts
+++ b/blocksuite/affine/inlines/preset/src/inline-spec.ts
@@ -1,6 +1,7 @@
import { inlineFootnoteExtensions } from '@blocksuite/affine-inline-footnote';
import { inlineLatexExtensions } from '@blocksuite/affine-inline-latex';
import { inlineLinkExtensions } from '@blocksuite/affine-inline-link';
+import { inlineMentionExtensions } from '@blocksuite/affine-inline-mention';
import { inlineReferenceExtensions } from '@blocksuite/affine-inline-reference';
import type { AffineTextAttributes } from '@blocksuite/affine-shared/types';
import {
@@ -109,4 +110,5 @@ export const InlineSpecExtensions: ExtensionType[] = [
...inlineReferenceExtensions,
...inlineLatexExtensions,
...inlineFootnoteExtensions,
+ ...inlineMentionExtensions,
];
diff --git a/blocksuite/affine/inlines/preset/tsconfig.json b/blocksuite/affine/inlines/preset/tsconfig.json
index a2d342afa1..c1af92419b 100644
--- a/blocksuite/affine/inlines/preset/tsconfig.json
+++ b/blocksuite/affine/inlines/preset/tsconfig.json
@@ -11,6 +11,7 @@
{ "path": "../footnote" },
{ "path": "../latex" },
{ "path": "../link" },
+ { "path": "../mention" },
{ "path": "../reference" },
{ "path": "../../model" },
{ "path": "../../rich-text" },
diff --git a/blocksuite/affine/inlines/reference/package.json b/blocksuite/affine/inlines/reference/package.json
index 967fa918d9..41c8b2803e 100644
--- a/blocksuite/affine/inlines/reference/package.json
+++ b/blocksuite/affine/inlines/reference/package.json
@@ -15,7 +15,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/rich-text/package.json b/blocksuite/affine/rich-text/package.json
index 3a0c352ee8..02499558f9 100644
--- a/blocksuite/affine/rich-text/package.json
+++ b/blocksuite/affine/rich-text/package.json
@@ -15,7 +15,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/shared/package.json b/blocksuite/affine/shared/package.json
index d3bea7189e..5c3cd9f914 100644
--- a/blocksuite/affine/shared/package.json
+++ b/blocksuite/affine/shared/package.json
@@ -13,7 +13,7 @@
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/shared/src/types/index.ts b/blocksuite/affine/shared/src/types/index.ts
index e83c394e17..3f4cf5191b 100644
--- a/blocksuite/affine/shared/src/types/index.ts
+++ b/blocksuite/affine/shared/src/types/index.ts
@@ -73,6 +73,10 @@ export interface AffineTextAttributes {
color?: string | null;
latex?: string | null;
footnote?: FootNote | null;
+ mention?: {
+ member: string;
+ notification: string;
+ } | null;
}
export type AffineInlineEditor = InlineEditor;
diff --git a/blocksuite/affine/widgets/widget-drag-handle/package.json b/blocksuite/affine/widgets/widget-drag-handle/package.json
index 999a7f5435..b8f3f12dd8 100644
--- a/blocksuite/affine/widgets/widget-drag-handle/package.json
+++ b/blocksuite/affine/widgets/widget-drag-handle/package.json
@@ -20,7 +20,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
diff --git a/blocksuite/affine/widgets/widget-edgeless-auto-connect/package.json b/blocksuite/affine/widgets/widget-edgeless-auto-connect/package.json
index 96219a9a09..d8a3566655 100644
--- a/blocksuite/affine/widgets/widget-edgeless-auto-connect/package.json
+++ b/blocksuite/affine/widgets/widget-edgeless-auto-connect/package.json
@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.12",
"lit": "^3.2.0",
diff --git a/blocksuite/affine/widgets/widget-edgeless-toolbar/package.json b/blocksuite/affine/widgets/widget-edgeless-toolbar/package.json
index 3225c13385..4b4aef0538 100644
--- a/blocksuite/affine/widgets/widget-edgeless-toolbar/package.json
+++ b/blocksuite/affine/widgets/widget-edgeless-toolbar/package.json
@@ -17,7 +17,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.2",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/widgets/widget-remote-selection/package.json b/blocksuite/affine/widgets/widget-remote-selection/package.json
index 3d56e767e7..7056b27dfd 100644
--- a/blocksuite/affine/widgets/widget-remote-selection/package.json
+++ b/blocksuite/affine/widgets/widget-remote-selection/package.json
@@ -16,7 +16,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.12",
"@types/lodash-es": "^4.17.12",
diff --git a/blocksuite/affine/widgets/widget-slash-menu/package.json b/blocksuite/affine/widgets/widget-slash-menu/package.json
index 6933909bab..8fdf332a19 100644
--- a/blocksuite/affine/widgets/widget-slash-menu/package.json
+++ b/blocksuite/affine/widgets/widget-slash-menu/package.json
@@ -15,7 +15,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/store": "workspace:*",
"@floating-ui/dom": "^1.6.13",
"@preact/signals-core": "^1.8.0",
diff --git a/blocksuite/affine/widgets/widget-toolbar/package.json b/blocksuite/affine/widgets/widget-toolbar/package.json
index d180ee5394..4d6e876466 100644
--- a/blocksuite/affine/widgets/widget-toolbar/package.json
+++ b/blocksuite/affine/widgets/widget-toolbar/package.json
@@ -18,7 +18,7 @@
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/block-std": "workspace:*",
"@blocksuite/global": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@floating-ui/dom": "^1.6.13",
"@preact/signals-core": "^1.8.0",
"@toeverything/theme": "^1.1.12",
diff --git a/blocksuite/integration-test/package.json b/blocksuite/integration-test/package.json
index 5f7a36ddd7..d12cf613bc 100644
--- a/blocksuite/integration-test/package.json
+++ b/blocksuite/integration-test/package.json
@@ -14,7 +14,7 @@
"license": "MIT",
"dependencies": {
"@blocksuite/affine": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@floating-ui/dom": "^1.6.13",
"@lit/context": "^1.1.3",
"@lottiefiles/dotlottie-wc": "^0.4.0",
diff --git a/blocksuite/playground/package.json b/blocksuite/playground/package.json
index ca60588492..f60a5a0165 100644
--- a/blocksuite/playground/package.json
+++ b/blocksuite/playground/package.json
@@ -14,7 +14,7 @@
"@blocksuite/affine-model": "workspace:*",
"@blocksuite/affine-shared": "workspace:*",
"@blocksuite/data-view": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@blocksuite/integration-test": "workspace:*",
"@preact/signals-core": "^1.8.0",
"@shoelace-style/shoelace": "2.20.1",
diff --git a/packages/frontend/admin/package.json b/packages/frontend/admin/package.json
index b371d79728..74a42ff870 100644
--- a/packages/frontend/admin/package.json
+++ b/packages/frontend/admin/package.json
@@ -6,7 +6,7 @@
"@affine/component": "workspace:*",
"@affine/core": "workspace:*",
"@affine/graphql": "workspace:*",
- "@blocksuite/icons": "^2.2.4",
+ "@blocksuite/icons": "^2.2.8",
"@radix-ui/react-accordion": "^1.2.2",
"@radix-ui/react-alert-dialog": "^1.1.3",
"@radix-ui/react-aspect-ratio": "^1.1.1",
diff --git a/packages/frontend/apps/android/package.json b/packages/frontend/apps/android/package.json
index aed36b0ff2..28945db478 100644
--- a/packages/frontend/apps/android/package.json
+++ b/packages/frontend/apps/android/package.json
@@ -13,7 +13,7 @@
"@affine/i18n": "workspace:*",
"@affine/nbstore": "workspace:*",
"@blocksuite/affine": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@capacitor/android": "^7.0.0",
"@capacitor/app": "^7.0.0",
"@capacitor/core": "^7.0.0",
diff --git a/packages/frontend/apps/ios/package.json b/packages/frontend/apps/ios/package.json
index 4b83b2449c..c3d71925f5 100644
--- a/packages/frontend/apps/ios/package.json
+++ b/packages/frontend/apps/ios/package.json
@@ -17,7 +17,7 @@
"@affine/i18n": "workspace:*",
"@affine/nbstore": "workspace:*",
"@blocksuite/affine": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@capacitor/app": "^7.0.0",
"@capacitor/browser": "^7.0.0",
"@capacitor/core": "^7.0.0",
diff --git a/packages/frontend/apps/mobile/package.json b/packages/frontend/apps/mobile/package.json
index 8d9998a21d..a7a9289e4b 100644
--- a/packages/frontend/apps/mobile/package.json
+++ b/packages/frontend/apps/mobile/package.json
@@ -14,7 +14,7 @@
"@affine/i18n": "workspace:*",
"@affine/nbstore": "workspace:*",
"@blocksuite/affine": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@sentry/react": "^9.2.0",
"@toeverything/infra": "workspace:*",
"react": "^19.0.0",
diff --git a/packages/frontend/component/package.json b/packages/frontend/component/package.json
index 28b3451908..22f9989d24 100644
--- a/packages/frontend/component/package.json
+++ b/packages/frontend/component/package.json
@@ -27,7 +27,7 @@
"@affine/i18n": "workspace:*",
"@atlaskit/pragmatic-drag-and-drop": "^1.4.0",
"@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.0.3",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.0",
"@radix-ui/react-avatar": "^1.1.2",
diff --git a/packages/frontend/core/package.json b/packages/frontend/core/package.json
index 3cc2609c41..af97c59db4 100644
--- a/packages/frontend/core/package.json
+++ b/packages/frontend/core/package.json
@@ -19,7 +19,7 @@
"@affine/templates": "workspace:*",
"@affine/track": "workspace:*",
"@blocksuite/affine": "workspace:*",
- "@blocksuite/icons": "^2.2.6",
+ "@blocksuite/icons": "^2.2.8",
"@dotlottie/player-component": "^2.7.12",
"@emotion/cache": "^11.14.0",
"@emotion/react": "^11.14.0",
diff --git a/packages/frontend/core/src/modules/at-menu-config/index.ts b/packages/frontend/core/src/modules/at-menu-config/index.ts
index c54a715268..85b9bad666 100644
--- a/packages/frontend/core/src/modules/at-menu-config/index.ts
+++ b/packages/frontend/core/src/modules/at-menu-config/index.ts
@@ -1,10 +1,12 @@
import { type Framework } from '@toeverything/infra';
+import { WorkspaceServerService } from '../cloud';
import { WorkspaceDialogService } from '../dialogs';
import { DocsService } from '../doc';
import { DocDisplayMetaService } from '../doc-display-meta';
import { EditorSettingService } from '../editor-setting';
import { JournalService } from '../journal';
+import { MemberSearchService } from '../permissions';
import { SearchMenuService } from '../search-menu/services';
import { WorkspaceScope } from '../workspace';
import { AtMenuConfigService } from './services';
@@ -19,5 +21,7 @@ export function configAtMenuConfigModule(framework: Framework) {
EditorSettingService,
DocsService,
SearchMenuService,
+ WorkspaceServerService,
+ MemberSearchService,
]);
}
diff --git a/packages/frontend/core/src/modules/at-menu-config/services/index.ts b/packages/frontend/core/src/modules/at-menu-config/services/index.ts
index 44de379822..50e48bf659 100644
--- a/packages/frontend/core/src/modules/at-menu-config/services/index.ts
+++ b/packages/frontend/core/src/modules/at-menu-config/services/index.ts
@@ -1,6 +1,13 @@
+import { notify } from '@affine/component';
+import { UserFriendlyError } from '@affine/error';
+import { type DocMode as GraphqlDocMode } from '@affine/graphql';
import { I18n, i18nTime } from '@affine/i18n';
import track from '@affine/track';
-import type { EditorHost } from '@blocksuite/affine/block-std';
+import {
+ BLOCK_ID_ATTR,
+ type BlockComponent,
+ type EditorHost,
+} from '@blocksuite/affine/block-std';
import {
type LinkedMenuGroup,
type LinkedMenuItem,
@@ -8,24 +15,29 @@ import {
LinkedWidgetUtils,
} from '@blocksuite/affine/blocks/root';
import type { DocMode } from '@blocksuite/affine/model';
+import { DocModeProvider } from '@blocksuite/affine/shared/services';
import type { AffineInlineEditor } from '@blocksuite/affine/shared/types';
import type { DocMeta } from '@blocksuite/affine/store';
import { Text } from '@blocksuite/affine/store';
import {
DateTimeIcon,
+ MainAvatarIcon,
NewXxxEdgelessIcon,
NewXxxPageIcon,
} from '@blocksuite/icons/lit';
-import { computed, Signal } from '@preact/signals-core';
+import { computed, Signal, signal } from '@preact/signals-core';
import { Service } from '@toeverything/infra';
import { cssVarV2 } from '@toeverything/theme/v2';
import { html } from 'lit';
+import type { WorkspaceServerService } from '../../cloud';
import type { WorkspaceDialogService } from '../../dialogs';
import type { DocsService } from '../../doc';
import type { DocDisplayMetaService } from '../../doc-display-meta';
import type { EditorSettingService } from '../../editor-setting';
import { type JournalService, suggestJournalDate } from '../../journal';
+import { NotificationService } from '../../notification';
+import type { Member, MemberSearchService } from '../../permissions';
import type { SearchMenuService } from '../../search-menu/services';
function resolveSignal(data: T | Signal): T {
@@ -45,7 +57,9 @@ export class AtMenuConfigService extends Service {
private readonly dialogService: WorkspaceDialogService,
private readonly editorSettingService: EditorSettingService,
private readonly docsService: DocsService,
- private readonly searchMenuService: SearchMenuService
+ private readonly searchMenuService: SearchMenuService,
+ private readonly workspaceServerService: WorkspaceServerService,
+ private readonly memberSearchService: MemberSearchService
) {
super();
}
@@ -310,12 +324,123 @@ export class AtMenuConfigService extends Service {
return result;
}
+ private memberGroup(
+ query: string,
+ close: () => void,
+ inlineEditor: AffineInlineEditor,
+ _: AbortSignal
+ ): LinkedMenuGroup {
+ const inviteItem: LinkedMenuItem = {
+ key: 'invite',
+ name: 'Invite...',
+ icon: MainAvatarIcon(),
+ action: () => {
+ close();
+
+ this.dialogService.open('setting', {
+ activeTab: 'workspace:members',
+ });
+ },
+ };
+ const convertMemberToMenuItem = (member: Member) => {
+ const { id, name, avatarUrl } = member;
+ const icon = avatarUrl
+ ? html`
`
+ : MainAvatarIcon();
+ return {
+ key: id,
+ name: name ?? 'Unknown',
+ icon,
+ action: () => {
+ close();
+
+ const root = inlineEditor.rootElement;
+ const block = root?.closest(`[${BLOCK_ID_ATTR}]`);
+ if (!block) return;
+
+ const notificationService =
+ this.workspaceServerService.server?.scope.get(NotificationService);
+ if (!notificationService) return;
+
+ const doc = block.doc;
+ const workspaceId = doc.workspace.id;
+ const docId = doc.id;
+ const docTitle = doc.meta?.title ?? '';
+ const mode = block.std.get(DocModeProvider).getEditorMode() ?? 'page';
+
+ notificationService
+ .mentionUser(id, workspaceId, {
+ id: docId,
+ title: docTitle,
+ blockId: block.blockId,
+ mode: mode as GraphqlDocMode,
+ })
+ .then(notificationId => {
+ const inlineRange = inlineEditor.getInlineRange();
+ if (inlineRange && inlineRange.length === 0) {
+ inlineEditor.insertText(inlineRange, ' ', {
+ mention: {
+ member: id,
+ notification: notificationId,
+ },
+ });
+ inlineEditor.setInlineRange({
+ index: inlineRange.index + 1,
+ length: 0,
+ });
+ }
+
+ notify.success({
+ title: I18n.t('com.affine.editor.at-menu.mention-success'),
+ });
+ })
+ .catch(error => {
+ const err = UserFriendlyError.fromAny(error);
+ notify.error({
+ title: I18n[`error.${err.name}`](err.data),
+ });
+ });
+ },
+ };
+ };
+
+ if (query.length === 0) {
+ return {
+ name: I18n.t('com.affine.editor.at-menu.mention-member'),
+ items: [
+ ...this.memberSearchService.result$.value
+ .slice(0, 3)
+ .map(member => convertMemberToMenuItem(member)),
+ inviteItem,
+ ],
+ };
+ }
+ this.memberSearchService.reset();
+
+ const items = signal([inviteItem]);
+ const loading = this.memberSearchService.isLoading$.signal;
+ this.memberSearchService.result$.subscribe(members => {
+ items.value = [
+ ...members.map(member => convertMemberToMenuItem(member)),
+ inviteItem,
+ ];
+ });
+ this.memberSearchService.search(query);
+
+ return {
+ name: I18n.t('com.affine.editor.at-menu.mention-member'),
+ items,
+ loading,
+ };
+ }
+
private getMenusFn(): LinkedWidgetConfig['getMenus'] {
return (query, close, editorHost, inlineEditor, abortSignal) => {
return [
this.journalGroup(query, close, inlineEditor),
this.linkToDocGroup(query, close, inlineEditor, abortSignal),
this.newDocMenuGroup(query, close, editorHost, inlineEditor),
+ this.memberGroup(query, close, inlineEditor, abortSignal),
];
};
}
diff --git a/packages/frontend/i18n/src/i18n-completenesses.json b/packages/frontend/i18n/src/i18n-completenesses.json
index 2683fe5302..69e6db8ae2 100644
--- a/packages/frontend/i18n/src/i18n-completenesses.json
+++ b/packages/frontend/i18n/src/i18n-completenesses.json
@@ -1,26 +1,26 @@
{
- "ar": 95,
+ "ar": 94,
"ca": 4,
"da": 4,
- "de": 95,
- "el-GR": 95,
+ "de": 94,
+ "el-GR": 94,
"en": 100,
- "es-AR": 95,
+ "es-AR": 94,
"es-CL": 96,
- "es": 95,
- "fa": 95,
- "fr": 95,
+ "es": 94,
+ "fa": 94,
+ "fr": 94,
"hi": 2,
- "it-IT": 95,
+ "it-IT": 94,
"it": 1,
- "ja": 95,
+ "ja": 94,
"ko": 60,
- "pl": 95,
- "pt-BR": 95,
- "ru": 95,
- "sv-SE": 95,
- "uk": 95,
+ "pl": 94,
+ "pt-BR": 94,
+ "ru": 94,
+ "sv-SE": 94,
+ "uk": 94,
"ur": 2,
- "zh-Hans": 95,
- "zh-Hant": 95
+ "zh-Hans": 94,
+ "zh-Hant": 94
}
diff --git a/packages/frontend/i18n/src/i18n.gen.ts b/packages/frontend/i18n/src/i18n.gen.ts
index d05c04694d..012b92cca6 100644
--- a/packages/frontend/i18n/src/i18n.gen.ts
+++ b/packages/frontend/i18n/src/i18n.gen.ts
@@ -6915,6 +6915,14 @@ export function useAFFiNEI18N(): {
* `Select a specific date`
*/
["com.affine.editor.at-menu.date-picker"](): string;
+ /**
+ * `Mention Member`
+ */
+ ["com.affine.editor.at-menu.mention-member"](): string;
+ /**
+ * `Successfully mentioned the member`
+ */
+ ["com.affine.editor.at-menu.mention-success"](): string;
/**
* `Show`
*/
diff --git a/packages/frontend/i18n/src/resources/en.json b/packages/frontend/i18n/src/resources/en.json
index ec480000e2..26f283f94f 100644
--- a/packages/frontend/i18n/src/resources/en.json
+++ b/packages/frontend/i18n/src/resources/en.json
@@ -1717,6 +1717,8 @@
"com.affine.editor.at-menu.more-docs-hint": "{{count}} more docs",
"com.affine.editor.at-menu.journal": "Journal",
"com.affine.editor.at-menu.date-picker": "Select a specific date",
+ "com.affine.editor.at-menu.mention-member": "Mention Member",
+ "com.affine.editor.at-menu.mention-success": "Successfully mentioned the member",
"com.affine.editor.bi-directional-link-panel.show": "Show",
"com.affine.editor.bi-directional-link-panel.hide": "Hide",
"com.affine.editor.edgeless-note-header.fold-page-block": "Fold page block",
diff --git a/tools/utils/src/workspace.gen.ts b/tools/utils/src/workspace.gen.ts
index b12f056ddf..dd2d81485d 100644
--- a/tools/utils/src/workspace.gen.ts
+++ b/tools/utils/src/workspace.gen.ts
@@ -37,6 +37,7 @@ export const PackageList = [
'blocksuite/affine/inlines/footnote',
'blocksuite/affine/inlines/latex',
'blocksuite/affine/inlines/link',
+ 'blocksuite/affine/inlines/mention',
'blocksuite/affine/inlines/preset',
'blocksuite/affine/inlines/reference',
'blocksuite/affine/model',
@@ -580,6 +581,18 @@ export const PackageList = [
'blocksuite/framework/store',
],
},
+ {
+ location: 'blocksuite/affine/inlines/mention',
+ name: '@blocksuite/affine-inline-mention',
+ workspaceDependencies: [
+ 'blocksuite/affine/components',
+ 'blocksuite/affine/model',
+ 'blocksuite/affine/shared',
+ 'blocksuite/framework/block-std',
+ 'blocksuite/framework/global',
+ 'blocksuite/framework/store',
+ ],
+ },
{
location: 'blocksuite/affine/inlines/preset',
name: '@blocksuite/affine-inline-preset',
@@ -588,6 +601,7 @@ export const PackageList = [
'blocksuite/affine/inlines/footnote',
'blocksuite/affine/inlines/latex',
'blocksuite/affine/inlines/link',
+ 'blocksuite/affine/inlines/mention',
'blocksuite/affine/inlines/reference',
'blocksuite/affine/model',
'blocksuite/affine/rich-text',
@@ -1123,6 +1137,7 @@ export type PackageName =
| '@blocksuite/affine-inline-footnote'
| '@blocksuite/affine-inline-latex'
| '@blocksuite/affine-inline-link'
+ | '@blocksuite/affine-inline-mention'
| '@blocksuite/affine-inline-preset'
| '@blocksuite/affine-inline-reference'
| '@blocksuite/affine-model'
diff --git a/tsconfig.json b/tsconfig.json
index 035de53e3a..1a0930d39e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -84,6 +84,7 @@
{ "path": "./blocksuite/affine/inlines/footnote" },
{ "path": "./blocksuite/affine/inlines/latex" },
{ "path": "./blocksuite/affine/inlines/link" },
+ { "path": "./blocksuite/affine/inlines/mention" },
{ "path": "./blocksuite/affine/inlines/preset" },
{ "path": "./blocksuite/affine/inlines/reference" },
{ "path": "./blocksuite/affine/model" },
diff --git a/yarn.lock b/yarn.lock
index 9349075e2d..d31e3692eb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -174,7 +174,7 @@ __metadata:
"@affine/component": "workspace:*"
"@affine/core": "workspace:*"
"@affine/graphql": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.4"
+ "@blocksuite/icons": "npm:^2.2.8"
"@radix-ui/react-accordion": "npm:^1.2.2"
"@radix-ui/react-alert-dialog": "npm:^1.1.3"
"@radix-ui/react-aspect-ratio": "npm:^1.1.1"
@@ -240,7 +240,7 @@ __metadata:
"@affine/i18n": "workspace:*"
"@affine/nbstore": "workspace:*"
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@capacitor/android": "npm:^7.0.0"
"@capacitor/app": "npm:^7.0.0"
"@capacitor/cli": "npm:^7.0.0"
@@ -298,7 +298,7 @@ __metadata:
"@atlaskit/pragmatic-drag-and-drop": "npm:^1.4.0"
"@atlaskit/pragmatic-drag-and-drop-hitbox": "npm:^1.0.3"
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@chromatic-com/storybook": "npm:^3.2.2"
"@emotion/react": "npm:^11.14.0"
"@emotion/styled": "npm:^11.14.0"
@@ -386,7 +386,7 @@ __metadata:
"@affine/templates": "workspace:*"
"@affine/track": "workspace:*"
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@dotlottie/player-component": "npm:^2.7.12"
"@emotion/cache": "npm:^11.14.0"
"@emotion/react": "npm:^11.14.0"
@@ -647,7 +647,7 @@ __metadata:
"@affine/native": "workspace:*"
"@affine/nbstore": "workspace:*"
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@capacitor/app": "npm:^7.0.0"
"@capacitor/browser": "npm:^7.0.0"
"@capacitor/cli": "npm:^7.0.0"
@@ -716,7 +716,7 @@ __metadata:
"@affine/i18n": "workspace:*"
"@affine/nbstore": "workspace:*"
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@sentry/react": "npm:^9.2.0"
"@toeverything/infra": "workspace:*"
"@types/react": "npm:^19.0.1"
@@ -2315,7 +2315,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2341,7 +2341,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -2366,7 +2366,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@emoji-mart/data": "npm:^1.2.1"
"@floating-ui/dom": "npm:^1.6.10"
@@ -2396,7 +2396,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2423,7 +2423,7 @@ __metadata:
"@blocksuite/block-std": "workspace:*"
"@blocksuite/data-view": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2452,7 +2452,7 @@ __metadata:
"@blocksuite/block-std": "workspace:*"
"@blocksuite/data-view": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2504,7 +2504,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2530,7 +2530,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2559,7 +2559,7 @@ __metadata:
"@blocksuite/affine-widget-frame-title": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2586,7 +2586,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2613,7 +2613,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2641,7 +2641,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2671,7 +2671,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -2756,7 +2756,7 @@ __metadata:
"@blocksuite/block-std": "workspace:*"
"@blocksuite/data-view": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2790,7 +2790,7 @@ __metadata:
"@blocksuite/affine-widget-slash-menu": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2848,7 +2848,7 @@ __metadata:
"@blocksuite/block-std": "workspace:*"
"@blocksuite/data-view": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@preact/signals-core": "npm:^1.8.0"
@@ -2868,7 +2868,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2905,7 +2905,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2930,7 +2930,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2957,7 +2957,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -2983,7 +2983,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3014,7 +3014,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3045,7 +3045,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3073,7 +3073,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3101,7 +3101,7 @@ __metadata:
"@blocksuite/affine-widget-edgeless-toolbar": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3139,7 +3139,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3168,7 +3168,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3201,7 +3201,34 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
+ "@blocksuite/store": "workspace:*"
+ "@floating-ui/dom": "npm:^1.6.13"
+ "@lit/context": "npm:^1.1.2"
+ "@preact/signals-core": "npm:^1.8.0"
+ "@toeverything/theme": "npm:^1.1.12"
+ "@types/lodash-es": "npm:^4.17.12"
+ collapse-white-space: "npm:^2.1.0"
+ date-fns: "npm:^4.0.0"
+ lit: "npm:^3.2.0"
+ lit-html: "npm:^3.2.1"
+ lodash-es: "npm:^4.17.21"
+ rxjs: "npm:^7.8.1"
+ yjs: "npm:^13.6.21"
+ zod: "npm:^3.23.8"
+ languageName: unknown
+ linkType: soft
+
+"@blocksuite/affine-inline-mention@workspace:*, @blocksuite/affine-inline-mention@workspace:blocksuite/affine/inlines/mention":
+ version: 0.0.0-use.local
+ resolution: "@blocksuite/affine-inline-mention@workspace:blocksuite/affine/inlines/mention"
+ dependencies:
+ "@blocksuite/affine-components": "workspace:*"
+ "@blocksuite/affine-model": "workspace:*"
+ "@blocksuite/affine-shared": "workspace:*"
+ "@blocksuite/block-std": "workspace:*"
+ "@blocksuite/global": "workspace:*"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3227,13 +3254,14 @@ __metadata:
"@blocksuite/affine-inline-footnote": "workspace:*"
"@blocksuite/affine-inline-latex": "workspace:*"
"@blocksuite/affine-inline-link": "workspace:*"
+ "@blocksuite/affine-inline-mention": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-rich-text": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3266,7 +3294,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3310,7 +3338,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3335,7 +3363,7 @@ __metadata:
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3387,7 +3415,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
@@ -3413,7 +3441,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.1.12"
lit: "npm:^3.2.0"
@@ -3432,7 +3460,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.2"
"@preact/signals-core": "npm:^1.8.0"
@@ -3472,7 +3500,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.1.12"
"@types/lodash-es": "npm:^4.17.12"
@@ -3506,7 +3534,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@floating-ui/dom": "npm:^1.6.13"
"@preact/signals-core": "npm:^1.8.0"
@@ -3530,7 +3558,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@floating-ui/dom": "npm:^1.6.13"
"@preact/signals-core": "npm:^1.8.0"
"@toeverything/theme": "npm:^1.1.12"
@@ -3582,6 +3610,7 @@ __metadata:
"@blocksuite/affine-inline-footnote": "workspace:*"
"@blocksuite/affine-inline-latex": "workspace:*"
"@blocksuite/affine-inline-link": "workspace:*"
+ "@blocksuite/affine-inline-mention": "workspace:*"
"@blocksuite/affine-inline-preset": "workspace:*"
"@blocksuite/affine-inline-reference": "workspace:*"
"@blocksuite/affine-model": "workspace:*"
@@ -3653,7 +3682,7 @@ __metadata:
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/block-std": "workspace:*"
"@blocksuite/global": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/store": "workspace:*"
"@emotion/hash": "npm:^0.9.2"
"@floating-ui/dom": "npm:^1.6.13"
@@ -3684,9 +3713,9 @@ __metadata:
languageName: unknown
linkType: soft
-"@blocksuite/icons@npm:^2.2.4, @blocksuite/icons@npm:^2.2.6":
- version: 2.2.6
- resolution: "@blocksuite/icons@npm:2.2.6"
+"@blocksuite/icons@npm:^2.2.8":
+ version: 2.2.8
+ resolution: "@blocksuite/icons@npm:2.2.8"
peerDependencies:
"@types/react": ^18.0.25
change-case: 4.1.2
@@ -3697,7 +3726,7 @@ __metadata:
optional: true
react:
optional: true
- checksum: 10/6ab9de7a0e39d4e3c0712134403dc2fcb9df07086afe1808574e72319ca5443ec58bc7ad68ee3db7cff0581ce435d0d00cc21874811c7a7735516dc16ec008ae
+ checksum: 10/0b5a80c67cd5c5896406948de95f60c825453598ff8f17de2ff2b6c8784a8ba8e23bd0c39f5461d87ff46e13883714db31bbfcff4215062b730039cc141a8c6a
languageName: node
linkType: hard
@@ -3706,7 +3735,7 @@ __metadata:
resolution: "@blocksuite/integration-test@workspace:blocksuite/integration-test"
dependencies:
"@blocksuite/affine": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@floating-ui/dom": "npm:^1.6.13"
"@lit/context": "npm:^1.1.3"
"@lottiefiles/dotlottie-wc": "npm:^0.4.0"
@@ -3734,7 +3763,7 @@ __metadata:
"@blocksuite/affine-model": "workspace:*"
"@blocksuite/affine-shared": "workspace:*"
"@blocksuite/data-view": "workspace:*"
- "@blocksuite/icons": "npm:^2.2.6"
+ "@blocksuite/icons": "npm:^2.2.8"
"@blocksuite/integration-test": "workspace:*"
"@preact/signals-core": "npm:^1.8.0"
"@shoelace-style/shoelace": "npm:2.20.1"