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
|
@@ -100,10 +100,6 @@ const UIStrings = {
|
|
|
100
100
|
* @description AI assistance UI text for deleting all local history entries.
|
|
101
101
|
*/
|
|
102
102
|
clearChatHistory: 'Clear local chats',
|
|
103
|
-
/**
|
|
104
|
-
* @description AI assistance UI text for the export conversation button.
|
|
105
|
-
*/
|
|
106
|
-
exportConversation: 'Export conversation',
|
|
107
103
|
/**
|
|
108
104
|
* @description AI assistance UI text explaining that the user has no past conversations.
|
|
109
105
|
*/
|
|
@@ -190,56 +186,6 @@ const UIStringsNotTranslate = {
|
|
|
190
186
|
* @description Placeholder text for the chat UI input when AIAgent2 is enabled.
|
|
191
187
|
*/
|
|
192
188
|
inputPlaceholderForV2: 'Ask a question (AIAgent2 enabled)',
|
|
193
|
-
/**
|
|
194
|
-
* @description Disclaimer text right after the chat input.
|
|
195
|
-
*/
|
|
196
|
-
inputDisclaimerForStyling:
|
|
197
|
-
'Chat messages and any data the inspected page can access via Web APIs are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
198
|
-
/**
|
|
199
|
-
* @description Disclaimer text right after the chat input.
|
|
200
|
-
*/
|
|
201
|
-
inputDisclaimerForStylingEnterpriseNoLogging:
|
|
202
|
-
'Chat messages and any data the inspected page can access via Web APIs are sent to Google. The content you submit and that is generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
203
|
-
/**
|
|
204
|
-
* @description Disclaimer text right after the chat input.
|
|
205
|
-
*/
|
|
206
|
-
inputDisclaimerForNetwork:
|
|
207
|
-
'Chat messages and the selected network request are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
208
|
-
/**
|
|
209
|
-
* @description Disclaimer text right after the chat input.
|
|
210
|
-
*/
|
|
211
|
-
inputDisclaimerForNetworkEnterpriseNoLogging:
|
|
212
|
-
'Chat messages and the selected network request are sent to Google. The content you submit and that is generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
213
|
-
/**
|
|
214
|
-
* @description Disclaimer text right after the chat input.
|
|
215
|
-
*/
|
|
216
|
-
inputDisclaimerForFile:
|
|
217
|
-
'Chat messages and the selected file are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
218
|
-
/**
|
|
219
|
-
* @description Disclaimer text right after the chat input.
|
|
220
|
-
*/
|
|
221
|
-
inputDisclaimerForFileEnterpriseNoLogging:
|
|
222
|
-
'Chat messages and the selected file are sent to Google. The content you submit and that is generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
223
|
-
/**
|
|
224
|
-
* @description Disclaimer text right after the chat input.
|
|
225
|
-
*/
|
|
226
|
-
inputDisclaimerForPerformance:
|
|
227
|
-
'Chat messages and trace data from your performance trace are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
228
|
-
/**
|
|
229
|
-
* @description Disclaimer text right after the chat input.
|
|
230
|
-
*/
|
|
231
|
-
inputDisclaimerForPerformanceEnterpriseNoLogging:
|
|
232
|
-
'Chat messages and data from your performance trace are sent to Google. The content you submit and that is generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
233
|
-
/**
|
|
234
|
-
* @description Disclaimer text right after the chat input.
|
|
235
|
-
*/
|
|
236
|
-
inputDisclaimerForNoContext:
|
|
237
|
-
'Chat messages, any data the inspected page can see using Web APIs, and the items you select such as files, network requests, and performance traces are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
238
|
-
/**
|
|
239
|
-
* @description Disclaimer text right after the chat input.
|
|
240
|
-
*/
|
|
241
|
-
inputDisclaimerForNoContextEnterpriseNoLogging:
|
|
242
|
-
'Chat messages, any data the inspected page can see using Web APIs, and the items you select such as files, network requests, and performance traces are sent to Google. This data will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
243
189
|
/**
|
|
244
190
|
* @description Placeholder text for the chat UI input.
|
|
245
191
|
*/
|
|
@@ -251,22 +197,12 @@ const UIStringsNotTranslate = {
|
|
|
251
197
|
/**
|
|
252
198
|
* @description Disclaimer text right after the chat input.
|
|
253
199
|
*/
|
|
254
|
-
|
|
255
|
-
'Chat messages and the selected Lighthouse report are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
256
|
-
/**
|
|
257
|
-
* @description Disclaimer text right after the chat input.
|
|
258
|
-
*/
|
|
259
|
-
inputDisclaimerForAccessibilityEnterpriseNoLogging:
|
|
260
|
-
'Chat messages and the selected Lighthouse report are sent to Google. The content you submit and that is generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
261
|
-
/**
|
|
262
|
-
* @description Disclaimer text right after the chat input when V2 is enabled.
|
|
263
|
-
*/
|
|
264
|
-
inputDisclaimerV2:
|
|
200
|
+
inputDisclaimer:
|
|
265
201
|
'Chat messages, data accessible for this site via DevTools panels and Web APIs, and items you select such as network requests, files, and performance traces are sent to Google and may be seen by human reviewers to improve this feature. This is an experimental AI feature and won’t always get it right.',
|
|
266
202
|
/**
|
|
267
|
-
* @description Disclaimer text right after the chat input when
|
|
203
|
+
* @description Disclaimer text right after the chat input when enterprise logging is off.
|
|
268
204
|
*/
|
|
269
|
-
|
|
205
|
+
inputDisclaimerEnterpriseNoLogging:
|
|
270
206
|
'Chat messages, data accessible for this site via DevTools panels and Web APIs, and items you select such as network requests, files, and performance traces are sent to Google. The content submitted to and generated by this feature will not be used to improve Google’s AI models. This is an experimental AI feature and won’t always get it right.',
|
|
271
207
|
} as const;
|
|
272
208
|
|
|
@@ -442,7 +378,6 @@ export interface PanelViewOutput {
|
|
|
442
378
|
type View = (input: ViewInput, output: PanelViewOutput, target: HTMLElement) => void;
|
|
443
379
|
|
|
444
380
|
function toolbarView(input: ToolbarViewInput): Lit.LitTemplate {
|
|
445
|
-
const hasAiV2 = Boolean(Root.Runtime.hostConfig.devToolsAiAssistanceV2?.enabled);
|
|
446
381
|
// clang-format off
|
|
447
382
|
return html`
|
|
448
383
|
<div class="toolbar-container" role="toolbar" jslog=${VisualLogging.toolbar()}>
|
|
@@ -472,19 +407,7 @@ function toolbarView(input: ToolbarViewInput): Lit.LitTemplate {
|
|
|
472
407
|
.jslogContext=${'freestyler.delete'}
|
|
473
408
|
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
474
409
|
@click=${input.onDeleteClick}>
|
|
475
|
-
</devtools-button
|
|
476
|
-
${hasAiV2 ? Lit.nothing : html`
|
|
477
|
-
<devtools-button
|
|
478
|
-
title=${i18nString(UIStrings.exportConversation)}
|
|
479
|
-
aria-label=${i18nString(UIStrings.exportConversation)}
|
|
480
|
-
.iconName=${'download'}
|
|
481
|
-
.disabled=${input.isLoading}
|
|
482
|
-
.jslogContext=${'export-ai-conversation'}
|
|
483
|
-
.variant=${Buttons.Button.Variant.TOOLBAR}
|
|
484
|
-
@click=${input.onExportConversationClick}>
|
|
485
|
-
</devtools-button>
|
|
486
|
-
`
|
|
487
|
-
}` : Lit.nothing}
|
|
410
|
+
</devtools-button>` : Lit.nothing}
|
|
488
411
|
</devtools-toolbar>
|
|
489
412
|
<devtools-toolbar class="freestyler-right-toolbar" role="presentation">
|
|
490
413
|
<devtools-link
|
|
@@ -540,51 +463,43 @@ function defaultView(input: ViewInput, output: PanelViewOutput, target: HTMLElem
|
|
|
540
463
|
}
|
|
541
464
|
}
|
|
542
465
|
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
if(input.
|
|
553
|
-
|
|
554
|
-
if(lastMessage && input.props.walkthrough.activeSidebarMessage?.id === lastMessage.id) {
|
|
555
|
-
walkthroughIsForLastMessage = true;
|
|
556
|
-
}
|
|
466
|
+
const shouldShowWalkthrough = input.state === ViewState.CHAT_VIEW && input.props.walkthrough.isExpanded;
|
|
467
|
+
/**
|
|
468
|
+
* We want to mark the walkthrough as loading only if it's showing the last
|
|
469
|
+
* message. Otherwise, a previous walkthrough will show as loading if we
|
|
470
|
+
* rely only on the isLoading flag.
|
|
471
|
+
*/
|
|
472
|
+
let walkthroughIsForLastMessage = false;
|
|
473
|
+
if(input.state === ViewState.CHAT_VIEW) {
|
|
474
|
+
const lastMessage = input.props.messages.at(-1);
|
|
475
|
+
if(lastMessage && input.props.walkthrough.activeSidebarMessage?.id === lastMessage.id) {
|
|
476
|
+
walkthroughIsForLastMessage = true;
|
|
557
477
|
}
|
|
558
|
-
|
|
559
|
-
Lit.render(html`
|
|
560
|
-
${toolbarView(input)}
|
|
561
|
-
<div class="ai-assistance-view-container">
|
|
562
|
-
<devtools-split-view
|
|
563
|
-
name="ai-assistance-split-view-state"
|
|
564
|
-
direction="column"
|
|
565
|
-
sidebar-position="second"
|
|
566
|
-
sidebar-visibility=${shouldShowWalkthrough && !input.props.walkthrough.isInlined ? 'visible' : 'hidden'}
|
|
567
|
-
sidebar-initial-size=${WALKTHROUGH_SIDEBAR_INITIAL_WIDTH}
|
|
568
|
-
>
|
|
569
|
-
<div slot="main" class="main-view">
|
|
570
|
-
${renderState()}
|
|
571
|
-
</div>
|
|
572
|
-
${shouldShowWalkthrough ? html`
|
|
573
|
-
<devtools-widget slot="sidebar" ${widget(WalkthroughView, {
|
|
574
|
-
message: input.props.walkthrough.activeSidebarMessage,
|
|
575
|
-
isLoading: input.props.isLoading && walkthroughIsForLastMessage,
|
|
576
|
-
markdownRenderer: input.props.markdownRenderer,
|
|
577
|
-
onToggle: input.props.walkthrough.onToggle,
|
|
578
|
-
})}></devtools-widget>` : Lit.nothing}
|
|
579
|
-
</devtools-split-view>
|
|
580
|
-
</div>
|
|
581
|
-
`, target);
|
|
582
|
-
} else {
|
|
583
|
-
Lit.render(html`
|
|
584
|
-
${toolbarView(input)}
|
|
585
|
-
<div class="ai-assistance-view-container">${renderState()}</div>
|
|
586
|
-
`, target);
|
|
587
478
|
}
|
|
479
|
+
|
|
480
|
+
Lit.render(html`
|
|
481
|
+
${toolbarView(input)}
|
|
482
|
+
<div class="ai-assistance-view-container">
|
|
483
|
+
<devtools-split-view
|
|
484
|
+
name="ai-assistance-split-view-state"
|
|
485
|
+
direction="column"
|
|
486
|
+
sidebar-position="second"
|
|
487
|
+
sidebar-visibility=${shouldShowWalkthrough && !input.props.walkthrough.isInlined ? 'visible' : 'hidden'}
|
|
488
|
+
sidebar-initial-size=${WALKTHROUGH_SIDEBAR_INITIAL_WIDTH}
|
|
489
|
+
>
|
|
490
|
+
<div slot="main" class="main-view">
|
|
491
|
+
${renderState()}
|
|
492
|
+
</div>
|
|
493
|
+
${shouldShowWalkthrough ? html`
|
|
494
|
+
<devtools-widget slot="sidebar" ${widget(WalkthroughView, {
|
|
495
|
+
message: input.props.walkthrough.activeSidebarMessage,
|
|
496
|
+
isLoading: input.props.isLoading && walkthroughIsForLastMessage,
|
|
497
|
+
markdownRenderer: input.props.markdownRenderer,
|
|
498
|
+
onToggle: input.props.walkthrough.onToggle,
|
|
499
|
+
})}></devtools-widget>` : Lit.nothing}
|
|
500
|
+
</devtools-split-view>
|
|
501
|
+
</div>
|
|
502
|
+
`, target);
|
|
588
503
|
// clang-format on
|
|
589
504
|
}
|
|
590
505
|
|
|
@@ -709,6 +624,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
709
624
|
activeSidebarMessage: null,
|
|
710
625
|
inlineExpandedMessages: [],
|
|
711
626
|
};
|
|
627
|
+
#textInputValue = '';
|
|
712
628
|
|
|
713
629
|
constructor(private view: View = defaultView, {aidaClient, aidaAvailability}: {
|
|
714
630
|
aidaClient: Host.AidaClient.AidaClient,
|
|
@@ -725,8 +641,6 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
725
641
|
this.#toggleSearchElementAction =
|
|
726
642
|
UI.ActionRegistry.ActionRegistry.instance().getAction('elements.toggle-element-search');
|
|
727
643
|
}
|
|
728
|
-
AiAssistanceModel.AiHistoryStorage.AiHistoryStorage.instance().addEventListener(
|
|
729
|
-
AiAssistanceModel.AiHistoryStorage.Events.HISTORY_DELETED, this.#onHistoryDeleted, this);
|
|
730
644
|
}
|
|
731
645
|
|
|
732
646
|
#getToolbarInput(): ToolbarViewInput {
|
|
@@ -795,6 +709,10 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
795
709
|
emptyStateSuggestions,
|
|
796
710
|
inputPlaceholder: this.#getChatInputPlaceholder(),
|
|
797
711
|
disclaimerText: this.#getDisclaimerText(),
|
|
712
|
+
textInputValue: this.#textInputValue,
|
|
713
|
+
onTextChange: (text: string) => {
|
|
714
|
+
this.#textInputValue = text;
|
|
715
|
+
},
|
|
798
716
|
onExportConversation: this.#onExportConversationClick.bind(this),
|
|
799
717
|
uploadImageInputEnabled: isAiAssistanceMultimodalUploadInputEnabled() &&
|
|
800
718
|
this.#conversation.type === AiAssistanceModel.AiHistoryStorage.ConversationType.STYLING,
|
|
@@ -816,10 +734,9 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
816
734
|
void this.#startConversation(text, imageInput, multimodalInputType);
|
|
817
735
|
};
|
|
818
736
|
|
|
819
|
-
const isAIV2Enabled = Root.Runtime.hostConfig.devToolsAiAssistanceV2?.enabled;
|
|
820
737
|
const seenSetting =
|
|
821
738
|
Common.Settings.Settings.instance().moduleSetting('ai-assistance-v2-opt-in-change-dialog-seen');
|
|
822
|
-
if (
|
|
739
|
+
if (!seenSetting.get()) {
|
|
823
740
|
OptInChangeDialog.show({
|
|
824
741
|
onGotIt: () => {
|
|
825
742
|
seenSetting.set(true);
|
|
@@ -864,9 +781,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
864
781
|
// Responsive logic for Walkthrough
|
|
865
782
|
override onResize(): void {
|
|
866
783
|
super.onResize();
|
|
867
|
-
|
|
868
|
-
this.#updateWalkthroughResponsiveness();
|
|
869
|
-
}
|
|
784
|
+
this.#updateWalkthroughResponsiveness();
|
|
870
785
|
}
|
|
871
786
|
|
|
872
787
|
#updateWalkthroughResponsiveness(): void {
|
|
@@ -1144,6 +1059,8 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1144
1059
|
createStorageContext(UI.Context.Context.instance().flavor(AiAssistanceModel.StorageItem.StorageItem));
|
|
1145
1060
|
this.#updateConversationState(this.#conversation);
|
|
1146
1061
|
|
|
1062
|
+
AiAssistanceModel.AiHistoryStorage.AiHistoryStorage.instance().addEventListener(
|
|
1063
|
+
AiAssistanceModel.AiHistoryStorage.Events.HISTORY_DELETED, this.#onHistoryDeleted, this);
|
|
1147
1064
|
this.#aiAssistanceEnabledSetting?.addChangeListener(this.requestUpdate, this);
|
|
1148
1065
|
Host.AidaClient.HostConfigTracker.instance().addEventListener(
|
|
1149
1066
|
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#handleAidaAvailabilityChange);
|
|
@@ -1188,6 +1105,8 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1188
1105
|
|
|
1189
1106
|
override willHide(): void {
|
|
1190
1107
|
super.willHide();
|
|
1108
|
+
AiAssistanceModel.AiHistoryStorage.AiHistoryStorage.instance().removeEventListener(
|
|
1109
|
+
AiAssistanceModel.AiHistoryStorage.Events.HISTORY_DELETED, this.#onHistoryDeleted, this);
|
|
1191
1110
|
this.#aiAssistanceEnabledSetting?.removeChangeListener(this.requestUpdate, this);
|
|
1192
1111
|
Host.AidaClient.HostConfigTracker.instance().removeEventListener(
|
|
1193
1112
|
Host.AidaClient.Events.AIDA_AVAILABILITY_CHANGED, this.#handleAidaAvailabilityChange);
|
|
@@ -1271,12 +1190,12 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1271
1190
|
};
|
|
1272
1191
|
|
|
1273
1192
|
#handleNetworkRequestFlavorChange =
|
|
1274
|
-
(ev: Common.EventTarget.EventTargetEvent<SDK.NetworkRequest.NetworkRequest>): void => {
|
|
1193
|
+
(ev: Common.EventTarget.EventTargetEvent<SDK.NetworkRequest.NetworkRequest|null>): void => {
|
|
1275
1194
|
if (this.#selectedRequest?.getItem() === ev.data) {
|
|
1276
1195
|
return;
|
|
1277
1196
|
}
|
|
1278
1197
|
|
|
1279
|
-
if (
|
|
1198
|
+
if (ev.data) {
|
|
1280
1199
|
const calculator = NetworkPanel.NetworkPanel.NetworkPanel.instance().networkLogView.timeCalculator();
|
|
1281
1200
|
this.#selectedRequest = new AiAssistanceModel.RequestContext.RequestContext(ev.data, calculator);
|
|
1282
1201
|
} else {
|
|
@@ -1379,14 +1298,14 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1379
1298
|
return i18nString(UIStrings.followTheSteps);
|
|
1380
1299
|
}
|
|
1381
1300
|
|
|
1382
|
-
if (Root.Runtime.hostConfig.devToolsAiV2Architecture?.enabled) {
|
|
1383
|
-
return lockedString(UIStringsNotTranslate.inputPlaceholderForV2);
|
|
1384
|
-
}
|
|
1385
|
-
|
|
1386
1301
|
if (this.#conversation && this.#conversation.isBlockedByOrigin) {
|
|
1387
1302
|
return lockedString(UIStringsNotTranslate.crossOriginError);
|
|
1388
1303
|
}
|
|
1389
1304
|
|
|
1305
|
+
if (Root.Runtime.hostConfig.devToolsAiV2Architecture?.enabled) {
|
|
1306
|
+
return lockedString(UIStringsNotTranslate.inputPlaceholderForV2);
|
|
1307
|
+
}
|
|
1308
|
+
|
|
1390
1309
|
switch (this.#conversation.type) {
|
|
1391
1310
|
case AiAssistanceModel.AiHistoryStorage.ConversationType.STYLING:
|
|
1392
1311
|
return this.#conversation.selectedContext ?
|
|
@@ -1434,51 +1353,10 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1434
1353
|
const loggingEnabled = Root.Runtime.hostConfig.aidaAvailability?.enterprisePolicyValue !==
|
|
1435
1354
|
Root.Runtime.GenAiEnterprisePolicyValue.ALLOW_WITHOUT_LOGGING;
|
|
1436
1355
|
|
|
1437
|
-
if (
|
|
1438
|
-
|
|
1439
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerV2);
|
|
1440
|
-
}
|
|
1441
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerEnterpriseNoLoggingV2);
|
|
1442
|
-
}
|
|
1443
|
-
|
|
1444
|
-
switch (this.#conversation.type) {
|
|
1445
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.STYLING:
|
|
1446
|
-
if (loggingEnabled) {
|
|
1447
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForStyling);
|
|
1448
|
-
}
|
|
1449
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForStylingEnterpriseNoLogging);
|
|
1450
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.FILE:
|
|
1451
|
-
if (loggingEnabled) {
|
|
1452
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForFile);
|
|
1453
|
-
}
|
|
1454
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForFileEnterpriseNoLogging);
|
|
1455
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.NETWORK:
|
|
1456
|
-
if (loggingEnabled) {
|
|
1457
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForNetwork);
|
|
1458
|
-
}
|
|
1459
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForNetworkEnterpriseNoLogging);
|
|
1460
|
-
|
|
1461
|
-
// It is deliberate that both Performance agents use the same disclaimer
|
|
1462
|
-
// text and this has been approved by Privacy.
|
|
1463
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.PERFORMANCE:
|
|
1464
|
-
if (loggingEnabled) {
|
|
1465
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForPerformance);
|
|
1466
|
-
}
|
|
1467
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForPerformanceEnterpriseNoLogging);
|
|
1468
|
-
|
|
1469
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.ACCESSIBILITY:
|
|
1470
|
-
if (loggingEnabled) {
|
|
1471
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForAccessibility);
|
|
1472
|
-
}
|
|
1473
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForAccessibilityEnterpriseNoLogging);
|
|
1474
|
-
|
|
1475
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.STORAGE:
|
|
1476
|
-
case AiAssistanceModel.AiHistoryStorage.ConversationType.NONE:
|
|
1477
|
-
if (loggingEnabled) {
|
|
1478
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForNoContext);
|
|
1479
|
-
}
|
|
1480
|
-
return lockedString(UIStringsNotTranslate.inputDisclaimerForNoContextEnterpriseNoLogging);
|
|
1356
|
+
if (loggingEnabled) {
|
|
1357
|
+
return lockedString(UIStringsNotTranslate.inputDisclaimer);
|
|
1481
1358
|
}
|
|
1359
|
+
return lockedString(UIStringsNotTranslate.inputDisclaimerEnterpriseNoLogging);
|
|
1482
1360
|
}
|
|
1483
1361
|
|
|
1484
1362
|
#handleFeedbackSubmit(rpcId: Host.AidaClient.RpcGlobalId, rating: Host.AidaClient.Rating, feedback?: string): void {
|
|
@@ -1713,6 +1591,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
1713
1591
|
}
|
|
1714
1592
|
|
|
1715
1593
|
#handleNewChatRequest(): void {
|
|
1594
|
+
this.#textInputValue = '';
|
|
1716
1595
|
this.#updateConversationState();
|
|
1717
1596
|
this.#resetWalkthrough();
|
|
1718
1597
|
UI.ARIAUtils.LiveAnnouncer.alert(i18nString(UIStrings.newChatCreated));
|
|
@@ -2000,7 +1879,7 @@ export class AiAssistancePanel extends UI.Panel.Panel {
|
|
|
2000
1879
|
systemMessage.parts.push(newPart);
|
|
2001
1880
|
}
|
|
2002
1881
|
|
|
2003
|
-
if (data.widgets
|
|
1882
|
+
if (data.widgets) {
|
|
2004
1883
|
systemMessage.parts.push({
|
|
2005
1884
|
type: 'widget',
|
|
2006
1885
|
widgets: data.widgets,
|
|
@@ -158,6 +158,7 @@ export interface ViewInput {
|
|
|
158
158
|
imageInput?: ImageInputData;
|
|
159
159
|
uploadImageInputEnabled: boolean;
|
|
160
160
|
isReadOnly: boolean;
|
|
161
|
+
textInputValue: string;
|
|
161
162
|
textAreaRef: Lit.Directives.Ref<HTMLTextAreaElement>;
|
|
162
163
|
|
|
163
164
|
onContextClick: () => void;
|
|
@@ -302,6 +303,7 @@ export const DEFAULT_VIEW = (input: ViewInput, _output: ViewOutput, target: HTML
|
|
|
302
303
|
.disabled=${input.isTextInputDisabled}
|
|
303
304
|
wrap="hard"
|
|
304
305
|
maxlength="10000"
|
|
306
|
+
.value=${input.textInputValue}
|
|
305
307
|
@keydown=${input.onTextAreaKeyDown}
|
|
306
308
|
@paste=${input.onImagePaste}
|
|
307
309
|
@dragover=${input.onImageDragOver}
|
|
@@ -523,6 +525,7 @@ export class ChatInput extends UI.Widget.Widget implements SDK.TargetManager.Obs
|
|
|
523
525
|
multimodalInputEnabled = false;
|
|
524
526
|
uploadImageInputEnabled = false;
|
|
525
527
|
isReadOnly = false;
|
|
528
|
+
textInputValue = '';
|
|
526
529
|
|
|
527
530
|
#textAreaRef = createRef<HTMLTextAreaElement>();
|
|
528
531
|
#imageInput?: ImageInputData;
|
|
@@ -542,21 +545,30 @@ export class ChatInput extends UI.Widget.Widget implements SDK.TargetManager.Obs
|
|
|
542
545
|
setInputValue(text: string): void {
|
|
543
546
|
if (this.#textAreaRef.value) {
|
|
544
547
|
const maxLength = this.#textAreaRef.value.maxLength;
|
|
545
|
-
const truncatedText =
|
|
548
|
+
const truncatedText = maxLength >= 0 ? text.substring(0, maxLength) : text;
|
|
546
549
|
this.#textAreaRef.value.value = truncatedText;
|
|
547
550
|
// Place the cursor at the end of the new value.
|
|
548
|
-
this.#textAreaRef.value.setSelectionRange(
|
|
551
|
+
this.#textAreaRef.value.setSelectionRange(
|
|
552
|
+
truncatedText.length,
|
|
553
|
+
truncatedText.length,
|
|
554
|
+
);
|
|
555
|
+
this.textInputValue = truncatedText;
|
|
556
|
+
this.onTextChange(truncatedText);
|
|
549
557
|
}
|
|
550
558
|
this.performUpdate();
|
|
551
559
|
}
|
|
552
560
|
|
|
553
561
|
#isTextInputEmpty(): boolean {
|
|
554
|
-
|
|
562
|
+
const text = this.#textAreaRef?.value?.value ?? this.textInputValue;
|
|
563
|
+
return !text.trim();
|
|
555
564
|
}
|
|
556
565
|
|
|
557
|
-
onTextSubmit:
|
|
558
|
-
|
|
559
|
-
|
|
566
|
+
onTextSubmit: (
|
|
567
|
+
text: string,
|
|
568
|
+
imageInput?: Host.AidaClient.Part,
|
|
569
|
+
multimodalInputType?: AiAssistanceModel.AiAgent.MultimodalInputType,
|
|
570
|
+
) => void = () => {};
|
|
571
|
+
onTextChange: (text: string) => void = () => {};
|
|
560
572
|
onContextClick = (): void => {};
|
|
561
573
|
onInspectElementClick = (): void => {};
|
|
562
574
|
onCancelClick = (): void => {};
|
|
@@ -751,12 +763,15 @@ export class ChatInput extends UI.Widget.Widget implements SDK.TargetManager.Obs
|
|
|
751
763
|
imageInput: this.#imageInput,
|
|
752
764
|
uploadImageInputEnabled: this.uploadImageInputEnabled,
|
|
753
765
|
isReadOnly: this.isReadOnly,
|
|
766
|
+
textInputValue: this.textInputValue,
|
|
754
767
|
textAreaRef: this.#textAreaRef,
|
|
755
768
|
onContextClick: this.onContextClick,
|
|
756
769
|
onInspectElementClick: this.onInspectElementClick,
|
|
757
770
|
onImagePaste: this.#handleImagePaste,
|
|
758
771
|
onNewConversation: this.onNewConversation,
|
|
759
|
-
onTextInputChange: () => {
|
|
772
|
+
onTextInputChange: (text: string) => {
|
|
773
|
+
this.textInputValue = text;
|
|
774
|
+
this.onTextChange(text);
|
|
760
775
|
this.requestUpdate();
|
|
761
776
|
},
|
|
762
777
|
onTakeScreenshot: this.#handleTakeScreenshot.bind(this),
|
|
@@ -770,7 +785,9 @@ export class ChatInput extends UI.Widget.Widget implements SDK.TargetManager.Obs
|
|
|
770
785
|
onContextRemoved: this.onContextRemoved,
|
|
771
786
|
onContextAdd: this.onContextAdd,
|
|
772
787
|
},
|
|
773
|
-
undefined,
|
|
788
|
+
undefined,
|
|
789
|
+
this.contentElement,
|
|
790
|
+
);
|
|
774
791
|
}
|
|
775
792
|
|
|
776
793
|
focusTextInput(): void {
|