6
6
import '../../ui/legacy/legacy.js' ;
7
7
import '../../ui/components/markdown_view/markdown_view.js' ;
8
8
import '../../ui/components/spinners/spinners.js' ;
9
- import '../../ui/components/tooltips/tooltips.js' ;
10
9
11
10
import * as Common from '../../core/common/common.js' ;
12
11
import * as Host from '../../core/host/host.js' ;
@@ -211,6 +210,7 @@ export class PatchWidget extends UI.Widget.Widget {
211
210
#automaticFileSystem =
212
211
Persistence . AutomaticFileSystemManager . AutomaticFileSystemManager . instance ( ) . automaticFileSystem ;
213
212
#applyToDisconnectedAutomaticWorkspace = false ;
213
+ #popoverHelper: UI . PopoverHelper . PopoverHelper | null = null ;
214
214
215
215
constructor ( element ?: HTMLElement , view ?: View , opts ?: {
216
216
aidaClient : Host . AidaClient . AidaClient ,
@@ -388,19 +388,6 @@ export class PatchWidget extends UI.Widget.Widget {
388
388
.variant =${ Buttons . Button . Variant . ICON }
389
389
.title=${ input . applyToWorkspaceTooltipText }
390
390
> </ devtools-button >
391
- < devtools-tooltip variant ="rich " id ="info-tooltip " ${ Directives . ref ( output . tooltipRef ) } >
392
- < div class ="info-tooltip-container ">
393
- ${ input . applyToWorkspaceTooltipText }
394
- < button
395
- class ="link tooltip-link "
396
- role ="link "
397
- jslog =${ VisualLogging . link ( 'open-ai-settings' ) . track ( {
398
- click : true ,
399
- } ) }
400
- @click =${ input . onLearnMoreTooltipClick }
401
- > ${ lockedString ( UIStringsNotTranslate . learnMore ) } </ button >
402
- </ div >
403
- </ devtools-tooltip >
404
391
</ div >
405
392
</ div > ` ;
406
393
}
@@ -426,6 +413,56 @@ export class PatchWidget extends UI.Widget.Widget {
426
413
427
414
render ( template , target , { host : target } ) ;
428
415
} ) ;
416
+ // We're using PopoverHelper as a workaround instead of using <devtools-tooltip>. See the bug for more details.
417
+ // TODO: Update here when b/409965560 is fixed.
418
+ this . #popoverHelper = new UI . PopoverHelper . PopoverHelper ( this . contentElement , event => {
419
+ // There are two ways this event is received for showing a popover case:
420
+ // * The latest element on the composed path is `<devtools-button>`
421
+ // * The 2nd element on the composed path is `<devtools-button>` (the last element is the `<button>` inside it.)
422
+ const hoveredNode = event . composedPath ( ) [ 0 ] ;
423
+ const maybeDevToolsButton = event . composedPath ( ) [ 2 ] ;
424
+
425
+ const popoverShownNode = hoveredNode instanceof HTMLElement && hoveredNode . getAttribute ( 'aria-details' ) === 'info-tooltip' ? hoveredNode
426
+ : maybeDevToolsButton instanceof HTMLElement && maybeDevToolsButton . getAttribute ( 'aria-details' ) === 'info-tooltip' ? maybeDevToolsButton
427
+ : null ;
428
+ if ( ! popoverShownNode ) {
429
+ return null ;
430
+ }
431
+ return {
432
+ box : popoverShownNode . boxInWindow ( ) ,
433
+ show : async ( popover : UI . GlassPane . GlassPane ) => {
434
+ // clang-format off
435
+ render ( html `
436
+ < style >
437
+ .info-tooltip-container {
438
+ max-width : var (--sys-size-28 );
439
+ padding : var (--sys-size-4 ) var (--sys-size-5 );
440
+
441
+ .tooltip-link {
442
+ display : block;
443
+ margin-top : var (--sys-size-4 );
444
+ color : var (--sys-color-primary );
445
+ padding-left : 0 ;
446
+ }
447
+ }
448
+ </ style >
449
+ < div class ="info-tooltip-container ">
450
+ ${ UIStringsNotTranslate . applyToWorkspaceTooltip }
451
+ < button
452
+ class ="link tooltip-link "
453
+ role ="link "
454
+ jslog =${ VisualLogging . link ( 'open-ai-settings' ) . track ( {
455
+ click : true ,
456
+ } ) }
457
+ @click =${ this . #onLearnMoreTooltipClick}
458
+ > ${ lockedString ( UIStringsNotTranslate . learnMore ) } </ button >
459
+ </ div > ` , popover . contentElement , { host : this } ) ;
460
+ // clang-forat on
461
+ return true ;
462
+ } ,
463
+ } ;
464
+ } , 'patch-widget.info-tooltip' ) ;
465
+ this . #popoverHelper. setTimeout ( 0 ) ;
429
466
// clang-format on
430
467
this . requestUpdate ( ) ;
431
468
}
0 commit comments