@@ -7,14 +7,22 @@ import { renderEditor } from '../../../helpers/renderEditor';
77import {
88 insertInlineWorkPackageViaSlashMenu ,
99 openInlineWorkPackagePopover ,
10- convertToCompactCard ,
1110 openBlockCardPopover ,
11+ convertToCompactCard ,
1212} from '../../../helpers/editorHelpers' ;
1313
1414afterEach ( ( ) => {
1515 cleanup ( ) ;
1616} ) ;
1717
18+ // BlockNote leaves an empty display:none toolbar container in the DOM when
19+ // closed, so presence alone is not enough - only a rendered one counts.
20+ const formattingToolbarVisible = ( ) =>
21+ Array . from ( document . querySelectorAll ( '[class*="formatting-toolbar"]' ) ) . some ( ( el ) => {
22+ const he = el as HTMLElement ;
23+ return getComputedStyle ( he ) . display !== 'none' && he . childElementCount > 0 ;
24+ } ) ;
25+
1826function ChipWrapper ( { initialSize, wpid = '123' } :{
1927 initialSize :string ;
2028 wpid ?:string ;
@@ -294,4 +302,49 @@ describe('Inline chip popover UX', () => {
294302 await expect . element ( page . getByRole ( 'button' , { name : label , exact : true } ) ) . toBeVisible ( ) ;
295303 }
296304 } ) ;
305+ } ) ;
306+
307+ describe ( 'Options popover coexists with the editor' , ( ) => {
308+ it ( 'inline chip: opening the size menu summons no formatting toolbar' , async ( ) => {
309+ renderEditor ( ) ;
310+ await insertInlineWorkPackageViaSlashMenu ( ) ;
311+ await openInlineWorkPackagePopover ( ) ;
312+
313+ await userEvent . click ( page . getByTitle ( 'Change size' ) ) ;
314+
315+ await expect . element ( page . getByTestId ( 'size-menu' ) ) . toBeVisible ( ) ;
316+ expect ( formattingToolbarVisible ( ) ) . toBe ( false ) ;
317+ } ) ;
318+
319+ it ( 'inline chip: resizing summons no formatting toolbar' , async ( ) => {
320+ renderEditor ( ) ;
321+ await insertInlineWorkPackageViaSlashMenu ( ) ;
322+ await openInlineWorkPackagePopover ( ) ;
323+ await userEvent . click ( page . getByTitle ( 'Change size' ) ) ;
324+
325+ await userEvent . click ( page . getByRole ( 'button' , { name : 'Compact' , exact : true } ) ) ;
326+
327+ expect ( formattingToolbarVisible ( ) ) . toBe ( false ) ;
328+ } ) ;
329+
330+ it ( 'inline chip: a scroll closes the popover on desktop' , async ( ) => {
331+ renderEditor ( ) ;
332+ await insertInlineWorkPackageViaSlashMenu ( ) ;
333+ await openInlineWorkPackagePopover ( ) ;
334+
335+ window . dispatchEvent ( new Event ( 'scroll' ) ) ;
336+
337+ await expect . element ( page . getByTestId ( 'popover-content' ) ) . not . toBeInTheDocument ( ) ;
338+ } ) ;
339+
340+ it ( 'block card: opening the popover summons no formatting toolbar' , async ( ) => {
341+ renderEditor ( ) ;
342+ await insertInlineWorkPackageViaSlashMenu ( ) ;
343+ await convertToCompactCard ( ) ;
344+
345+ await openBlockCardPopover ( ) ;
346+ await expect . element ( page . getByTestId ( 'popover-content' ) ) . toBeVisible ( ) ;
347+
348+ expect ( formattingToolbarVisible ( ) ) . toBe ( false ) ;
349+ } ) ;
297350} ) ;
0 commit comments