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.
- package/.agents/skills/devtools-ci/SKILL.md +65 -0
- package/.agents/skills/devtools-setting-migration/SKILL.md +290 -0
- package/.agents/skills/gerrit-cli/SKILL.md +59 -0
- package/.agents/skills/gerrit-cli/references/commands.md +93 -0
- package/.agents/skills/gerrit-cli/references/workflows.md +56 -0
- package/.agents/skills/gerrit-cli/scripts/gerrit_client_wrapper.py +47 -0
- package/.agents/skills/gerrit-cli/scripts/import_upstream.py +230 -0
- package/.agents/skills/ui-eng-vision-widget-promoter/SKILL.md +11 -4
- package/.agents/skills/ui-widgets/SKILL.md +25 -1
- package/docs/contributing/infrastructure.md +7 -1
- package/docs/ui_engineering.md +44 -1
- package/front_end/core/common/Settings.ts +11 -4
- package/front_end/core/host/AidaClient.ts +66 -47
- package/front_end/core/host/GcaClient.ts +4 -6
- package/front_end/core/host/ResourceLoader.ts +4 -2
- package/front_end/core/root/Runtime.ts +5 -5
- package/front_end/core/sdk/CSSModel.test.api.ts +102 -0
- package/front_end/core/sdk/CSSModel.ts +3 -2
- package/front_end/core/sdk/ConsoleModel.ts +3 -2
- package/front_end/core/sdk/DebuggerModel.ts +16 -7
- package/front_end/core/sdk/SDKSettings.ts +38 -0
- package/front_end/core/sdk/sdk-meta.ts +0 -120
- package/front_end/core/sdk/sdk.ts +2 -0
- package/front_end/entrypoints/main/MainImpl.ts +10 -3
- package/front_end/foundation/Universe.ts +7 -0
- package/front_end/generated/InspectorBackendCommands.ts +2 -2
- package/front_end/generated/protocol.ts +11 -3
- package/front_end/models/ai_assistance/AiAgent2.ts +1 -1
- package/front_end/models/ai_assistance/AiUtils.ts +67 -4
- package/front_end/models/ai_assistance/BuiltInAi.ts +11 -6
- package/front_end/models/ai_assistance/ChangeManager.ts +17 -1
- package/front_end/models/ai_assistance/StorageItem.ts +26 -5
- package/front_end/models/ai_code_completion/AiCodeCompletion.ts +2 -19
- package/front_end/models/ai_code_generation/AiCodeGeneration.ts +2 -3
- package/front_end/models/javascript_metadata/NativeFunctions.js +22 -9
- package/front_end/models/source_map_scopes/NamesResolver.ts +23 -17
- package/front_end/models/trace/handlers/RendererHandler.ts +20 -4
- package/front_end/models/trace/types/File.ts +1 -0
- package/front_end/models/workspace/UISourceCode.ts +0 -10
- package/front_end/panels/ai_assistance/AiAssistancePanel.ts +61 -182
- package/front_end/panels/ai_assistance/components/ChatInput.ts +25 -8
- package/front_end/panels/ai_assistance/components/ChatMessage.ts +13 -69
- package/front_end/panels/ai_assistance/components/ChatView.ts +14 -8
- package/front_end/panels/ai_assistance/components/chatMessage.css +2 -20
- package/front_end/panels/application/ApplicationPanelSidebar.ts +2 -2
- package/front_end/panels/application/ApplicationPanelTreeElement.ts +41 -3
- package/front_end/panels/application/ServiceWorkerUpdateCycleView.ts +131 -134
- package/front_end/panels/application/ServiceWorkersView.ts +8 -8
- package/front_end/panels/application/application.ts +2 -0
- package/front_end/panels/application/components/AdsView.ts +10 -6
- package/front_end/panels/application/preloading/PreloadingView.ts +53 -45
- package/front_end/panels/application/preloading/components/PreloadingDetailsReportView.ts +111 -119
- package/front_end/panels/application/preloading/components/preloadingDetailsReportView.css +22 -24
- package/front_end/panels/application/serviceWorkerUpdateCycleView.css +105 -102
- package/front_end/panels/common/AiCodeCompletionDisclaimer.ts +107 -96
- package/front_end/panels/common/AiCodeCompletionSummaryToolbar.ts +17 -19
- package/front_end/panels/common/AiCodeCompletionTeaser.ts +6 -6
- package/front_end/panels/common/AiCodeGenerationTeaser.ts +28 -26
- package/front_end/panels/common/common.ts +1 -1
- package/front_end/panels/console/ConsoleInsightTeaser.ts +6 -8
- package/front_end/panels/console/ConsoleView.ts +6 -4
- package/front_end/panels/console/ConsoleViewMessage.ts +1 -1
- package/front_end/panels/console/console-meta.ts +28 -0
- package/front_end/panels/elements/StylesAiCodeCompletionProvider.ts +1 -1
- package/front_end/panels/elements/StylesSidebarPane.ts +3 -2
- package/front_end/panels/emulation/DeviceModeToolbar.ts +2 -2
- package/front_end/panels/emulation/DeviceModeView.ts +63 -104
- package/front_end/panels/emulation/DeviceModeWrapper.ts +18 -4
- package/front_end/panels/explain/components/ConsoleInsight.ts +4 -6
- package/front_end/panels/explain/explain-meta.ts +7 -49
- package/front_end/panels/network/NetworkDataGridNode.ts +1 -1
- package/front_end/panels/network/NetworkLogView.ts +1 -0
- package/front_end/panels/network/OriginalResourceChunkView.ts +340 -0
- package/front_end/panels/network/ResourceChunkView.ts +72 -46
- package/front_end/panels/network/ResourceDirectSocketChunkView.ts +3 -2
- package/front_end/panels/network/ResourceWebSocketFrameView.ts +3 -3
- package/front_end/panels/network/originalResourceChunkView.css +49 -0
- package/front_end/panels/screencast/ScreencastView.ts +401 -260
- package/front_end/panels/screencast/screencastView.css +113 -100
- package/front_end/panels/sensors/LocationsSettingsTab.ts +329 -135
- package/front_end/panels/sensors/locationsSettingsTab.css +78 -4
- package/front_end/panels/settings/AISettingsTab.ts +17 -100
- package/front_end/panels/snippets/ScriptSnippetFileSystem.ts +2 -2
- package/front_end/panels/snippets/SnippetsQuickOpen.ts +4 -4
- package/front_end/panels/sources/AddSourceMapURLDialog.ts +3 -3
- package/front_end/panels/sources/AiCodeCompletionPlugin.ts +4 -3
- package/front_end/panels/sources/BreakpointEditDialog.ts +14 -14
- package/front_end/panels/sources/BreakpointsView.ts +14 -14
- package/front_end/panels/sources/CallStackSidebarPane.ts +6 -6
- package/front_end/panels/sources/CategorizedBreakpointL10n.ts +18 -18
- package/front_end/panels/sources/CoveragePlugin.ts +7 -7
- package/front_end/panels/sources/DebuggerPausedMessage.ts +23 -23
- package/front_end/panels/sources/DebuggerPlugin.ts +31 -31
- package/front_end/panels/sources/FilteredUISourceCodeListProvider.ts +2 -2
- package/front_end/panels/sources/GoToLineQuickOpen.ts +10 -10
- package/front_end/panels/sources/NavigatorView.ts +34 -27
- package/front_end/panels/sources/OutlineQuickOpen.ts +3 -3
- package/front_end/panels/sources/PersistenceActions.ts +9 -9
- package/front_end/panels/sources/ProfilePlugin.ts +1 -1
- package/front_end/panels/sources/ScopeChainSidebarPane.ts +5 -5
- package/front_end/panels/sources/SnippetsPlugin.ts +2 -2
- package/front_end/panels/sources/SourcesNavigator.ts +20 -18
- package/front_end/panels/sources/SourcesPanel.ts +26 -25
- package/front_end/panels/sources/SourcesView.ts +5 -6
- package/front_end/panels/sources/TabbedEditorContainer.ts +3 -3
- package/front_end/panels/sources/ThreadsSidebarPane.ts +1 -1
- package/front_end/panels/sources/UISourceCodeFrame.ts +0 -2
- package/front_end/panels/sources/WatchExpressionsSidebarPane.ts +7 -7
- package/front_end/panels/sources/components/HeadersView.ts +2 -2
- package/front_end/panels/sources/sources-meta.ts +164 -71
- package/front_end/panels/sources/sources.ts +0 -2
- package/front_end/panels/timeline/TimelineHistoryManager.ts +14 -3
- package/front_end/panels/timeline/TimelineLoader.ts +72 -42
- package/front_end/panels/timeline/TimelinePanel.ts +29 -4
- package/front_end/panels/timeline/timelineHistoryManager.css +4 -0
- package/front_end/third_party/chromium/README.chromium +1 -1
- package/front_end/third_party/puppeteer/README.chromium +2 -2
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/lib/es5-iife/puppeteer-core-browser.js +91 -38
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts +145 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/BrowserContext.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts +3 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js +8 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Dialog.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/JSHandle.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts +1 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js +0 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Page.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js +0 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/api/Realm.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/BidiOverCdp.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js +12 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js +4 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/bidi/HTTPResponse.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts +5 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js +49 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/cdp/Browser.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js +0 -6
- package/front_end/third_party/puppeteer/package/lib/puppeteer/common/EventEmitter.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/generated/injected.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js +3 -0
- package/front_end/third_party/puppeteer/package/lib/puppeteer/injected/util.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.d.ts.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js +0 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/node/ScreenRecorder.js.map +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.d.ts +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/revisions.js +3 -3
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.d.ts +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/disposable.js +2 -2
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.d.ts +1 -1
- package/front_end/third_party/puppeteer/package/lib/puppeteer/util/version.js +1 -1
- package/front_end/third_party/puppeteer/package/lib/types.d.ts +187 -1
- package/front_end/third_party/puppeteer/package/package.json +5 -5
- package/front_end/third_party/puppeteer/package/src/api/Browser.ts +155 -2
- package/front_end/third_party/puppeteer/package/src/api/BrowserContext.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Dialog.ts +10 -2
- package/front_end/third_party/puppeteer/package/src/api/JSHandle.ts +0 -2
- package/front_end/third_party/puppeteer/package/src/api/Page.ts +1 -3
- package/front_end/third_party/puppeteer/package/src/api/Realm.ts +0 -1
- package/front_end/third_party/puppeteer/package/src/bidi/BidiOverCdp.ts +4 -2
- package/front_end/third_party/puppeteer/package/src/bidi/Browser.ts +17 -0
- package/front_end/third_party/puppeteer/package/src/bidi/HTTPResponse.ts +5 -4
- package/front_end/third_party/puppeteer/package/src/cdp/Browser.ts +66 -0
- package/front_end/third_party/puppeteer/package/src/common/EventEmitter.ts +0 -6
- package/front_end/third_party/puppeteer/package/src/generated/injected.ts +1 -1
- package/front_end/third_party/puppeteer/package/src/injected/util.ts +4 -1
- package/front_end/third_party/puppeteer/package/src/node/ScreenRecorder.ts +0 -3
- package/front_end/third_party/puppeteer/package/src/revisions.ts +3 -3
- package/front_end/third_party/puppeteer/package/src/util/disposable.ts +2 -2
- package/front_end/third_party/puppeteer/package/src/util/version.ts +1 -1
- package/front_end/ui/components/text_editor/AiCodeCompletionProvider.ts +9 -7
- package/front_end/ui/components/text_editor/AiCodeGenerationProvider.ts +7 -8
- package/front_end/ui/legacy/Dialog.ts +103 -4
- package/front_end/ui/legacy/InspectorView.ts +1 -5
- package/front_end/ui/legacy/PopoverHelper.ts +5 -5
- package/front_end/ui/legacy/TabbedPane.ts +7 -2
- package/front_end/ui/legacy/components/cookie_table/CookiesTable.ts +40 -24
- package/front_end/ui/legacy/components/data_grid/DataGrid.ts +1 -0
- package/front_end/ui/legacy/components/data_grid/DataGridElement.ts +8 -4
- package/front_end/ui/legacy/components/perf_ui/FlameChart.ts +14 -7
- package/front_end/ui/legacy/components/quick_open/CommandMenu.ts +11 -1
- package/front_end/ui/visual_logging/KnownContextValues.ts +3 -0
- package/package.json +1 -1
- 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
|
|
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 =
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* @internal
|
|
9
9
|
*/
|
|
10
10
|
export const PUPPETEER_REVISIONS = Object.freeze({
|
|
11
|
-
chrome: '
|
|
12
|
-
'chrome-headless-shell': '
|
|
13
|
-
firefox: 'stable_152.0.
|
|
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
|
-
* @
|
|
35
|
+
* @public
|
|
36
36
|
*/
|
|
37
37
|
export const disposeSymbol: typeof Symbol.dispose = Symbol.dispose;
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
|
-
* @
|
|
40
|
+
* @public
|
|
41
41
|
*/
|
|
42
42
|
export const asyncDisposeSymbol: typeof Symbol.asyncDispose =
|
|
43
43
|
Symbol.asyncDispose;
|
|
@@ -56,7 +56,8 @@ export interface AiCodeCompletionConfig {
|
|
|
56
56
|
onSuggestionAccepted: (citations: Host.AidaClient.Citation[]) => void;
|
|
57
57
|
onRequestTriggered: () => void;
|
|
58
58
|
onResponseReceived: () => void;
|
|
59
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
336
|
-
if (
|
|
337
|
+
const disclaimerTextVariant = this.#aiCodeCompletionConfig?.disclaimerTextVariant;
|
|
338
|
+
if (disclaimerTextVariant === 'console') {
|
|
337
339
|
Host.userMetrics.actionTaken(Host.UserMetrics.Action.AiCodeCompletionRequestTriggeredFromConsole);
|
|
338
|
-
} else if (
|
|
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
|
-
|
|
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
|
-
|
|
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?.
|
|
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?.
|
|
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 (
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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('
|
|
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('
|
|
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
|
-
|
|
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
|
}
|