chrome-devtools-frontend 1.0.1667564 → 1.0.1669021

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/.agents/skills/devtools-ci/SKILL.md +65 -0
  2. package/.agents/skills/devtools-setting-migration/SKILL.md +290 -0
  3. package/.agents/skills/gerrit-cli/SKILL.md +59 -0
  4. package/.agents/skills/gerrit-cli/references/commands.md +93 -0
  5. package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
  6. package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
  7. package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
  8. package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +11 -4
  9. package/.agents/skills/ui-widgets/SKILL.md +25 -1
  10. package/docs/contributing/infrastructure.md +7 -1
  11. package/docs/ui_engineering.md +44 -1
  12. package/front_end/core/common/Settings.ts +11 -4
  13. package/front_end/core/host/AidaClient.ts +66 -47
  14. package/front_end/core/host/GcaClient.ts +4 -6
  15. package/front_end/core/host/ResourceLoader.ts +4 -2
  16. package/front_end/core/root/Runtime.ts +5 -5
  17. package/front_end/core/sdk/CSSModel.test.api.ts +102 -0
  18. package/front_end/core/sdk/CSSModel.ts +3 -2
  19. package/front_end/core/sdk/ConsoleModel.ts +3 -2
  20. package/front_end/core/sdk/DebuggerModel.ts +16 -7
  21. package/front_end/core/sdk/SDKSettings.ts +38 -0
  22. package/front_end/core/sdk/sdk-meta.ts +0 -120
  23. package/front_end/core/sdk/sdk.ts +2 -0
  24. package/front_end/entrypoints/main/MainImpl.ts +10 -3
  25. package/front_end/foundation/Universe.ts +7 -0
  26. package/front_end/generated/InspectorBackendCommands.ts +2 -2
  27. package/front_end/generated/protocol.ts +11 -3
  28. package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
  29. package/front_end/models/ai_assistance/AiUtils.ts +67 -4
  30. package/front_end/models/ai_assistance/BuiltInAi.ts +11 -6
  31. package/front_end/models/ai_assistance/ChangeManager.ts +17 -1
  32. package/front_end/models/ai_assistance/StorageItem.ts +26 -5
  33. package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
  34. package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
  35. package/front_end/models/javascript_metadata/NativeFunctions.js +22 -9
  36. package/front_end/models/source_map_scopes/NamesResolver.ts +23 -17
  37. package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
  38. package/front_end/models/trace/types/File.ts +1 -0
  39. package/front_end/models/workspace/UISourceCode.ts +0 -10
  40. package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
  41. package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
  42. package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
  43. package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
  44. package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
  45. package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
  46. package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
  47. package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +131 -134
  48. package/front_end/panels/application/ServiceWorkersView.ts +8 -8
  49. package/front_end/panels/application/application.ts +2 -0
  50. package/front_end/panels/application/components/AdsView.ts +10 -6
  51. package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
  52. package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
  53. package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +22 -24
  54. package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
  55. package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
  56. package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
  57. package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
  58. package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
  59. package/front_end/panels/common/common.ts +1 -1
  60. package/front_end/panels/console/ConsoleInsightTeaser.ts +6 -8
  61. package/front_end/panels/console/ConsoleView.ts +6 -4
  62. package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
  63. package/front_end/panels/console/console-meta.ts +28 -0
  64. package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
  65. package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
  66. package/front_end/panels/emulation/DeviceModeToolbar.ts +2 -2
  67. package/front_end/panels/emulation/DeviceModeView.ts +63 -104
  68. package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
  69. package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
  70. package/front_end/panels/explain/explain-meta.ts +7 -49
  71. package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
  72. package/front_end/panels/network/NetworkLogView.ts +1 -0
  73. package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
  74. package/front_end/panels/network/ResourceChunkView.ts +72 -46
  75. package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
  76. package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
  77. package/front_end/panels/network/originalResourceChunkView.css +49 -0
  78. package/front_end/panels/screencast/ScreencastView.ts +401 -260
  79. package/front_end/panels/screencast/screencastView.css +113 -100
  80. package/front_end/panels/sensors/LocationsSettingsTab.ts +329 -135
  81. package/front_end/panels/sensors/locationsSettingsTab.css +78 -4
  82. package/front_end/panels/settings/AISettingsTab.ts +17 -100
  83. package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
  84. package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
  85. package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
  86. package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
  87. package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
  88. package/front_end/panels/sources/BreakpointsView.ts +14 -14
  89. package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
  90. package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
  91. package/front_end/panels/sources/CoveragePlugin.ts +7 -7
  92. package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
  93. package/front_end/panels/sources/DebuggerPlugin.ts +31 -31
  94. package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
  95. package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
  96. package/front_end/panels/sources/NavigatorView.ts +34 -27
  97. package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
  98. package/front_end/panels/sources/PersistenceActions.ts +9 -9
  99. package/front_end/panels/sources/ProfilePlugin.ts +1 -1
  100. package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
  101. package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
  102. package/front_end/panels/sources/SourcesNavigator.ts +20 -18
  103. package/front_end/panels/sources/SourcesPanel.ts +26 -25
  104. package/front_end/panels/sources/SourcesView.ts +5 -6
  105. package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
  106. package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
  107. package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
  108. package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
  109. package/front_end/panels/sources/components/HeadersView.ts +2 -2
  110. package/front_end/panels/sources/sources-meta.ts +164 -71
  111. package/front_end/panels/sources/sources.ts +0 -2
  112. package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
  113. package/front_end/panels/timeline/TimelineLoader.ts +72 -42
  114. package/front_end/panels/timeline/TimelinePanel.ts +29 -4
  115. package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
  116. package/front_end/third_party/chromium/README.chromium +1 -1
  117. package/front_end/third_party/puppeteer/README.chromium +2 -2
  118. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
  119. package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
  120. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
  121. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
  122. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
  123. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
  124. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
  125. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
  126. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
  127. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
  128. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
  129. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
  130. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
  131. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
  132. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
  133. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
  134. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
  135. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
  136. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
  137. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
  138. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
  139. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
  140. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
  141. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
  142. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
  143. package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
  144. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
  145. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
  146. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
  147. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
  148. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
  149. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
  150. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
  151. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
  152. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
  153. package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
  154. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
  155. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
  156. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
  157. package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
  158. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
  159. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
  160. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
  161. package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
  162. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
  163. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
  164. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
  165. package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
  166. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
  167. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
  168. package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
  169. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
  170. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
  171. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
  172. package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
  173. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
  174. package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
  175. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
  176. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
  177. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
  178. package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
  179. package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
  180. package/front_end/third_party/puppeteer/package/package.json +5 -5
  181. package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
  182. package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
  183. package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
  184. package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
  185. package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
  186. package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
  187. package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
  188. package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
  189. package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
  190. package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
  191. package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
  192. package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
  193. package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
  194. package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
  195. package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
  196. package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
  197. package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
  198. package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
  199. package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
  200. package/front_end/ui/legacy/Dialog.ts +103 -4
  201. package/front_end/ui/legacy/InspectorView.ts +1 -5
  202. package/front_end/ui/legacy/PopoverHelper.ts +5 -5
  203. package/front_end/ui/legacy/TabbedPane.ts +7 -2
  204. package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
  205. package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
  206. package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
  207. package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
  208. package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
  209. package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
  210. package/package.json +1 -1
  211. package/front_end/panels/sources/AiWarningInfobarPlugin.ts +0 -78
@@ -24,6 +24,11 @@ import {
24
24
  type AddScreenParams,
25
25
  type WindowBounds,
26
26
  type WindowId,
27
+ type InstallPWAOptions,
28
+ type UninstallPWAOptions,
29
+ type LaunchPWAOptions,
30
+ type GetPWAStateOptions,
31
+ type PWAState,
27
32
  } from '../api/Browser.js';
28
33
  import {BrowserContextEvent} from '../api/BrowserContext.js';
29
34
  import {CDPSessionEvent} from '../api/CDPSession.js';
@@ -523,6 +528,67 @@ export class CdpBrowser extends BrowserBase {
523
528
  this.#extensions.delete(id);
524
529
  }
525
530
 
531
+ override async installPWA(options: InstallPWAOptions): Promise<string> {
532
+ await this.#connection.send('PWA.install', {
533
+ manifestId: options.manifestId,
534
+ installUrlOrBundleUrl: options.installUrlOrBundleUrl,
535
+ });
536
+ if (options.displayMode) {
537
+ await this.#connection.send('PWA.changeAppUserSettings', {
538
+ manifestId: options.manifestId,
539
+ displayMode: options.displayMode,
540
+ });
541
+ }
542
+ return options.manifestId;
543
+ }
544
+
545
+ override async uninstallPWA(options: UninstallPWAOptions): Promise<void> {
546
+ await this.#connection.send('PWA.uninstall', {
547
+ manifestId: options.manifestId,
548
+ });
549
+ }
550
+
551
+ override async launchPWA(options: LaunchPWAOptions): Promise<Page> {
552
+ // `PWA.launch` resolves with the id of the launched *tab* target (see the
553
+ // CDP `PWA.LaunchResponse` docs). Tab targets sit above page targets in the
554
+ // target hierarchy and are not exposed through `browser.targets()`, so the
555
+ // returned id can't be awaited directly.
556
+ const {targetId: tabTargetId} = await this.#connection.send('PWA.launch', {
557
+ manifestId: options.manifestId,
558
+ url: options.url,
559
+ });
560
+ const target = (await this.waitForTarget(
561
+ candidate => {
562
+ const tab = this.#targetManager.getAvailableTargets().get(tabTargetId);
563
+ if (tab?.type() !== 'tab') {
564
+ return false;
565
+ }
566
+ for (const child of tab._childTargets()) {
567
+ if (child === candidate) {
568
+ return true;
569
+ }
570
+ }
571
+ return false;
572
+ },
573
+ {timeout: options.timeout},
574
+ )) as CdpTarget;
575
+ const page = await target.page();
576
+ if (!page) {
577
+ throw new Error(
578
+ `Failed to create a page for the launched PWA (manifestId = ${options.manifestId})`,
579
+ );
580
+ }
581
+ return page;
582
+ }
583
+
584
+ override async getPWAState(options: GetPWAStateOptions): Promise<PWAState> {
585
+ const {badgeCount, fileHandlers} = await this.#connection.send(
586
+ 'PWA.getOsAppState',
587
+ {manifestId: options.manifestId},
588
+ );
589
+ return {badgeCount, fileHandlers};
590
+ }
591
+
526
592
  override async screens(): Promise<ScreenInfo[]> {
527
593
  const {screenInfos} = await this.#connection.send(
528
594
  'Emulation.getScreenInfos',
@@ -181,16 +181,10 @@ export class EventEmitter<
181
181
  return this;
182
182
  }
183
183
 
184
- /**
185
- * @internal
186
- */
187
184
  [disposeSymbol](): void {
188
185
  return void this[asyncDisposeSymbol]().catch(debugCatchError);
189
186
  }
190
187
 
191
- /**
192
- * @internal
193
- */
194
188
  async [asyncDisposeSymbol](): Promise<void> {
195
189
  for (const [type, handlers] of this.#handlers) {
196
190
  for (const handler of handlers) {
@@ -5,4 +5,4 @@
5
5
  *
6
6
  * @internal
7
7
  */
8
- export const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t,o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var de=/[-\\w\\P{ASCII}*]/u,U=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(U||{}),H=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;\n";
8
+ export const source = "\"use strict\";var N=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var Y=Object.getOwnPropertyNames;var G=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var r in e)N(t,r,{get:e[r],enumerable:!0})},J=(t,e,r,o)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let n of Y(e))!G.call(t,n)&&n!==r&&N(t,n,{get:()=>e[n],enumerable:!(o=B(e,n))||o.enumerable});return t};var z=t=>J(N({},\"__esModule\",{value:!0}),t);var ye={};l(ye,{default:()=>pe});module.exports=z(ye);var b=class extends Error{constructor(e,r){super(e,r),this.name=this.constructor.name}get[Symbol.toStringTag](){return this.constructor.name}},p=class extends b{};var c=class t{static create(e){return new t(e)}static async race(e){let r=new Set;try{let o=e.map(n=>n instanceof t?(n.#n&&r.add(n),n.valueOrThrow()):n);return await Promise.race(o)}finally{for(let o of r)o.reject(new Error(\"Timeout cleared\"))}}#e=!1;#r=!1;#o;#t;#a=new Promise(e=>{this.#t=e});#n;#i;constructor(e){e&&e.timeout>0&&(this.#i=new p(e.message),this.#n=setTimeout(()=>{this.reject(this.#i)},e.timeout))}#l(e){clearTimeout(this.#n),this.#o=e,this.#t()}resolve(e){this.#r||this.#e||(this.#e=!0,this.#l(e))}reject(e){this.#r||this.#e||(this.#r=!0,this.#l(e))}resolved(){return this.#e}finished(){return this.#e||this.#r}value(){return this.#o}#s;valueOrThrow(){return this.#s||(this.#s=(async()=>{if(await this.#a,this.#r)throw this.#o;return this.#o})()),this.#s}};var W=new Map,j=t=>{let e=W.get(t);return e||(e=new Function(`return ${t}`)(),W.set(t,e),e)};var v={};l(v,{ariaQuerySelector:()=>K,ariaQuerySelectorAll:()=>x});var K=(t,e)=>globalThis.__ariaQuerySelector(t,e),x=async function*(t,e){yield*await globalThis.__ariaQuerySelectorAll(t,e)};var E={};l(E,{cssQuerySelector:()=>Z,cssQuerySelectorAll:()=>ee});var Z=(t,e)=>t.querySelector(e),ee=function(t,e){return t.querySelectorAll(e)};var A={};l(A,{CustomQuerySelectorRegistry:()=>y,customQuerySelectors:()=>P});var y=class{#e=new Map;register(e,r){if(!r.queryOne&&r.queryAll){let o=r.queryAll;r.queryOne=(n,i)=>{for(let s of o(n,i))return s;return null}}else if(r.queryOne&&!r.queryAll){let o=r.queryOne;r.queryAll=(n,i)=>{let s=o(n,i);return s?[s]:[]}}else if(!r.queryOne||!r.queryAll)throw new Error(\"At least one query method must be defined.\");this.#e.set(e,{querySelector:r.queryOne,querySelectorAll:r.queryAll})}unregister(e){this.#e.delete(e)}get(e){return this.#e.get(e)}clear(){this.#e.clear()}},P=new y;var R={};l(R,{pierceQuerySelector:()=>te,pierceQuerySelectorAll:()=>re});var te=(t,e)=>{let r=null,o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&!r&&s.matches(e)&&(r=s)}while(!r&&i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r},re=(t,e)=>{let r=[],o=n=>{let i=document.createTreeWalker(n,NodeFilter.SHOW_ELEMENT);do{let s=i.currentNode;s.shadowRoot&&o(s.shadowRoot),!(s instanceof ShadowRoot)&&s!==n&&s.matches(e)&&r.push(s)}while(i.nextNode())};return t instanceof Document&&(t=t.documentElement),o(t),r};var u=(t,e)=>{if(!t)throw new Error(e)};var w=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=new MutationObserver(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())}),this.#o.observe(this.#r,{childList:!0,subtree:!0,attributes:!0})}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(this.#o.disconnect(),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}},T=class{#e;#r;constructor(e){this.#e=e}async start(){let e=this.#r=c.create(),r=await this.#e();if(r){e.resolve(r);return}let o=async()=>{if(e.finished())return;let n=await this.#e();if(!n){window.requestAnimationFrame(o);return}e.resolve(n),await this.stop()};window.requestAnimationFrame(o)}async stop(){u(this.#r,\"Polling never started.\"),this.#r.finished()||this.#r.reject(new Error(\"Polling stopped\"))}result(){return u(this.#r,\"Polling never started.\"),this.#r.valueOrThrow()}},S=class{#e;#r;#o;#t;constructor(e,r){this.#e=e,this.#r=r}async start(){let e=this.#t=c.create(),r=await this.#e();if(r){e.resolve(r);return}this.#o=setInterval(async()=>{let o=await this.#e();o&&(e.resolve(o),await this.stop())},this.#r)}async stop(){u(this.#t,\"Polling never started.\"),this.#t.finished()||this.#t.reject(new Error(\"Polling stopped\")),this.#o&&(clearInterval(this.#o),this.#o=void 0)}result(){return u(this.#t,\"Polling never started.\"),this.#t.valueOrThrow()}};var L={};l(L,{PCombinator:()=>U,pQuerySelector:()=>me,pQuerySelectorAll:()=>X});var a=class{static async*map(e,r){for await(let o of e)yield await r(o)}static async*flatMap(e,r){for await(let o of e)yield*r(o)}static async collect(e){let r=[];for await(let o of e)r.push(o);return r}static async first(e){for await(let r of e)return r}};var O={};l(O,{textQuerySelectorAll:()=>m});var oe=new Set([\"checkbox\",\"image\",\"radio\"]),ne=t=>t instanceof HTMLSelectElement||t instanceof HTMLTextAreaElement||t instanceof HTMLInputElement&&!oe.has(t.type),se=new Set([\"SCRIPT\",\"STYLE\"]),f=t=>!se.has(t.nodeName)&&!document.head?.contains(t),C=new WeakMap,V=t=>{for(;t;)C.delete(t),t instanceof ShadowRoot?t=t.host:t=t.parentNode},F=new WeakSet,I,ie=()=>{let t=globalThis.MutationObserver;if(!t)throw new Error(\"MutationObserver is not available in this environment.\");return I||(I=new t(e=>{for(let r of e)V(r.target)})),I},d=t=>{let e=C.get(t);if(e||(e={full:\"\",immediate:[]},!f(t)))return e;let r=\"\";if(ne(t))e.full=t.value,e.immediate.push(t.value),t.addEventListener(\"input\",o=>{V(o.target)},{once:!0,capture:!0});else{for(let o=t.firstChild;o;o=o.nextSibling){if(o.nodeType===Node.TEXT_NODE){e.full+=o.nodeValue??\"\",r+=o.nodeValue??\"\";continue}r&&e.immediate.push(r),r=\"\",o.nodeType===Node.ELEMENT_NODE&&(e.full+=d(o).full)}r&&e.immediate.push(r),t instanceof Element&&t.shadowRoot&&(e.full+=d(t.shadowRoot).full),F.has(t)||(ie().observe(t,{childList:!0,characterData:!0,subtree:!0}),F.add(t))}return C.set(t,e),e};var m=function*(t,e){let r=!1;for(let o of t.childNodes)if(o instanceof Element&&f(o)){let n;o.shadowRoot?n=m(o.shadowRoot,e):n=m(o,e);for(let i of n)yield i,r=!0}r||t instanceof Element&&f(t)&&d(t).full.includes(e)&&(yield t)};var M={};l(M,{checkVisibility:()=>ae,pierce:()=>g,pierceAll:()=>k});var le=[\"hidden\",\"collapse\"],ae=(t,e)=>{if(!t)return e===!1;if(e===void 0)return t;let r=t.nodeType===Node.TEXT_NODE?t.parentElement:t;if(!r)return e===!1;let o=window.getComputedStyle(r),n=o&&!le.includes(o.visibility)&&!ce(r);return e===n?t:!1};function ce(t){let e=t.getBoundingClientRect();return e.width===0||e.height===0}var ue=t=>\"shadowRoot\"in t&&t.shadowRoot instanceof ShadowRoot;function*g(t){ue(t)?yield t.shadowRoot:yield t}function*k(t){t=g(t).next().value,yield t;let e=[document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT)];for(let r of e){let o;for(;o=r.nextNode();)o.shadowRoot&&(yield o.shadowRoot,e.push(document.createTreeWalker(o.shadowRoot,NodeFilter.SHOW_ELEMENT)))}}var D={};l(D,{xpathQuerySelectorAll:()=>q});var q=function*(t,e,r=-1){let n=(t.ownerDocument||document).evaluate(e,t,null,XPathResult.ORDERED_NODE_ITERATOR_TYPE),i=[],s;for(;(s=n.iterateNext())&&(i.push(s),!(r&&i.length===r)););for(let h=0;h<i.length;h++)s=i[h],yield s,i[h]=null};var de=/[-\\w\\P{ASCII}*]/u,U=(r=>(r.Descendent=\">>>\",r.Child=\">>>>\",r))(U||{}),H=t=>\"querySelectorAll\"in t,Q=class{#e;#r=[];#o=void 0;elements;constructor(e,r){this.elements=[e],this.#e=r,this.#t()}async run(){for(typeof this.#o==\"string\"&&this.#o.trimStart()===\":scope\"&&this.#t();this.#o!==void 0;this.#t()){let e=this.#o;typeof e==\"string\"?e[0]&&de.test(e[0])?this.elements=a.flatMap(this.elements,async function*(r){H(r)&&(yield*r.querySelectorAll(e))}):this.elements=a.flatMap(this.elements,async function*(r){if(!r.parentElement){if(!H(r))return;yield*r.querySelectorAll(e);return}let o=0;for(let n of r.parentElement.children)if(++o,n===r)break;yield*r.parentElement.querySelectorAll(`:scope>:nth-child(${o})${e}`)}):this.elements=a.flatMap(this.elements,async function*(r){switch(e.name){case\"text\":yield*m(r,e.value);break;case\"xpath\":yield*q(r,e.value);break;case\"aria\":yield*x(r,e.value);break;default:let o=P.get(e.name);if(!o)throw new Error(`Unknown selector type: ${e.name}`);yield*o.querySelectorAll(r,e.value)}})}}#t(){if(this.#r.length!==0){this.#o=this.#r.shift();return}if(this.#e.length===0){this.#o=void 0;return}let e=this.#e.shift();switch(e){case\">>>>\":{this.elements=a.flatMap(this.elements,g),this.#t();break}case\">>>\":{this.elements=a.flatMap(this.elements,k),this.#t();break}default:this.#r=e,this.#t();break}}},_=class{#e=new WeakMap;calculate(e,r=[]){if(e===null)return r;e instanceof ShadowRoot&&(e=e.host);let o=this.#e.get(e);if(o)return[...o,...r];let n=0;for(let s=e.previousSibling;s;s=s.previousSibling)++n;let i=this.calculate(e.parentNode,[n]);return this.#e.set(e,i),[...i,...r]}},$=(t,e)=>{if(t.length+e.length===0)return 0;let[r=-1,...o]=t,[n=-1,...i]=e;return r===n?$(o,i):r<n?-1:1},fe=async function*(t){let e=new Set;for await(let o of t)e.add(o);let r=new _;yield*[...e.values()].map(o=>[o,r.calculate(o)]).sort(([,o],[,n])=>$(o,n)).map(([o])=>o)},X=function(t,e){let r=JSON.parse(e);if(r.some(o=>{let n=0;return o.some(i=>(typeof i==\"string\"?++n:n=0,n>1))}))throw new Error(\"Multiple deep combinators found in sequence.\");return fe(a.flatMap(r,o=>{let n=new Q(t,o);return n.run(),n.elements}))},me=async function(t,e){for await(let r of X(t,e))return r;return null};var he=Object.freeze({...v,...A,...R,...L,...O,...M,...D,...E,Deferred:c,createFunction:j,createTextContent:d,IntervalPoller:S,isSuitableNodeForTextMatching:f,MutationPoller:w,RAFPoller:T}),pe=he;\n";
@@ -20,7 +20,10 @@ export const checkVisibility = (
20
20
  }
21
21
  const element = (
22
22
  node.nodeType === Node.TEXT_NODE ? node.parentElement : node
23
- ) as Element;
23
+ ) as Element | null;
24
+ if (!element) {
25
+ return visible === false;
26
+ }
24
27
 
25
28
  const style = window.getComputedStyle(element);
26
29
  const isVisible =
@@ -375,9 +375,6 @@ export class ScreenRecorder extends PassThrough {
375
375
  });
376
376
  }
377
377
 
378
- /**
379
- * @internal
380
- */
381
378
  override async [asyncDisposeSymbol](): Promise<void> {
382
379
  await this.stop();
383
380
  await super[asyncDisposeSymbol]();
@@ -8,7 +8,7 @@
8
8
  * @internal
9
9
  */
10
10
  export const PUPPETEER_REVISIONS = Object.freeze({
11
- chrome: '150.0.7871.24',
12
- 'chrome-headless-shell': '150.0.7871.24',
13
- firefox: 'stable_152.0.4',
11
+ chrome: '151.0.7922.47',
12
+ 'chrome-headless-shell': '151.0.7922.47',
13
+ firefox: 'stable_152.0.5',
14
14
  });
@@ -32,12 +32,12 @@ declare global {
32
32
  (Symbol as any).asyncDispose ??= Symbol('asyncDispose');
33
33
 
34
34
  /**
35
- * @internal
35
+ * @public
36
36
  */
37
37
  export const disposeSymbol: typeof Symbol.dispose = Symbol.dispose;
38
38
 
39
39
  /**
40
- * @internal
40
+ * @public
41
41
  */
42
42
  export const asyncDisposeSymbol: typeof Symbol.asyncDispose =
43
43
  Symbol.asyncDispose;
@@ -6,5 +6,5 @@
6
6
 
7
7
  // If moved update release-please config
8
8
  // x-release-please-start-version
9
- export const packageVersion = '25.3.0';
9
+ export const packageVersion = '25.4.0';
10
10
  // x-release-please-end
@@ -56,7 +56,8 @@ export interface AiCodeCompletionConfig {
56
56
  onSuggestionAccepted: (citations: Host.AidaClient.Citation[]) => void;
57
57
  onRequestTriggered: () => void;
58
58
  onResponseReceived: () => void;
59
- panel: AiCodeCompletion.AiCodeCompletion.ContextFlavor;
59
+ disclaimerTooltipId: string;
60
+ disclaimerTextVariant: PanelCommon.DisclaimerTextVariant;
60
61
  }
61
62
 
62
63
  export const DELAY_BEFORE_SHOWING_RESPONSE_MS = 500;
@@ -103,7 +104,8 @@ export class AiCodeCompletionProvider {
103
104
  onSuggestionAccepted: this.#aiCodeCompletionConfig.onSuggestionAccepted.bind(this),
104
105
  onRequestTriggered: this.#aiCodeCompletionConfig.onRequestTriggered.bind(this),
105
106
  onResponseReceived: this.#aiCodeCompletionConfig.onResponseReceived.bind(this),
106
- panel: this.#aiCodeCompletionConfig.panel,
107
+ disclaimerTooltipId: this.#aiCodeCompletionConfig.disclaimerTooltipId,
108
+ disclaimerTextVariant: this.#aiCodeCompletionConfig.disclaimerTextVariant,
107
109
  };
108
110
  this.#aiCodeGenerationProvider = AiCodeGenerationProvider.createInstance(this.#aiCodeGenerationConfig);
109
111
  }
@@ -143,7 +145,7 @@ export class AiCodeCompletionProvider {
143
145
  if (!this.#aiCodeCompletionSetting.get() && !this.#aiCodeCompletionTeaserDismissedSetting.get()) {
144
146
  this.#teaser = new PanelCommon.AiCodeCompletionTeaser({
145
147
  onDetach: () => this.#detachTeaser.bind(this),
146
- panel: this.#aiCodeCompletionConfig?.panel,
148
+ disclaimerTextVariant: this.#aiCodeCompletionConfig?.disclaimerTextVariant,
147
149
  });
148
150
  this.#editor.editor.dispatch(
149
151
  {effects: this.#teaserCompartment.reconfigure([aiCodeCompletionTeaserExtension(this.#teaser)])});
@@ -175,7 +177,7 @@ export class AiCodeCompletionProvider {
175
177
  aidaClient: this.#aidaClient,
176
178
  serverSideLoggingEnabled: !Root.Runtime.hostConfig.aidaAvailability?.disallowLogging,
177
179
  },
178
- this.#aiCodeCompletionConfig.panel, undefined, this.#aiCodeCompletionConfig.completionContext.stopSequences);
180
+ undefined, this.#aiCodeCompletionConfig.completionContext.stopSequences);
179
181
  this.#aiCodeCompletionConfig.onFeatureEnabled();
180
182
  }
181
183
 
@@ -332,10 +334,10 @@ export class AiCodeCompletionProvider {
332
334
  const startTime = performance.now();
333
335
  this.#aiCodeCompletionConfig?.onRequestTriggered();
334
336
  // Registering AiCodeCompletionRequestTriggered metric even if the request is served from cache
335
- const panel = this.#aiCodeCompletionConfig?.panel;
336
- if (panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE) {
337
+ const disclaimerTextVariant = this.#aiCodeCompletionConfig?.disclaimerTextVariant;
338
+ if (disclaimerTextVariant === 'console') {
337
339
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromConsole);
338
- } else if (panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.SOURCES) {
340
+ } else if (disclaimerTextVariant === 'sources') {
339
341
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromSources);
340
342
  }
341
343
 
@@ -6,7 +6,6 @@ import * as Common from '../../../core/common/common.js';
6
6
  import * as Host from '../../../core/host/host.js';
7
7
  import * as i18n from '../../../core/i18n/i18n.js';
8
8
  import * as Root from '../../../core/root/root.js';
9
- import * as AiCodeCompletion from '../../../models/ai_code_completion/ai_code_completion.js';
10
9
  import * as AiCodeGeneration from '../../../models/ai_code_generation/ai_code_generation.js';
11
10
  import * as PanelCommon from '../../../panels/common/common.js';
12
11
  import * as CodeMirror from '../../../third_party/codemirror.next/codemirror.next.js';
@@ -47,7 +46,8 @@ export interface AiCodeGenerationConfig {
47
46
  onSuggestionAccepted: (citations: Host.AidaClient.Citation[]) => void;
48
47
  onRequestTriggered: () => void;
49
48
  onResponseReceived: () => void;
50
- panel: AiCodeCompletion.AiCodeCompletion.ContextFlavor;
49
+ disclaimerTooltipId: string;
50
+ disclaimerTextVariant: PanelCommon.DisclaimerTextVariant;
51
51
  }
52
52
 
53
53
  export class AiCodeGenerationProvider {
@@ -84,9 +84,8 @@ export class AiCodeGenerationProvider {
84
84
  throw new Error('AI code generation feature is not available.');
85
85
  }
86
86
  this.#generationTeaser = new PanelCommon.AiCodeGenerationTeaser.AiCodeGenerationTeaser();
87
- this.#generationTeaser.disclaimerTooltipId =
88
- aiCodeGenerationConfig.panel + '-ai-code-generation-disclaimer-tooltip';
89
- this.#generationTeaser.panel = aiCodeGenerationConfig.panel;
87
+ this.#generationTeaser.disclaimerTooltipId = aiCodeGenerationConfig.disclaimerTooltipId;
88
+ this.#generationTeaser.disclaimerTextVariant = aiCodeGenerationConfig.disclaimerTextVariant;
90
89
  this.#aiCodeGenerationConfig = aiCodeGenerationConfig;
91
90
  }
92
91
 
@@ -232,10 +231,10 @@ export class AiCodeGenerationProvider {
232
231
  }
233
232
 
234
233
  void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered');
235
- if (this.#aiCodeGenerationConfig?.panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.CONSOLE) {
234
+ if (this.#aiCodeGenerationConfig?.disclaimerTextVariant === 'console') {
236
235
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromConsole);
237
236
  void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-console');
238
- } else if (this.#aiCodeGenerationConfig?.panel === AiCodeCompletion.AiCodeCompletion.ContextFlavor.SOURCES) {
237
+ } else if (this.#aiCodeGenerationConfig?.disclaimerTextVariant === 'sources') {
239
238
  Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeGenerationRequestTriggeredFromSources);
240
239
  void VisualLogging.logKeyDown(event.currentTarget, event, 'ai-code-generation.triggered-from-sources');
241
240
  }
@@ -358,7 +357,7 @@ export class AiCodeGenerationProvider {
358
357
  this.#dismissTeaserAndSuggestion();
359
358
  }
360
359
 
361
- if (!generationResponse || generationResponse.samples.length === 0) {
360
+ if (generationResponse.samples.length === 0) {
362
361
  this.#aiCodeGenerationConfig.onResponseReceived();
363
362
  return;
364
363
  }
@@ -6,16 +6,17 @@
6
6
 
7
7
  import * as Common from '../../core/common/common.js';
8
8
  import * as i18n from '../../core/i18n/i18n.js';
9
+ import {type LitTemplate, nothing, render} from '../../ui/lit/lit.js';
9
10
  import * as Buttons from '../components/buttons/buttons.js';
10
11
  import * as VisualLogging from '../visual_logging/visual_logging.js';
11
12
 
12
13
  import * as ARIAUtils from './ARIAUtils.js';
13
14
  import dialogStyles from './dialog.css.js';
14
- import {GlassPane, PointerEventsBehavior} from './GlassPane.js';
15
+ import {GlassPane, PointerEventsBehavior, SizeBehavior} from './GlassPane.js';
15
16
  import {InspectorView} from './InspectorView.js';
16
17
  import {KeyboardShortcut, Keys} from './KeyboardShortcut.js';
17
18
  import type {SplitWidget} from './SplitWidget.js';
18
- import {WidgetFocusRestorer} from './Widget.js';
19
+ import {Widget, WidgetFocusRestorer} from './Widget.js';
19
20
 
20
21
  const UIStrings = {
21
22
  /**
@@ -41,8 +42,7 @@ export class Dialog extends Common.ObjectWrapper.eventMixin<EventTypes, typeof G
41
42
  this.contentElement.tabIndex = 0;
42
43
  this.contentElement.addEventListener('focus', () => this.widget().focus(), false);
43
44
  if (jslogContext) {
44
- this.contentElement.setAttribute(
45
- 'jslog', `${VisualLogging.dialog(jslogContext).track({resize: true, keydown: 'Escape'})}`);
45
+ this.jslogContext = jslogContext;
46
46
  }
47
47
  this.setPointerEventsBehavior(PointerEventsBehavior.BLOCKED_BY_GLASS_PANE);
48
48
  this.setOutsideClickCallback(event => {
@@ -59,6 +59,15 @@ export class Dialog extends Common.ObjectWrapper.eventMixin<EventTypes, typeof G
59
59
  this.targetDocumentKeyDownHandler = this.onKeyDown.bind(this);
60
60
  }
61
61
 
62
+ set jslogContext(jslogContext: string) {
63
+ if (jslogContext) {
64
+ this.contentElement.setAttribute(
65
+ 'jslog', `${VisualLogging.dialog(jslogContext).track({resize: true, keydown: 'Escape'})}`);
66
+ } else {
67
+ this.contentElement.removeAttribute('jslog');
68
+ }
69
+ }
70
+
62
71
  static hasInstance(): boolean {
63
72
  return Dialog.dialogs.length > 0;
64
73
  }
@@ -243,3 +252,93 @@ export const enum OutsideTabIndexBehavior {
243
252
  PRESERVE_MAIN_VIEW_TAB_INDEX = 'PreserveMainViewTabIndex',
244
253
  PRESERVE_TAB_INDEX = 'PreserveTabIndex',
245
254
  }
255
+
256
+ export class DialogWidget extends Common.ObjectWrapper.eventMixin<EventTypes, typeof Widget>(Widget) {
257
+ #open = false;
258
+ #jslogContext = '';
259
+ #dialogStack = false;
260
+ #content: LitTemplate = nothing;
261
+ readonly #dialog = new Dialog();
262
+
263
+ constructor(element?: HTMLElement) {
264
+ super(element);
265
+ this.#dialog.setSizeBehavior(SizeBehavior.MEASURE_CONTENT);
266
+ this.#dialog.contentElement.tabIndex = -1;
267
+ this.#dialog.addEventListener(Events.HIDDEN, () => {
268
+ this.#open = false;
269
+ this.dispatchEventToListeners(Events.HIDDEN);
270
+ });
271
+ }
272
+
273
+ get open(): boolean {
274
+ return this.#open;
275
+ }
276
+
277
+ set open(open: boolean) {
278
+ if (this.#open !== open) {
279
+ this.#open = open;
280
+ this.requestUpdate();
281
+ }
282
+ }
283
+
284
+ get dialogStack(): boolean {
285
+ return this.#dialogStack;
286
+ }
287
+
288
+ set dialogStack(dialogStack: boolean) {
289
+ if (this.#dialogStack !== dialogStack) {
290
+ this.#dialogStack = dialogStack;
291
+ this.requestUpdate();
292
+ }
293
+ }
294
+ get content(): LitTemplate {
295
+ return this.#content;
296
+ }
297
+
298
+ set content(content: LitTemplate) {
299
+ this.#content = content;
300
+ this.requestUpdate();
301
+ }
302
+
303
+ get jslogContext(): string {
304
+ return this.#jslogContext;
305
+ }
306
+
307
+ set jslogContext(jslogContext: string) {
308
+ if (this.#jslogContext !== jslogContext) {
309
+ this.#jslogContext = jslogContext;
310
+ this.#dialog.jslogContext = jslogContext;
311
+ this.requestUpdate();
312
+ }
313
+ }
314
+
315
+ override wasShown(): void {
316
+ super.wasShown();
317
+ this.requestUpdate();
318
+ }
319
+
320
+ override willHide(): void {
321
+ super.willHide();
322
+ this.#dialog.hide();
323
+ }
324
+
325
+ override onDetach(): void {
326
+ super.onDetach();
327
+ this.#dialog.hide();
328
+ }
329
+
330
+ override performUpdate(): void {
331
+ if (this.open) {
332
+ // eslint-disable-next-line @devtools/no-lit-render-outside-of-view
333
+ render(this.#content ?? nothing, this.#dialog.contentElement);
334
+ if (!this.#dialog.isShowing()) {
335
+ this.#dialog.show(this.contentElement.ownerDocument, this.#dialogStack);
336
+ this.#dialog.contentElement.focus();
337
+ } else {
338
+ this.#dialog.positionContent();
339
+ }
340
+ } else if (this.#dialog.isShowing()) {
341
+ this.#dialog.hide();
342
+ }
343
+ }
344
+ }
@@ -316,10 +316,6 @@ export class InspectorView extends VBox implements ViewLocationResolver {
316
316
  }
317
317
 
318
318
  #applyDrawerOrientationForDockSide(): void {
319
- if (!this.drawerVisible()) {
320
- this.applyDrawerOrientationForDockSideForTest();
321
- return;
322
- }
323
319
  const newOrientation = this.#getOrientationForDockMode();
324
320
  this.#applyDrawerOrientation(newOrientation);
325
321
  this.applyDrawerOrientationForDockSideForTest();
@@ -504,6 +500,7 @@ export class InspectorView extends VBox implements ViewLocationResolver {
504
500
  }
505
501
  return;
506
502
  }
503
+ this.#applyDrawerOrientationForDockSide();
507
504
  this.#drawerView.show(hasTargetDrawer);
508
505
  if (focus) {
509
506
  this.focusRestorer = new WidgetFocusRestorer(this.drawerTabbedPane);
@@ -512,7 +509,6 @@ export class InspectorView extends VBox implements ViewLocationResolver {
512
509
  this.focusRestorer = null;
513
510
  this.#mainPanelAtDrawerFocus = null;
514
511
  }
515
- this.#applyDrawerOrientationForDockSide();
516
512
  ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.drawerShown));
517
513
  }
518
514
 
@@ -27,7 +27,7 @@ export class PopoverHelper {
27
27
  private readonly boundMouseDown: (event: MouseEvent) => void;
28
28
  private readonly boundMouseMove: (ev: MouseEvent) => void;
29
29
  private readonly boundMouseOut: (event: MouseEvent) => void;
30
- private readonly boundScrollEnd: (event: Event) => void;
30
+ private readonly boundScroll: (event: Event) => void;
31
31
  private readonly boundKeyUp: (ev: KeyboardEvent) => void;
32
32
  jslogContext?: string;
33
33
  constructor(
@@ -46,7 +46,7 @@ export class PopoverHelper {
46
46
  this.boundMouseDown = this.mouseDown.bind(this);
47
47
  this.boundMouseMove = this.mouseMove.bind(this);
48
48
  this.boundMouseOut = this.mouseOut.bind(this);
49
- this.boundScrollEnd = this.scrollEnd.bind(this);
49
+ this.boundScroll = this.scroll.bind(this);
50
50
  this.boundKeyUp = this.keyUp.bind(this);
51
51
  this.container.addEventListener('mousedown', this.boundMouseDown, false);
52
52
  this.container.addEventListener('mousemove', this.boundMouseMove, false);
@@ -68,7 +68,7 @@ export class PopoverHelper {
68
68
  return this.scheduledRequest ? this.scheduledRequest.box.contains(event.clientX, event.clientY) : false;
69
69
  }
70
70
 
71
- private scrollEnd(_event: Event): void {
71
+ private scroll(_event: Event): void {
72
72
  this.hidePopover();
73
73
  }
74
74
 
@@ -226,7 +226,7 @@ export class PopoverHelper {
226
226
  popover.setContentAnchorBox(request.box);
227
227
  popover.show(document);
228
228
 
229
- this.container.addEventListener('scrollend', this.boundScrollEnd, true);
229
+ this.container.addEventListener('scroll', this.boundScroll, true);
230
230
 
231
231
  this.hidePopoverCallback = () => {
232
232
  if (request.hide) {
@@ -234,7 +234,7 @@ export class PopoverHelper {
234
234
  }
235
235
  popover.hide();
236
236
  popoverHelperInstance = null;
237
- this.container.removeEventListener('scrollend', this.boundScrollEnd, true);
237
+ this.container.removeEventListener('scroll', this.boundScroll, true);
238
238
  };
239
239
  });
240
240
  }
@@ -506,6 +506,7 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
506
506
  }
507
507
 
508
508
  protected clearMeasuredWidths(): void {
509
+ delete this.measuredDropDownButtonWidth;
509
510
  for (let i = 0; i < this.#tabs.length; ++i) {
510
511
  delete this.#tabs[i].measuredWidth;
511
512
  }
@@ -842,7 +843,8 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
842
843
  private maybeShowDropDown(hasMoreTabs: boolean): void {
843
844
  // The legacy chevron is suppressed when a trailing-button slot is
844
845
  // populated; the slotted element takes its place.
845
- const shouldShow = this.#trailingSlot.assignedElements().length === 0 && hasMoreTabs;
846
+ const shouldShow = this.#trailingSlot.assignedElements().length === 0 && hasMoreTabs &&
847
+ this.totalWidth() >= (this.measuredDropDownButtonWidth || 0);
846
848
  if (shouldShow && !this.dropDownButton.parentElement) {
847
849
  this.headerContentsElement.appendChild(this.dropDownButton);
848
850
  } else if (!shouldShow && this.dropDownButton.parentElement) {
@@ -942,7 +944,10 @@ export class TabbedPane extends Common.ObjectWrapper.eventMixin<EventTypes, type
942
944
  }
943
945
  this.dropDownButton.classList.add('measuring');
944
946
  this.headerContentsElement.appendChild(this.dropDownButton);
945
- this.measuredDropDownButtonWidth = this.dropDownButton.getBoundingClientRect().width;
947
+ const width = this.dropDownButton.getBoundingClientRect().width;
948
+ if (width > 0) {
949
+ this.measuredDropDownButtonWidth = width;
950
+ }
946
951
  this.headerContentsElement.removeChild(this.dropDownButton);
947
952
  this.dropDownButton.classList.remove('measuring');
948
953
  }