diff --git a/src/components/SingleEditorView.tsx b/src/components/SingleEditorView.tsx index 1f977bd1..c60a5021 100644 --- a/src/components/SingleEditorView.tsx +++ b/src/components/SingleEditorView.tsx @@ -70,6 +70,8 @@ const CONTAINER_CLICK_IGNORE_SELECTOR = [ '.bn-formatting-toolbar', '.bn-link-toolbar', '.bn-side-menu', + '.bn-suggestion-menu', + '.bn-grid-suggestion-menu', '.bn-form-popover', '[data-editor-code-copy]', '[role="menu"]', diff --git a/tests/smoke/blocknote-slash-menu-mouse.spec.ts b/tests/smoke/blocknote-slash-menu-mouse.spec.ts new file mode 100644 index 00000000..92aa9534 --- /dev/null +++ b/tests/smoke/blocknote-slash-menu-mouse.spec.ts @@ -0,0 +1,58 @@ +import { test, expect, type Page } from '@playwright/test' +import { createFixtureVaultCopy, openFixtureVault, removeFixtureVaultCopy } from '../helpers/fixtureVault' + +let tempVaultDir: string + +test.beforeEach(async ({ page }, testInfo) => { + testInfo.setTimeout(90_000) + tempVaultDir = createFixtureVaultCopy() + await openFixtureVault(page, tempVaultDir) +}) + +test.afterEach(() => { + removeFixtureVaultCopy(tempVaultDir) +}) + +async function openSlashMenuOnNewLine(page: Page) { + await page.locator('[data-testid="note-list-container"]').getByText('Alpha Project', { exact: true }).click() + await expect(page.locator('.bn-editor')).toBeVisible({ timeout: 5_000 }) + await page.locator('.bn-block-content').last().click() + await page.keyboard.press('Enter') + await page.keyboard.type('/') + + const menu = page.locator('.bn-suggestion-menu') + await expect(menu).toBeVisible({ timeout: 5_000 }) + return menu +} + +async function openFilteredSlashMenuOnNewLine(page: Page) { + await openSlashMenuOnNewLine(page) + await page.keyboard.type('bul') + + const menu = page.locator('.bn-suggestion-menu') + await expect(menu).toBeVisible({ timeout: 5_000 }) + return menu +} + +test('filtered slash-menu commands can be selected with the mouse', async ({ page }) => { + await openFilteredSlashMenuOnNewLine(page) + + await page.getByRole('option', { name: /Bullet List/i }).click() + await page.keyboard.type('Mouse selected bullet') + + await expect( + page.locator('.bn-block-content[data-content-type="bulletListItem"]').filter({ + hasText: 'Mouse selected bullet', + }), + ).toBeVisible() + await expect(page.locator('.bn-suggestion-menu')).not.toBeVisible() +}) + +test('plain slash-menu mouse selection opens follow-up pickers', async ({ page }) => { + await openSlashMenuOnNewLine(page) + + await page.getByRole('option', { name: /Emoji/i }).click() + + await expect(page.locator('.bn-grid-suggestion-menu')).toBeVisible({ timeout: 5_000 }) + await expect(page.locator('.bn-suggestion-menu')).not.toBeVisible() +})